<?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>233491</bug_id>
          
          <creation_ts>2021-11-25 03:29:54 -0800</creation_ts>
          <short_desc>GraphicsContextGL implementations should have separate class declarations</short_desc>
          <delta_ts>2021-11-25 05:23:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>Other</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>
          
          <blocked>221664</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>annulen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1817769</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-25 03:29:54 -0800</bug_when>
    <thetext>GraphicsContextGL implementations should have separate class definitions 
The extensive use of #ifdef and unmaintained code make the Cocoa variant hard to develop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817771</commentid>
    <comment_count>1</comment_count>
      <attachid>445132</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-25 03:38:39 -0800</bug_when>
    <thetext>Created attachment 445132
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817774</commentid>
    <comment_count>2</comment_count>
      <attachid>445133</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-25 03:45:19 -0800</bug_when>
    <thetext>Created attachment 445133
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817794</commentid>
    <comment_count>3</comment_count>
      <attachid>445133</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-11-25 05:08:04 -0800</bug_when>
    <thetext>Comment on attachment 445133
Patch

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

&gt; Source/WebCore/platform/graphics/cocoa/GraphicsContextGLCocoa.mm:223
&gt; +// FIXME: Below is functionality that should be moved to GraphicsContextGLCocoa to simplify the base class.
&gt; +
&gt; +GraphicsContextGLOpenGL::GraphicsContextGLOpenGL(GraphicsContextGLAttributes attrs)

Hopefully soonish!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817795</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-25 05:22:49 -0800</bug_when>
    <thetext>Committed r286167 (244550@main): &lt;https://commits.webkit.org/244550@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445133.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817796</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-25 05:23:26 -0800</bug_when>
    <thetext>&lt;rdar://problem/85749766&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445132</attachid>
            <date>2021-11-25 03:38:39 -0800</date>
            <delta_ts>2021-11-25 04:13:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233491-20211125133837.patch</filename>
            <type>text/plain</type>
            <size>142099</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmIyZmY4NjgwYzM2ZGE1
YzRiZGNkNDM4MDAwMWY3MjVkMGVlYjc1Zi4uM2FjMTE1NDJhZDU2ODg5NWY3MTRiY2UzOGM5Njk4
Yjc2NmQ4NjNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIxLTExLTI1ICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0wgaW1wbGVtZW50YXRpb25zIHNob3VsZCBoYXZlIHNlcGFyYXRlIGNsYXNzIGRlZmluaXRp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM0
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
bmV3IGNvbmNyZXRlIGNsYXNzZXMgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSBhbmQKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLgorICAgICAgICBJbiB0aGUgZnV0dXJlLCB0
aGUgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgbW92ZWQKKyAgICAgICAg
dG8gdGhlc2UgY2xhc3NlcywgcmVkdWNpbmcgdGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMICNp
ZmRlZnMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhIHJlZmFjdG9yLgorCisgICAgICAgICog
TW9kdWxlcy93ZWJ4ci9XZWJYUk9wYXF1ZUZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYlhST3BhcXVlRnJhbWVidWZmZXI6OnN0YXJ0RnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViWFJPcGFxdWVGcmFtZWJ1ZmZlcjo6ZW5kRnJhbWUpOgorICAgICAgICAqIFBsYXRmb3Jt
TWFjLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL1RleHR1cmVN
YXBwZXIuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3ND
b250ZXh0R0xDb2NvYS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbS4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTENvY29hOjpkaXNwbGF5QnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVy
SW5Vc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDb2NvYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTENv
Y29hOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXR0YWNoSU9T
dXJmYWNlVG9TaGFyZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQ29jb2E6OmRldGFjaElPU3VyZmFjZUZyb21TaGFyZWRUZXh0dXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5t
bTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZXNoYXBlRkJPcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyLmg6IEFkZGVkLgorCiAyMDIxLTExLTI1ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggR1RLIGRp
c3RjaGVjayBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4MDFhNzUyYmZjNWYzMzMyYjEwMjdhNDFiNzA4OWZl
Y2EwZTQxZjNmLi44MWJlYzMzODZmYTZhZTdiZDcwMmE0NmJkZDgwMDlkYTc0MzJhODFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTExLTI1ICBLaW1tbyBLaW5udW5lbiAgPGtraW5u
dW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wgaW1wbGVtZW50YXRp
b25zIHNob3VsZCBoYXZlIHNlcGFyYXRlIGNsYXNzIGRlZmluaXRpb25zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM0OTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhlIG5ldyBjb25jcmV0ZSBj
bGFzc2VzIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EgYW5kCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlciBpbiBHUFVQIFdlYkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAg
UmVtb3ZlIEdQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTCBhcyB0aGUgYWRkZWQgZnVuY3Rpb25h
bGl0eSBpcworICAgICAgICBub3cgaW4gdGhlIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL0dQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTC5o
OiBSZW1vdmVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMQ29jb2EuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpwbGF0Zm9ybVdvcmtRdWV1ZUluaXRpYWxpemUpOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbjo6cGxhdGZvcm1Xb3JrUXVldWVJbml0
aWFsaXplKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAyMS0xMS0yMyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAg
ICAgIE5vbi11bmlmaWVkIGJ1aWxkIGZpeGVzLCBtaWQgTm92ZW1iZXIgMjAyMSBlZGl0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhST3BhcXVlRnJhbWVi
dWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUk9wYXF1ZUZyYW1l
YnVmZmVyLmNwcAppbmRleCA2YTJkYmQ4NTE2ZDBjOTU4NGU1NTQ1ZWE2NWZhNjY4NWNhMmVmMWNm
Li5mMGQ5MzljODg0MjdlMmNhYWI2YWM4Mzk4ZjRhZTU1ZmJjMGYwM2RlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhST3BhcXVlRnJhbWVidWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJPcGFxdWVGcmFtZWJ1ZmZlci5j
cHAKQEAgLTUyLDcgKzUyLDcgQEAKIAogI2lmIFVTRShJT1NVUkZBQ0VfRk9SX1hSX0xBWUVSX0RB
VEEpCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENvY29hLmgiCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgV2ViWFJPcGFx
dWVGcmFtZWJ1ZmZlcjo6c3RhcnRGcmFtZShjb25zdCBQbGF0Zm9ybVhSOjpEZXZpY2U6OkZyYW1l
RGF0YTo6TGF5CiAgICAgYXV0byYgZ2wgPSAqbV9jb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCk7
CiAKICNpZiBVU0UoSU9TVVJGQUNFX0ZPUl9YUl9MQVlFUl9EQVRBKQotICAgIGF1dG8gZ0NHTCA9
IHN0YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKj4obV9jb250ZXh0LmdyYXBoaWNz
Q29udGV4dEdMKCkpOworICAgIGF1dG8gZ0NHTCA9IHN0YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EqPihtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgR0NHTGVudW0g
dGV4dHVyZVRhcmdldCA9IGdDR0wtPmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CiAgICAg
R0NHTGVudW0gdGV4dHVyZVRhcmdldEJpbmRpbmcgPSBnQ0dMLT5kcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCh0ZXh0dXJlVGFyZ2V0KTsKICNlbHNlCkBAIC0x
NTUsNyArMTU1LDcgQEAgdm9pZCBXZWJYUk9wYXF1ZUZyYW1lYnVmZmVyOjpzdGFydEZyYW1lKGNv
bnN0IFBsYXRmb3JtWFI6OkRldmljZTo6RnJhbWVEYXRhOjpMYXkKICAgICAgICAgYXV0byBzaXpl
ID0gZGF0YS5zdXJmYWNlLT5zaXplKCk7CiAgICAgICAgIGlmICghc2l6ZS53aWR0aCgpIHx8ICFz
aXplLmhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2lvU3VyZmFjZVRl
eHR1cmVIYW5kbGUgPSBnQ0dMLT5jcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKHRleHR1
cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQYnVmZmVyQXR0YWNobWVudFVzYWdl
OjpXcml0ZSwgR0w6OkJHUkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgR0w6OlVOU0lH
TkVEX0JZVEUsIGRhdGEuc3VyZmFjZS0+c3VyZmFjZSgpLCAwKTsKKyAgICAgICAgbV9pb1N1cmZh
Y2VUZXh0dXJlSGFuZGxlID0gZ0NHTC0+Y3JlYXRlUGJ1ZmZlckFuZEF0dGFjaElPU3VyZmFjZSh0
ZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpQYnVmZmVyQXR0YWNobWVudFVz
YWdlOjpXcml0ZSwgR0w6OkJHUkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgR0w6OlVO
U0lHTkVEX0JZVEUsIGRhdGEuc3VyZmFjZS0+c3VyZmFjZSgpLCAwKTsKICAgICAgICAgbV9pb1N1
cmZhY2VUZXh0dXJlSGFuZGxlSXNTaGFyZWQgPSBmYWxzZTsKICAgICB9CiAKQEAgLTIzNSw3ICsy
MzUsNyBAQCB2b2lkIFdlYlhST3BhcXVlRnJhbWVidWZmZXI6OmVuZEZyYW1lKCkKIAogI2lmIFVT
RShJT1NVUkZBQ0VfRk9SX1hSX0xBWUVSX0RBVEEpCiAgICAgaWYgKG1faW9TdXJmYWNlVGV4dHVy
ZUhhbmRsZSkgewotICAgICAgICBhdXRvIGdDR0wgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCo+KCZnbCk7CisgICAgICAgIGF1dG8gZ0NHTCA9IHN0YXRpY19jYXN0PEdyYXBo
aWNzQ29udGV4dEdMQ29jb2EqPigmZ2wpOwogICAgICAgICBpZiAobV9pb1N1cmZhY2VUZXh0dXJl
SGFuZGxlSXNTaGFyZWQpIHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCiAg
ICAgICAgICAgICBnQ0dMLT5kZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZShtX2lvU3Vy
ZmFjZVRleHR1cmVIYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCAwYTI2MmM1
MTQ0NWZhMzk4OWU3YzVmZWUzNmYzZjkwYzQxNTA4YmRkLi4xYWYwOTVmOWQ5Y2JmMDk0YzU5YWIw
YTc0YTRjNTU5YjA1ODAxMTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMzE5LDgg
KzMxOSw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0KKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ludFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lP
U3VyZmFjZVBvb2xDb2NvYS5tbQpAQCAtMzI5LDcgKzMyOSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNvcmVEZWNvbXByZXNz
aW9uU2Vzc2lvbi5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0K
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvY29hLm1tCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViUHJvY2Vzc0dyYXBo
aWNzQ29udGV4dEdMQ29jb2EubW0KIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0Zv
bnRDYXNjYWRlQ29yZVRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENvcmVUZXh0LmNwcApAQCAtNjUyLDYgKzY1Miw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9y
Q29jb2EuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVU
ZXh0LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29h
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VT
d2FwQ2hhaW4uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMWE0NjY4NmY3OGNkY2IyMzhiYWQ1ZjJhYzMyYTcyYzU0
MTc0NjNkZS4uZDJkMWI1NjVkMWQwOWI4ZGQxMmE5ZjUyMTlmNjlmMjdlMDY2NGMwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0zNzQsOCArMzc0LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRDb2NvYS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xJ
T1N1cmZhY2VTd2FwQ2hhaW4uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0
aWVzQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlUG9vbENvY29hLm1tCkBAIC0zOTEsNyArMzkxLDcg
QEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVn
YXRlLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlQ0FMYXllckV4dHJhcy5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViQ29yZURlY29tcHJlc3Npb25TZXNzaW9uLm1tCiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCi1wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQorcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0KIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRlV2ViTS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwYWNhN2MzMmM0
NTY4YjQzZTRiOTAxYmRiZDcyYzVmNWEwYmZjZDNjLi4yODg5MTU5NDNlMWRlOTk3Yjc4ODVhMTMx
YTAyMWRmOWM3YjVhODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzY4LDYgKzIzNjgsNyBAQAogCQk3QjkwNDE3MDI1NTAx
MTQyMDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkw
MDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0Ew
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODcz
OCAvKiBHcmFwaGljc0NoZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tz
TWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
N0JEREEzMUYyNzRGQTAyMTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlE
QTUwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JFNzQyNzM4MUZBOTA2RkJCNEYwRjJD
IC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NTBDNEMwMkJFRDg5MzZGODE4RTJGOTkgLyogSlNTVkdHcmFwaGlj
c0VsZW1lbnQuaCAqLzsgfTsKIAkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlw
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDI5
QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MxODQzRkUxQzhCNzI4MzAwMkVCOTczIC8q
IEF1dG9maWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzE4NDNGQzFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTA2NCw3ICs5MDY1LDYgQEAKIAkJ
NDlFRUQxNEIxMDUxOTcxOTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGQzdB
NEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyog
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RkZCRjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExh
eWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMTGF5ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdl
YkdMTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJH
TExheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTBEQTJGQzEyOUIyNDE5
MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMTA3Miw3ICsxMTA3Miw3IEBACiAJCTdCMTAzMzlBMjU0OTcy
MDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IxMDMzOUQyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1YuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xDVi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjE2MTkxMDI3MTk4ODBFMDBDNDBFQUMgLyog
V2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IxNjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlBy
b2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
UHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3Vy
ZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdCNkRDODE3MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QjczMTFGQTI1QzA5MkI3MDAzQjI3OTYgLyogU2NvcGVkSGlnaFBlcmZvcm1h
bmNlR1BVUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRI
aWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTA4Nyw2ICsxMTA4Nyw4IEBACiAJCTdCQ0Q0MkQ4MjcwNTk5RUYwMEVCMjEyNyAvKiBBTkdM
RVV0aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQ0Q0MkRBMjcwNUM5NDkwMEVCMjEyNyAvKiBB
TkdMRVV0aWxpdGllc0NvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFOR0xFVXRpbGl0aWVz
Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkNENDJEQzI3MDVDOTQ5
MDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0
aWxpdGllc0NvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRERBMzFDMjc0
RjlEQTQwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JEREEzMUQyNzRGOURBNTAwMzg2NTlFIC8qIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QkU3MjY1QjI1NzYzQjhEMDBFODVEOTggLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxMUYzRDI0RkFEMzYwMDA1
QkVGMTAgLyogU2V0dGluZ3MuY3BwLmVyYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZXR0aW5ncy5jcHAuZXJiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxMUYzRTI0RkFEMzYwMDA1QkVGMTAgLyogSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5jcHAuZXJiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEludGVybmFsU2V0dGluZ3NHZW5lcmF0
ZWQuY3BwLmVyYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4MzEwLDcgKzI4MzEy
LDggQEAKIAkJCQlCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0Q29j
b2EubW0gKi8sCiAJCQkJN0I2REM4MTUyNTcxMkU5MTAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4
dEdMSU9TdXJmYWNlU3dhcENoYWluLmNwcCAqLywKIAkJCQk3QjZEQzgxNzI1NzEyRTkyMDAzODBD
NzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCAqLywKLQkJCQk0OUZG
QkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSAq
LywKKwkJCQk3QkREQTMxRDI3NEY5REE1MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YS5oICovLAorCQkJCTdCRERBMzFDMjc0RjlEQTQwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRH
TENvY29hLm1tICovLAogCQkJCUNEQTU5NTk2MjE0NkRGNzgwMEE4NDE4NSAvKiBIRVZDVXRpbGl0
aWVzQ29jb2EuaCAqLywKIAkJCQlDREE1OTU5NzIxNDZERjc4MDBBODQxODUgLyogSEVWQ1V0aWxp
dGllc0NvY29hLm1tICovLAogCQkJCUIyNzUzNTUwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0
Q29jb2EubW0gKi8sCkBAIC0yODM0NSw3ICsyODM0OCw3IEBACiAJCQkJNDlGRkJGM0UxMUM5M0VF
MzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi8sCiAJCQkJMDdGNUNGRjQyNTgyQTRGODAwNjYy
RUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLmggKi8sCiAJCQkJMDdGNUNGRjIyNTgyQTRG
ODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tICovLAotCQkJCTdCMTYxOTEw
MjcxOTg4MEUwMEM0MEVBQyAvKiBXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2Nv
YS5tbSAqLywKKwkJCQk3QjE2MTkxMDI3MTk4ODBFMDBDNDBFQUMgLyogV2ViUHJvY2Vzc0dyYXBo
aWNzQ29udGV4dEdMQ29jb2EubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM1NzkzLDYgKzM1Nzk2LDcgQEAKIAkJCQlCQzEyOEE3
MzEzN0M4NjdDMDBDQUM4NDUgLyogUmVuZGVyR3JpZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNF
QTQ4NkEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckhUTUxDYW52YXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRDMwOEQ2MTE3RDE2ODUwMEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTdCRERBMzFGMjc0RkEwMjEwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRH
TENvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RjJGMDBBMTIxM0U2MTcwMERDRUM0
OCAvKiBSZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODY0MUQ0ODEy
MTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBl
ci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5k
ZXggYWZkYThhNDJhMWQwMWVjYmM4NzdhYjgwZDE4YmFjNDVhZDdkZjEzNS4uM2YzYzEwMmE1ZmE5
NDJmN2JjYWQ2MDJjMmM0YjEzNDFkYjEzYmI1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlCkBAIC0yNCw2ICsyNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9BTkdMRUNvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0
dXJlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNrLmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRH
TENvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGlj
c0NvbnRleHRHTENvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmVjM2QwZmI0ODFiNTQ3ODBmNzZjZWU1ZGMy
ZTQxNjRmY2JkN2Q3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oIgorI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSA6IHB1YmxpYyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxHcmFw
aGljc0NvbnRleHRHTENvY29hPiBjcmVhdGUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzJiYpOworICAgIH5HcmFwaGljc0NvbnRleHRHTENvY29hKCk7CisgICAgSU9TdXJmYWNl
KiBkaXNwbGF5QnVmZmVyKCk7CisgICAgdm9pZCBtYXJrRGlzcGxheUJ1ZmZlckluVXNlKCk7CisK
KyAgICBlbnVtIGNsYXNzIFBidWZmZXJBdHRhY2htZW50VXNhZ2UgeyBSZWFkLCBXcml0ZSwgUmVh
ZFdyaXRlIH07CisgICAgLy8gUmV0dXJucyBhIGhhbmRsZSB3aGljaCwgaWYgbm9uLW51bGwsIG11
c3QgYmUgcmVsZWFzZWQgdmlhIHRoZQorICAgIC8vIGRldGFjaCBjYWxsIGJlbG93LgorICAgIHZv
aWQqIGNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVm
ZmVyQXR0YWNobWVudFVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYsIEdDR0x1
aW50IHBsYW5lKTsKKyAgICB2b2lkIGRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKHZv
aWQqIGhhbmRsZSk7CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQorICAgIHZv
aWQqIGF0dGFjaElPU3VyZmFjZVRvU2hhcmVkVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIElPU3Vy
ZmFjZSopOworICAgIHZvaWQgZGV0YWNoSU9TdXJmYWNlRnJvbVNoYXJlZFRleHR1cmUodm9pZCog
aGFuZGxlKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CisgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3Q7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGNhYmNjOTAzNzJjYWJiMDEzMzQ2MDRhODk0ZTdiNmNjY2ZiNmUx
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0KQEAgLTAsMCArMSw4MjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YS5oIgorCisjaW1wb3J0ICJBTkdMRVV0aWxpdGllcy5oIgorI2ltcG9ydCAiQU5HTEVVdGlsaXRp
ZXNDb2NvYS5oIgorI2ltcG9ydCAiQ1ZVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIkV4dGVuc2lvbnNH
TEFOR0xFLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5o
IgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCisjaW1wb3J0ICJM
b2dnaW5nLmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKKyNpbXBvcnQg
PENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KKyNpbXBvcnQgPE1ldGFsL01ldGFsLmg+
CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL01ldGFsU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tP
YmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL2Rhcndpbi9XZWFrTGlua2luZy5oPgorI2lt
cG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNp
bXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoQVZGT1VOREFUSU9OKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgor
I2VuZGlmCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUgIk1lZGlhU2FtcGxl
QVZGT2JqQy5oIgorI2VuZGlmCisKK1dURl9XRUFLX0xJTktfRk9SQ0VfSU1QT1JUKEVHTF9Jbml0
aWFsaXplKTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIHBsYXRmb3JtSXNBTkdMRUF2
YWlsYWJsZSgpCit7CisgICAgLy8gVGhlIEFOR0xFIGlzIHdlYWsgbGlua2VkIGluIGZ1bGwsIGFu
ZCB0aGUgRUdMX0luaXRpYWxpemUgaXMgZXhwbGljaXRseSB3ZWFrIGxpbmtlZCBhYm92ZQorICAg
IC8vIHNvIHRoYXQgd2UgY2FuIGRldGVjdCB0aGUgY2FzZSB3aGVyZSBBTkdMRSBpcyBub3QgcHJl
c2VudC4KKyAgICByZXR1cm4gISFFR0xfSW5pdGlhbGl6ZTsKK30KKworLy8gSW4gaXNDdXJyZW50
Q29udGV4dFByZWRpY3RhYmxlKCkgPT0gdHJ1ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNz
ZWQgaW4gc2luZ2xlLXRocmVhZGVkIG1hbm5lci4KKy8vIEluIGlzQ3VycmVudENvbnRleHRQcmVk
aWN0YWJsZSgpID09IGZhbHNlIGNhc2UgdGhpcyB2YXJpYWJsZSBpcyBhY2Nlc3NlZCBmcm9tIG11
bHRpcGxlIHRocmVhZHMgYnV0IGFsd2F5cyBzZXF1ZW50aWFsbHkKKy8vIGFuZCBpdCBhbHdheXMg
Y29udGFpbnMgbnVsbHB0ciBhbmQgbnVsbHB0ciBpcyBhbHdheXMgd3JpdHRlbiB0byBpdC4KK3N0
YXRpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY3VycmVudENvbnRleHQ7CisKK3N0YXRpYyBi
b29sIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpCit7CisgICAgc3RhdGljIGJvb2wgdmFs
dWUgPSBpc0luV2ViUHJvY2VzcygpIHx8IGlzSW5HUFVQcm9jZXNzKCk7CisgICAgcmV0dXJuIHZh
bHVlOworfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKy8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBoYXZl
IHZvbGF0aWxlIGNvbnRleHQgZXh0ZW5zaW9uIGZvciB0aGUgcGFydGljdWxhciBBUEkgb3IKKy8v
IGlmIHRoZSBwYXJ0aWN1bGFyIEFQSSBpcyBub3QgdXNlZC4KK3N0YXRpYyBib29sIGNoZWNrVm9s
YXRpbGVDb250ZXh0U3VwcG9ydElmRGV2aWNlRXhpc3RzKEVHTERpc3BsYXkgZGlzcGxheSwgY29u
c3QgY2hhciogZGV2aWNlQ29udGV4dFZvbGF0aWxlRXh0ZW5zaW9uLAorICAgIGNvbnN0IGNoYXIq
IGRldmljZUNvbnRleHRFeHRlbnNpb24sIEVHTGludCBkZXZpY2VDb250ZXh0VHlwZSkKK3sKKyAg
ICBjb25zdCBjaGFyICpjbGllbnRFeHRlbnNpb25zID0gRUdMX1F1ZXJ5U3RyaW5nKEVHTF9OT19E
SVNQTEFZLCBFR0xfRVhURU5TSU9OUyk7CisgICAgaWYgKGNsaWVudEV4dGVuc2lvbnMgJiYgc3Ry
c3RyKGNsaWVudEV4dGVuc2lvbnMsIGRldmljZUNvbnRleHRWb2xhdGlsZUV4dGVuc2lvbikpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBFR0xfTk9fREVW
SUNFX0VYVDsKKyAgICBpZiAoIUVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQoZGlzcGxheSwgRUdM
X0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGV2aWNlID09IEVHTF9OT19ERVZJQ0VfRVhUKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBjaGFyKiBkZXZpY2VFeHRlbnNpb25zID0g
RUdMX1F1ZXJ5RGV2aWNlU3RyaW5nRVhUKGRldmljZSwgRUdMX0VYVEVOU0lPTlMpOworICAgIGlm
ICghZGV2aWNlRXh0ZW5zaW9ucyB8fCAhc3Ryc3RyKGRldmljZUV4dGVuc2lvbnMsIGRldmljZUNv
bnRleHRFeHRlbnNpb24pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB2b2lkKiBkZXZpY2VD
b250ZXh0ID0gbnVsbHB0cjsKKyAgICBpZiAoIUVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZp
Y2UsIGRldmljZUNvbnRleHRUeXBlLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZkZXZp
Y2VDb250ZXh0KSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiAhZGV2aWNlQ29u
dGV4dDsKK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbCBwbGF0Zm9ybVN1cHBvcnRzTWV0YWwoYm9v
bCBpc1dlYkdMMikKK3sKKyAgICBhdXRvIGRldmljZSA9IGFkb3B0TlMoTVRMQ3JlYXRlU3lzdGVt
RGVmYXVsdERldmljZSgpKTsKKworICAgIGlmIChkZXZpY2UpIHsKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCisgICAgICAgIC8vIEE4
IGRldmljZXMgKGlQYWQgTWluaSA0LCBpUGFkIEFpciAyKSBjYW5ub3QgdXNlIFdlYkdMMiB2aWEg
TWV0YWwuCisgICAgICAgIC8vIFRoaXMgY2hlY2sgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGV5IGFy
ZSBubyBsb25nZXIgc3VwcG9ydGVkLgorICAgICAgICBpZiAoaXNXZWJHTDIpCisgICAgICAgICAg
ICByZXR1cm4gW2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNdOworI2Vs
c2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKGlzV2ViR0wyKTsKKyNlbmRpZgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgRUdM
RGlzcGxheSBpbml0aWFsaXplRUdMRGlzcGxheShjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMmIGF0dHJzKQoreworICAgIGlmICghcGxhdGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkpIHsK
KyAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgdG8gbG9hZCBBTkdMRSBzaGFyZWQgbGlicmFy
eS4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZOworICAgIH0KKworICAgIEVHTGlu
dCBtYWpvclZlcnNpb24gPSAwOworICAgIEVHTGludCBtaW5vclZlcnNpb24gPSAwOworICAgIEVH
TERpc3BsYXkgZGlzcGxheTsKKworICAgIFZlY3RvcjxFR0xpbnQ+IGRpc3BsYXlBdHRyaWJ1dGVz
OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbWUgaW4gZnJvbSB0aGUgR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLgorICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZVdpdGhWb2xhdGls
ZUNvbnRleHRTdXBwb3J0ID0gIWlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpOworICAgIGlm
IChzaG91bGRJbml0aWFsaXplV2l0aFZvbGF0aWxlQ29udGV4dFN1cHBvcnQpIHsKKyAgICAgICAg
Ly8gRm9yIFdLMSB0eXBlIEFQSXMgd2UgbmVlZCB0byBzZXQgInZvbGF0aWxlIHBsYXRmb3JtIGNv
bnRleHQiIGZvciBzcGVjaWZpYworICAgICAgICAvLyBBUElzLCBzaW5jZSBjbGllbnQgY29kZSB3
aWxsIGJlIGFibGUgdG8gb3ZlcnJpZGUgdGhlIHRocmVhZC1nbG9iYWwgY29udGV4dAorICAgICAg
ICAvLyB0aGF0IEFOR0xFIGV4cGVjdHMuCisgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVu
ZChFR0xfUExBVEZPUk1fQU5HTEVfREVWSUNFX0NPTlRFWFRfVk9MQVRJTEVfRUFHTF9BTkdMRSk7
CisgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7CisgICAgICAgIGRp
c3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVfREVWSUNFX0NPTlRFWFRf
Vk9MQVRJTEVfQ0dMX0FOR0xFKTsKKyAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVH
TF9UUlVFKTsKKyAgICB9CisKKyAgICBMT0coV2ViR0wsICJBdHRlbXB0aW5nIHRvIHVzZSBBTkdM
RSdzICVzIGJhY2tlbmQuIiwgYXR0cnMudXNlTWV0YWwgPyAiTWV0YWwiIDogIk9wZW5HTCIpOwor
ICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVmYXVsdERpc3BsYXk7CisgICAgaWYgKGF0dHJzLnVzZU1ldGFsKSB7CisgICAg
ICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9BTkdM
RSk7CisgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVf
VFlQRV9NRVRBTF9BTkdMRSk7CisgICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGRlZmlu
ZWQgZm9yIEVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIGFzIEVHTENvbnRleHQgYXR0cmlidXRl
cywKKyAgICAgICAgLy8gYnV0IE1ldGFsIGJhY2tlbmQgdXNlcyBFR0xEaXNwbGF5IGF0dHJpYnV0
ZXMuCisgICAgICAgIGF1dG8gcG93ZXJQcmVmZXJlbmNlID0gYXR0cnMuZm9yY2VSZXF1ZXN0Rm9y
SGlnaFBlcmZvcm1hbmNlR1BVID8gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclBy
ZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSA6IGF0dHJzLnBvd2VyUHJlZmVyZW5jZTsKKyAgICAg
ICAgaWYgKHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBv
d2VyUHJlZmVyZW5jZTo6TG93UG93ZXIpIHsKKyAgICAgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVz
LmFwcGVuZChFR0xfUE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7CisgICAgICAgICAgICBkaXNwbGF5
QXR0cmlidXRlcy5hcHBlbmQoRUdMX0xPV19QT1dFUl9BTkdMRSk7CisgICAgICAgICAgICBuYXRp
dmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omxvd1Bvd2VyRGlzcGxheTsKKyAg
ICAgICAgfSBlbHNlIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgeworICAgICAgICAgICAg
ZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xFKTsKKyAg
ICAgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfSElHSF9QT1dFUl9BTkdMRSk7
CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omhp
Z2hQZXJmb3JtYW5jZURpc3BsYXk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGlzcGxheUF0dHJp
YnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKKyAgICBkaXNwbGF5ID0gRUdMX0dldFBsYXRmb3JtRGlz
cGxheUVYVChFR0xfUExBVEZPUk1fQU5HTEVfQU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KG5hdGl2ZURpc3BsYXkpLCBkaXNwbGF5QXR0cmlidXRlcy5kYXRhKCkpOworCisgICAgaWYgKEVH
TF9Jbml0aWFsaXplKGRpc3BsYXksICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNpb24pID09IEVH
TF9GQUxTRSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9u
IGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZOworICAgIH0KKyAgICBM
T0coV2ViR0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVkIiwgbWFqb3JW
ZXJzaW9uLCBtaW5vclZlcnNpb24pOworICAgIGlmIChzaG91bGRJbml0aWFsaXplV2l0aFZvbGF0
aWxlQ29udGV4dFN1cHBvcnQpIHsKKyAgICAgICAgLy8gQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIEVH
TF9ERUZBVUxUX0RJU1BMQVkgd2lsbCByZXR1cm4gdGhlIHBsYXRmb3JtLWN1c3RvbWl6ZWQgZGlz
cGxheS4KKyAgICAgICAgQVNTRVJUKGRpc3BsYXkgPT0gRUdMX0dldERpc3BsYXkobmF0aXZlRGlz
cGxheSkpOworICAgICAgICBBU1NFUlQoY2hlY2tWb2xhdGlsZUNvbnRleHRTdXBwb3J0SWZEZXZp
Y2VFeGlzdHMoZGlzcGxheSwgIkVHTF9BTkdMRV9wbGF0Zm9ybV9kZXZpY2VfY29udGV4dF92b2xh
dGlsZV9lYWdsIiwgIkVHTF9BTkdMRV9kZXZpY2VfZWFnbCIsIEVHTF9FQUdMX0NPTlRFWFRfQU5H
TEUpKTsKKyAgICAgICAgQVNTRVJUKGNoZWNrVm9sYXRpbGVDb250ZXh0U3VwcG9ydElmRGV2aWNl
RXhpc3RzKGRpc3BsYXksICJFR0xfQU5HTEVfcGxhdGZvcm1fZGV2aWNlX2NvbnRleHRfdm9sYXRp
bGVfY2dsIiwgIkVHTF9BTkdMRV9kZXZpY2VfY2dsIiwgRUdMX0NHTF9DT05URVhUX0FOR0xFKSk7
CisgICAgfQorICAgIHJldHVybiBkaXNwbGF5OworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
c3RhdHVzQ2hlY2tUaHJlc2hvbGQgPSA1OworCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShNQUNDQVRBTFlTVCkKK3N0YXRpYyBib29sIG5lZWRzRUFHTE9uTWFjKCkKK3sKKyNpZiBQTEFU
Rk9STShNQUNDQVRBTFlTVCkgJiYgQ1BVKEFSTTY0KQorICAgIHJldHVybiB0cnVlOworI2Vsc2UK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKyNlbmRpZgorCitSZWZQdHI8R3JhcGhpY3ND
b250ZXh0R0xDb2NvYT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6Y3JlYXRlKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCit7CisgICAgYXV0byBjb250
ZXh0ID0gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0NvbnRleHRHTENvY29hKFdURk1vdmUoYXR0cmli
dXRlcykpKTsKKyAgICBpZiAoIWNvbnRleHQtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMQ29jb2E6
On5HcmFwaGljc0NvbnRleHRHTENvY29hKCkgPSBkZWZhdWx0OworCitJT1N1cmZhY2UqIEdyYXBo
aWNzQ29udGV4dEdMQ29jb2E6OmRpc3BsYXlCdWZmZXIoKQoreworICAgIHJldHVybiBtX3N3YXBD
aGFpbi5kaXNwbGF5QnVmZmVyKCkuc3VyZmFjZS5nZXQoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTENvY29hOjptYXJrRGlzcGxheUJ1ZmZlckluVXNlKCkKK3sKKyAgICByZXR1cm4gbV9z
d2FwQ2hhaW4ubWFya0Rpc3BsYXlCdWZmZXJJblVzZSgpOworfQorCitHcmFwaGljc0NvbnRleHRH
TENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChX
VEZNb3ZlKGF0dHJpYnV0ZXMpKQoreworfQorCisvLyBGSVhNRTogQmVsb3cgaXMgZnVuY3Rpb25h
bGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTENvY29hIHRvIHNp
bXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgorCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzKQorICAg
IDogR3JhcGhpY3NDb250ZXh0R0woYXR0cnMpCit7CisgICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJz
LndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyOwor
ICAgIGlmIChhdHRycy51c2VNZXRhbCAmJiAhcGxhdGZvcm1TdXBwb3J0c01ldGFsKG1faXNGb3JX
ZWJHTDIpKSB7CisgICAgICAgIGF0dHJzLnVzZU1ldGFsID0gZmFsc2U7CisgICAgICAgIHNldENv
bnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoV0VCWFIpCisgICAg
aWYgKGF0dHJzLnhyQ29tcGF0aWJsZSkgeworICAgICAgICAvLyBGSVhNRTogSXQncyBhbG1vc3Qg
Y2VydGFpbiB0aGF0IGFueSBjb25uZWN0ZWQgaGVhZHNldCB3aWxsIHJlcXVpcmUgdGhlIGhpZ2gt
cG93ZXIgR1BVLAorICAgICAgICAvLyB3aGljaCBpcyB0aGUgc2FtZSBHUFUgd2UgbmVlZCB0aGlz
IGNvbnRleHQgdG8gdXNlLiBIb3dldmVyLCB0aGlzIGlzIG5vdCBndWFyYW50ZWVkLCBhbmQKKyAg
ICAgICAgLy8gdGhlcmUgaXMgYWxzbyB0aGUgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxl
IEdQVXMuIEdpdmVuIHRoYXQgeW91IGNhbiByZXF1ZXN0IHRoZQorICAgICAgICAvLyBHcmFwaGlj
c0NvbnRleHRHTCBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBXZWJYUiBzZXNzaW9uLCB3ZSdsbCBu
ZWVkIHNvbWUgd2F5IHRvCisgICAgICAgIC8vIG1pZ3JhdGUgdGhlIGNvbnRleHQgdG8gdGhlIGFw
cHJvcHJpYXRlIEdQVSB3aGVuIHRoZSBjb2RlIGhlcmUgZG9lcyBub3Qgd29yay4KKyAgICAgICAg
TE9HKFdlYkdMLCAiV2ViWFIgY29tcGF0aWJsZSBjb250ZXh0IHJlcXVlc3RlZC4gVGhpcyB3aWxs
IGFsc28gdHJpZ2dlciBhIHJlcXVlc3QgZm9yIHRoZSBoaWdoLXBvd2VyIEdQVS4iKTsKKyAgICAg
ICAgYXR0cnMuZm9yY2VSZXF1ZXN0Rm9ySGlnaFBlcmZvcm1hbmNlR1BVID0gdHJ1ZTsKKyAgICAg
ICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOworICAgIH0KKyNlbmRpZgorCisgICAgbV9k
aXNwbGF5T2JqID0gaW5pdGlhbGl6ZUVHTERpc3BsYXkoYXR0cnMpOworICAgIGlmICghbV9kaXNw
bGF5T2JqKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFh
dHRycy51c2VNZXRhbCkgeworICAgICAgICAvLyBGb3IgT3BlbkdMLCBFR0xfQU5HTEVfcG93ZXJf
cHJlZmVyZW5jZSBpcyB1c2VkLiBUaGUgY29udGV4dCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZQor
ICAgICAgICAvLyBkZWZhdWx0LCBsb3ctcG93ZXIgZGV2aWNlLiBGb3IgaGlnaC1wZXJmb3JtYW5j
ZSBjb250ZXh0cywgd2UgcmVxdWVzdCB0aGUgaGlnaC1wZXJmb3JtYW5jZQorICAgICAgICAvLyBH
UFUgaW4gc2V0Q29udGV4dFZpc2liaWxpdHkuIFdoZW4gdGhlIHJlcXVlc3QgaXMgZnVsbGZpbGxl
ZCBieSB0aGUgc3lzdGVtLCB3ZSBnZXQgdGhlCisgICAgICAgIC8vIGRpc3BsYXkgcmVjb25maWd1
cmF0aW9uIGNhbGxiYWNrLiBVcG9uIHRoaXMsIHdlIHVwZGF0ZSB0aGUgQ0dMIGNvbnRleHRzIGlu
c2lkZSBBTkdMRS4KKyAgICAgICAgY29uc3QgY2hhciAqZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xf
UXVlcnlTdHJpbmcobV9kaXNwbGF5T2JqLCBFR0xfRVhURU5TSU9OUyk7CisgICAgICAgIGJvb2wg
c3VwcG9ydHNQb3dlclByZWZlcmVuY2UgPSBzdHJzdHIoZGlzcGxheUV4dGVuc2lvbnMsICJFR0xf
QU5HTEVfcG93ZXJfcHJlZmVyZW5jZSIpOworICAgICAgICBpZiAoc3VwcG9ydHNQb3dlclByZWZl
cmVuY2UpIHsKKyAgICAgICAgICAgIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRp
b24gPSBhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZl
cmVuY2U6OkhpZ2hQZXJmb3JtYW5jZQorICAgICAgICAgICAgICAgIHx8IGF0dHJzLmZvcmNlUmVx
dWVzdEZvckhpZ2hQZXJmb3JtYW5jZUdQVTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZl
cmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgeworICAgICAgICAgICAgICAgIGF0dHJzLnBvd2VyUHJl
ZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpEZWZhdWx0OworICAg
ICAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZXNb
XSA9IHsKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAor
ICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAg
ICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAg
ICAgRUdMX0RFUFRIX1NJWkUsIDAsCisgICAgICAgIEVHTF9TVEVOQ0lMX1NJWkUsIDAsCisgICAg
ICAgIEVHTF9OT05FCisgICAgfTsKKyAgICBFR0xpbnQgbnVtYmVyQ29uZmlnc1JldHVybmVkID0g
MDsKKyAgICBFR0xfQ2hvb3NlQ29uZmlnKG1fZGlzcGxheU9iaiwgY29uZmlnQXR0cmlidXRlcywg
Jm1fY29uZmlnT2JqLCAxLCAmbnVtYmVyQ29uZmlnc1JldHVybmVkKTsKKyAgICBpZiAobnVtYmVy
Q29uZmlnc1JldHVybmVkICE9IDEpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29uZmlnIElu
aXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBMT0co
V2ViR0wsICJHb3QgRUdMQ29uZmlnIik7CisKKyAgICBFR0xfQmluZEFQSShFR0xfT1BFTkdMX0VT
X0FQSSk7CisgICAgaWYgKEVHTF9HZXRFcnJvcigpICE9IEVHTF9TVUNDRVNTKSB7CisgICAgICAg
IExPRyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRvIE9QRU5HTF9FU19BUEkiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxFR0xpbnQ+IGVnbENvbnRleHRBdHRyaWJ1dGVz
OworICAgIGlmIChtX2lzRm9yV2ViR0wyKSB7CisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVz
LmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7CisgICAgICAgIGVnbENvbnRleHRB
dHRyaWJ1dGVzLmFwcGVuZCgzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlZ2xDb250ZXh0QXR0
cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOworICAgICAgICBlZ2xD
b250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMik7CisgICAgICAgIC8vIEFOR0xFIHdpbGwgdXBncmFk
ZSB0aGUgY29udGV4dCB0byBFUzMgYXV0b21hdGljYWxseSB1bmxlc3MgdGhpcyBpcyBzcGVjaWZp
ZWQuCisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9PUEVO
R0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUpOworICAgICAgICBlZ2xDb250ZXh0QXR0cmli
dXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKKyAgICB9CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMu
YXBwZW5kKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOworICAgIGVnbENv
bnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7CisKKyAgICAvLyBXZWJHTCByZXF1aXJl
cyB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIGNsZWFyZWQgYXQgY3JlYXRpb24uCisgICAgZWdsQ29u
dGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ST0JVU1RfUkVTT1VSQ0VfSU5JVElBTElaQVRJT05f
QU5HTEUpOworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7CisKKyAg
ICAvLyBXZWJHTCBkb2Vzbid0IGFsbG93IGNsaWVudCBhcnJheXMuCisgICAgZWdsQ29udGV4dEF0
dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSk7
CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7CisgICAgLy8gV2Vi
R0wgZG9lc24ndCBhbGxvdyBpbXBsaWNpdCBjcmVhdGlvbiBvZiBvYmplY3RzIG9uIGJpbmQuCisg
ICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0JJTkRfR0VORVJBVEVT
X1JFU09VUkNFX0NIUk9NSVVNKTsKKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdM
X0ZBTFNFKTsKKworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CisK
KyAgICBtX2NvbnRleHRPYmogPSBFR0xfQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29u
ZmlnT2JqLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJpYnV0ZXMuZGF0YSgpKTsKKyAg
ICBpZiAobV9jb250ZXh0T2JqID09IEVHTF9OT19DT05URVhUIHx8ICFtYWtlQ3VycmVudChtX2Rp
c3BsYXlPYmosIG1fY29udGV4dE9iaikpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4
dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
TE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKKworICAgIGlmIChtX2lzRm9yV2ViR0wyKQor
ICAgICAgICBnbDo6RW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpQUklNSVRJVkVfUkVTVEFSVF9G
SVhFRF9JTkRFWCk7CisKKyAgICBWZWN0b3I8QVNDSUlMaXRlcmFsLCA0PiByZXF1aXJlZEV4dGVu
c2lvbnM7CisgICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAgLy8gRm9yIFdlYkdMIDIu
MCBvY2NsdXNpb24gcXVlcmllcyB0byB3b3JrLgorICAgICAgICByZXF1aXJlZEV4dGVuc2lvbnMu
YXBwZW5kKCJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4iX3MpOworICAgIH0KKyNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorICAgIGlmICghbmVlZHNFQUdM
T25NYWMoKSkgeworICAgICAgICAvLyBGb3IgSU9TdXJmYWNlLWJhY2tlZCB0ZXh0dXJlcy4KKyAg
ICAgICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5n
bGUiX3MpOworICAgICAgICAvLyBGb3IgY3JlYXRpbmcgdGhlIEVHTCBzdXJmYWNlIGZyb20gYW4g
SU9TdXJmYWNlLgorICAgICAgICByZXF1aXJlZEV4dGVuc2lvbnMuYXBwZW5kKCJHTF9FWFRfdGV4
dHVyZV9mb3JtYXRfQkdSQTg4ODgiX3MpOworICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorI2lmIEVOQUJMRShXRUJYUikgJiYgIVBMQVRGT1JN
KElPU19GQU1JTFlfU0lNVUxBVE9SKQorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnhyQ29t
cGF0aWJsZSkKKyAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfT0VTX0VHTF9p
bWFnZSJfcyk7CisjZW5kaWYKKyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAgICAgcmVxdWly
ZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiX3Mp
OworICAgIEV4dGVuc2lvbnNHTCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBm
b3IgKGF1dG8mIGV4dGVuc2lvbiA6IHJlcXVpcmVkRXh0ZW5zaW9ucykgeworICAgICAgICBpZiAo
IWV4dGVuc2lvbnMuc3VwcG9ydHMoZXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgTE9HKFdlYkdM
LCAiTWlzc2luZyByZXF1aXJlZCBleHRlbnNpb24uICVzIiwgZXh0ZW5zaW9uLmNoYXJhY3RlcnMo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZXh0ZW5zaW9ucy5l
bnN1cmVFbmFibGVkKGV4dGVuc2lvbik7CisgICAgfQorICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cygpLnVzZU1ldGFsKSB7CisgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMg
c3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25z
LgorICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3RzIGFyZSBub3Qgc2lnbmFsaW5nIHVwb24g
Y29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVycywgc28KKyAgICAgICAgLy8gT3BlbkdM
IGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlw
aWNhbGx5IGltcGxlbWVudAorICAgICAgICAvLyBzb21lIHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0
bGluZy4KKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FSQl9zeW5jIl9zKSkg
eworICAgICAgICAgICAgbV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0ID0gdHJ1ZTsK
KyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQVJCX3N5bmMiX3MpOwor
ICAgICAgICB9CisgICAgfQorICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxp
ZGF0aW9uLgorCisgICAgLy8gQ3JlYXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1c2VkIGZv
ciB0aGUgZnJhbWVidWZmZXIuCisgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUp
OworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRh
cmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7CisKKyAgICBnbDo6
R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5i
b3VuZFJlYWRGQk8gPSBtX2ZibzsKKworICAgIGlmICghYXR0cnMuYW50aWFsaWFzICYmIChhdHRy
cy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkKKyAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKworICAgIC8vIElmIG5lY2Vzc2FyeSwgY3JlYXRl
IGFub3RoZXIgZnJhbWVidWZmZXIgZm9yIHRoZSBtdWx0aXNhbXBsZSByZXN1bHRzLgorICAgIGlm
IChhdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9t
dWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1f
c3RhdGUuYm91bmRSZWFkRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2w6OkdlblJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChh
dHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0gZWxzZSBp
ZiAoYXR0cnMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIElmIG5lY2Vzc2Fy
eSwgY3JlYXRlIGFub3RoZXIgdGV4dHVyZSB0byBoYW5kbGUgcHJlc2VydmVEcmF3aW5nQnVmZmVy
OnRydWUgd2l0aG91dAorICAgICAgICAvLyBhbnRpYWxpYXNpbmcuCisgICAgICAgIGdsOjpHZW5U
ZXh0dXJlcygxLCAmbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlKTsKKyAgICAgICAgZ2w6
OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVy
ZSk7CisgICAgICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbDo6
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIDApOworICAgICAgICAvLyBDcmVhdGUgYW4gRkJPIHdpdGggd2hpY2gg
dG8gcGVyZm9ybSBCbGl0RnJhbWVidWZmZXIgZnJvbSBvbmUgdGV4dHVyZSB0byB0aGUgb3RoZXIu
CisgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVy
RkJPKTsKKyAgICB9CisKKyAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKworICAgIExP
RyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMp
OworfQorCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIo
KS5yZW1vdmVDb250ZXh0KHRoaXMpOworICAgIGlmIChtYWtlQ29udGV4dEN1cnJlbnQoKSkgewor
ICAgICAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOworICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKQorICAg
ICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcik7CisgICAgICAgIGlmIChtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKQorICAg
ICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgICAg
IGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBp
ZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVm
ZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBpZiAobV9mYm8pCisgICAg
ICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgICAgIGlmICht
X3ByZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUpCisgICAgICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7CisgICAgICAgIGlmICht
X3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTykKKyAgICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1
ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKKyAgICAgICAgLy8gSWYgZmVu
Y2VzIGFyZSBub3QgZW5hYmxlZCwgdGhpcyBsb29wIHdpbGwgbm90IGV4ZWN1dGUuCisgICAgICAg
IGZvciAoYXV0byYgZmVuY2UgOiBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlcykKKyAgICAgICAgICAg
IGZlbmNlLnJlc2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChhdXRvJiBmZW5jZSA6
IG1fZnJhbWVDb21wbGV0aW9uRmVuY2VzKQorICAgICAgICAgICAgZmVuY2UuYWJhbmRvbigpOwor
ICAgIH0KKyAgICBpZiAobV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikKKyAgICAgICAgRUdMX0Rlc3Ry
b3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcik7CisgICAgYXV0
byByZWN5Y2xlZEJ1ZmZlciA9IG1fc3dhcENoYWluLnJlY3ljbGVCdWZmZXIoKTsKKyAgICBpZiAo
cmVjeWNsZWRCdWZmZXIuaGFuZGxlKQorICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNw
bGF5T2JqLCByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpOworICAgIGF1dG8gY29udGVudHNIYW5kbGUg
PSBtX3N3YXBDaGFpbi5kZXRhY2hDbGllbnQoKTsKKyAgICBpZiAoY29udGVudHNIYW5kbGUpCisg
ICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIGNvbnRlbnRzSGFuZGxlKTsK
KyAgICBpZiAobV9jb250ZXh0T2JqKSB7CisgICAgICAgIG1ha2VDdXJyZW50KG1fZGlzcGxheU9i
aiwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5
T2JqLCBtX2NvbnRleHRPYmopOworICAgIH0KKyAgICBBU1NFUlQoY3VycmVudENvbnRleHQgIT0g
dGhpcyk7CisgICAgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCA9IC0xOworICAgIExPRyhX
ZWJHTCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMICglcCkuIiwgdGhpcyk7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fdGV4dHVyZTsKK30KKworUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOwor
fQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXQoKQoreworICAgIGlmIChtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0ID09IC0x
KQorICAgICAgICBFR0xfR2V0Q29uZmlnQXR0cmliKG1fZGlzcGxheU9iaiwgbV9jb25maWdPYmos
IEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCk7CisKKyAgICBzd2l0Y2ggKG1fZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQpIHsK
KyAgICBjYXNlIEVHTF9URVhUVVJFXzJEOgorICAgICAgICByZXR1cm4gVEVYVFVSRV8yRDsKKyAg
ICBjYXNlIEVHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRToKKyAgICAgICAgcmV0dXJuIFRFWFRV
UkVfUkVDVEFOR0xFX0FSQjsKKworICAgIH0KKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNl
LCAiSW52YWxpZCBlbnVtIHJldHVybmVkIGZyb20gRUdMX0dldENvbmZpZ0F0dHJpYiIpOworICAg
IHJldHVybiAwOworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2lu
Z1RhcmdldCkKK3sKKyAgICBzd2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKKyAgICBjYXNlIFRFWFRV
UkVfMkQ6CisgICAgICAgIHJldHVybiBURVhUVVJFX0JJTkRJTkdfMkQ7CisgICAgY2FzZSBURVhU
VVJFX1JFQ1RBTkdMRV9BUkI6CisgICAgICAgIHJldHVybiBURVhUVVJFX0JJTkRJTkdfUkVDVEFO
R0xFX0FSQjsKKyAgICB9CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwgIkludmFsaWQg
ZHJhd2luZyB0YXJnZXQiKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK0dDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0Rm9yRHJhd2luZ1Rh
cmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQoreworICAgIHN3aXRjaCAoZHJhd2luZ1Rhcmdl
dCkgeworICAgIGNhc2UgVEVYVFVSRV8yRDoKKyAgICAgICAgcmV0dXJuIEVHTF9URVhUVVJFXzJE
OworICAgIGNhc2UgVEVYVFVSRV9SRUNUQU5HTEVfQVJCOgorICAgICAgICByZXR1cm4gRUdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FOR0xFOworICAgIH0KKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZh
bHNlLCAiSW52YWxpZCBkcmF3aW5nIHRhcmdldCIpOworICAgIHJldHVybiAwOworfQorCitib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIGlm
ICghbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gSWYgdGhlcmUg
aXMgbm8gZHJhd2luZyBidWZmZXIsIHdlIGZhaWxlZCB0byBhbGxvY2F0ZSBvbmUgZHVyaW5nIHBy
ZXBhcmluZyBmb3IgZGlzcGxheS4KKyAgICAvLyBUaGUgZXhjZXB0aW9uIGlzIHRoZSBjYXNlIHdo
ZW4gdGhlIGNvbnRleHQgaXMgdXNlZCBiZWZvcmUgcmVzaGFwaW5nLgorICAgIGlmICghbV9kaXNw
bGF5QnVmZmVyQmFja2luZyAmJiAhZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY3VycmVudENvbnRleHQgPT0gdGhp
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gQ2FsbGluZyBNYWtlQ3VycmVudCBpcyBp
bXBvcnRhbnQgdG8gc2V0IHZvbGF0aWxlIHBsYXRmb3JtIGNvbnRleHQuIFNlZSBpbml0aWFsaXpl
RUdMRGlzcGxheSgpLgorICAgIGlmICghRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdM
X05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpKQorICAgICAg
ICBjdXJyZW50Q29udGV4dCA9IHRoaXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3RhdHVzKCkKK3sKKyAgICBpZiAobV9mYWls
TmV4dFN0YXR1c0NoZWNrKSB7CisgICAgICAgIExPRyhXZWJHTCwgIlByZXRlbmRpbmcgdGhlIEdQ
VSBoYXMgcmVzZXQgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsKKyAgICAgICAgbV9m
YWlsTmV4dFN0YXR1c0NoZWNrID0gZmFsc2U7CisgICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsK
KyAgICAgICAgbWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fQ09OVEVYVCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPbmx5IGRvIHRoZSBjaGVjayBldmVyeSBzdGF0
dXNDaGVja1RocmVzaG9sZCBjYWxscy4KKyAgICBpZiAobV9zdGF0dXNDaGVja0NvdW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3N0YXR1c0NoZWNrQ291bnQgPSAobV9zdGF0dXNDaGVja0Nv
dW50ICsgMSkgJSBzdGF0dXNDaGVja1RocmVzaG9sZDsKKworICAgIEdMaW50IHJlc3RhcnRTdGF0
dXMgPSAwOworICAgIC8vIEZJWE1FOiBjaGVjayB2aWEgS0hSX3JvYnVzdG5lc3MuCisgICAgcmVz
dGFydFN0YXR1cyA9IDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENv
bnRleHRWaXNpYmlsaXR5KGJvb2wgaXNWaXNpYmxlKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBpZiAoIW1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoaXNWaXNpYmxlKQorICAgICAgICBtX2hpZ2hQZXJmb3JtYW5jZUdQVVJl
cXVlc3QgPSBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0OjphY3F1aXJlKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2hpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgPSB7IH07CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShpc1Zpc2libGUpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQoreworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICBpZiAobV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmlndXJhdGlvbikKKyAg
ICAgICAgRUdMX0hhbmRsZUdQVVN3aXRjaEFOR0xFKG1fZGlzcGxheU9iaik7CisjZW5kaWYKKyAg
ICBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCit7CisgICAg
QVNTRVJUKCFnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSk7CisgICAgLy8g
UmVzZXQgdGhlIGN1cnJlbnQgYmFja2J1ZmZlciBub3cgYmVmb3JlIGFsbG9jYXRpbmcgYSBuZXcg
b25lIGluIG9yZGVyIHRvIHNsaWdodGx5IHJlZHVjZSBtZW1vcnkgcHJlc3N1cmUuCisgICAgaWYg
KG1fZGlzcGxheUJ1ZmZlckJhY2tpbmcpIHsKKyAgICAgICAgbV9kaXNwbGF5QnVmZmVyQmFja2lu
Zy5yZXNldCgpOworICAgICAgICBFR0xfUmVsZWFzZVRleEltYWdlKG1fZGlzcGxheU9iaiwgbV9k
aXNwbGF5QnVmZmVyUGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKTsKKyAgICAgICAgRUdMX0Rlc3Ry
b3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcik7CisgICAgICAg
IG1fZGlzcGxheUJ1ZmZlclBidWZmZXIgPSBFR0xfTk9fU1VSRkFDRTsKKyAgICB9CisgICAgLy8g
UmVzZXQgdGhlIGZ1dHVyZSByZWN5Y2xlZCBidWZmZXIgbm93LCBiZWNhdXNlIGl0IG1vc3QgbGlr
ZWx5IHdpbGwgbm90IGJlIHJldXNhYmxlIGF0IHRoZSB0aW1lIGl0IHdpbGwgYmUgcmV1c2VkLgor
ICAgIGF1dG8gcmVjeWNsZWRCdWZmZXIgPSBtX3N3YXBDaGFpbi5yZWN5Y2xlQnVmZmVyKCk7Cisg
ICAgaWYgKHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNl
KG1fZGlzcGxheU9iaiwgcmVjeWNsZWRCdWZmZXIuaGFuZGxlKTsKKyAgICByZWN5Y2xlZEJ1ZmZl
ci5zdXJmYWNlLnJlc2V0KCk7CisgICAgcmV0dXJuIGFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZm
ZXJCYWNraW5nKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFsbG9jYXRl
QW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKK3sKKyAgICBBU1NFUlQoIWdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKKyAgICBhdXRvIGJhY2tpbmcgPSBJT1N1cmZh
Y2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBiYWNraW5nLT5taWdyYXRlQ29sb3JTcGFjZVRvUHJvcGVydGllcygpOworCisgICAg
Y29uc3QgYm9vbCB1c2luZ0FscGhhID0gY29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYTsKKyAgICBj
b25zdCBhdXRvIHNpemUgPSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOworICAgIGNvbnN0
IEVHTGludCBzdXJmYWNlQXR0cmlidXRlc1tdID0geworICAgICAgICBFR0xfV0lEVEgsIHNpemUu
d2lkdGgoKSwKKyAgICAgICAgRUdMX0hFSUdIVCwgc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgRUdM
X0lPU1VSRkFDRV9QTEFORV9BTkdMRSwgMCwKKyAgICAgICAgRUdMX1RFWFRVUkVfVEFSR0VULCBF
R0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdUYXJnZXQoZHJhd2luZ0J1ZmZl
clRleHR1cmVUYXJnZXQoKSksCisgICAgICAgIEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9B
TkdMRSwgdXNpbmdBbHBoYSA/IEdMX0JHUkFfRVhUIDogR0xfUkdCLAorICAgICAgICBFR0xfVEVY
VFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEsCisgICAgICAgIEVHTF9URVhUVVJFX1RZUEVf
QU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsCisgICAgICAgIC8vIE9ubHkgaGFzIGFuIGVmZmVjdCBv
biB0aGUgaU9TIFNpbXVsYXRvci4KKyAgICAgICAgRUdMX0lPU1VSRkFDRV9VU0FHRV9ISU5UX0FO
R0xFLCBFR0xfSU9TVVJGQUNFX1dSSVRFX0hJTlRfQU5HTEUsCisgICAgICAgIEVHTF9OT05FLCBF
R0xfTk9ORQorICAgIH07CisgICAgRUdMU3VyZmFjZSBwYnVmZmVyID0gRUdMX0NyZWF0ZVBidWZm
ZXJGcm9tQ2xpZW50QnVmZmVyKG1fZGlzcGxheU9iaiwgRUdMX0lPU1VSRkFDRV9BTkdMRSwgYmFj
a2luZy0+c3VyZmFjZSgpLCBtX2NvbmZpZ09iaiwgc3VyZmFjZUF0dHJpYnV0ZXMpOworICAgIGlm
ICghcGJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBiaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShiYWNraW5nKSwgcGJ1ZmZlcik7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKQoreworICAgIEdDR0xlbnVt
IHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworICAgIFNjb3Bl
ZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgp
KSwgdGV4dHVyZVRhcmdldCwgdGV4dHVyZVRhcmdldCAhPSBURVhUVVJFX1JFQ1RBTkdMRV9BUkIp
OworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGlm
ICghRUdMX0JpbmRUZXhJbWFnZShtX2Rpc3BsYXlPYmosIHBidWZmZXIsIEVHTF9CQUNLX0JVRkZF
UikpIHsKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgcGJ1ZmZlcik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZl
ciA9IHBidWZmZXI7CisgICAgbV9kaXNwbGF5QnVmZmVyQmFja2luZyA9IFdURk1vdmUoYmFja2lu
Zyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKK3sKKyAgICBjdXJyZW50Q29udGV4dCA9
IG51bGxwdHI7CisgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VS
RkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOworfQorCit2b2lkKiBHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKEdDR0xlbnVtIHRhcmdl
dCwgUGJ1ZmZlckF0dGFjaG1lbnRVc2FnZSB1c2FnZSwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gdHlwZSwgSU9TdXJm
YWNlUmVmIHN1cmZhY2UsIEdDR0x1aW50IHBsYW5lKQoreworICAgIGlmICh0YXJnZXQgIT0gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkpIHsKKyAg
ICAgICAgTE9HKFdlYkdMLCAiVW5rbm93biB0ZXh0dXJlIHRhcmdldCAlZC4iLCBzdGF0aWNfY2Fz
dDxpbnQ+KHRhcmdldCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBh
dXRvIHVzYWdlSGludCA9IFsmXSAoKSAtPiBFR0xpbnQgeworICAgICAgICBpZiAodXNhZ2UgPT0g
UGJ1ZmZlckF0dGFjaG1lbnRVc2FnZTo6UmVhZCkKKyAgICAgICAgICAgIHJldHVybiBFR0xfSU9T
VVJGQUNFX1JFQURfSElOVF9BTkdMRTsKKyAgICAgICAgaWYgKHVzYWdlID09IFBidWZmZXJBdHRh
Y2htZW50VXNhZ2U6OldyaXRlKQorICAgICAgICAgICAgcmV0dXJuIEVHTF9JT1NVUkZBQ0VfV1JJ
VEVfSElOVF9BTkdMRTsKKyAgICAgICAgcmV0dXJuIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FO
R0xFIHwgRUdMX0lPU1VSRkFDRV9XUklURV9ISU5UX0FOR0xFOworICAgIH0oKTsKKworICAgIHJl
dHVybiBXZWJDb3JlOjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheU9i
aiwgbV9jb25maWdPYmosIHRhcmdldCwgdXNhZ2VIaW50LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgdHlwZSwgc3VyZmFjZSwgcGxhbmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMQ29jb2E6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKHZvaWQqIGhhbmRsZSkK
K3sKKyAgICBXZWJDb3JlOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShtX2Rpc3Bs
YXlPYmosIGhhbmRsZSk7Cit9CisKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1Ip
Cit2b2lkKiBHcmFwaGljc0NvbnRleHRHTENvY29hOjphdHRhY2hJT1N1cmZhY2VUb1NoYXJlZFRl
eHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBJT1N1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgY29uc3Rl
eHByIEVHTGludCBlbXB0eUF0dHJpYnV0ZXNbXSA9IHsgRUdMX05PTkUgfTsKKworICAgIC8vIENy
ZWF0ZSBhIE1UTFRleHR1cmUgb3V0IG9mIHRoZSBJT1N1cmZhY2UuCisgICAgLy8gRklYTUU6IFdl
IG5lZWQgdG8gdXNlIHRoZSBzYW1lIGRldmljZSB0aGF0IEFOR0xFIGlzIHVzaW5nLCB3aGljaCBt
aWdodCBub3QgYmUgdGhlIGRlZmF1bHQuCisKKyAgICBSZXRhaW5QdHI8TVRMU2hhcmVkVGV4dHVy
ZUhhbmRsZT4gaGFuZGxlID0gYWRvcHROUyhbW01UTFNoYXJlZFRleHR1cmVIYW5kbGUgYWxsb2Nd
IGluaXRXaXRoSU9TdXJmYWNlOnN1cmZhY2UtPnN1cmZhY2UoKSBsYWJlbDpAIldlYlhSIl0pOwor
ICAgIGlmICghaGFuZGxlKSB7CisgICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBjcmVhdGUg
YSBNVExTaGFyZWRUZXh0dXJlSGFuZGxlIGZyb20gdGhlIElPU3VyZmFjZSBpbiBhdHRhY2hJT1N1
cmZhY2VUb1RleHR1cmUuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IGlmICghaGFuZGxlLmdldCgpLmRldmljZSkgeworICAgICAgICBMT0coV2ViR0wsICJNVExTaGFy
ZWRUZXh0dXJlSGFuZGxlIGRvZXMgbm90IGhhdmUgYSBNZXRhbCBkZXZpY2UgaW4gYXR0YWNoSU9T
dXJmYWNlVG9UZXh0dXJlLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBhdXRvIHRleHR1cmUgPSBhZG9wdE5TKFtoYW5kbGUuZ2V0KCkuZGV2aWNlIG5ld1NoYXJlZFRl
eHR1cmVXaXRoSGFuZGxlOmhhbmRsZS5nZXQoKV0pOworICAgIGlmICghdGV4dHVyZSkgeworICAg
ICAgICBMT0coV2ViR0wsICJVbmFibGUgdG8gY3JlYXRlIGEgTVRMU2hhcmVkVGV4dHVyZSBmcm9t
IHRoZSB0ZXh0dXJlIGhhbmRsZSBpbiBhdHRhY2hJT1N1cmZhY2VUb1RleHR1cmUuIik7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIEZJWE1FOiBEb2VzIHRoZSB0ZXh0
dXJlIGhhdmUgdGhlIGNvcnJlY3QgdXNhZ2UgbW9kZT8KKworICAgIC8vIENyZWF0ZSBhbiBFR0xJ
bWFnZSBvdXQgb2YgdGhlIE1UTFRleHR1cmUKKyAgICBhdXRvIGRpc3BsYXkgPSBwbGF0Zm9ybURp
c3BsYXkoKTsKKyAgICBhdXRvIGVnbEltYWdlID0gRUdMX0NyZWF0ZUltYWdlS0hSKGRpc3BsYXks
IEVHTF9OT19DT05URVhULCBFR0xfTUVUQUxfVEVYVFVSRV9BTkdMRSwgcmVpbnRlcnByZXRfY2Fz
dDxFR0xDbGllbnRCdWZmZXI+KHRleHR1cmUuZ2V0KCkpLCBlbXB0eUF0dHJpYnV0ZXMpOworICAg
IGlmICghZWdsSW1hZ2UpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiVW5hYmxlIHRvIGNyZWF0ZSBh
biBFR0xJbWFnZSBmcm9tIHRoZSBNZXRhbCBoYW5kbGUgaW4gYXR0YWNoSU9TdXJmYWNlVG9UZXh0
dXJlLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBUZWxsIHRo
ZSBjdXJyZW50bHkgYm91bmQgdGV4dHVyZSB0byB1c2UgdGhlIEVHTEltYWdlLgorICAgIGdsOjpF
R0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyh0YXJnZXQsIGVnbEltYWdlKTsKKworICAgIHJldHVy
biBlZ2xJbWFnZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpkZXRhY2hJT1N1
cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCit7CisgICAgYXV0byBkaXNwbGF5
ID0gcGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMX0Rlc3Ryb3lJbWFnZUtIUihkaXNwbGF5LCBo
YW5kbGUpOworfQorI2VuZGlmCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzR0xF
UzJDb21wbGlhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzRm9yV2ViR0wyOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyhTaW11
bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCit7CisgICAgaWYgKGV2ZW50ID09IFNpbXVsYXRl
ZEV2ZW50Rm9yVGVzdGluZzo6Q29udGV4dENoYW5nZSkgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5kaXNwbGF5V2FzUmVjb25maWd1cmVk
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGV2ZW50ID09IFNpbXVsYXRlZEV2
ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkgeworICAgICAgICBtX2ZhaWxOZXh0U3Rh
dHVzQ2hlY2sgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlRm9yRGlzcGxheSgpCit7CisgICAgaWYgKG1fbGF5
ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOworCisgICAg
Ly8gVGhlIElPU3VyZmFjZSB3aWxsIGJlIHVzZWQgZnJvbSBvdGhlciBncmFwaGljcyBzdWJzeXN0
ZW0sIHNvIGZsdXNoIEdMIGNvbW1hbmRzLgorICAgIGdsOjpGbHVzaCgpOworCisgICAgYXV0byBy
ZWN5Y2xlZEJ1ZmZlciA9IG1fc3dhcENoYWluLnJlY3ljbGVCdWZmZXIoKTsKKworICAgIEVHTF9S
ZWxlYXNlVGV4SW1hZ2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyLCBFR0xf
QkFDS19CVUZGRVIpOworICAgIG1fc3dhcENoYWluLnByZXNlbnQoeyBXVEZNb3ZlKG1fZGlzcGxh
eUJ1ZmZlckJhY2tpbmcpLCBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyIH0pOworICAgIG1fZGlzcGxh
eUJ1ZmZlclBidWZmZXIgPSBFR0xfTk9fU1VSRkFDRTsKKworICAgIGJvb2wgaGFzTmV3QmFja2lu
ZyA9IGZhbHNlOworICAgIGlmIChyZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlICYmIHJlY3ljbGVkQnVm
ZmVyLnN1cmZhY2UtPnNpemUoKSA9PSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKSB7Cisg
ICAgICAgIGhhc05ld0JhY2tpbmcgPSBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShy
ZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlKSwgcmVjeWNsZWRCdWZmZXIuaGFuZGxlKTsKKyAgICAgICAg
cmVjeWNsZWRCdWZmZXIuaGFuZGxlID0gbnVsbHB0cjsKKyAgICB9CisgICAgcmVjeWNsZWRCdWZm
ZXIuc3VyZmFjZS5yZXNldCgpOworICAgIGlmIChyZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpCisgICAg
ICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVkQnVmZmVyLmhhbmRs
ZSk7CisKKyAgICAvLyBFcnJvciB3aWxsIGJlIGhhbmRsZWQgYnkgbmV4dCBjYWxsIHRvIG1ha2VD
b250ZXh0Q3VycmVudCgpIHdoaWNoIHdpbGwgbm90aWNlIGxhY2sgb2YgZGlzcGxheSBidWZmZXIu
CisgICAgaWYgKCFoYXNOZXdCYWNraW5nKQorICAgICAgICBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5
QnVmZmVyQmFja2luZygpOworCisgICAgbWFya0xheWVyQ29tcG9zaXRlZCgpOworCisgICAgaWYg
KG1fdXNlRmVuY2VTeW5jRm9yRGlzcGxheVJhdGVMaW1pdCkgeworICAgICAgICBib29sIHN1Y2Nl
c3MgPSB3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKTsKKyAgICAgICAgVU5VU0VEX1ZBUklBQkxF
KHN1Y2Nlc3MpOyAvLyBGSVhNRTogaW1wbGVtZW50IGNvbnRleHQgbG9zdC4KKyAgICB9Cit9CisK
KworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKK0dyYXBoaWNzQ29udGV4
dEdMQ1YqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKCkKK3sKKyAgICBpZiAoIW1fY3Yp
CisgICAgICAgIG1fY3YgPSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7
CisgICAgcmV0dXJuIG1fY3YuZ2V0KCk7Cit9CisjZW5kaWYKKworc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygp
Cit7CisgICAgYXV0byYgZGlzcGxheUJ1ZmZlciA9IG1fc3dhcENoYWluLmRpc3BsYXlCdWZmZXIo
KTsKKyAgICBpZiAoIWRpc3BsYXlCdWZmZXIuc3VyZmFjZSB8fCAhZGlzcGxheUJ1ZmZlci5oYW5k
bGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGRpc3BsYXlCdWZmZXIu
c3VyZmFjZS0+c2l6ZSgpICE9IGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gTm90ZTogV2UgYXJlIHVzaW5nIEdMIHRvIHJl
YWQgdGhlIElPU3VyZmFjZS4gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhlcmUgYXJlIG5vIGNv
bnZpbmllbnQKKyAgICAvLyBmdW5jdGlvbnMgdG8gY29udmVydCB0aGUgSU9TdXJmYWNlIHBpeGVs
IGRhdGEgdG8gSW1hZ2VEYXRhLiBUaGUgaW1hZ2UgZGF0YSBlbmRzIHVwIGJlaW5nCisgICAgLy8g
ZHJhd24gdG8gYSBJbWFnZUJ1ZmZlciwgYnV0IGF0IHRoZSB0aW1lIHRoZXJlJ3Mgbm8gZnVuY3Rp
b25zIHRvIGNvbnN0cnVjdCBhIE5hdGl2ZUltYWdlCisgICAgLy8gb3V0IG9mIGFuIElPU3VyZmFj
ZSBpbiBzdWNoIGEgd2F5IHRoYXQgZHJhd2luZyB0aGUgTmF0aXZlSW1hZ2Ugd291bGQgYmUgZ3Vh
cmFudGVlZCBsZWF2ZQorICAgIC8vIHRoZSBJT1N1cmZhY2UgYmUgdW5yZWZlbmNlZCBhZnRlciB0
aGUgZHJhdyBjYWxsIGZpbmlzaGVzLgorICAgIFNjb3BlZFRleHR1cmUgdGV4dHVyZTsKKyAgICBH
Q0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKKyAg
ICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJhd2luZ0J1ZmZl
clRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoZHJhd2luZ0J1ZmZlclRleHR1cmVU
YXJnZXQoKSksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5H
TEVfQVJCKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgdGV4dHVyZSk7Cisg
ICAgaWYgKCFFR0xfQmluZFRleEltYWdlKG1fZGlzcGxheU9iaiwgZGlzcGxheUJ1ZmZlci5oYW5k
bGUsIEVHTF9CQUNLX0JVRkZFUikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIFNjb3BlZEZyYW1lYnVmZmVyIGZibzsKKyAgICBTY29wZWRSZXN0b3Jl
UmVhZEZyYW1lYnVmZmVyQmluZGluZyBmYm9CaW5kaW5nKG1faXNGb3JXZWJHTDIsIG1fc3RhdGUu
Ym91bmRSZWFkRkJPLCBmYm8pOworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChmYm9CaW5k
aW5nLmZyYW1lYnVmZmVyVGFyZ2V0KCksIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCB0ZXh0dXJlVGFy
Z2V0LCB0ZXh0dXJlLCAwKTsKKyAgICBBU1NFUlQoZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
ZmJvQmluZGluZy5mcmFtZWJ1ZmZlclRhcmdldCgpKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsKKwor
ICAgIEVHTEJvb2xlYW4gcmVsZWFzZU9rID0gRUdMX1JlbGVhc2VUZXhJbWFnZShtX2Rpc3BsYXlP
YmosIGRpc3BsYXlCdWZmZXIuaGFuZGxlLCBFR0xfQkFDS19CVUZGRVIpOworICAgIEFTU0VSVF9V
TlVTRUQocmVsZWFzZU9rLCByZWxlYXNlT2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorUmVmUHRyPE1lZGlhU2FtcGxlPiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUoKQoreworICAg
IGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCk7CisgICAg
aWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoZGlzcGxheUJ1ZmZlci5zdXJmYWNlLT5zaXpl
KCkgIT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgbV9zd2FwQ2hhaW4ubWFya0Rpc3BsYXlCdWZmZXJJblVzZSgpOworICAgIGF1dG8g
cGl4ZWxCdWZmZXIgPSBjcmVhdGVDVlBpeGVsQnVmZmVyKGRpc3BsYXlCdWZmZXIuc3VyZmFjZS0+
c3VyZmFjZSgpKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGVJbWFnZVNhbXBsZShXVEZN
b3ZlKCpwaXhlbEJ1ZmZlciksIE1lZGlhU2FtcGxlQVZGT2JqQzo6VmlkZW9Sb3RhdGlvbjo6VXBz
aWRlRG93biwgdHJ1ZSk7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3sKKyAgICBjdXJyZW50Q29udGV4
dCA9IG51bGxwdHI7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmYjcyM2RkNDIyZGU5YjlkYWRhOWU0Y2I4OTdkMDYxY2JlNmQ2MDNlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KKysr
IC9kZXYvbnVsbApAQCAtMSw4MDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
V0VCR0wpCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgotCi0jaW1wb3J0ICJB
TkdMRVV0aWxpdGllcy5oIgotI2ltcG9ydCAiQU5HTEVVdGlsaXRpZXNDb2NvYS5oIgotI2ltcG9y
dCAiQ1ZVdGlsaXRpZXMuaCIKLSNpbXBvcnQgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCi0jaW1wb3J0
ICJHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oIgotI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0
ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0Jp
dG1hcENvbnRleHQuaD4KLSNpbXBvcnQgPE1ldGFsL01ldGFsLmg+Ci0jaW1wb3J0IDxwYWwvc3Bp
L2NvY29hL01ldGFsU1BJLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL2Rhcndpbi9XZWFrTGlua2luZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbXBvcnQgIldlYkNvcmVUaHJl
YWQuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQotI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgotI2VuZGlm
Ci0KLVdURl9XRUFLX0xJTktfRk9SQ0VfSU1QT1JUKEVHTF9Jbml0aWFsaXplKTsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1ib29sIHBsYXRmb3JtSXNBTkdMRUF2YWlsYWJsZSgpCi17Ci0gICAg
Ly8gVGhlIEFOR0xFIGlzIHdlYWsgbGlua2VkIGluIGZ1bGwsIGFuZCB0aGUgRUdMX0luaXRpYWxp
emUgaXMgZXhwbGljaXRseSB3ZWFrIGxpbmtlZCBhYm92ZQotICAgIC8vIHNvIHRoYXQgd2UgY2Fu
IGRldGVjdCB0aGUgY2FzZSB3aGVyZSBBTkdMRSBpcyBub3QgcHJlc2VudC4KLSAgICByZXR1cm4g
ISFFR0xfSW5pdGlhbGl6ZTsKLX0KLQotLy8gSW4gaXNDdXJyZW50Q29udGV4dFByZWRpY3RhYmxl
KCkgPT0gdHJ1ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgaW4gc2luZ2xlLXRocmVh
ZGVkIG1hbm5lci4KLS8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpID09IGZhbHNl
IGNhc2UgdGhpcyB2YXJpYWJsZSBpcyBhY2Nlc3NlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYnV0
IGFsd2F5cyBzZXF1ZW50aWFsbHkKLS8vIGFuZCBpdCBhbHdheXMgY29udGFpbnMgbnVsbHB0ciBh
bmQgbnVsbHB0ciBpcyBhbHdheXMgd3JpdHRlbiB0byBpdC4KLXN0YXRpYyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogY3VycmVudENvbnRleHQ7Ci0KLXN0YXRpYyBib29sIGlzQ3VycmVudENvbnRl
eHRQcmVkaWN0YWJsZSgpCi17Ci0gICAgc3RhdGljIGJvb2wgdmFsdWUgPSBpc0luV2ViUHJvY2Vz
cygpIHx8IGlzSW5HUFVQcm9jZXNzKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi0jaWYgQVNT
RVJUX0VOQUJMRUQKLS8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBoYXZlIHZvbGF0aWxlIGNvbnRleHQg
ZXh0ZW5zaW9uIGZvciB0aGUgcGFydGljdWxhciBBUEkgb3IKLS8vIGlmIHRoZSBwYXJ0aWN1bGFy
IEFQSSBpcyBub3QgdXNlZC4KLXN0YXRpYyBib29sIGNoZWNrVm9sYXRpbGVDb250ZXh0U3VwcG9y
dElmRGV2aWNlRXhpc3RzKEVHTERpc3BsYXkgZGlzcGxheSwgY29uc3QgY2hhciogZGV2aWNlQ29u
dGV4dFZvbGF0aWxlRXh0ZW5zaW9uLAotICAgIGNvbnN0IGNoYXIqIGRldmljZUNvbnRleHRFeHRl
bnNpb24sIEVHTGludCBkZXZpY2VDb250ZXh0VHlwZSkKLXsKLSAgICBjb25zdCBjaGFyICpjbGll
bnRFeHRlbnNpb25zID0gRUdMX1F1ZXJ5U3RyaW5nKEVHTF9OT19ESVNQTEFZLCBFR0xfRVhURU5T
SU9OUyk7Ci0gICAgaWYgKGNsaWVudEV4dGVuc2lvbnMgJiYgc3Ryc3RyKGNsaWVudEV4dGVuc2lv
bnMsIGRldmljZUNvbnRleHRWb2xhdGlsZUV4dGVuc2lvbikpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBFR0xfTk9fREVWSUNFX0VYVDsKLSAgICBpZiAo
IUVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQoZGlzcGxheSwgRUdMX0RFVklDRV9FWFQsIHJlaW50
ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBpZiAoZGV2aWNlID09IEVHTF9OT19ERVZJQ0VfRVhUKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBjb25zdCBjaGFyKiBkZXZpY2VFeHRlbnNpb25zID0gRUdMX1F1ZXJ5RGV2aWNlU3Ry
aW5nRVhUKGRldmljZSwgRUdMX0VYVEVOU0lPTlMpOwotICAgIGlmICghZGV2aWNlRXh0ZW5zaW9u
cyB8fCAhc3Ryc3RyKGRldmljZUV4dGVuc2lvbnMsIGRldmljZUNvbnRleHRFeHRlbnNpb24pKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB2b2lkKiBkZXZpY2VDb250ZXh0ID0gbnVsbHB0cjsK
LSAgICBpZiAoIUVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIGRldmljZUNvbnRleHRU
eXBlLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZkZXZpY2VDb250ZXh0KSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhZGV2aWNlQ29udGV4dDsKLX0KLSNlbmRpZgot
Ci1zdGF0aWMgYm9vbCBwbGF0Zm9ybVN1cHBvcnRzTWV0YWwoYm9vbCBpc1dlYkdMMikKLXsKLSAg
ICBhdXRvIGRldmljZSA9IGFkb3B0TlMoTVRMQ3JlYXRlU3lzdGVtRGVmYXVsdERldmljZSgpKTsK
LQotICAgIGlmIChkZXZpY2UpIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZP
Uk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCi0gICAgICAgIC8vIEE4IGRldmljZXMgKGlQYWQgTWlu
aSA0LCBpUGFkIEFpciAyKSBjYW5ub3QgdXNlIFdlYkdMMiB2aWEgTWV0YWwuCi0gICAgICAgIC8v
IFRoaXMgY2hlY2sgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGV5IGFyZSBubyBsb25nZXIgc3VwcG9y
dGVkLgotICAgICAgICBpZiAoaXNXZWJHTDIpCi0gICAgICAgICAgICByZXR1cm4gW2RldmljZSBz
dXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNdOwotI2Vsc2UKLSAgICAgICAgVU5VU0VE
X1BBUkFNKGlzV2ViR0wyKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgRUdMRGlzcGxheSBpbml0aWFsaXpl
RUdMRGlzcGxheShjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJzKQotewot
ICAgIGlmICghcGxhdGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgV1RGTG9nQWx3
YXlzKCJGYWlsZWQgdG8gbG9hZCBBTkdMRSBzaGFyZWQgbGlicmFyeS4iKTsKLSAgICAgICAgcmV0
dXJuIEVHTF9OT19ESVNQTEFZOwotICAgIH0KLQotICAgIEVHTGludCBtYWpvclZlcnNpb24gPSAw
OwotICAgIEVHTGludCBtaW5vclZlcnNpb24gPSAwOwotICAgIEVHTERpc3BsYXkgZGlzcGxheTsK
LQotICAgIFZlY3RvcjxFR0xpbnQ+IGRpc3BsYXlBdHRyaWJ1dGVzOwotCi0gICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGNvbWUgaW4gZnJvbSB0aGUgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
LgotICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZVdpdGhWb2xhdGlsZUNvbnRleHRTdXBwb3J0ID0g
IWlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpOwotICAgIGlmIChzaG91bGRJbml0aWFsaXpl
V2l0aFZvbGF0aWxlQ29udGV4dFN1cHBvcnQpIHsKLSAgICAgICAgLy8gRm9yIFdLMSB0eXBlIEFQ
SXMgd2UgbmVlZCB0byBzZXQgInZvbGF0aWxlIHBsYXRmb3JtIGNvbnRleHQiIGZvciBzcGVjaWZp
YwotICAgICAgICAvLyBBUElzLCBzaW5jZSBjbGllbnQgY29kZSB3aWxsIGJlIGFibGUgdG8gb3Zl
cnJpZGUgdGhlIHRocmVhZC1nbG9iYWwgY29udGV4dAotICAgICAgICAvLyB0aGF0IEFOR0xFIGV4
cGVjdHMuCi0gICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5H
TEVfREVWSUNFX0NPTlRFWFRfVk9MQVRJTEVfRUFHTF9BTkdMRSk7Ci0gICAgICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7Ci0gICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFw
cGVuZChFR0xfUExBVEZPUk1fQU5HTEVfREVWSUNFX0NPTlRFWFRfVk9MQVRJTEVfQ0dMX0FOR0xF
KTsKLSAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9UUlVFKTsKLSAgICB9Ci0K
LSAgICBMT0coV2ViR0wsICJBdHRlbXB0aW5nIHRvIHVzZSBBTkdMRSdzICVzIGJhY2tlbmQuIiwg
YXR0cnMudXNlTWV0YWwgPyAiTWV0YWwiIDogIk9wZW5HTCIpOwotICAgIEVHTE5hdGl2ZURpc3Bs
YXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVmYXVsdERp
c3BsYXk7Ci0gICAgaWYgKGF0dHJzLnVzZU1ldGFsKSB7Ci0gICAgICAgIGRpc3BsYXlBdHRyaWJ1
dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9BTkdMRSk7Ci0gICAgICAgIGRpc3Bs
YXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9NRVRBTF9BTkdMRSk7
Ci0gICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgZm9yIEVHTF9BTkdMRV9w
b3dlcl9wcmVmZXJlbmNlIGFzIEVHTENvbnRleHQgYXR0cmlidXRlcywKLSAgICAgICAgLy8gYnV0
IE1ldGFsIGJhY2tlbmQgdXNlcyBFR0xEaXNwbGF5IGF0dHJpYnV0ZXMuCi0gICAgICAgIGF1dG8g
cG93ZXJQcmVmZXJlbmNlID0gYXR0cnMuZm9yY2VSZXF1ZXN0Rm9ySGlnaFBlcmZvcm1hbmNlR1BV
ID8gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJm
b3JtYW5jZSA6IGF0dHJzLnBvd2VyUHJlZmVyZW5jZTsKLSAgICAgICAgaWYgKHBvd2VyUHJlZmVy
ZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJlZmVyZW5jZTo6TG93
UG93ZXIpIHsKLSAgICAgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUE9XRVJf
UFJFRkVSRU5DRV9BTkdMRSk7Ci0gICAgICAgICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQo
RUdMX0xPV19QT1dFUl9BTkdMRSk7Ci0gICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Omxvd1Bvd2VyRGlzcGxheTsKLSAgICAgICAgfSBlbHNlIGlmIChw
b3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZl
cmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgewotICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMu
YXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xFKTsKLSAgICAgICAgICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfSElHSF9QT1dFUl9BTkdMRSk7Ci0gICAgICAgICAgICBuYXRp
dmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpZ2hQZXJmb3JtYW5jZURpc3Bs
YXk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9O
T05FKTsKLSAgICBkaXNwbGF5ID0gRUdMX0dldFBsYXRmb3JtRGlzcGxheUVYVChFR0xfUExBVEZP
Uk1fQU5HTEVfQU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5hdGl2ZURpc3BsYXkpLCBk
aXNwbGF5QXR0cmlidXRlcy5kYXRhKCkpOwotCi0gICAgaWYgKEVHTF9Jbml0aWFsaXplKGRpc3Bs
YXksICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNpb24pID09IEVHTF9GQUxTRSkgewotICAgICAg
ICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAg
ICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZOwotICAgIH0KLSAgICBMT0coV2ViR0wsICJBTkdMRSBp
bml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNp
b24pOwotICAgIGlmIChzaG91bGRJbml0aWFsaXplV2l0aFZvbGF0aWxlQ29udGV4dFN1cHBvcnQp
IHsKLSAgICAgICAgLy8gQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIEVHTF9ERUZBVUxUX0RJU1BMQVkg
d2lsbCByZXR1cm4gdGhlIHBsYXRmb3JtLWN1c3RvbWl6ZWQgZGlzcGxheS4KLSAgICAgICAgQVNT
RVJUKGRpc3BsYXkgPT0gRUdMX0dldERpc3BsYXkobmF0aXZlRGlzcGxheSkpOwotICAgICAgICBB
U1NFUlQoY2hlY2tWb2xhdGlsZUNvbnRleHRTdXBwb3J0SWZEZXZpY2VFeGlzdHMoZGlzcGxheSwg
IkVHTF9BTkdMRV9wbGF0Zm9ybV9kZXZpY2VfY29udGV4dF92b2xhdGlsZV9lYWdsIiwgIkVHTF9B
TkdMRV9kZXZpY2VfZWFnbCIsIEVHTF9FQUdMX0NPTlRFWFRfQU5HTEUpKTsKLSAgICAgICAgQVNT
RVJUKGNoZWNrVm9sYXRpbGVDb250ZXh0U3VwcG9ydElmRGV2aWNlRXhpc3RzKGRpc3BsYXksICJF
R0xfQU5HTEVfcGxhdGZvcm1fZGV2aWNlX2NvbnRleHRfdm9sYXRpbGVfY2dsIiwgIkVHTF9BTkdM
RV9kZXZpY2VfY2dsIiwgRUdMX0NHTF9DT05URVhUX0FOR0xFKSk7Ci0gICAgfQotICAgIHJldHVy
biBkaXNwbGF5OwotfQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3RhdHVzQ2hlY2tUaHJlc2hv
bGQgPSA1OwotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKLXN0
YXRpYyBib29sIG5lZWRzRUFHTE9uTWFjKCkKLXsKLSNpZiBQTEFURk9STShNQUNDQVRBTFlTVCkg
JiYgQ1BVKEFSTTY0KQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzKQotICAgIDog
R3JhcGhpY3NDb250ZXh0R0woYXR0cnMpCi17Ci0gICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJzLndl
YkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyOwotICAg
IGlmIChhdHRycy51c2VNZXRhbCAmJiAhcGxhdGZvcm1TdXBwb3J0c01ldGFsKG1faXNGb3JXZWJH
TDIpKSB7Ci0gICAgICAgIGF0dHJzLnVzZU1ldGFsID0gZmFsc2U7Ci0gICAgICAgIHNldENvbnRl
eHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoV0VCWFIpCi0gICAgaWYg
KGF0dHJzLnhyQ29tcGF0aWJsZSkgewotICAgICAgICAvLyBGSVhNRTogSXQncyBhbG1vc3QgY2Vy
dGFpbiB0aGF0IGFueSBjb25uZWN0ZWQgaGVhZHNldCB3aWxsIHJlcXVpcmUgdGhlIGhpZ2gtcG93
ZXIgR1BVLAotICAgICAgICAvLyB3aGljaCBpcyB0aGUgc2FtZSBHUFUgd2UgbmVlZCB0aGlzIGNv
bnRleHQgdG8gdXNlLiBIb3dldmVyLCB0aGlzIGlzIG5vdCBndWFyYW50ZWVkLCBhbmQKLSAgICAg
ICAgLy8gdGhlcmUgaXMgYWxzbyB0aGUgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIEdQ
VXMuIEdpdmVuIHRoYXQgeW91IGNhbiByZXF1ZXN0IHRoZQotICAgICAgICAvLyBHcmFwaGljc0Nv
bnRleHRHTCBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBXZWJYUiBzZXNzaW9uLCB3ZSdsbCBuZWVk
IHNvbWUgd2F5IHRvCi0gICAgICAgIC8vIG1pZ3JhdGUgdGhlIGNvbnRleHQgdG8gdGhlIGFwcHJv
cHJpYXRlIEdQVSB3aGVuIHRoZSBjb2RlIGhlcmUgZG9lcyBub3Qgd29yay4KLSAgICAgICAgTE9H
KFdlYkdMLCAiV2ViWFIgY29tcGF0aWJsZSBjb250ZXh0IHJlcXVlc3RlZC4gVGhpcyB3aWxsIGFs
c28gdHJpZ2dlciBhIHJlcXVlc3QgZm9yIHRoZSBoaWdoLXBvd2VyIEdQVS4iKTsKLSAgICAgICAg
YXR0cnMuZm9yY2VSZXF1ZXN0Rm9ySGlnaFBlcmZvcm1hbmNlR1BVID0gdHJ1ZTsKLSAgICAgICAg
c2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgIH0KLSNlbmRpZgotCi0gICAgbV9kaXNw
bGF5T2JqID0gaW5pdGlhbGl6ZUVHTERpc3BsYXkoYXR0cnMpOwotICAgIGlmICghbV9kaXNwbGF5
T2JqKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFhdHRy
cy51c2VNZXRhbCkgewotICAgICAgICAvLyBGb3IgT3BlbkdMLCBFR0xfQU5HTEVfcG93ZXJfcHJl
ZmVyZW5jZSBpcyB1c2VkLiBUaGUgY29udGV4dCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZQotICAg
ICAgICAvLyBkZWZhdWx0LCBsb3ctcG93ZXIgZGV2aWNlLiBGb3IgaGlnaC1wZXJmb3JtYW5jZSBj
b250ZXh0cywgd2UgcmVxdWVzdCB0aGUgaGlnaC1wZXJmb3JtYW5jZQotICAgICAgICAvLyBHUFUg
aW4gc2V0Q29udGV4dFZpc2liaWxpdHkuIFdoZW4gdGhlIHJlcXVlc3QgaXMgZnVsbGZpbGxlZCBi
eSB0aGUgc3lzdGVtLCB3ZSBnZXQgdGhlCi0gICAgICAgIC8vIGRpc3BsYXkgcmVjb25maWd1cmF0
aW9uIGNhbGxiYWNrLiBVcG9uIHRoaXMsIHdlIHVwZGF0ZSB0aGUgQ0dMIGNvbnRleHRzIGluc2lk
ZSBBTkdMRS4KLSAgICAgICAgY29uc3QgY2hhciAqZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVl
cnlTdHJpbmcobV9kaXNwbGF5T2JqLCBFR0xfRVhURU5TSU9OUyk7Ci0gICAgICAgIGJvb2wgc3Vw
cG9ydHNQb3dlclByZWZlcmVuY2UgPSBzdHJzdHIoZGlzcGxheUV4dGVuc2lvbnMsICJFR0xfQU5H
TEVfcG93ZXJfcHJlZmVyZW5jZSIpOwotICAgICAgICBpZiAoc3VwcG9ydHNQb3dlclByZWZlcmVu
Y2UpIHsKLSAgICAgICAgICAgIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24g
PSBhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVu
Y2U6OkhpZ2hQZXJmb3JtYW5jZQotICAgICAgICAgICAgICAgIHx8IGF0dHJzLmZvcmNlUmVxdWVz
dEZvckhpZ2hQZXJmb3JtYW5jZUdQVTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVu
Y2U6OkhpZ2hQZXJmb3JtYW5jZSkgewotICAgICAgICAgICAgICAgIGF0dHJzLnBvd2VyUHJlZmVy
ZW5jZSA9IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpEZWZhdWx0OwotICAgICAg
ICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZXNbXSA9
IHsKLSAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAotICAg
ICAgICBFR0xfUkVEX1NJWkUsIDgsCi0gICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAotICAgICAg
ICBFR0xfQkxVRV9TSVpFLCA4LAotICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKLSAgICAgICAg
RUdMX0RFUFRIX1NJWkUsIDAsCi0gICAgICAgIEVHTF9TVEVOQ0lMX1NJWkUsIDAsCi0gICAgICAg
IEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xpbnQgbnVtYmVyQ29uZmlnc1JldHVybmVkID0gMDsK
LSAgICBFR0xfQ2hvb3NlQ29uZmlnKG1fZGlzcGxheU9iaiwgY29uZmlnQXR0cmlidXRlcywgJm1f
Y29uZmlnT2JqLCAxLCAmbnVtYmVyQ29uZmlnc1JldHVybmVkKTsKLSAgICBpZiAobnVtYmVyQ29u
Zmlnc1JldHVybmVkICE9IDEpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29uZmlnIEluaXRp
YWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBMT0coV2Vi
R0wsICJHb3QgRUdMQ29uZmlnIik7Ci0KLSAgICBFR0xfQmluZEFQSShFR0xfT1BFTkdMX0VTX0FQ
SSk7Ci0gICAgaWYgKEVHTF9HZXRFcnJvcigpICE9IEVHTF9TVUNDRVNTKSB7Ci0gICAgICAgIExP
RyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRvIE9QRU5HTF9FU19BUEkiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxFR0xpbnQ+IGVnbENvbnRleHRBdHRyaWJ1dGVzOwot
ICAgIGlmIChtX2lzRm9yV2ViR0wyKSB7Ci0gICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFw
cGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7Ci0gICAgICAgIGVnbENvbnRleHRBdHRy
aWJ1dGVzLmFwcGVuZCgzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlZ2xDb250ZXh0QXR0cmli
dXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOwotICAgICAgICBlZ2xDb250
ZXh0QXR0cmlidXRlcy5hcHBlbmQoMik7Ci0gICAgICAgIC8vIEFOR0xFIHdpbGwgdXBncmFkZSB0
aGUgY29udGV4dCB0byBFUzMgYXV0b21hdGljYWxseSB1bmxlc3MgdGhpcyBpcyBzcGVjaWZpZWQu
Ci0gICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9PUEVOR0xf
QkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUpOwotICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRl
cy5hcHBlbmQoRUdMX0ZBTFNFKTsKLSAgICB9Ci0gICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBw
ZW5kKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOwotICAgIGVnbENvbnRl
eHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7Ci0KLSAgICAvLyBXZWJHTCByZXF1aXJlcyB0
aGF0IGFsbCByZXNvdXJjZXMgYXJlIGNsZWFyZWQgYXQgY3JlYXRpb24uCi0gICAgZWdsQ29udGV4
dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ST0JVU1RfUkVTT1VSQ0VfSU5JVElBTElaQVRJT05fQU5H
TEUpOwotICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7Ci0KLSAgICAv
LyBXZWJHTCBkb2Vzbid0IGFsbG93IGNsaWVudCBhcnJheXMuCi0gICAgZWdsQ29udGV4dEF0dHJp
YnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSk7Ci0g
ICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7Ci0gICAgLy8gV2ViR0wg
ZG9lc24ndCBhbGxvdyBpbXBsaWNpdCBjcmVhdGlvbiBvZiBvYmplY3RzIG9uIGJpbmQuCi0gICAg
ZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0JJTkRfR0VORVJBVEVTX1JF
U09VUkNFX0NIUk9NSVVNKTsKLSAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZB
TFNFKTsKLQotICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7Ci0KLSAg
ICBtX2NvbnRleHRPYmogPSBFR0xfQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29uZmln
T2JqLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJpYnV0ZXMuZGF0YSgpKTsKLSAgICBp
ZiAobV9jb250ZXh0T2JqID09IEVHTF9OT19DT05URVhUIHx8ICFtYWtlQ3VycmVudChtX2Rpc3Bs
YXlPYmosIG1fY29udGV4dE9iaikpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4dCBJ
bml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTE9H
KFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKLQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAg
ICAgICBnbDo6RW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpQUklNSVRJVkVfUkVTVEFSVF9GSVhF
RF9JTkRFWCk7Ci0KLSAgICBWZWN0b3I8QVNDSUlMaXRlcmFsLCA0PiByZXF1aXJlZEV4dGVuc2lv
bnM7Ci0gICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKLSAgICAgICAgLy8gRm9yIFdlYkdMIDIuMCBv
Y2NsdXNpb24gcXVlcmllcyB0byB3b3JrLgotICAgICAgICByZXF1aXJlZEV4dGVuc2lvbnMuYXBw
ZW5kKCJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4iX3MpOwotICAgIH0KLSNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlmICghbmVlZHNFQUdMT25N
YWMoKSkgewotICAgICAgICAvLyBGb3IgSU9TdXJmYWNlLWJhY2tlZCB0ZXh0dXJlcy4KLSAgICAg
ICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUi
X3MpOwotICAgICAgICAvLyBGb3IgY3JlYXRpbmcgdGhlIEVHTCBzdXJmYWNlIGZyb20gYW4gSU9T
dXJmYWNlLgotICAgICAgICByZXF1aXJlZEV4dGVuc2lvbnMuYXBwZW5kKCJHTF9FWFRfdGV4dHVy
ZV9mb3JtYXRfQkdSQTg4ODgiX3MpOwotICAgIH0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotI2lmIEVOQUJMRShXRUJYUikgJiYgIVBMQVRGT1JNKElP
U19GQU1JTFlfU0lNVUxBVE9SKQotICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnhyQ29tcGF0
aWJsZSkKLSAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfT0VTX0VHTF9pbWFn
ZSJfcyk7Ci0jZW5kaWYKLSAgICBpZiAobV9pc0ZvcldlYkdMMikKLSAgICAgICAgcmVxdWlyZWRF
eHRlbnNpb25zLmFwcGVuZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiX3MpOwot
ICAgIEV4dGVuc2lvbnNHTCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICBmb3Ig
KGF1dG8mIGV4dGVuc2lvbiA6IHJlcXVpcmVkRXh0ZW5zaW9ucykgewotICAgICAgICBpZiAoIWV4
dGVuc2lvbnMuc3VwcG9ydHMoZXh0ZW5zaW9uKSkgewotICAgICAgICAgICAgTE9HKFdlYkdMLCAi
TWlzc2luZyByZXF1aXJlZCBleHRlbnNpb24uICVzIiwgZXh0ZW5zaW9uLmNoYXJhY3RlcnMoKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZXh0ZW5zaW9ucy5lbnN1
cmVFbmFibGVkKGV4dGVuc2lvbik7Ci0gICAgfQotICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygp
LnVzZU1ldGFsKSB7Ci0gICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHVzZXMgc3lu
YyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVtZW50YXRpb25zLgot
ICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3RzIGFyZSBub3Qgc2lnbmFsaW5nIHVwb24gY29t
cGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVycywgc28KLSAgICAgICAgLy8gT3BlbkdMIGNh
bm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0bGluZy4gT3BlbkdMIGRyaXZlcnMgdHlwaWNh
bGx5IGltcGxlbWVudAotICAgICAgICAvLyBzb21lIHNvcnQgb2YgaW50ZXJuYWwgdGhyb3R0bGlu
Zy4KLSAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FSQl9zeW5jIl9zKSkgewot
ICAgICAgICAgICAgbV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0ID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQVJCX3N5bmMiX3MpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotICAgIGF0dHJzID0gY29u
dGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0
aW9uLgotCi0gICAgLy8gQ3JlYXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0
aGUgZnJhbWVidWZmZXIuCi0gICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVy
VGV4dHVyZVRhcmdldCgpOwotCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwot
ICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOwotICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01J
Tl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdl
dCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7Ci0KLSAgICBnbDo6R2Vu
RnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgbV9mYm8pOwotICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3Vu
ZFJlYWRGQk8gPSBtX2ZibzsKLQotICAgIGlmICghYXR0cnMuYW50aWFsaWFzICYmIChhdHRycy5z
dGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkKLSAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLQotICAgIC8vIElmIG5lY2Vzc2FyeSwgY3JlYXRlIGFu
b3RoZXIgZnJhbWVidWZmZXIgZm9yIHRoZSBtdWx0aXNhbXBsZSByZXN1bHRzLgotICAgIGlmIChh
dHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUZCTyk7Ci0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3Rh
dGUuYm91bmRSZWFkRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAgICAgICAgZ2w6OkdlblJlbmRl
cmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRy
cy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0gZWxzZSBpZiAo
YXR0cnMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIElmIG5lY2Vzc2FyeSwg
Y3JlYXRlIGFub3RoZXIgdGV4dHVyZSB0byBoYW5kbGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyOnRy
dWUgd2l0aG91dAotICAgICAgICAvLyBhbnRpYWxpYXNpbmcuCi0gICAgICAgIGdsOjpHZW5UZXh0
dXJlcygxLCAmbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlKTsKLSAgICAgICAgZ2w6OkJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7
Ci0gICAgICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9f
RURHRSk7Ci0gICAgICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIDApOwotICAgICAgICAvLyBDcmVhdGUgYW4gRkJPIHdpdGggd2hpY2ggdG8g
cGVyZm9ybSBCbGl0RnJhbWVidWZmZXIgZnJvbSBvbmUgdGV4dHVyZSB0byB0aGUgb3RoZXIuCi0g
ICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJP
KTsKLSAgICB9Ci0KLSAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLQotICAgIExPRyhX
ZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMpOwot
fQotCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkK
LXsKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5y
ZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIGlmIChtYWtlQ29udGV4dEN1cnJlbnQoKSkgewotICAg
ICAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOwotICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKQotICAgICAg
ICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7Ci0gICAgICAgIGlmIChtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKQotICAgICAg
ICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgICAgIGds
OjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBpZiAo
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBpZiAobV9mYm8pCi0gICAgICAg
ICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgICAgIGlmIChtX3By
ZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUpCi0gICAgICAgICAgICBnbDo6RGVsZXRlVGV4dHVy
ZXMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7Ci0gICAgICAgIGlmIChtX3By
ZXNlcnZlRHJhd2luZ0J1ZmZlckZCTykKLSAgICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZl
cnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKLSAgICAgICAgLy8gSWYgZmVuY2Vz
IGFyZSBub3QgZW5hYmxlZCwgdGhpcyBsb29wIHdpbGwgbm90IGV4ZWN1dGUuCi0gICAgICAgIGZv
ciAoYXV0byYgZmVuY2UgOiBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlcykKLSAgICAgICAgICAgIGZl
bmNlLnJlc2V0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChhdXRvJiBmZW5jZSA6IG1f
ZnJhbWVDb21wbGV0aW9uRmVuY2VzKQotICAgICAgICAgICAgZmVuY2UuYWJhbmRvbigpOwotICAg
IH0KLSAgICBpZiAobV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikKLSAgICAgICAgRUdMX0Rlc3Ryb3lT
dXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcik7Ci0gICAgYXV0byBy
ZWN5Y2xlZEJ1ZmZlciA9IG1fc3dhcENoYWluLnJlY3ljbGVCdWZmZXIoKTsKLSAgICBpZiAocmVj
eWNsZWRCdWZmZXIuaGFuZGxlKQotICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5
T2JqLCByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpOwotICAgIGF1dG8gY29udGVudHNIYW5kbGUgPSBt
X3N3YXBDaGFpbi5kZXRhY2hDbGllbnQoKTsKLSAgICBpZiAoY29udGVudHNIYW5kbGUpCi0gICAg
ICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIGNvbnRlbnRzSGFuZGxlKTsKLSAg
ICBpZiAobV9jb250ZXh0T2JqKSB7Ci0gICAgICAgIG1ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwg
RUdMX05PX0NPTlRFWFQpOwotICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5T2Jq
LCBtX2NvbnRleHRPYmopOwotICAgIH0KLSAgICBBU1NFUlQoY3VycmVudENvbnRleHQgIT0gdGhp
cyk7Ci0gICAgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCA9IC0xOwotICAgIExPRyhXZWJH
TCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMICglcCkuIiwgdGhpcyk7Ci19
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmFsaWQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3RleHR1cmU7Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJl
VGFyZ2V0KCkKLXsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCA9PSAtMSkK
LSAgICAgICAgRUdMX0dldENvbmZpZ0F0dHJpYihtX2Rpc3BsYXlPYmosIG1fY29uZmlnT2JqLCBF
R0xfQklORF9UT19URVhUVVJFX1RBUkdFVF9BTkdMRSwgJm1fZHJhd2luZ0J1ZmZlclRleHR1cmVU
YXJnZXQpOwotCi0gICAgc3dpdGNoIChtX2RyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KSB7Ci0g
ICAgY2FzZSBFR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkQ7Ci0gICAg
Y2FzZSBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEU6Ci0gICAgICAgIHJldHVybiBURVhUVVJF
X1JFQ1RBTkdMRV9BUkI7Ci0KLSAgICB9Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwg
IkludmFsaWQgZW51bSByZXR1cm5lZCBmcm9tIEVHTF9HZXRDb25maWdBdHRyaWIiKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xlbnVtIGRyYXdpbmdU
YXJnZXQpCi17Ci0gICAgc3dpdGNoIChkcmF3aW5nVGFyZ2V0KSB7Ci0gICAgY2FzZSBURVhUVVJF
XzJEOgotICAgICAgICByZXR1cm4gVEVYVFVSRV9CSU5ESU5HXzJEOwotICAgIGNhc2UgVEVYVFVS
RV9SRUNUQU5HTEVfQVJCOgotICAgICAgICByZXR1cm4gVEVYVFVSRV9CSU5ESU5HX1JFQ1RBTkdM
RV9BUkI7Ci0gICAgfQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICJJbnZhbGlkIGRy
YXdpbmcgdGFyZ2V0Iik7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1HQ0dMaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdUYXJn
ZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKLXsKLSAgICBzd2l0Y2ggKGRyYXdpbmdUYXJnZXQp
IHsKLSAgICBjYXNlIFRFWFRVUkVfMkQ6Ci0gICAgICAgIHJldHVybiBFR0xfVEVYVFVSRV8yRDsK
LSAgICBjYXNlIFRFWFRVUkVfUkVDVEFOR0xFX0FSQjoKLSAgICAgICAgcmV0dXJuIEVHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BTkdMRTsKLSAgICB9Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxz
ZSwgIkludmFsaWQgZHJhd2luZyB0YXJnZXQiKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBpZiAo
IW1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIElmIHRoZXJlIGlz
IG5vIGRyYXdpbmcgYnVmZmVyLCB3ZSBmYWlsZWQgdG8gYWxsb2NhdGUgb25lIGR1cmluZyBwcmVw
YXJpbmcgZm9yIGRpc3BsYXkuCi0gICAgLy8gVGhlIGV4Y2VwdGlvbiBpcyB0aGUgY2FzZSB3aGVu
IHRoZSBjb250ZXh0IGlzIHVzZWQgYmVmb3JlIHJlc2hhcGluZy4KLSAgICBpZiAoIW1fZGlzcGxh
eUJ1ZmZlckJhY2tpbmcgJiYgIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGN1cnJlbnRDb250ZXh0ID09IHRoaXMp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIENhbGxpbmcgTWFrZUN1cnJlbnQgaXMgaW1w
b3J0YW50IHRvIHNldCB2b2xhdGlsZSBwbGF0Zm9ybSBjb250ZXh0LiBTZWUgaW5pdGlhbGl6ZUVH
TERpc3BsYXkoKS4KLSAgICBpZiAoIUVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9O
T19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUoKSkKLSAgICAgICAg
Y3VycmVudENvbnRleHQgPSB0aGlzOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCi17Ci0gICAgaWYgKG1fZmFpbE5l
eHRTdGF0dXNDaGVjaykgewotICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUg
aGFzIHJlc2V0ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7Ci0gICAgICAgIG1fZmFp
bE5leHRTdGF0dXNDaGVjayA9IGZhbHNlOwotICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7Ci0g
ICAgICAgIG1ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX0NPTlRFWFQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gT25seSBkbyB0aGUgY2hlY2sgZXZlcnkgc3RhdHVz
Q2hlY2tUaHJlc2hvbGQgY2FsbHMuCi0gICAgaWYgKG1fc3RhdHVzQ2hlY2tDb3VudCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zdGF0dXNDaGVja0NvdW50ID0gKG1fc3RhdHVzQ2hlY2tDb3Vu
dCArIDEpICUgc3RhdHVzQ2hlY2tUaHJlc2hvbGQ7Ci0KLSAgICBHTGludCByZXN0YXJ0U3RhdHVz
ID0gMDsKLSAgICAvLyBGSVhNRTogY2hlY2sgdmlhIEtIUl9yb2J1c3RuZXNzLgotICAgIHJlc3Rh
cnRTdGF0dXMgPSAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250
ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAg
aWYgKCFtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGlzVmlzaWJsZSkKLSAgICAgICAgbV9oaWdoUGVyZm9ybWFuY2VHUFVSZXF1
ZXN0ID0gU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdDo6YWNxdWlyZSgpOwotICAgIGVs
c2UKLSAgICAgICAgbV9oaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0ID0geyB9OwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oaXNWaXNpYmxlKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKLXsKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgaWYgKG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24pCi0gICAg
ICAgIEVHTF9IYW5kbGVHUFVTd2l0Y2hBTkdMRShtX2Rpc3BsYXlPYmopOwotI2VuZGlmCi0gICAg
ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOwotfQotCi1ib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKQotewotICAgIEFT
U0VSVCghZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpOwotICAgIC8vIFJl
c2V0IHRoZSBjdXJyZW50IGJhY2tidWZmZXIgbm93IGJlZm9yZSBhbGxvY2F0aW5nIGEgbmV3IG9u
ZSBpbiBvcmRlciB0byBzbGlnaHRseSByZWR1Y2UgbWVtb3J5IHByZXNzdXJlLgotICAgIGlmICht
X2Rpc3BsYXlCdWZmZXJCYWNraW5nKSB7Ci0gICAgICAgIG1fZGlzcGxheUJ1ZmZlckJhY2tpbmcu
cmVzZXQoKTsKLSAgICAgICAgRUdMX1JlbGVhc2VUZXhJbWFnZShtX2Rpc3BsYXlPYmosIG1fZGlz
cGxheUJ1ZmZlclBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUik7Ci0gICAgICAgIEVHTF9EZXN0cm95
U3VyZmFjZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpOwotICAgICAgICBt
X2Rpc3BsYXlCdWZmZXJQYnVmZmVyID0gRUdMX05PX1NVUkZBQ0U7Ci0gICAgfQotICAgIC8vIFJl
c2V0IHRoZSBmdXR1cmUgcmVjeWNsZWQgYnVmZmVyIG5vdywgYmVjYXVzZSBpdCBtb3N0IGxpa2Vs
eSB3aWxsIG5vdCBiZSByZXVzYWJsZSBhdCB0aGUgdGltZSBpdCB3aWxsIGJlIHJldXNlZC4KLSAg
ICBhdXRvIHJlY3ljbGVkQnVmZmVyID0gbV9zd2FwQ2hhaW4ucmVjeWNsZUJ1ZmZlcigpOwotICAg
IGlmIChyZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpCi0gICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZSht
X2Rpc3BsYXlPYmosIHJlY3ljbGVkQnVmZmVyLmhhbmRsZSk7Ci0gICAgcmVjeWNsZWRCdWZmZXIu
c3VyZmFjZS5yZXNldCgpOwotICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVy
QmFja2luZygpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUFu
ZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCi17Ci0gICAgQVNTRVJUKCFnZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSk7Ci0gICAgYXV0byBiYWNraW5nID0gSU9TdXJmYWNl
OjpjcmVhdGUoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSwgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOwotICAgIGlmICghYmFja2luZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYmFja2luZy0+bWlncmF0ZUNvbG9yU3BhY2VUb1Byb3BlcnRpZXMoKTsKLQotICAgIGNv
bnN0IGJvb2wgdXNpbmdBbHBoYSA9IGNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGE7Ci0gICAgY29u
c3QgYXV0byBzaXplID0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKLSAgICBjb25zdCBF
R0xpbnQgc3VyZmFjZUF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgRUdMX1dJRFRILCBzaXplLndp
ZHRoKCksCi0gICAgICAgIEVHTF9IRUlHSFQsIHNpemUuaGVpZ2h0KCksCi0gICAgICAgIEVHTF9J
T1NVUkZBQ0VfUExBTkVfQU5HTEUsIDAsCi0gICAgICAgIEVHTF9URVhUVVJFX1RBUkdFVCwgRUdM
RHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KGRyYXdpbmdCdWZmZXJU
ZXh0dXJlVGFyZ2V0KCkpLAotICAgICAgICBFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5H
TEUsIHVzaW5nQWxwaGEgPyBHTF9CR1JBX0VYVCA6IEdMX1JHQiwKLSAgICAgICAgRUdMX1RFWFRV
UkVfRk9STUFULCBFR0xfVEVYVFVSRV9SR0JBLAotICAgICAgICBFR0xfVEVYVFVSRV9UWVBFX0FO
R0xFLCBHTF9VTlNJR05FRF9CWVRFLAotICAgICAgICAvLyBPbmx5IGhhcyBhbiBlZmZlY3Qgb24g
dGhlIGlPUyBTaW11bGF0b3IuCi0gICAgICAgIEVHTF9JT1NVUkZBQ0VfVVNBR0VfSElOVF9BTkdM
RSwgRUdMX0lPU1VSRkFDRV9XUklURV9ISU5UX0FOR0xFLAotICAgICAgICBFR0xfTk9ORSwgRUdM
X05PTkUKLSAgICB9OwotICAgIEVHTFN1cmZhY2UgcGJ1ZmZlciA9IEVHTF9DcmVhdGVQYnVmZmVy
RnJvbUNsaWVudEJ1ZmZlcihtX2Rpc3BsYXlPYmosIEVHTF9JT1NVUkZBQ0VfQU5HTEUsIGJhY2tp
bmctPnN1cmZhY2UoKSwgbV9jb25maWdPYmosIHN1cmZhY2VBdHRyaWJ1dGVzKTsKLSAgICBpZiAo
IXBidWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYmluZERpc3BsYXlC
dWZmZXJCYWNraW5nKFdURk1vdmUoYmFja2luZyksIHBidWZmZXIpOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcikKLXsKLSAgICBHQ0dMZW51bSB0
ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICBTY29wZWRS
ZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVU
YXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSks
IHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsK
LSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBpZiAo
IUVHTF9CaW5kVGV4SW1hZ2UobV9kaXNwbGF5T2JqLCBwYnVmZmVyLCBFR0xfQkFDS19CVUZGRVIp
KSB7Ci0gICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIHBidWZmZXIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIg
PSBwYnVmZmVyOwotICAgIG1fZGlzcGxheUJ1ZmZlckJhY2tpbmcgPSBXVEZNb3ZlKGJhY2tpbmcp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCi17Ci0gICAgY3VycmVudENvbnRleHQgPSBu
dWxscHRyOwotICAgIHJldHVybiBFR0xfTWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19TVVJGQUNFLCBjb250ZXh0KTsKLX0KLQotdm9pZCogR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0
LCBQYnVmZmVyQXR0YWNobWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZh
Y2VSZWYgc3VyZmFjZSwgR0NHTHVpbnQgcGxhbmUpCi17Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewotICAg
ICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19jYXN0
PGludD4odGFyZ2V0KSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGF1
dG8gdXNhZ2VIaW50ID0gWyZdICgpIC0+IEVHTGludCB7Ci0gICAgICAgIGlmICh1c2FnZSA9PSBQ
YnVmZmVyQXR0YWNobWVudFVzYWdlOjpSZWFkKQotICAgICAgICAgICAgcmV0dXJuIEVHTF9JT1NV
UkZBQ0VfUkVBRF9ISU5UX0FOR0xFOwotICAgICAgICBpZiAodXNhZ2UgPT0gUGJ1ZmZlckF0dGFj
aG1lbnRVc2FnZTo6V3JpdGUpCi0gICAgICAgICAgICByZXR1cm4gRUdMX0lPU1VSRkFDRV9XUklU
RV9ISU5UX0FOR0xFOwotICAgICAgICByZXR1cm4gRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5H
TEUgfCBFR0xfSU9TVVJGQUNFX1dSSVRFX0hJTlRfQU5HTEU7Ci0gICAgfSgpOwotCi0gICAgcmV0
dXJuIFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5T2Jq
LCBtX2NvbmZpZ09iaiwgdGFyZ2V0LCB1c2FnZUhpbnQsIGludGVybmFsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCB0eXBlLCBzdXJmYWNlLCBwbGFuZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKHZvaWQqIGhhbmRsZSkK
LXsKLSAgICBXZWJDb3JlOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShtX2Rpc3Bs
YXlPYmosIGhhbmRsZSk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1Ip
Ci12b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoSU9TdXJmYWNlVG9TaGFyZWRU
ZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgSU9TdXJmYWNlKiBzdXJmYWNlKQotewotICAgIGNvbnN0
ZXhwciBFR0xpbnQgZW1wdHlBdHRyaWJ1dGVzW10gPSB7IEVHTF9OT05FIH07Ci0KLSAgICAvLyBD
cmVhdGUgYSBNVExUZXh0dXJlIG91dCBvZiB0aGUgSU9TdXJmYWNlLgotICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIHVzZSB0aGUgc2FtZSBkZXZpY2UgdGhhdCBBTkdMRSBpcyB1c2luZywgd2hpY2gg
bWlnaHQgbm90IGJlIHRoZSBkZWZhdWx0LgotCi0gICAgUmV0YWluUHRyPE1UTFNoYXJlZFRleHR1
cmVIYW5kbGU+IGhhbmRsZSA9IGFkb3B0TlMoW1tNVExTaGFyZWRUZXh0dXJlSGFuZGxlIGFsbG9j
XSBpbml0V2l0aElPU3VyZmFjZTpzdXJmYWNlLT5zdXJmYWNlKCkgbGFiZWw6QCJXZWJYUiJdKTsK
LSAgICBpZiAoIWhhbmRsZSkgewotICAgICAgICBMT0coV2ViR0wsICJVbmFibGUgdG8gY3JlYXRl
IGEgTVRMU2hhcmVkVGV4dHVyZUhhbmRsZSBmcm9tIHRoZSBJT1N1cmZhY2UgaW4gYXR0YWNoSU9T
dXJmYWNlVG9UZXh0dXJlLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBpZiAoIWhhbmRsZS5nZXQoKS5kZXZpY2UpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiTVRMU2hh
cmVkVGV4dHVyZUhhbmRsZSBkb2VzIG5vdCBoYXZlIGEgTWV0YWwgZGV2aWNlIGluIGF0dGFjaElP
U3VyZmFjZVRvVGV4dHVyZS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgYXV0byB0ZXh0dXJlID0gYWRvcHROUyhbaGFuZGxlLmdldCgpLmRldmljZSBuZXdTaGFyZWRU
ZXh0dXJlV2l0aEhhbmRsZTpoYW5kbGUuZ2V0KCldKTsKLSAgICBpZiAoIXRleHR1cmUpIHsKLSAg
ICAgICAgTE9HKFdlYkdMLCAiVW5hYmxlIHRvIGNyZWF0ZSBhIE1UTFNoYXJlZFRleHR1cmUgZnJv
bSB0aGUgdGV4dHVyZSBoYW5kbGUgaW4gYXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlLiIpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRG9lcyB0aGUgdGV4
dHVyZSBoYXZlIHRoZSBjb3JyZWN0IHVzYWdlIG1vZGU/Ci0KLSAgICAvLyBDcmVhdGUgYW4gRUdM
SW1hZ2Ugb3V0IG9mIHRoZSBNVExUZXh0dXJlCi0gICAgYXV0byBkaXNwbGF5ID0gcGxhdGZvcm1E
aXNwbGF5KCk7Ci0gICAgYXV0byBlZ2xJbWFnZSA9IEVHTF9DcmVhdGVJbWFnZUtIUihkaXNwbGF5
LCBFR0xfTk9fQ09OVEVYVCwgRUdMX01FVEFMX1RFWFRVUkVfQU5HTEUsIHJlaW50ZXJwcmV0X2Nh
c3Q8RUdMQ2xpZW50QnVmZmVyPih0ZXh0dXJlLmdldCgpKSwgZW1wdHlBdHRyaWJ1dGVzKTsKLSAg
ICBpZiAoIWVnbEltYWdlKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBjcmVhdGUg
YW4gRUdMSW1hZ2UgZnJvbSB0aGUgTWV0YWwgaGFuZGxlIGluIGF0dGFjaElPU3VyZmFjZVRvVGV4
dHVyZS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gVGVsbCB0
aGUgY3VycmVudGx5IGJvdW5kIHRleHR1cmUgdG8gdXNlIHRoZSBFR0xJbWFnZS4KLSAgICBnbDo6
RUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVModGFyZ2V0LCBlZ2xJbWFnZSk7Ci0KLSAgICByZXR1
cm4gZWdsSW1hZ2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaElP
U3VyZmFjZUZyb21TaGFyZWRUZXh0dXJlKHZvaWQqIGhhbmRsZSkKLXsKLSAgICBhdXRvIGRpc3Bs
YXkgPSBwbGF0Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xfRGVzdHJveUltYWdlS0hSKGRpc3BsYXks
IGhhbmRsZSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFNp
bXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQgPT0gU2ltdWxh
dGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3BsYXlXYXNSZWNvbmZpZ3Vy
ZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZXZlbnQgPT0gU2ltdWxhdGVk
RXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKSB7Ci0gICAgICAgIG1fZmFpbE5leHRT
dGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKLXsKLSAgICBpZiAobV9s
YXllckNvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgcHJlcGFyZVRleHR1cmVJbXBsKCk7Ci0KLSAg
ICAvLyBUaGUgSU9TdXJmYWNlIHdpbGwgYmUgdXNlZCBmcm9tIG90aGVyIGdyYXBoaWNzIHN1YnN5
c3RlbSwgc28gZmx1c2ggR0wgY29tbWFuZHMuCi0gICAgZ2w6OkZsdXNoKCk7Ci0KLSAgICBhdXRv
IHJlY3ljbGVkQnVmZmVyID0gbV9zd2FwQ2hhaW4ucmVjeWNsZUJ1ZmZlcigpOwotCi0gICAgRUdM
X1JlbGVhc2VUZXhJbWFnZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIsIEVH
TF9CQUNLX0JVRkZFUik7Ci0gICAgbV9zd2FwQ2hhaW4ucHJlc2VudCh7IFdURk1vdmUobV9kaXNw
bGF5QnVmZmVyQmFja2luZyksIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIgfSk7Ci0gICAgbV9kaXNw
bGF5QnVmZmVyUGJ1ZmZlciA9IEVHTF9OT19TVVJGQUNFOwotCi0gICAgYm9vbCBoYXNOZXdCYWNr
aW5nID0gZmFsc2U7Ci0gICAgaWYgKHJlY3ljbGVkQnVmZmVyLnN1cmZhY2UgJiYgcmVjeWNsZWRC
dWZmZXIuc3VyZmFjZS0+c2l6ZSgpID09IGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpIHsK
LSAgICAgICAgaGFzTmV3QmFja2luZyA9IGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhXVEZNb3Zl
KHJlY3ljbGVkQnVmZmVyLnN1cmZhY2UpLCByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpOwotICAgICAg
ICByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUgPSBudWxscHRyOwotICAgIH0KLSAgICByZWN5Y2xlZEJ1
ZmZlci5zdXJmYWNlLnJlc2V0KCk7Ci0gICAgaWYgKHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkKLSAg
ICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgcmVjeWNsZWRCdWZmZXIuaGFu
ZGxlKTsKLQotICAgIC8vIEVycm9yIHdpbGwgYmUgaGFuZGxlZCBieSBuZXh0IGNhbGwgdG8gbWFr
ZUNvbnRleHRDdXJyZW50KCkgd2hpY2ggd2lsbCBub3RpY2UgbGFjayBvZiBkaXNwbGF5IGJ1ZmZl
ci4KLSAgICBpZiAoIWhhc05ld0JhY2tpbmcpCi0gICAgICAgIGFsbG9jYXRlQW5kQmluZERpc3Bs
YXlCdWZmZXJCYWNraW5nKCk7Ci0KLSAgICBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0KLSAgICBp
ZiAobV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0KSB7Ci0gICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IHdhaXRBbmRVcGRhdGVPbGRlc3RGcmFtZSgpOwotICAgICAgICBVTlVTRURfVkFSSUFC
TEUoc3VjY2Vzcyk7IC8vIEZJWE1FOiBpbXBsZW1lbnQgY29udGV4dCBsb3N0LgotICAgIH0KLX0K
LQotCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQotR3JhcGhpY3NDb250
ZXh0R0xDViogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFzQ1YoKQotewotICAgIGlmICghbV9j
dikKLSAgICAgICAgbV9jdiA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y3JlYXRlKCp0aGlz
KTsKLSAgICByZXR1cm4gbV9jdi5nZXQoKTsKLX0KLSNlbmRpZgotCi1zdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRz
KCkKLXsKLSAgICBhdXRvJiBkaXNwbGF5QnVmZmVyID0gbV9zd2FwQ2hhaW4uZGlzcGxheUJ1ZmZl
cigpOwotICAgIGlmICghZGlzcGxheUJ1ZmZlci5zdXJmYWNlIHx8ICFkaXNwbGF5QnVmZmVyLmhh
bmRsZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBpZiAoZGlzcGxheUJ1ZmZl
ci5zdXJmYWNlLT5zaXplKCkgIT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAvLyBOb3RlOiBXZSBhcmUgdXNpbmcgR0wgdG8g
cmVhZCB0aGUgSU9TdXJmYWNlLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGVyZSBhcmUgbm8g
Y29udmluaWVudAotICAgIC8vIGZ1bmN0aW9ucyB0byBjb252ZXJ0IHRoZSBJT1N1cmZhY2UgcGl4
ZWwgZGF0YSB0byBJbWFnZURhdGEuIFRoZSBpbWFnZSBkYXRhIGVuZHMgdXAgYmVpbmcKLSAgICAv
LyBkcmF3biB0byBhIEltYWdlQnVmZmVyLCBidXQgYXQgdGhlIHRpbWUgdGhlcmUncyBubyBmdW5j
dGlvbnMgdG8gY29uc3RydWN0IGEgTmF0aXZlSW1hZ2UKLSAgICAvLyBvdXQgb2YgYW4gSU9TdXJm
YWNlIGluIHN1Y2ggYSB3YXkgdGhhdCBkcmF3aW5nIHRoZSBOYXRpdmVJbWFnZSB3b3VsZCBiZSBn
dWFyYW50ZWVkIGxlYXZlCi0gICAgLy8gdGhlIElPU3VyZmFjZSBiZSB1bnJlZmVuY2VkIGFmdGVy
IHRoZSBkcmF3IGNhbGwgZmluaXNoZXMuCi0gICAgU2NvcGVkVGV4dHVyZSB0ZXh0dXJlOwotICAg
IEdDR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOwot
ICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpKSwgdGV4dHVyZVRhcmdldCwgdGV4dHVyZVRhcmdldCAhPSBURVhUVVJFX1JFQ1RB
TkdMRV9BUkIpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlKTsK
LSAgICBpZiAoIUVHTF9CaW5kVGV4SW1hZ2UobV9kaXNwbGF5T2JqLCBkaXNwbGF5QnVmZmVyLmhh
bmRsZSwgRUdMX0JBQ0tfQlVGRkVSKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAg
ICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgU2NvcGVkRnJhbWVidWZmZXIgZmJvOwotICAgIFNjb3BlZFJlc3Rv
cmVSZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0
ZS5ib3VuZFJlYWRGQk8sIGZibyk7Ci0gICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKGZib0Jp
bmRpbmcuZnJhbWVidWZmZXJUYXJnZXQoKSwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIHRleHR1cmVU
YXJnZXQsIHRleHR1cmUsIDApOwotICAgIEFTU0VSVChnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhmYm9CaW5kaW5nLmZyYW1lYnVmZmVyVGFyZ2V0KCkpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOwot
Ci0gICAgRUdMQm9vbGVhbiByZWxlYXNlT2sgPSBFR0xfUmVsZWFzZVRleEltYWdlKG1fZGlzcGxh
eU9iaiwgZGlzcGxheUJ1ZmZlci5oYW5kbGUsIEVHTF9CQUNLX0JVRkZFUik7Ci0gICAgQVNTRVJU
X1VOVVNFRChyZWxlYXNlT2ssIHJlbGVhc2VPayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi1SZWZQdHI8TWVkaWFTYW1wbGU+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBsZSgpCi17Ci0g
ICAgYXV0byAmZGlzcGxheUJ1ZmZlciA9IG1fc3dhcENoYWluLmRpc3BsYXlCdWZmZXIoKTsKLSAg
ICBpZiAoIWRpc3BsYXlCdWZmZXIuc3VyZmFjZSB8fCAhZGlzcGxheUJ1ZmZlci5oYW5kbGUpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChkaXNwbGF5QnVmZmVyLnN1cmZhY2UtPnNp
emUoKSAhPSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBtX3N3YXBDaGFpbi5tYXJrRGlzcGxheUJ1ZmZlckluVXNlKCk7Ci0gICAgYXV0
byBwaXhlbEJ1ZmZlciA9IGNyZWF0ZUNWUGl4ZWxCdWZmZXIoZGlzcGxheUJ1ZmZlci5zdXJmYWNl
LT5zdXJmYWNlKCkpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUltYWdlU2FtcGxlKFdU
Rk1vdmUoKnBpeGVsQnVmZmVyKSwgTWVkaWFTYW1wbGVBVkZPYmpDOjpWaWRlb1JvdGF0aW9uOjpV
cHNpZGVEb3duLCB0cnVlKTsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQotewotICAgIGN1cnJlbnRDb250
ZXh0ID0gbnVsbHB0cjsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViUHJvY2Vzc0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NWY0OTdhMzc0NjY2MDAzZjc5ZDAwMmQ2ZDlkNWQxMzIzMmRiNjJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViUHJvY2Vzc0dyYXBo
aWNzQ29udGV4dEdMQ29jb2EubW0KQEAgLTAsMCArMSw5OCBAQAorCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShXRUJHTCkKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCIgLy8g
Tk9MSU5UCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIKKyNpbXBv
cnQgIldlYkdMTGF5ZXIuaCIKKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBSZXRhaW5QdHI8V2Vi
R0xMYXllcj4gY3JlYXRlV2ViR0xMYXllcihjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMmIGF0dHJpYnV0ZXMpCit7CisgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IGxheWVyOworICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIGxheWVyID0gYWRvcHROUyhbW1dlYkdM
TGF5ZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlUGl4ZWxSYXRpbzphdHRyaWJ1dGVzLmRldmljZVBp
eGVsUmF0aW8gY29udGVudHNPcGFxdWU6IWF0dHJpYnV0ZXMuYWxwaGFdKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgW2xheWVyIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOworI2VuZGlmCisgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIHJldHVybiBsYXllcjsKK30KKworLy8gR3JhcGhp
Y3NDb250ZXh0R0wgdHlwZSB0aGF0IGlzIHVzZWQgd2hlbiBXZWJHTCBpcyBydW4gaW4tcHJvY2Vz
cyBpbiBXZWJDb250ZW50IHByb2Nlc3MuCitjbGFzcyBXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0
R0xDb2NvYSBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTENvY29hIHsKK3B1YmxpYzoK
KyAgICB+V2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EoKSA9IGRlZmF1bHQ7CisgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNW
YWxpZCgpICYmIG1fd2ViR0xMYXllcjsgfQorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMQ29jb2Eg
b3ZlcnJpZGVzLgorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdMTGF5ZXIuZ2V0KCkp
OyB9CisgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpIGZpbmFsOworcHJpdmF0ZToKKyAgICBX
ZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xDb2NvYShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMmJiBhdHRyaWJ1dGVzKQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dEdMQ29jb2EoV1RGTW92
ZShhdHRyaWJ1dGVzKSkKKyAgICAgICAgLCBtX3dlYkdMTGF5ZXIoY3JlYXRlV2ViR0xMYXllcihj
b250ZXh0QXR0cmlidXRlcygpKSkKKyAgICB7CisgICAgfQorICAgIFJldGFpblB0cjxXZWJHTExh
eWVyPiBtX3dlYkdMTGF5ZXI7CisKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w7Cit9OworCit2b2lkIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29hOjpwcmVw
YXJlRm9yRGlzcGxheSgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cHJlcGFyZUZv
ckRpc3BsYXkoKTsKKyAgICBhdXRvIHN1cmZhY2UgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVy
KCkuc3VyZmFjZS5nZXQoKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbbV93ZWJHTExheWVyIHNldENvbnRl
bnRzOnN1cmZhY2UtPmFzTGF5ZXJDb250ZW50cygpXTsKKyAgICBbbV93ZWJHTExheWVyIHNldE5l
ZWRzRGlzcGxheV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit9CisKK1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyop
Cit7CisgICAgLy8gTWFrZSBzcGFjZSBmb3IgdGhlIGluY29taW5nIGNvbnRleHQgaWYgd2UncmUg
ZnVsbC4KKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIo
KS5yZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCk7CisgICAgaWYgKEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmhhc1Rvb01hbnlDb250ZXh0cygpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGNvbnRleHQgPSBhZG9wdFJlZihuZXcgV2Vi
UHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EoV1RGTW92ZShhdHRyaWJ1dGVzKSkpOworICAg
IGlmICghY29udGV4dC0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRDb250ZXh0
KGNvbnRleHQuZ2V0KCkpOworCisgICAgcmV0dXJuIGNvbnRleHQ7Cit9Cit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViUHJv
Y2Vzc0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2Nv
YS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2MjVlZGJmZTI1NGUzNzVmZWYx
Njk4MTY5ZjUyZWZkNGFhNzcyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJQcm9j
ZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDk4
ICswLDAgQEAKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCR0wpCi0jaW1wb3J0ICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIiAvLyBOT0xJTlQKLSNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlci5oIgotI2ltcG9ydCAiV2ViR0xMYXllci5oIgotI2ltcG9ydCA8
d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNw
YWNlIHsKLQotc3RhdGljIFJldGFpblB0cjxXZWJHTExheWVyPiBjcmVhdGVXZWJHTExheWVyKGNv
bnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cmlidXRlcykKLXsKLSAgICBSZXRh
aW5QdHI8V2ViR0xMYXllcj4gbGF5ZXI7Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
Ci0gICAgbGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhEZXZpY2VQ
aXhlbFJhdGlvOmF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyBjb250ZW50c09wYXF1ZTohYXR0
cmlidXRlcy5hbHBoYV0pOwotI2lmbmRlZiBOREVCVUcKLSAgICBbbGF5ZXIgc2V0TmFtZTpAIldl
YkdMIExheWVyIl07Ci0jZW5kaWYKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAg
cmV0dXJuIGxheWVyOwotfQotCi0vLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB0eXBlIHRoYXQg
aXMgdXNlZCB3aGVuIFdlYkdMIGlzIHJ1biBpbi1wcm9jZXNzIGluIFdlYkNvbnRlbnQgcHJvY2Vz
cy4KLWNsYXNzIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmaW5hbCA6IHB1Ymxp
YyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7Ci1wdWJsaWM6Ci0gICAgfldlYlByb2Nlc3NHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpID0gZGVmYXVsdDsKLSAgICBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWYWxpZCgpICYmIG1fd2ViR0xM
YXllcjsgfQotICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIG92ZXJyaWRlcy4KLSAgICBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQotICAgIHZvaWQgcHJl
cGFyZUZvckRpc3BsYXkoKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgV2ViUHJvY2Vzc0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQot
ICAgICAgICA6IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJpYnV0ZXMpCi0gICAgICAgICwg
bV93ZWJHTExheWVyKGNyZWF0ZVdlYkdMTGF5ZXIoYXR0cmlidXRlcykpCi0gICAgewotICAgIH0K
LSAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwotCi0gICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotfTsKLQotdm9pZCBXZWJQcm9jZXNzR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKLXsKLSAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKTsKLSAgICBhdXRvIHN1cmZhY2UgPSBt
X3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCkuc3VyZmFjZS5nZXQoKTsKLSAgICBpZiAoIXN1cmZh
Y2UpCi0gICAgICAgIHJldHVybjsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAg
ICBbbV93ZWJHTExheWVyIHNldENvbnRlbnRzOnN1cmZhY2UtPmFzTGF5ZXJDb250ZW50cygpXTsK
LSAgICBbbV93ZWJHTExheWVyIHNldE5lZWRzRGlzcGxheV07Ci0gICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwotfQotCi19Ci0KLVJlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMg
YXR0cmlidXRlcywgSG9zdFdpbmRvdyopCi17Ci0gICAgLy8gTWFrZSBzcGFjZSBmb3IgdGhlIGlu
Y29taW5nIGNvbnRleHQgaWYgd2UncmUgZnVsbC4KLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCk7Ci0g
ICAgaWYgKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmhh
c1Rvb01hbnlDb250ZXh0cygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdFJlZihuZXcgV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMKFdU
Rk1vdmUoYXR0cmlidXRlcykpKTsKLSAgICBpZiAoIWNvbnRleHQtPmlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpz
aGFyZWRNYW5hZ2VyKCkuYWRkQ29udGV4dChjb250ZXh0LmdldCgpKTsKLQotICAgIHJldHVybiBj
b250ZXh0OwotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCmluZGV4IGU4ODQ5ZjI5YzU1YTNjNzU5ZDIyMjIxNTk0MWQ5OGFlOTBkODc4N2EuLjNiZWMw
OTlmMzdlYzNjZDNkYmMzODEyMTVhMjdhOTViMzcyYzIxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmNwcApAQCAtNTEsMTMgKzUxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNWYWxpZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzZXRCdWZmZXJzVG9BdXRvQ2xlYXIoKQogewog
ICAgIEdDR0x1aW50IGJ1ZmZlcnMgPSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJ
VDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggMzgyNzNiMDcyYjU2ZDNm
ZGEyYmNkZTM0OGIzZTBmNzQyYzIwMDVlNS4uYjVjMmY3ZTMwOGRkYTU3ZDZkY2I3MzhmMjI1YWU3
MmVmYWQ1Mjk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTUyMiwx
OCArNTIyLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25z
dCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBQaXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmKTsKIAotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIGVudW0gY2xhc3MgUGJ1ZmZlckF0dGFjaG1lbnRVc2FnZSB7IFJlYWQsIFdyaXRlLCBS
ZWFkV3JpdGUgfTsKLSAgICAvLyBSZXR1cm5zIGEgaGFuZGxlIHdoaWNoLCBpZiBub24tbnVsbCwg
bXVzdCBiZSByZWxlYXNlZCB2aWEgdGhlCi0gICAgLy8gZGV0YWNoIGNhbGwgYmVsb3cuCi0gICAg
dm9pZCogY3JlYXRlUGJ1ZmZlckFuZEF0dGFjaElPU3VyZmFjZShHQ0dMZW51bSB0YXJnZXQsIFBi
dWZmZXJBdHRhY2htZW50VXNhZ2UsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiwgR0NH
THVpbnQgcGxhbmUpOwotICAgIHZvaWQgZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2Uo
dm9pZCogaGFuZGxlKTsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCi0gICAg
dm9pZCogYXR0YWNoSU9TdXJmYWNlVG9TaGFyZWRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgSU9T
dXJmYWNlKik7Ci0gICAgdm9pZCBkZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lk
KiBoYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQogI2lmIFVTRShBTkdMRSkKICAgICBjb25zdGV4
cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRlZmF1bHREaXNwbGF5ID0gRUdMX0RFRkFV
TFRfRElTUExBWTsKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTU0NCwxMCArNTMyLDE0IEBAIHB1
YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyk7Ci0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9z
d2FwQ2hhaW47CisgICAgRUdMRGlzcGxheSBtX2Rpc3BsYXlPYmogeyBudWxscHRyIH07CisgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBudWxscHRyIH07CisgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBtX2NvbmZpZ09iaiB7IG51bGxwdHIgfTsK
ICNlbmRpZgorICAgIEdDR0x1aW50IG1fdGV4dHVyZSB7IDAgfTsKKwogcHJpdmF0ZToKICAgICAv
LyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgdGhhdCBldmVudHVh
bGx5IGNhbGwgT3BlbkdMLgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVu
dHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgpA
QCAtNTg4LDE4ICs1ODAsNiBAQCBwcml2YXRlOgogICAgIC8vIFBsYXRmb3JtIHNwZWNpZmljIGJl
aGF2aW9yIGZvciByZWxlYXNlUmVzb3VyY2VzKCk7CiAgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1S
ZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIC8v
IFRPRE86IHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGUgY29udGV4dCBkcmF3cyB0byBh
IGltYWdlIGJ1ZmZlci4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTgxNzkgLgotICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsgbnVsbHB0ciB9OwotICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsgbnVsbHB0ciB9OwotICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWdPYmogeyBudWxscHRyIH07
Ci0jZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCi0KLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShD
QSkKLSAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBtX3dlYkdMTGF5ZXI7Ci0jZW5kaWYKLQog
I2lmICFVU0UoQU5HTEUpCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVW5pcXVlUmVmPHNo
OjpTaGFkZXJWYXJpYWJsZT4+IFNoYWRlclN5bWJvbE1hcDsKIApAQCAtNjg4LDcgKzY2OCw2IEBA
IHByaXZhdGU6CiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKICNlbmRpZgogCi0g
ICAgR0NHTHVpbnQgbV90ZXh0dXJlIHsgMCB9OwogICAgIEdDR0x1aW50IG1fZmJvIHsgMCB9Owog
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBHQ0dMdWludCBtX2NvbXBvc2l0b3JU
ZXh0dXJlIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNw
cAppbmRleCAyZTQ2YjYxNTM2YzgzNWRmY2FjZjlmNzllMTBlNmQ1OWFlN2EzODM2Li42OGI2Y2Qz
ZjUyNGJmNmEwOWVhZjdmZDY4NDhmYmFjMWRhNzMzYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcApAQCAtMTQzLDE0ICsxNDMsNiBAQCBib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAg
IC8vIHJlc2l6ZSByZWd1bGFyIEZCTwogICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBtX2Zibyk7CiAgICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgaWYgKCFhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShzaXplKSkg
ewotICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBVbmFibGUgdG8gYWxsb2NhdGUg
YmFja2luZyBzdG9yZSBvZiBzaXplICVkIHggJWQiLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
Zm9yY2VDb250ZXh0TG9zdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgOjpn
bEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhULCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1fdGV4dHVyZSwgMCk7Ci0j
ZWxzZQogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwogICAg
IDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAg
IDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKQEAgLTE2NCw3
ICsxNTYsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhjb25z
dCBJbnRTaXplJiBzaXplKQogICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIDApOwogICAgIH0KLSNlbmRpZgogI2VuZGlmCiAKICAgICBhdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZChpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCmlu
ZGV4IGUyODUxYzJlM2QyMjE3NzE2OTRiZGQ2ZjEyZjBlNWY3ODk5Yzc1NWIuLmUzZDY3MGQyNDdj
MTY2MTViMjQ3ZTFhY2RjYzhlOThlZDg0NzQ1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC02Niw2ICs2NiwyMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKworUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBHcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMmJiBhdHRyaWJ1dGVzKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdQVVByb2Nlc3NH
cmFwaGljc0NvbnRleHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKSk7Cit9CisKK0dyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6fkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cigpID0gZGVmYXVsdDsKKworR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpHcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0
cmlidXRlcykKKyAgICA6IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKFdURk1vdmUoYXR0cmlidXRl
cykpCit7Cit9CisKKy8vIEZJWE1FOiBCZWxvdyBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBtb3Zl
ZCB0byBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIgdG8gc2ltcGxpZnkgdGhlIGJhc2Ug
Y2xhc3MuCisKIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywg
SG9zdFdpbmRvdyopCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKQEAg
LTg1LDcgKzEwMCw3IEBAIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBvYmpl
Y3QgZmlyc3QgaW4gb3JkZXIgdG8gZXN0YWJsaXN0IGEgY3VycmVudCBjb250ZXh0IG9uIHRoaXMg
dGhyZWFkLgotICAgIGF1dG8gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTChhdHRyaWJ1dGVzKSk7CisgICAgYXV0byBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0
R0xUZXh0dXJlTWFwcGVyOjpjcmVhdGUoYXR0cmlidXRlcyk7CiAKICNpZiBVU0UoTElCRVBPWFkp
ICYmIFVTRShPUEVOR0xfRVMpICYmIEVOQUJMRShXRUJHTDIpCiAgICAgLy8gQmFpbCBpZiBHTEVT
MyB3YXMgcmVxdWVzdGVkIGJ1dCBjYW5ub3QgYmUgcHJvdmlkZWQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JmOWExOWFjZDdkN2Zk
NzliZDk0YWI0Yzk2OWY5NWIyMDVlOTFjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBw
ZXIuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciA6IHB1Ymxp
YyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IGNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEF0dHJpYnV0ZXMmJik7CisgICAgfkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cigpOworCitwcm90ZWN0ZWQ6CisgICAgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKK307CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvR1BVUHJvY2Vz
c0dyYXBoaWNzQ29udGV4dEdMLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
R1BVUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFlZWUxOGQ2MmYwNTA5ZjAwOWYzNGMzZWRlNjhkMzVlMGQwODk2NTMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL0dQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSA8V2ViQ29yZS9FeHRlbnNp
b25zR0wuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+Ci0K
LWNsYXNzIEdQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmaW5hbCA6IHB1YmxpYyBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZlB0cjxHUFVQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNyZWF0ZShXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICB7Ci0gICAgICAgIGF1
dG8gY29udGV4dCA9IGFkb3B0UmVmKCpuZXcgR1BVUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKFdURk1vdmUoYXR0cmlidXRlcykpKTsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQ7
Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV2ViQ29yZTo6SU9TdXJmYWNlKiBk
aXNwbGF5QnVmZmVyKCkgeyByZXR1cm4gbV9zd2FwQ2hhaW4uZGlzcGxheUJ1ZmZlcigpLnN1cmZh
Y2UuZ2V0KCk7IH0KLSAgICB2b2lkIG1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKSB7IHJldHVybiBt
X3N3YXBDaGFpbi5tYXJrRGlzcGxheUJ1ZmZlckluVXNlKCk7IH0KLSNlbmRpZgotcHJpdmF0ZToK
LSAgICBHUFVQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0woV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgICAgIDogR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0woYXR0cmlidXRlcykKLSAgICB7Ci0gICAgfQotfTsKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5oCmluZGV4IGEwNzI5NzY1Y2I1ZDcxOGNmNWE3NWNhODYyZTdmYmU1NzQ4NzZl
ZGIuLmFlMzE3YjE1MjEwODQ3ZTdlYWVmODk3NGEwMjc4N2ZiMTEwZDkyMzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5oCkBAIC0yOSwxNyArMjksMjMgQEAKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24u
aCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiR1BV
UHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNj
b3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdC5oIgogI2luY2x1ZGUgIlN0cmVhbU1l
c3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIlN0cmVhbVNlcnZlckNvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0V4dGVuc2lvbnNHTC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaD4KKyNlbHNlCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFD
KQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Rpc3BsYXlDb25maWd1cmF0aW9uLmg+CiAjZW5k
aWYKQEAgLTExMyw3ICsxMTksMTMgQEAgcHJpdmF0ZToKIHByb3RlY3RlZDoKICAgICBXZWFrUHRy
PEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsK
ICAgICBSZWZQdHI8SVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uPiBtX3N0cmVhbUNvbm5lY3Rp
b247Ci0gICAgUmVmUHRyPEdQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gbV9jb250
ZXh0IFdURl9HVUFSREVEX0JZX0xPQ0sobV9zdHJlYW1UaHJlYWQpOworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHVzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgPSBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTENvY29hOworI2Vsc2UKKyAgICB1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOworI2VuZGlm
CisgICAgCisgICAgUmVmUHRyPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0w+IG1fY29udGV4dCBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fc3RyZWFtVGhyZWFkKTsKICAgICBHcmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXI7CiAgICAgUmVmPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ+IG1fcmVuZGVyaW5nQmFja2VuZDsKICAgICBTY29wZWRXZWJHTFJl
bmRlcmluZ1Jlc291cmNlc1JlcXVlc3QgbV9yZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMQ29jb2EuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2EuY3BwCmluZGV4IGRjMmZhYmQ0ZWY1NWY3ODMxNzI3
MGMzMjIxMDIzZTM4NjFlODA3MWQuLjEwYTUzNjI5OWNmMjNlYjlmODZmNTcyN2U4NTIzODNjZThh
MDQwMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTENvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5jcHAKQEAgLTcxLDcgKzcx
LDcgQEAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xDb2NvYShHUFVDb25uZWN0aW9uVG9XZWJQcm8KIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xDb2NvYTo6cGxhdGZvcm1Xb3JrUXVldWVJbml0aWFsaXplKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCiB7CiAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKLSAgICBtX2NvbnRleHQgPSBHUFVQcm9jZXNzR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBtX2NvbnRleHQgPSBH
cmFwaGljc0NvbnRleHRHTENvY29hOjpjcmVhdGUoV1RGTW92ZShhdHRyaWJ1dGVzKSk7CiB9CiAK
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cHJlcGFyZUZvckRpc3BsYXkoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChXVEY6Ok1hY2hTZW5kUmlnaHQmJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luLmNwcAppbmRleCA3MGYwYzQ2NDAzMmI5
MzNjOGY0NTkxOWM4NjhhYzY3NmRjMTcxZDZmLi4yMjRmYTE4YzgxNTkyNjJmZWYzZGU4ZWU1MDdh
NWI3ZDdkNzlkYjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKQEAgLTI4LDEx
ICsyOCwxMCBAQAogI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgiCiAKICNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpICYmIEVOQUJMRShXRUJHTCkgJiYgUExBVEZPUk0oV0lOKQotCiAj
aW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIGNsYXNzIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
V2luIGZpbmFsIDogcHVibGljIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIHsKIHB1YmxpYzoKQEAg
LTQzLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHZvaWQgcGxhdGZvcm1Xb3JrUXVldWVJbml0aWFs
aXplKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKSBmaW5hbDsKIH07CiAK
LVJlZjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmNy
ZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzLCBHcmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIgZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kJiByZW5kZXJpbmdCYWNrZW5kLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXIm
JiBzdHJlYW0pCitSZWY8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w+IFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcywgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmli
dXRlcywgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIGdyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVuZGVyaW5nQmFja2VuZCwgSVBDOjpTdHJl
YW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFtKQogewogICAgIGF1dG8gaW5zdGFuY2UgPSBhZG9w
dFJlZigqbmV3IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luKGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MsIGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgcmVuZGVyaW5nQmFja2VuZCwgV1RG
TW92ZShzdHJlYW0pKSk7CiAgICAgaW5zdGFuY2UtPmluaXRpYWxpemUoV1RGTW92ZShhdHRyaWJ1
dGVzKSk7CkBAIC01Nyw3ICs1Niw3IEBAIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMV2luOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFdpbihHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW46OnBsYXRmb3JtV29ya1F1ZXVlSW5pdGlhbGl6ZShX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQogewotICAg
IG1fY29udGV4dCA9IEdQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKFdU
Rk1vdmUoYXR0cmlidXRlcykpOworICAgIG1fY29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFdURk1vdmUoYXR0cmlidXRlcykpOwogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVwYXJlRm9yRGlzcGxheShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NTQwZWIwYmNmNmM2YjEzMWQx
Nzg0NGZlZGEzNWMwNzBjZDFjYTBlLi42NTJjMmJlM2I4YmYwZDZhY2ZkZTc4ZWIwYzkwMTU1MGI1
OWFkMTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTQ4NDYsNyArNDg0Niw2IEBACiAJCTdBRkJEMzZEMjFFNTQ2RTMwMDVEQkFDQiAv
KiBQZXJzaXN0ZW5jeVV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlcnNpc3RlbmN5VXRpbHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGQkQzNkUyMUU1NDZFMzAwNURCQUNCIC8q
IFBlcnNpc3RlbmN5VXRpbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGVyc2lzdGVuY3lVdGls
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMTYxOTEyMjcxOThBQTkwMEM0
MEVBQyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Q29jb2EubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Q29jb2EubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdCMTYxOTEzMjcxOUFFNzYwMEM0MEVBQyAvKiBHUFVQcm9j
ZXNzR3JhcGhpY3NDb250ZXh0R0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR1BVUHJvY2Vzc0dyYXBoaWNz
Q29udGV4dEdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCMURCMjY1MjU2NjhD
RTAwMDBFMjZCQyAvKiBBcnJheVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBcnJheVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QjQ4M0YxQjI1Q0REQTlCMDAxMjA0ODYgLyogTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNDgzRjFDMjVDRERBOUIwMDEyMDQ4NiAvKiBN
ZXNzYWdlUmVjZWl2ZVF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1l
c3NhZ2VSZWNlaXZlUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkzNzAs
NyArOTM2OSw2IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFD
OThDMDFDMjc0NDY5MjYwMDJDQ0I3OCAvKiBXZWJHUFUgKi8sCi0JCQkJN0IxNjE5MTMyNzE5QUU3
NjAwQzQwRUFDIC8qIEdQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTC5oICovLAogCQkJCTU1QUQw
OTQzMjQwOEEwRTYwMERFNEQyRiAvKiBQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmggKi8sCiAJ
CQkJMUNDNTRBRkQyNzBGOTY1NDAwNUJGOEJFIC8qIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllci5oICovLAogCQkJCTFDQkY5MDEyMjcxMDE4QjUwMDBDNDU3RCAvKiBRdWFsaWZp
ZWRSZXNvdXJjZUhlYXAuaCAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCA1ZjUwNjMxN2IzMzgxYjZiOWY5MDQ3NjMyZDZmNmMxOWI3Njc1YmNm
Li40NmM1NzllNGRiY2M3MmI3ZDQyZWNmN2YzODA1YjdiNWVlNDFhZGRjIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MjEtMTEtMjUgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBHcmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGhhdmUgc2VwYXJhdGUg
Y2xhc3MgZGVmaW5pdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMzQ5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkanVzdCBUZXN0R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYSB0bworICAg
ICAgICBUZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYSBhZnRlciBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTAorICAgICAgICBDb2NvYSB2YXJpYW50IHJlbmFtZSB0byBHcmFwaGljc0NvbnRleHRHTENv
Y29hLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2Nv
Y29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tOiBSZW5hbWVkIGZyb20gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTE9wZW5H
TENvY29hLm1tLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlRGVmYXVsdFRlc3RDb250
ZXh0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNoYW5nZUNvbnRleHRDb250ZW50cyk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorCiAyMDIxLTExLTI1ICBLaW1tbyBLaW5u
dW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgQU5HTEUgTWV0YWw6IFRoZSBt
ZW1vcnkgYmFja2luZyBJT1N1cmZhY2VzIG9mIGZvcm1lciBjbGllbnQgYnVmZmVyIHBidWZmZXJz
IGlzIGxlYWtlZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzYmQxMjU3NzllN2RkM2ViNTVk
NTg1ZjBjZDI0MDM4ZDliYmNlYmU2Li44NmQyOTRmNmRiYTczMDljZDk1YTI1NWQ2M2FlZjYxYmJh
MmU0OTNlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTEzLDcgKzUxMyw3IEBACiAJCTdC
MjczOUYzMjYzMkFCNjQwMDQwRjE4MiAvKiBUaHJlYWRBc3NlcnRpb25zVGVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjI3MzlGMjI2MzJBQjY0
MDA0MEYxODIgLyogVGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwICovOyB9OwogCQk3Qjc3NDkwNjI2
N0NDRTcyMDA5ODczQjQgLyogVGVzdFJ1bm5lclRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNzc0OTA0MjY3Q0NFNjgwMDk4NzNCNCAvKiBU
ZXN0UnVubmVyVGVzdHMuY3BwICovOyB9OwogCQk3QjdEMDk2QTI1MTlGOEY5MDAxN0EwNzggLyog
V2ViR0xOb0NyYXNoT25PdGhlclRocmVhZEFjY2Vzcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCN0QwOTY5MjUxOUY4RjkwMDE3QTA3OCAvKiBXZWJH
TE5vQ3Jhc2hPbk90aGVyVGhyZWFkQWNjZXNzLm1tICovOyB9OwotCQk3QkEzOTM2QzI3MUVERkNB
MDAxNTkxMUMgLyogVGVzdEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkEzOTM2QjI3MUVERkNBMDAx
NTkxMUMgLyogVGVzdEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gKi87IH07CisJCTdC
QTM5MzZDMjcxRURGQ0EwMDE1OTExQyAvKiBUZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQTM5MzZCMjcx
RURGQ0EwMDE1OTExQyAvKiBUZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbSAqLzsgfTsKIAkJ
N0MzOTY1MDYxQ0RENzRGOTAwOTREQkI4IC8qIENvbG9yVGVzdHMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzOTY1MDUxQ0RENzRGOTAwOTREQkI4
IC8qIENvbG9yVGVzdHMuY3BwICovOyB9OwogCQk3QzQ4NkJBMTFBQTEyNTY3MDAzRjZGOUIgLyog
YnVuZGxlLWZpbGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzQ4NkJBMDFBQTEyNTRCMDAzRjZGOUIgLyogYnVuZGxlLWZpbGUuaHRt
bCAqLzsgfTsKIAkJN0M3NEM4RkEyMkRGQkE5NjAwREEyREFCIC8qIFdURlN0cmluZ1V0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0JE
NUEyMjIyREU0MkE2MDA0QTlFMzIgLyogV1RGU3RyaW5nVXRpbGl0aWVzLmNwcCAqLzsgfTsKQEAg
LTIzNzAsNyArMjM3MCw3IEBACiAJCTdCMjczOUYyMjYzMkFCNjQwMDQwRjE4MiAvKiBUaHJlYWRB
c3NlcnRpb25zVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
aHJlYWRBc3NlcnRpb25zVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdC
Nzc0OTA0MjY3Q0NFNjgwMDk4NzNCNCAvKiBUZXN0UnVubmVyVGVzdHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVzdFJ1bm5lclRlc3RzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I3RDA5NjkyNTE5RjhGOTAwMTdBMDc4IC8qIFdlYkdMTm9D
cmFzaE9uT3RoZXJUaHJlYWRBY2Nlc3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTE5v
Q3Jhc2hPbk90aGVyVGhyZWFkQWNjZXNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3QkEzOTM2QjI3MUVERkNBMDAxNTkxMUMgLyogVGVzdEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0JBMzkzNkIyNzFFREZDQTAwMTU5MTFDIC8qIFRlc3RHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGVzdEdyYXBoaWNz
Q29udGV4dEdMQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQTM5MzZE
MjcxRUVDNTMwMDE1OTExQyAvKiBXZWJDb3JlVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0JCNzU0QUYyNzRFMzlBMTAwRDAwRUMxIC8qIFRlc3RVdGlsaXRpZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGVzdFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QkI3NTRCMDI3NEUzOUExMDBEMDBFQzEgLyogVGVzdFV0aWxpdGllcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXN0VXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQ5MDgsNyArNDkwOCw3IEBACiAJCQkJNTdGMUM5MTAyNURERDUxOTAwRThGNkVBIC8qIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50Q29jb2EubW0gKi8sCiAJCQkJNTc2OUM1MEExRDlCMDAwMTAw
MDg0N0ZCIC8qIFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tICovLAogCQkJCUExNzk5MTg2MUUx
Qzk5NEUwMEE1MDVFRCAvKiBTaGFyZWRCdWZmZXIubW0gKi8sCi0JCQkJN0JBMzkzNkIyNzFFREZD
QTAwMTU5MTFDIC8qIFRlc3RHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tICovLAorCQkJ
CTdCQTM5MzZCMjcxRURGQ0EwMDE1OTExQyAvKiBUZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5t
bSAqLywKIAkJCQlDRDg5RDAzODFDNEVEQjJBMDAwNDBBMDQgLyogV2ViQ29yZU5TVVJMU2Vzc2lv
bi5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CkBAIC01NjUyLDcgKzU2NTIsNyBAQAog
CQkJCUY0NjEyOENCMjExRDQ3NTEwMEQ5RkFEQiAvKiBUZXN0RHJhZ2dpbmdJbmZvLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJRjRFMEEyQjgyMTIyODQ3NDAwQUY3QzdGIC8qIFRlc3RGaWxlUHJvbWlz
ZVJlY2VpdmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjRGNUJCNTIyMTY2N0JBQTAwMkQwNkI5
IC8qIFRlc3RGb250T3B0aW9ucy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTdCQTM5MzZDMjcxRURG
Q0EwMDE1OTExQyAvKiBUZXN0R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTdCQTM5MzZDMjcxRURGQ0EwMDE1OTExQyAvKiBUZXN0R3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0NUUxNTc2MjExMkNFNjIwMDMwN0U4
MiAvKiBUZXN0SW5wdXREZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0NUQzODkxMjE1
QTdCNEIwMDJBMjk3OSAvKiBUZXN0SW5zcGVjdG9yQmFyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE2MjgxMjUyMzI1QzE4MDAwQkI3RTQyIC8qIFRlc3RQREZEb2N1bWVudC5tbSBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29h
L1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg3NmM3NDQ4MDhmNDM2MWUzY2Q1MmY1M2ZmZDZmNjAwM2E4YTBmODcKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNz
Q29udGV4dEdMQ29jb2EubW0KQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBF
TkFCTEUoV0VCR0wpCisjaW1wb3J0ICJUZXN0VXRpbGl0aWVzLmgiCisjaW1wb3J0ICJXZWJDb3Jl
VXRpbGl0aWVzLmgiCisjaW1wb3J0IDxNZXRhbC9NZXRhbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9D
b2xvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTENvY29hLmg+CisjaW1w
b3J0IDxvcHRpb25hbD4KKyNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+CisjaW1wb3J0IDx3dGYvTWVt
b3J5Rm9vdHByaW50Lmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworbmFtZXNwYWNl
IHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xDb2NvYVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5n
OjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2b2lkIFNldFVwKCkgb3ZlcnJpZGUgLy8gTk9MSU5UCisg
ICAgeworICAgICAgICBtX3Njb3BlZFByb2Nlc3NUeXBlID0gU2NvcGVkU2V0QXV4aWxpYXJ5UHJv
Y2Vzc1R5cGVGb3JUZXN0aW5nIHsgV2ViQ29yZTo6QXV4aWxpYXJ5UHJvY2Vzc1R5cGU6OkdQVSB9
OworICAgIH0KKyAgICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUgLy8gTk9MSU5UCisgICAgewor
ICAgICAgICBtX3Njb3BlZFByb2Nlc3NUeXBlID0gc3RkOjpudWxsb3B0OworICAgIH0KK3ByaXZh
dGU6CisgICAgc3RkOjpvcHRpb25hbDxTY29wZWRTZXRBdXhpbGlhcnlQcm9jZXNzVHlwZUZvclRl
c3Rpbmc+IG1fc2NvcGVkUHJvY2Vzc1R5cGU7Cit9OworCit9CisKK3N0YXRpYyBjb25zdCBpbnQg
ZXhwZWN0ZWREaXNwbGF5QnVmZmVyUG9vbFNpemUgPSAzOworCitzdGF0aWMgUmVmUHRyPFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQ29jb2E+IGNyZWF0ZURlZmF1bHRUZXN0Q29udGV4dChXZWJD
b3JlOjpJbnRTaXplIGNvbnRleHRTaXplKQoreworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgIGF0dHJpYnV0ZXMudXNlTWV0YWwgPSB0cnVl
OworICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgYXR0cmlidXRlcy5kZXB0
aCA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMuc3RlbmNpbCA9IGZhbHNlOworICAgIGF0dHJpYnV0
ZXMuYWxwaGEgPSB0cnVlOworICAgIGF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0g
ZmFsc2U7CisgICAgYXV0byBjb250ZXh0ID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6Y3JlYXRlKFdURk1vdmUoYXR0cmlidXRlcykpOworICAgIGlmICghY29udGV4dCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgY29udGV4dC0+cmVzaGFwZShjb250ZXh0U2l6ZS53aWR0
aCgpLCBjb250ZXh0U2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK3N0
YXRpYyA6OnRlc3Rpbmc6OkFzc2VydGlvblJlc3VsdCBjaGFuZ2VDb250ZXh0Q29udGVudHMoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYSYgY29udGV4dCwgaW50IGl0ZXJhdGlvbikKK3sK
KyAgICBjb250ZXh0Lm1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgIFdlYkNvcmU6OkNvbG9yIGV4
cGVjdGVkIHsgaXRlcmF0aW9uICUgMiA/IFdlYkNvcmU6OkNvbG9yOjpncmVlbiA6IFdlYkNvcmU6
OkNvbG9yOjp5ZWxsb3cgfTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGV4
cGVjdGVkLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgVU5VU0VEX1ZBUklBQkxFKGNv
bG9yU3BhY2UpOworICAgIGNvbnRleHQuY2xlYXJDb2xvcihjb21wb25lbnRzWzBdLCBjb21wb25l
bnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKKyAgICBjb250ZXh0LmNsZWFy
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUKTsKKyAgICB1aW50
OF90IGdvdFZhbHVlc1s0XSA9IHsgfTsKKyAgICBhdXRvIHNhbXBsZUF0ID0gY29udGV4dC5nZXRJ
bnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOworICAgIHNhbXBsZUF0LmNvbnRyYWN0KDIsIDMpOwor
ICAgIHNhbXBsZUF0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICBjb250ZXh0LnJlYWRuUGl4
ZWxzKHNhbXBsZUF0LndpZHRoKCksIHNhbXBsZUF0LmhlaWdodCgpLCAxLCAxLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTDo6UkdCQSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0JZVEUsIGdvdFZhbHVlcyk7CisgICAgV2ViQ29yZTo6Q29sb3IgZ290IHsgV2ViQ29yZTo6
U1JHQkE8dWludDhfdD4geyBnb3RWYWx1ZXNbMF0sIGdvdFZhbHVlc1sxXSwgZ290VmFsdWVzWzJd
LCBnb3RWYWx1ZXNbM10gfSB9OworICAgIGlmIChnb3QgIT0gZXhwZWN0ZWQpCisgICAgICAgIHJl
dHVybiA6OnRlc3Rpbmc6OkFzc2VydGlvbkZhaWx1cmUoKSA8PCAiRmFpbGVkIHRvIHZlcmlmeSBk
cmF3IHRvIGNvbnRleHQuIEdvdDogIiA8PCBnb3QgPDwgIiwgZXhwZWN0ZWQ6ICIgPDwgZXhwZWN0
ZWQgPDwgIi4iOworICAgIHJldHVybiA6OnRlc3Rpbmc6OkFzc2VydGlvblN1Y2Nlc3MoKTsKK30K
Kworc3RhdGljIGJvb2wgaGFzTXVsdGlwbGVHUFVzKCkKK3sKKyNpZiAoUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShNQUNDQVRBTFlTVCkpCisgICAgYXV0byBkZXZpY2VzID0gYWRvcHROUyhNVExD
b3B5QWxsRGV2aWNlcygpKTsKKyAgICByZXR1cm4gW2RldmljZXMgY291bnRdID4gMTsKKyNlbHNl
CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKyNpZiBIQVZFKFdFQkdMX0NPTVBBVElC
TEVfTUVUQUwpICYmIChQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKSkKKyNk
ZWZpbmUgTUFZQkVfTXVsdGlwbGVHUFVzRGlmZmVyZW50UG93ZXJQcmVmZXJlbmNlTWV0YWwgTXVs
dGlwbGVHUFVzRGlmZmVyZW50UG93ZXJQcmVmZXJlbmNlTWV0YWwKKyNlbHNlCisjZGVmaW5lIE1B
WUJFX011bHRpcGxlR1BVc0RpZmZlcmVudFBvd2VyUHJlZmVyZW5jZU1ldGFsIERJU0FCTEVEX011
bHRpcGxlR1BVc0RpZmZlcmVudFBvd2VyUHJlZmVyZW5jZU1ldGFsCisjZW5kaWYKKy8vIFRlc3Rz
IGZvciBhIGJ1ZyB3aGVyZSBoaWdoLXBlcmZvcm1hbmNlIGNvbnRleHQgd291bGQgdXNlIGxvdy1w
b3dlciBHUFUgaWYgbG93LXBvd2VyIG9yIGRlZmF1bHQKKy8vIGNvbnRleHQgd2FzIGNyZWF0ZWQg
Zmlyc3QuIFRlc3QgaXMgYXBwbGljYWJsZSBvbmx5IGZvciBNZXRhbCwgc2luY2UgR1BVIHNlbGVj
dGlvbiBmb3IgT3BlbkdMIGlzCisvLyB2ZXJ5IGRpZmZlcmVudC4KK1RFU1RfRihHcmFwaGljc0Nv
bnRleHRHTENvY29hVGVzdCwgTUFZQkVfTXVsdGlwbGVHUFVzRGlmZmVyZW50UG93ZXJQcmVmZXJl
bmNlTWV0YWwpCit7CisgICAgaWYgKCFoYXNNdWx0aXBsZUdQVXMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7
CisgICAgYXR0cmlidXRlcy51c2VNZXRhbCA9IHRydWU7CisgICAgRVhQRUNUX0VRKGF0dHJpYnV0
ZXMucG93ZXJQcmVmZXJlbmNlLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVy
ZW5jZTo6RGVmYXVsdCk7CisgICAgYXV0byBkZWZhdWx0Q29udGV4dCA9IFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgeyBhdHRyaWJ1dGVzIH0pOworICAgIEFTU0VSVF9ORShkZWZhdWx0Q29udGV4dCwgbnVs
bHB0cik7CisKKyAgICBhdHRyaWJ1dGVzLnBvd2VyUHJlZmVyZW5jZSA9IFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpMb3dQb3dlcjsKKyAgICBhdXRvIGxvd1Bvd2Vy
Q29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZShXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgeyBhdHRyaWJ1dGVzIH0pOworICAgIEFTU0VS
VF9ORShsb3dQb3dlckNvbnRleHQsIG51bGxwdHIpOworCisgICAgYXR0cmlidXRlcy5wb3dlclBy
ZWZlcmVuY2UgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6SGln
aFBlcmZvcm1hbmNlOworICAgIGF1dG8gaGlnaFBlcmZvcm1hbmNlQ29udGV4dCA9IFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgeyBhdHRyaWJ1dGVzIH0pOworICAgIEFTU0VSVF9ORShoaWdoUGVyZm9ybWFu
Y2VDb250ZXh0LCBudWxscHRyKTsKKworICAgIEVYUEVDVF9ORShsb3dQb3dlckNvbnRleHQtPmdl
dFN0cmluZyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSRVIpLCBoaWdoUGVyZm9y
bWFuY2VDb250ZXh0LT5nZXRTdHJpbmcoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRF
UkVSKSk7CisgICAgRVhQRUNUX0VRKGRlZmF1bHRDb250ZXh0LT5nZXRTdHJpbmcoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkVSKSwgbG93UG93ZXJDb250ZXh0LT5nZXRTdHJpbmco
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkVSKSk7Cit9CisKK1RFU1RfRihHcmFw
aGljc0NvbnRleHRHTENvY29hVGVzdCwgRGlzcGxheUJ1ZmZlcnNBcmVSZWN5Y2xlZCkKK3sKKyAg
ICBhdXRvIGNvbnRleHQgPSBjcmVhdGVEZWZhdWx0VGVzdENvbnRleHQoeyAyMCwgMjAgfSk7Cisg
ICAgQVNTRVJUX05FKGNvbnRleHQsIG51bGxwdHIpOworICAgIFJldGFpblB0cjxJT1N1cmZhY2VS
ZWY+IGV4cGVjdGVkRGlzcGxheUJ1ZmZlcnNbZXhwZWN0ZWREaXNwbGF5QnVmZmVyUG9vbFNpemVd
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgICBFWFBFQ1RfVFJV
RShjaGFuZ2VDb250ZXh0Q29udGVudHMoKmNvbnRleHQsIGkpKTsKKyAgICAgICAgY29udGV4dC0+
cHJlcGFyZUZvckRpc3BsYXkoKTsKKyAgICAgICAgYXV0byogc3VyZmFjZSA9IGNvbnRleHQtPmRp
c3BsYXlCdWZmZXIoKTsKKyAgICAgICAgQVNTRVJUX05FKHN1cmZhY2UsIG51bGxwdHIpOworICAg
ICAgICBpbnQgc2xvdCA9IGkgJSBleHBlY3RlZERpc3BsYXlCdWZmZXJQb29sU2l6ZTsKKyAgICAg
ICAgaWYgKCFleHBlY3RlZERpc3BsYXlCdWZmZXJzW3Nsb3RdKQorICAgICAgICAgICAgZXhwZWN0
ZWREaXNwbGF5QnVmZmVyc1tzbG90XSA9IHN1cmZhY2UtPnN1cmZhY2UoKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGV4cGVjdGVkRGlzcGxheUJ1ZmZlcnNbc2xvdF0uZ2V0KCksIHN1cmZhY2UtPnN1cmZh
Y2UoKSkgPDwgImZvciBpOiIgPDwgaSA8PCAiIHNsb3Q6ICIgPDwgc2xvdDsKKyAgICB9CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZERpc3BsYXlCdWZmZXJQb29sU2l6ZSAtIDE7ICsr
aSkgeworICAgICAgICBmb3IgKGludCBqID0gaSArIDE7IGogPCBleHBlY3RlZERpc3BsYXlCdWZm
ZXJQb29sU2l6ZTsgKytqKQorICAgICAgICAgICAgRVhQRUNUX05FKGV4cGVjdGVkRGlzcGxheUJ1
ZmZlcnNbaV0uZ2V0KCksIGV4cGVjdGVkRGlzcGxheUJ1ZmZlcnNbal0uZ2V0KCkpIDw8ICJmb3Ig
aTogIiA8PCBpIDw8ICIgajoiIDw8IGo7CisgICAgfQorfQorCisvLyBUZXN0IHRoYXQgZHJhd2lu
ZyBidWZmZXJzIGFyZSBub3QgcmVjeWNsZWQgaWYgYEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YXJrRGlzcGxheUJ1ZmZlckluVXNlKClgCisvLyBpcyBjYWxsZWQuCitURVNUX0YoR3JhcGhpY3ND
b250ZXh0R0xDb2NvYVRlc3QsIERpc3BsYXlCdWZmZXJzQXJlTm90UmVjeWNsZWRXaGVuTWFya2Vk
SW5Vc2UpCit7CisgICAgYXV0byBjb250ZXh0ID0gY3JlYXRlRGVmYXVsdFRlc3RDb250ZXh0KHsg
MjAsIDIwIH0pOworICAgIEFTU0VSVF9ORShjb250ZXh0LCBudWxscHRyKTsKKyAgICBIYXNoU2V0
PFJldGFpblB0cjxJT1N1cmZhY2VSZWY+PiBzZWVuU3VyZmFjZVJlZnM7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoYW5nZUNvbnRleHRD
b250ZW50cygqY29udGV4dCwgaSkpOworICAgICAgICBjb250ZXh0LT5wcmVwYXJlRm9yRGlzcGxh
eSgpOworICAgICAgICBXZWJDb3JlOjpJT1N1cmZhY2UqIHN1cmZhY2UgPSBjb250ZXh0LT5kaXNw
bGF5QnVmZmVyKCk7CisgICAgICAgIEFTU0VSVF9ORShzdXJmYWNlLCBudWxscHRyKTsKKyAgICAg
ICAgSU9TdXJmYWNlUmVmIHN1cmZhY2VSZWYgPSBzdXJmYWNlLT5zdXJmYWNlKCk7CisgICAgICAg
IEVYUEVDVF9ORShzdXJmYWNlUmVmLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHNl
ZW5TdXJmYWNlUmVmcy5jb250YWlucyhzdXJmYWNlUmVmKSk7CisgICAgICAgIHNlZW5TdXJmYWNl
UmVmcy5hZGQoc3VyZmFjZVJlZik7CisKKyAgICAgICAgY29udGV4dC0+bWFya0Rpc3BsYXlCdWZm
ZXJJblVzZSgpOworICAgIH0KKyAgICBBU1NFUlRfRVEoc2VlblN1cmZhY2VSZWZzLnNpemUoKSwg
NTB1KTsKK30KKworLy8gVGVzdCB0aGF0IGRyYXdpbmcgYnVmZmVycyBhcmUgbm90IHJlY3ljbGVk
IGlmIHRoZSB1c2UgY291bnQgb2YgdGhlIHVuZGVybHlpbmcgSU9TdXJmYWNlCisvLyBjaGFuZ2Vz
LiBVc2UgY291bnQgaXMgbW9kaWZpZWQgZm9yIGV4YW1wbGUgYnkgQ29yZUFuaW1hdGlvbiB3aGVu
IHRoZSBJT1N1cmZhY2UgaXMgYXR0YWNoZWQKKy8vIHRvIHRoZSBjb250ZW50cy4KK1RFU1RfRihH
cmFwaGljc0NvbnRleHRHTENvY29hVGVzdCwgRGlzcGxheUJ1ZmZlcnNBcmVOb3RSZWN5Y2xlZFdo
ZWRJblVzZSkKK3sKKyAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVEZWZhdWx0VGVzdENvbnRleHQo
eyAyMCwgMjAgfSk7CisgICAgQVNTRVJUX05FKGNvbnRleHQsIG51bGxwdHIpOworICAgIEhhc2hT
ZXQ8UmV0YWluUHRyPElPU3VyZmFjZVJlZj4+IHNlZW5TdXJmYWNlUmVmczsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hhbmdlQ29udGV4
dENvbnRlbnRzKCpjb250ZXh0LCBpKSk7CisgICAgICAgIGNvbnRleHQtPnByZXBhcmVGb3JEaXNw
bGF5KCk7CisgICAgICAgIFdlYkNvcmU6OklPU3VyZmFjZSogc3VyZmFjZSA9IGNvbnRleHQtPmRp
c3BsYXlCdWZmZXIoKTsKKyAgICAgICAgQVNTRVJUX05FKHN1cmZhY2UsIG51bGxwdHIpOworICAg
ICAgICBJT1N1cmZhY2VSZWYgc3VyZmFjZVJlZiA9IHN1cmZhY2UtPnN1cmZhY2UoKTsKKyAgICAg
ICAgRVhQRUNUX05FKHN1cmZhY2VSZWYsIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
c2VlblN1cmZhY2VSZWZzLmNvbnRhaW5zKHN1cmZhY2VSZWYpKTsKKyAgICAgICAgc2VlblN1cmZh
Y2VSZWZzLmFkZChzdXJmYWNlUmVmKTsKKworICAgICAgICBJT1N1cmZhY2VJbmNyZW1lbnRVc2VD
b3VudChzdXJmYWNlUmVmKTsKKyAgICB9CisgICAgQVNTRVJUX0VRKHNlZW5TdXJmYWNlUmVmcy5z
aXplKCksIDUwdSk7Cit9CisKKy8vIFRlc3QgdGhhdCBkcmF3aW5nIHRvIEdyYXBoaWNzQ29udGV4
dEdMIGFuZCBtYXJraW5nIHRoZSBkaXNwbGF5IGJ1ZmZlciBpbiB1c2UgZG9lcyBub3QgbGVhayBi
aWcKKy8vIGFtb3VudHMgb2YgbWVtb3J5IGZvciBlYWNoIGRpc3BsYXllZCBidWZmZXIuCitURVNU
X0YoR3JhcGhpY3NDb250ZXh0R0xDb2NvYVRlc3QsIFVucmVjeWNsZWREaXNwbGF5QnVmZmVyc05v
TGVha3MpCit7CisgICAgLy8gVGhlIHRlc3QgZGV0ZWN0cyB0aGUgbGVhayBieSBvYnNlcnZpbmcg
bWVtb3J5IGZvb3RwcmludC4gSG93ZXZlciwgc29tZSBvZiB0aGUgZnJlZWQgSU9TdXJmYWNlCisg
ICAgLy8gbWVtb3J5ICgxMzBtYikgc3RheXMgcmVzaWRlbnQsIHByZXN1bWFibHkgYnkgaW50ZW50
aW9uIG9mIElPS2l0LiBUaGUgdGVzdCB3b3VsZCBvcmlnaW5hbGx5IGxlYWsKKyAgICAvLyAyLjdn
YiBzbyB0aGUgaW50ZW5kZWQgYnVnIHdvdWxkIGJlIGRldGVjdGVkIHdpdGggMTUwbWIgZXJyb3Ig
cmFuZ2UuCisgICAgc2l6ZV90IGZvb3RwcmludEVycm9yID0gMTUwICogMTAyNCAqIDEwMjQ7Cisg
ICAgc2l6ZV90IGZvb3RwcmludENoYW5nZSA9IDA7CisKKyAgICBhdXRvIGNvbnRleHQgPSBjcmVh
dGVEZWZhdWx0VGVzdENvbnRleHQoeyAyMDQ4LCAyMDQ4IH0pOworICAgIEFTU0VSVF9ORShjb250
ZXh0LCBudWxscHRyKTsKKworICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7
CisgICAgYXV0byBsYXN0Rm9vdHByaW50ID0gbWVtb3J5Rm9vdHByaW50KCk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hhbmdlQ29u
dGV4dENvbnRlbnRzKCpjb250ZXh0LCBpKSk7CisgICAgICAgIGNvbnRleHQtPnByZXBhcmVGb3JE
aXNwbGF5KCk7CisgICAgICAgIEVYUEVDVF9ORShjb250ZXh0LT5kaXNwbGF5QnVmZmVyKCksIG51
bGxwdHIpOworICAgICAgICBjb250ZXh0LT5tYXJrRGlzcGxheUJ1ZmZlckluVXNlKCk7CisgICAg
fQorCisgICAgRVhQRUNUX1RSVUUobWVtb3J5Rm9vdHByaW50Q2hhbmdlZEJ5KGxhc3RGb290cHJp
bnQsIGZvb3RwcmludENoYW5nZSwgZm9vdHByaW50RXJyb3IpKTsKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkzM2Q1MWIxNGUxMmQwODhjZGM1ZGRhYjdlODNl
ZTI4MTUxZTA0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQ29jb2EubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdC5oIgotCi0jaWYgUExB
VEZPUk0oQ09DT0EpICYmIEVOQUJMRShXRUJHTCkKLSNpbXBvcnQgIlRlc3RVdGlsaXRpZXMuaCIK
LSNpbXBvcnQgIldlYkNvcmVVdGlsaXRpZXMuaCIKLSNpbXBvcnQgPE1ldGFsL01ldGFsLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmg+Ci0jaW1wb3J0IDxvcHRpb25hbD4KLSNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+
Ci0jaW1wb3J0IDx3dGYvTWVtb3J5Rm9vdHByaW50Lmg+Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKLQotbmFtZXNwYWNlIHsKLQotY2xhc3MgVGVzdGVkR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWZQdHI8VGVzdGVkR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNyZWF0ZShX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICB7Ci0g
ICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0UmVmKCpuZXcgVGVzdGVkR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0woV1RGTW92ZShhdHRyaWJ1dGVzKSkpOwotICAgICAgICByZXR1cm4gY29udGV4dDsK
LSAgICB9Ci0gICAgV2ViQ29yZTo6SU9TdXJmYWNlKiBkaXNwbGF5QnVmZmVyKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCkuc3VyZmFjZS5nZXQoKTsK
LSAgICB9Ci0gICAgdm9pZCBtYXJrRGlzcGxheUJ1ZmZlckluVXNlKCkKLSAgICB7Ci0gICAgICAg
IG1fc3dhcENoYWluLm1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKTsKLSAgICB9Ci1wcml2YXRlOgot
ICAgIFRlc3RlZEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgICAgICA6IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKFdURk1vdmUoYXR0cmlidXRlcykpCi0gICAgewotICAgIH0KLX07Ci0KLWNs
YXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2FUZXN0IDogcHVibGljIDo6dGVzdGluZzo6
VGVzdCB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIC8vIE5PTElOVAotICAg
IHsKLSAgICAgICAgbV9zY29wZWRQcm9jZXNzVHlwZSA9IFNjb3BlZFNldEF1eGlsaWFyeVByb2Nl
c3NUeXBlRm9yVGVzdGluZyB7IFdlYkNvcmU6OkF1eGlsaWFyeVByb2Nlc3NUeXBlOjpHUFUgfTsK
LSAgICB9Ci0gICAgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIC8vIE5PTElOVAotICAgIHsKLSAg
ICAgICAgbV9zY29wZWRQcm9jZXNzVHlwZSA9IHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci1wcml2YXRl
OgotICAgIHN0ZDo6b3B0aW9uYWw8U2NvcGVkU2V0QXV4aWxpYXJ5UHJvY2Vzc1R5cGVGb3JUZXN0
aW5nPiBtX3Njb3BlZFByb2Nlc3NUeXBlOwotfTsKLQotfQotCi1zdGF0aWMgY29uc3QgaW50IGV4
cGVjdGVkRGlzcGxheUJ1ZmZlclBvb2xTaXplID0gMzsKLQotc3RhdGljIFJlZlB0cjxUZXN0ZWRH
cmFwaGljc0NvbnRleHRHTE9wZW5HTD4gY3JlYXRlRGVmYXVsdFRlc3RDb250ZXh0KFdlYkNvcmU6
OkludFNpemUgY29udGV4dFNpemUpCi17Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci0gICAgYXR0cmlidXRlcy51c2VNZXRhbCA9IHRydWU7Ci0g
ICAgYXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICBhdHRyaWJ1dGVzLmRlcHRoID0g
ZmFsc2U7Ci0gICAgYXR0cmlidXRlcy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgYXR0cmlidXRlcy5h
bHBoYSA9IHRydWU7Ci0gICAgYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBmYWxz
ZTsKLSAgICBhdXRvIGNvbnRleHQgPSBUZXN0ZWRHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlKGF0dHJpYnV0ZXMpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgY29udGV4dC0+cmVzaGFwZShjb250ZXh0U2l6ZS53aWR0aCgpLCBjb250ZXh0U2l6
ZS5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLXN0YXRpYyA6OnRlc3Rpbmc6
OkFzc2VydGlvblJlc3VsdCBjaGFuZ2VDb250ZXh0Q29udGVudHMoVGVzdGVkR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wmIGNvbnRleHQsIGludCBpdGVyYXRpb24pCi17Ci0gICAgY29udGV4dC5tYXJr
Q29udGV4dENoYW5nZWQoKTsKLSAgICBXZWJDb3JlOjpDb2xvciBleHBlY3RlZCB7IGl0ZXJhdGlv
biAlIDIgPyBXZWJDb3JlOjpDb2xvcjo6Z3JlZW4gOiBXZWJDb3JlOjpDb2xvcjo6eWVsbG93IH07
Ci0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBleHBlY3RlZC5jb2xvclNwYWNl
QW5kQ29tcG9uZW50cygpOwotICAgIFVOVVNFRF9WQVJJQUJMRShjb2xvclNwYWNlKTsKLSAgICBj
b250ZXh0LmNsZWFyQ29sb3IoY29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50
c1syXSwgY29tcG9uZW50c1szXSk7Ci0gICAgY29udGV4dC5jbGVhcihXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgdWludDhfdCBnb3RWYWx1ZXNbNF0g
PSB7IH07Ci0gICAgYXV0byBzYW1wbGVBdCA9IGNvbnRleHQuZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUoKTsKLSAgICBzYW1wbGVBdC5jb250cmFjdCgyLCAzKTsKLSAgICBzYW1wbGVBdC5jbGFt
cE5lZ2F0aXZlVG9aZXJvKCk7Ci0gICAgY29udGV4dC5yZWFkblBpeGVscyhzYW1wbGVBdC53aWR0
aCgpLCBzYW1wbGVBdC5oZWlnaHQoKSwgMSwgMSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6
OlJHQkEsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBnb3RWYWx1
ZXMpOwotICAgIFdlYkNvcmU6OkNvbG9yIGdvdCB7IFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+IHsg
Z290VmFsdWVzWzBdLCBnb3RWYWx1ZXNbMV0sIGdvdFZhbHVlc1syXSwgZ290VmFsdWVzWzNdIH0g
fTsKLSAgICBpZiAoZ290ICE9IGV4cGVjdGVkKQotICAgICAgICByZXR1cm4gOjp0ZXN0aW5nOjpB
c3NlcnRpb25GYWlsdXJlKCkgPDwgIkZhaWxlZCB0byB2ZXJpZnkgZHJhdyB0byBjb250ZXh0LiBH
b3Q6ICIgPDwgZ290IDw8ICIsIGV4cGVjdGVkOiAiIDw8IGV4cGVjdGVkIDw8ICIuIjsKLSAgICBy
ZXR1cm4gOjp0ZXN0aW5nOjpBc3NlcnRpb25TdWNjZXNzKCk7Ci19Ci0KLXN0YXRpYyBib29sIGhh
c011bHRpcGxlR1BVcygpCi17Ci0jaWYgKFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FU
QUxZU1QpKQotICAgIGF1dG8gZGV2aWNlcyA9IGFkb3B0TlMoTVRMQ29weUFsbERldmljZXMoKSk7
Ci0gICAgcmV0dXJuIFtkZXZpY2VzIGNvdW50XSA+IDE7Ci0jZWxzZQotICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgotfQotCi0jaWYgSEFWRShXRUJHTF9DT01QQVRJQkxFX01FVEFMKSAmJiAoUExB
VEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkpCi0jZGVmaW5lIE1BWUJFX011bHRp
cGxlR1BVc0RpZmZlcmVudFBvd2VyUHJlZmVyZW5jZU1ldGFsIE11bHRpcGxlR1BVc0RpZmZlcmVu
dFBvd2VyUHJlZmVyZW5jZU1ldGFsCi0jZWxzZQotI2RlZmluZSBNQVlCRV9NdWx0aXBsZUdQVXNE
aWZmZXJlbnRQb3dlclByZWZlcmVuY2VNZXRhbCBESVNBQkxFRF9NdWx0aXBsZUdQVXNEaWZmZXJl
bnRQb3dlclByZWZlcmVuY2VNZXRhbAotI2VuZGlmCi0vLyBUZXN0cyBmb3IgYSBidWcgd2hlcmUg
aGlnaC1wZXJmb3JtYW5jZSBjb250ZXh0IHdvdWxkIHVzZSBsb3ctcG93ZXIgR1BVIGlmIGxvdy1w
b3dlciBvciBkZWZhdWx0Ci0vLyBjb250ZXh0IHdhcyBjcmVhdGVkIGZpcnN0LiBUZXN0IGlzIGFw
cGxpY2FibGUgb25seSBmb3IgTWV0YWwsIHNpbmNlIEdQVSBzZWxlY3Rpb24gZm9yIE9wZW5HTCBp
cwotLy8gdmVyeSBkaWZmZXJlbnQuCi1URVNUX0YoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2Nv
YVRlc3QsIE1BWUJFX011bHRpcGxlR1BVc0RpZmZlcmVudFBvd2VyUHJlZmVyZW5jZU1ldGFsKQot
ewotICAgIGlmICghaGFzTXVsdGlwbGVHUFVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotICAgIGF0dHJp
YnV0ZXMudXNlTWV0YWwgPSB0cnVlOwotICAgIEVYUEVDVF9FUShhdHRyaWJ1dGVzLnBvd2VyUHJl
ZmVyZW5jZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U6OkRlZmF1
bHQpOwotICAgIGF1dG8gZGVmYXVsdENvbnRleHQgPSBUZXN0ZWRHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlKGF0dHJpYnV0ZXMpOwotICAgIEFTU0VSVF9ORShkZWZhdWx0Q29udGV4dCwg
bnVsbHB0cik7Ci0KLSAgICBhdHRyaWJ1dGVzLnBvd2VyUHJlZmVyZW5jZSA9IFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpMb3dQb3dlcjsKLSAgICBhdXRvIGxvd1Bv
d2VyQ29udGV4dCA9IFRlc3RlZEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoYXR0cmli
dXRlcyk7Ci0gICAgQVNTRVJUX05FKGxvd1Bvd2VyQ29udGV4dCwgbnVsbHB0cik7Ci0KLSAgICBh
dHRyaWJ1dGVzLnBvd2VyUHJlZmVyZW5jZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMUG93
ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2U7Ci0gICAgYXV0byBoaWdoUGVyZm9ybWFuY2VD
b250ZXh0ID0gVGVzdGVkR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShhdHRyaWJ1dGVz
KTsKLSAgICBBU1NFUlRfTkUoaGlnaFBlcmZvcm1hbmNlQ29udGV4dCwgbnVsbHB0cik7Ci0KLSAg
ICBFWFBFQ1RfTkUobG93UG93ZXJDb250ZXh0LT5nZXRTdHJpbmcoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0w6OlJFTkRFUkVSKSwgaGlnaFBlcmZvcm1hbmNlQ29udGV4dC0+Z2V0U3RyaW5nKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJFUikpOwotICAgIEVYUEVDVF9FUShkZWZh
dWx0Q29udGV4dC0+Z2V0U3RyaW5nKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJF
UiksIGxvd1Bvd2VyQ29udGV4dC0+Z2V0U3RyaW5nKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJFUikpOwotfQotCi1URVNUX0YoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYVRl
c3QsIERpc3BsYXlCdWZmZXJzQXJlUmVjeWNsZWQpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gY3Jl
YXRlRGVmYXVsdFRlc3RDb250ZXh0KHsgMjAsIDIwIH0pOwotICAgIEFTU0VSVF9ORShjb250ZXh0
LCBudWxscHRyKTsKLSAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBleHBlY3RlZERpc3BsYXlC
dWZmZXJzW2V4cGVjdGVkRGlzcGxheUJ1ZmZlclBvb2xTaXplXTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDUwOyArK2kpIHsKLSAgICAgICAgRVhQRUNUX1RSVUUoY2hhbmdlQ29udGV4dENvbnRl
bnRzKCpjb250ZXh0LCBpKSk7Ci0gICAgICAgIGNvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5KCk7
Ci0gICAgICAgIGF1dG8qIHN1cmZhY2UgPSBjb250ZXh0LT5kaXNwbGF5QnVmZmVyKCk7Ci0gICAg
ICAgIEFTU0VSVF9ORShzdXJmYWNlLCBudWxscHRyKTsKLSAgICAgICAgaW50IHNsb3QgPSBpICUg
ZXhwZWN0ZWREaXNwbGF5QnVmZmVyUG9vbFNpemU7Ci0gICAgICAgIGlmICghZXhwZWN0ZWREaXNw
bGF5QnVmZmVyc1tzbG90XSkKLSAgICAgICAgICAgIGV4cGVjdGVkRGlzcGxheUJ1ZmZlcnNbc2xv
dF0gPSBzdXJmYWNlLT5zdXJmYWNlKCk7Ci0gICAgICAgIEVYUEVDVF9FUShleHBlY3RlZERpc3Bs
YXlCdWZmZXJzW3Nsb3RdLmdldCgpLCBzdXJmYWNlLT5zdXJmYWNlKCkpIDw8ICJmb3IgaToiIDw8
IGkgPDwgIiBzbG90OiAiIDw8IHNsb3Q7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZXhwZWN0ZWREaXNwbGF5QnVmZmVyUG9vbFNpemUgLSAxOyArK2kpIHsKLSAgICAgICAgZm9yIChp
bnQgaiA9IGkgKyAxOyBqIDwgZXhwZWN0ZWREaXNwbGF5QnVmZmVyUG9vbFNpemU7ICsraikKLSAg
ICAgICAgICAgIEVYUEVDVF9ORShleHBlY3RlZERpc3BsYXlCdWZmZXJzW2ldLmdldCgpLCBleHBl
Y3RlZERpc3BsYXlCdWZmZXJzW2pdLmdldCgpKSA8PCAiZm9yIGk6ICIgPDwgaSA8PCAiIGo6IiA8
PCBqOwotICAgIH0KLX0KLQotLy8gVGVzdCB0aGF0IGRyYXdpbmcgYnVmZmVycyBhcmUgbm90IHJl
Y3ljbGVkIGlmIGBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFya0Rpc3BsYXlCdWZmZXJJblVz
ZSgpYAotLy8gaXMgY2FsbGVkLgotVEVTVF9GKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2FU
ZXN0LCBEaXNwbGF5QnVmZmVyc0FyZU5vdFJlY3ljbGVkV2hlbk1hcmtlZEluVXNlKQotewotICAg
IGF1dG8gY29udGV4dCA9IGNyZWF0ZURlZmF1bHRUZXN0Q29udGV4dCh7IDIwLCAyMCB9KTsKLSAg
ICBBU1NFUlRfTkUoY29udGV4dCwgbnVsbHB0cik7Ci0gICAgSGFzaFNldDxSZXRhaW5QdHI8SU9T
dXJmYWNlUmVmPj4gc2VlblN1cmZhY2VSZWZzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTA7
ICsraSkgewotICAgICAgICBFWFBFQ1RfVFJVRShjaGFuZ2VDb250ZXh0Q29udGVudHMoKmNvbnRl
eHQsIGkpKTsKLSAgICAgICAgY29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsKLSAgICAgICAg
V2ViQ29yZTo6SU9TdXJmYWNlKiBzdXJmYWNlID0gY29udGV4dC0+ZGlzcGxheUJ1ZmZlcigpOwot
ICAgICAgICBBU1NFUlRfTkUoc3VyZmFjZSwgbnVsbHB0cik7Ci0gICAgICAgIElPU3VyZmFjZVJl
ZiBzdXJmYWNlUmVmID0gc3VyZmFjZS0+c3VyZmFjZSgpOwotICAgICAgICBFWFBFQ1RfTkUoc3Vy
ZmFjZVJlZiwgbnVsbHB0cik7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShzZWVuU3VyZmFjZVJlZnMu
Y29udGFpbnMoc3VyZmFjZVJlZikpOwotICAgICAgICBzZWVuU3VyZmFjZVJlZnMuYWRkKHN1cmZh
Y2VSZWYpOwotCi0gICAgICAgIGNvbnRleHQtPm1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKTsKLSAg
ICB9Ci0gICAgQVNTRVJUX0VRKHNlZW5TdXJmYWNlUmVmcy5zaXplKCksIDUwdSk7Ci19Ci0KLS8v
IFRlc3QgdGhhdCBkcmF3aW5nIGJ1ZmZlcnMgYXJlIG5vdCByZWN5Y2xlZCBpZiB0aGUgdXNlIGNv
dW50IG9mIHRoZSB1bmRlcmx5aW5nIElPU3VyZmFjZQotLy8gY2hhbmdlcy4gVXNlIGNvdW50IGlz
IG1vZGlmaWVkIGZvciBleGFtcGxlIGJ5IENvcmVBbmltYXRpb24gd2hlbiB0aGUgSU9TdXJmYWNl
IGlzIGF0dGFjaGVkCi0vLyB0byB0aGUgY29udGVudHMuCi1URVNUX0YoR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xDb2NvYVRlc3QsIERpc3BsYXlCdWZmZXJzQXJlTm90UmVjeWNsZWRXaGVkSW5Vc2Up
Ci17Ci0gICAgYXV0byBjb250ZXh0ID0gY3JlYXRlRGVmYXVsdFRlc3RDb250ZXh0KHsgMjAsIDIw
IH0pOwotICAgIEFTU0VSVF9ORShjb250ZXh0LCBudWxscHRyKTsKLSAgICBIYXNoU2V0PFJldGFp
blB0cjxJT1N1cmZhY2VSZWY+PiBzZWVuU3VyZmFjZVJlZnM7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA1MDsgKytpKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGNoYW5nZUNvbnRleHRDb250ZW50
cygqY29udGV4dCwgaSkpOwotICAgICAgICBjb250ZXh0LT5wcmVwYXJlRm9yRGlzcGxheSgpOwot
ICAgICAgICBXZWJDb3JlOjpJT1N1cmZhY2UqIHN1cmZhY2UgPSBjb250ZXh0LT5kaXNwbGF5QnVm
ZmVyKCk7Ci0gICAgICAgIEFTU0VSVF9ORShzdXJmYWNlLCBudWxscHRyKTsKLSAgICAgICAgSU9T
dXJmYWNlUmVmIHN1cmZhY2VSZWYgPSBzdXJmYWNlLT5zdXJmYWNlKCk7Ci0gICAgICAgIEVYUEVD
VF9ORShzdXJmYWNlUmVmLCBudWxscHRyKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHNlZW5TdXJm
YWNlUmVmcy5jb250YWlucyhzdXJmYWNlUmVmKSk7Ci0gICAgICAgIHNlZW5TdXJmYWNlUmVmcy5h
ZGQoc3VyZmFjZVJlZik7Ci0KLSAgICAgICAgSU9TdXJmYWNlSW5jcmVtZW50VXNlQ291bnQoc3Vy
ZmFjZVJlZik7Ci0gICAgfQotICAgIEFTU0VSVF9FUShzZWVuU3VyZmFjZVJlZnMuc2l6ZSgpLCA1
MHUpOwotfQotCi0vLyBUZXN0IHRoYXQgZHJhd2luZyB0byBHcmFwaGljc0NvbnRleHRHTCBhbmQg
bWFya2luZyB0aGUgZGlzcGxheSBidWZmZXIgaW4gdXNlIGRvZXMgbm90IGxlYWsgYmlnCi0vLyBh
bW91bnRzIG9mIG1lbW9yeSBmb3IgZWFjaCBkaXNwbGF5ZWQgYnVmZmVyLgotVEVTVF9GKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMQ29jb2FUZXN0LCBVbnJlY3ljbGVkRGlzcGxheUJ1ZmZlcnNOb0xl
YWtzKQotewotICAgIC8vIFRoZSB0ZXN0IGRldGVjdHMgdGhlIGxlYWsgYnkgb2JzZXJ2aW5nIG1l
bW9yeSBmb290cHJpbnQuIEhvd2V2ZXIsIHNvbWUgb2YgdGhlIGZyZWVkIElPU3VyZmFjZQotICAg
IC8vIG1lbW9yeSAoMTMwbWIpIHN0YXlzIHJlc2lkZW50LCBwcmVzdW1hYmx5IGJ5IGludGVudGlv
biBvZiBJT0tpdC4gVGhlIHRlc3Qgd291bGQgb3JpZ2luYWxseSBsZWFrCi0gICAgLy8gMi43Z2Ig
c28gdGhlIGludGVuZGVkIGJ1ZyB3b3VsZCBiZSBkZXRlY3RlZCB3aXRoIDE1MG1iIGVycm9yIHJh
bmdlLgotICAgIHNpemVfdCBmb290cHJpbnRFcnJvciA9IDE1MCAqIDEwMjQgKiAxMDI0OwotICAg
IHNpemVfdCBmb290cHJpbnRDaGFuZ2UgPSAwOwotCi0gICAgYXV0byBjb250ZXh0ID0gY3JlYXRl
RGVmYXVsdFRlc3RDb250ZXh0KHsgMjA0OCwgMjA0OCB9KTsKLSAgICBBU1NFUlRfTkUoY29udGV4
dCwgbnVsbHB0cik7Ci0KLSAgICBXVEY6OnJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeSgpOwot
ICAgIGF1dG8gbGFzdEZvb3RwcmludCA9IG1lbW9yeUZvb3RwcmludCgpOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA1MDsgKytpKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGNoYW5nZUNvbnRl
eHRDb250ZW50cygqY29udGV4dCwgaSkpOwotICAgICAgICBjb250ZXh0LT5wcmVwYXJlRm9yRGlz
cGxheSgpOwotICAgICAgICBFWFBFQ1RfTkUoY29udGV4dC0+ZGlzcGxheUJ1ZmZlcigpLCBudWxs
cHRyKTsKLSAgICAgICAgY29udGV4dC0+bWFya0Rpc3BsYXlCdWZmZXJJblVzZSgpOwotICAgIH0K
LQotICAgIEVYUEVDVF9UUlVFKG1lbW9yeUZvb3RwcmludENoYW5nZWRCeShsYXN0Rm9vdHByaW50
LCBmb290cHJpbnRDaGFuZ2UsIGZvb3RwcmludEVycm9yKSk7Ci19Ci0KLX0KLQotI2VuZGlmCg==
</data>
<flag name="commit-queue"
          id="470271"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445133</attachid>
            <date>2021-11-25 03:45:19 -0800</date>
            <delta_ts>2021-11-25 05:22:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233491-20211125134516.patch</filename>
            <type>text/plain</type>
            <size>142490</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmIyZmY4NjgwYzM2ZGE1
YzRiZGNkNDM4MDAwMWY3MjVkMGVlYjc1Zi4uM2FjMTE1NDJhZDU2ODg5NWY3MTRiY2UzOGM5Njk4
Yjc2NmQ4NjNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIxLTExLTI1ICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0wgaW1wbGVtZW50YXRpb25zIHNob3VsZCBoYXZlIHNlcGFyYXRlIGNsYXNzIGRlZmluaXRp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM0
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
bmV3IGNvbmNyZXRlIGNsYXNzZXMgR3JhcGhpY3NDb250ZXh0R0xDb2NvYSBhbmQKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLgorICAgICAgICBJbiB0aGUgZnV0dXJlLCB0
aGUgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgbW92ZWQKKyAgICAgICAg
dG8gdGhlc2UgY2xhc3NlcywgcmVkdWNpbmcgdGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMICNp
ZmRlZnMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhIHJlZmFjdG9yLgorCisgICAgICAgICog
TW9kdWxlcy93ZWJ4ci9XZWJYUk9wYXF1ZUZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYlhST3BhcXVlRnJhbWVidWZmZXI6OnN0YXJ0RnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViWFJPcGFxdWVGcmFtZWJ1ZmZlcjo6ZW5kRnJhbWUpOgorICAgICAgICAqIFBsYXRmb3Jt
TWFjLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL1RleHR1cmVN
YXBwZXIuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3ND
b250ZXh0R0xDb2NvYS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbS4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTENvY29hOjpkaXNwbGF5QnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ29jb2E6Om1hcmtEaXNwbGF5QnVmZmVy
SW5Vc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6R3JhcGhp
Y3NDb250ZXh0R0xDb2NvYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTENv
Y29hOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
Q29jb2E6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6YXR0YWNoSU9T
dXJmYWNlVG9TaGFyZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQ29jb2E6OmRldGFjaElPU3VyZmFjZUZyb21TaGFyZWRUZXh0dXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5t
bTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZXNoYXBlRkJPcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyLmg6IEFkZGVkLgorCiAyMDIxLTExLTI1ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggR1RLIGRp
c3RjaGVjayBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4MDFhNzUyYmZjNWYzMzMyYjEwMjdhNDFiNzA4OWZl
Y2EwZTQxZjNmLi44MWJlYzMzODZmYTZhZTdiZDcwMmE0NmJkZDgwMDlkYTc0MzJhODFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTExLTI1ICBLaW1tbyBLaW5udW5lbiAgPGtraW5u
dW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wgaW1wbGVtZW50YXRp
b25zIHNob3VsZCBoYXZlIHNlcGFyYXRlIGNsYXNzIGRlZmluaXRpb25zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM0OTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhlIG5ldyBjb25jcmV0ZSBj
bGFzc2VzIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EgYW5kCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlciBpbiBHUFVQIFdlYkdMIGltcGxlbWV0YXRpb24uCisKKyAgICAgICAg
UmVtb3ZlIEdQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTCBhcyB0aGUgYWRkZWQgZnVuY3Rpb25h
bGl0eSBpcworICAgICAgICBub3cgaW4gdGhlIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL0dQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTC5o
OiBSZW1vdmVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMQ29jb2EuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpwbGF0Zm9ybVdvcmtRdWV1ZUluaXRpYWxpemUpOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbjo6cGxhdGZvcm1Xb3JrUXVldWVJbml0
aWFsaXplKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAyMS0xMS0yMyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAg
ICAgIE5vbi11bmlmaWVkIGJ1aWxkIGZpeGVzLCBtaWQgTm92ZW1iZXIgMjAyMSBlZGl0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhST3BhcXVlRnJhbWVi
dWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUk9wYXF1ZUZyYW1l
YnVmZmVyLmNwcAppbmRleCA2YTJkYmQ4NTE2ZDBjOTU4NGU1NTQ1ZWE2NWZhNjY4NWNhMmVmMWNm
Li5mMGQ5MzljODg0MjdlMmNhYWI2YWM4Mzk4ZjRhZTU1ZmJjMGYwM2RlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhST3BhcXVlRnJhbWVidWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJPcGFxdWVGcmFtZWJ1ZmZlci5j
cHAKQEAgLTUyLDcgKzUyLDcgQEAKIAogI2lmIFVTRShJT1NVUkZBQ0VfRk9SX1hSX0xBWUVSX0RB
VEEpCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENvY29hLmgiCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgV2ViWFJPcGFx
dWVGcmFtZWJ1ZmZlcjo6c3RhcnRGcmFtZShjb25zdCBQbGF0Zm9ybVhSOjpEZXZpY2U6OkZyYW1l
RGF0YTo6TGF5CiAgICAgYXV0byYgZ2wgPSAqbV9jb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCk7
CiAKICNpZiBVU0UoSU9TVVJGQUNFX0ZPUl9YUl9MQVlFUl9EQVRBKQotICAgIGF1dG8gZ0NHTCA9
IHN0YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKj4obV9jb250ZXh0LmdyYXBoaWNz
Q29udGV4dEdMKCkpOworICAgIGF1dG8gZ0NHTCA9IHN0YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EqPihtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgR0NHTGVudW0g
dGV4dHVyZVRhcmdldCA9IGdDR0wtPmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CiAgICAg
R0NHTGVudW0gdGV4dHVyZVRhcmdldEJpbmRpbmcgPSBnQ0dMLT5kcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldCh0ZXh0dXJlVGFyZ2V0KTsKICNlbHNlCkBAIC0x
NTUsNyArMTU1LDcgQEAgdm9pZCBXZWJYUk9wYXF1ZUZyYW1lYnVmZmVyOjpzdGFydEZyYW1lKGNv
bnN0IFBsYXRmb3JtWFI6OkRldmljZTo6RnJhbWVEYXRhOjpMYXkKICAgICAgICAgYXV0byBzaXpl
ID0gZGF0YS5zdXJmYWNlLT5zaXplKCk7CiAgICAgICAgIGlmICghc2l6ZS53aWR0aCgpIHx8ICFz
aXplLmhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2lvU3VyZmFjZVRl
eHR1cmVIYW5kbGUgPSBnQ0dMLT5jcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKHRleHR1
cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQYnVmZmVyQXR0YWNobWVudFVzYWdl
OjpXcml0ZSwgR0w6OkJHUkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgR0w6OlVOU0lH
TkVEX0JZVEUsIGRhdGEuc3VyZmFjZS0+c3VyZmFjZSgpLCAwKTsKKyAgICAgICAgbV9pb1N1cmZh
Y2VUZXh0dXJlSGFuZGxlID0gZ0NHTC0+Y3JlYXRlUGJ1ZmZlckFuZEF0dGFjaElPU3VyZmFjZSh0
ZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTENvY29hOjpQYnVmZmVyQXR0YWNobWVudFVz
YWdlOjpXcml0ZSwgR0w6OkJHUkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgR0w6OlVO
U0lHTkVEX0JZVEUsIGRhdGEuc3VyZmFjZS0+c3VyZmFjZSgpLCAwKTsKICAgICAgICAgbV9pb1N1
cmZhY2VUZXh0dXJlSGFuZGxlSXNTaGFyZWQgPSBmYWxzZTsKICAgICB9CiAKQEAgLTIzNSw3ICsy
MzUsNyBAQCB2b2lkIFdlYlhST3BhcXVlRnJhbWVidWZmZXI6OmVuZEZyYW1lKCkKIAogI2lmIFVT
RShJT1NVUkZBQ0VfRk9SX1hSX0xBWUVSX0RBVEEpCiAgICAgaWYgKG1faW9TdXJmYWNlVGV4dHVy
ZUhhbmRsZSkgewotICAgICAgICBhdXRvIGdDR0wgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCo+KCZnbCk7CisgICAgICAgIGF1dG8gZ0NHTCA9IHN0YXRpY19jYXN0PEdyYXBo
aWNzQ29udGV4dEdMQ29jb2EqPigmZ2wpOwogICAgICAgICBpZiAobV9pb1N1cmZhY2VUZXh0dXJl
SGFuZGxlSXNTaGFyZWQpIHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCiAg
ICAgICAgICAgICBnQ0dMLT5kZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZShtX2lvU3Vy
ZmFjZVRleHR1cmVIYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCAwYTI2MmM1
MTQ0NWZhMzk4OWU3YzVmZWUzNmYzZjkwYzQxNTA4YmRkLi4xYWYwOTVmOWQ5Y2JmMDk0YzU5YWIw
YTc0YTRjNTU5YjA1ODAxMTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMzE5LDgg
KzMxOSw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0KKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29hLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ludFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lP
U3VyZmFjZVBvb2xDb2NvYS5tbQpAQCAtMzI5LDcgKzMyOSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNvcmVEZWNvbXByZXNz
aW9uU2Vzc2lvbi5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0K
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvY29hLm1tCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViUHJvY2Vzc0dyYXBo
aWNzQ29udGV4dEdMQ29jb2EubW0KIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0Zv
bnRDYXNjYWRlQ29yZVRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENvcmVUZXh0LmNwcApAQCAtNjUyLDYgKzY1Miw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9y
Q29jb2EuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVU
ZXh0LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENvY29h
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VT
d2FwQ2hhaW4uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMWE0NjY4NmY3OGNkY2IyMzhiYWQ1ZjJhYzMyYTcyYzU0
MTc0NjNkZS4uZDJkMWI1NjVkMWQwOWI4ZGQxMmE5ZjUyMTlmNjlmMjdlMDY2NGMwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0zNzQsOCArMzc0LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRDb2NvYS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xJ
T1N1cmZhY2VTd2FwQ2hhaW4uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0
aWVzQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlUG9vbENvY29hLm1tCkBAIC0zOTEsNyArMzkxLDcg
QEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVn
YXRlLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlQ0FMYXllckV4dHJhcy5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViQ29yZURlY29tcHJlc3Npb25TZXNzaW9uLm1tCiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCi1wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQorcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0KIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRlV2ViTS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwYWNhN2MzMmM0
NTY4YjQzZTRiOTAxYmRiZDcyYzVmNWEwYmZjZDNjLi43ZTgzY2M2NjVmMzAxZGI4N2MzODM4ODM0
ZTVjZjFhMTc0MDI4NjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzY4LDYgKzIzNjgsNyBAQAogCQk3QjkwNDE3MDI1NTAx
MTQyMDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCOTA0MTZFMjU1MDExMDkw
MDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2Q0Ew
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJCODcz
OCAvKiBHcmFwaGljc0NoZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tz
TWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
N0JEREEzMUYyNzRGQTAyMTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzFEMjc0RjlE
QTUwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTENvY29hLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JFNzQyNzM4MUZBOTA2RkJCNEYwRjJD
IC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NTBDNEMwMkJFRDg5MzZGODE4RTJGOTkgLyogSlNTVkdHcmFwaGlj
c0VsZW1lbnQuaCAqLzsgfTsKIAkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlw
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDI5
QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MxODQzRkUxQzhCNzI4MzAwMkVCOTczIC8q
IEF1dG9maWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzE4NDNGQzFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTA2NCw3ICs5MDY1LDYgQEAKIAkJ
NDlFRUQxNEIxMDUxOTcxOTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGQzdB
NEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyog
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RkZCRjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExh
eWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMTGF5ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdl
YkdMTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJH
TExheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTBEQTJGQzEyOUIyNDE5
MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMTA3Miw3ICsxMTA3Miw3IEBACiAJCTdCMTAzMzlBMjU0OTcy
MDAwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0IxMDMzOUMyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IxMDMzOUQyNTQ5NzIwMTAwQzhDMUFDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQ1YuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xDVi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjE2MTkxMDI3MTk4ODBFMDBDNDBFQUMgLyog
V2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IxNjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlBy
b2Nlc3NHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
UHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdCNkRDODE1MjU3MTJFOTEwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3Vy
ZmFjZVN3YXBDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdCNkRDODE3MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRH
TElPU3VyZmFjZVN3YXBDaGFpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QjczMTFGQTI1QzA5MkI3MDAzQjI3OTYgLyogU2NvcGVkSGlnaFBlcmZvcm1h
bmNlR1BVUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRI
aWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTA4Nyw2ICsxMTA4Nyw4IEBACiAJCTdCQ0Q0MkQ4MjcwNTk5RUYwMEVCMjEyNyAvKiBBTkdM
RVV0aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBTkdMRVV0aWxpdGllcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQ0Q0MkRBMjcwNUM5NDkwMEVCMjEyNyAvKiBB
TkdMRVV0aWxpdGllc0NvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFOR0xFVXRpbGl0aWVz
Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkNENDJEQzI3MDVDOTQ5
MDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0
aWxpdGllc0NvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRERBMzFDMjc0
RjlEQTQwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JEREEzMUQyNzRGOURBNTAwMzg2NTlFIC8qIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QkU3MjY1QjI1NzYzQjhEMDBFODVEOTggLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxMUYzRDI0RkFEMzYwMDA1
QkVGMTAgLyogU2V0dGluZ3MuY3BwLmVyYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZXR0aW5ncy5jcHAuZXJiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxMUYzRTI0RkFEMzYwMDA1QkVGMTAgLyogSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5jcHAuZXJiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEludGVybmFsU2V0dGluZ3NHZW5lcmF0
ZWQuY3BwLmVyYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4MzA4LDkgKzI4MzEw
LDEwIEBACiAJCQkJMUMxMkFDMjkxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVjaWZp
Y2F0aW9uQ29yZVRleHQuaCAqLywKIAkJCQlCNTMyMEQ2QTEyMkEyNEU5MDAyRDE0NDAgLyogRm9u
dFBsYXRmb3JtRGF0YUNvY29hLm1tICovLAogCQkJCUIyNzdCNDAzMEIyMkYzN0MwMDA0QkVDNiAv
KiBHcmFwaGljc0NvbnRleHRDb2NvYS5tbSAqLywKKwkJCQk3QkREQTMxRDI3NEY5REE1MDAzODY1
OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oICovLAorCQkJCTdCRERBMzFDMjc0RjlEQTQw
MDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTENvY29hLm1tICovLAogCQkJCTdCNkRDODE1MjU3
MTJFOTEwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5jcHAg
Ki8sCiAJCQkJN0I2REM4MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9T
dXJmYWNlU3dhcENoYWluLmggKi8sCi0JCQkJNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4IC8qIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gKi8sCiAJCQkJQ0RBNTk1OTYyMTQ2REY3ODAw
QTg0MTg1IC8qIEhFVkNVdGlsaXRpZXNDb2NvYS5oICovLAogCQkJCUNEQTU5NTk3MjE0NkRGNzgw
MEE4NDE4NSAvKiBIRVZDVXRpbGl0aWVzQ29jb2EubW0gKi8sCiAJCQkJQjI3NTM1NTAwQjA1Mzgx
NDAwMkNFNjRGIC8qIEludFJlY3RDb2NvYS5tbSAqLywKQEAgLTI4MzQ1LDcgKzI4MzQ4LDcgQEAK
IAkJCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAqLywKIAkJCQkw
N0Y1Q0ZGNDI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCAqLywK
IAkJCQkwN0Y1Q0ZGMjI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2Eu
bW0gKi8sCi0JCQkJN0IxNjE5MTAyNzE5ODgwRTAwQzQwRUFDIC8qIFdlYlByb2Nlc3NHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvY29hLm1tICovLAorCQkJCTdCMTYxOTEwMjcxOTg4MEUwMEM0MEVB
QyAvKiBXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbSAqLywKIAkJCSk7CiAJCQlw
YXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzM2OTksNiArMzM3
MDIsNyBAQAogCQkJCUY0Mjk5NEZBMjcwQ0ZFNDgwMDMyMjk4QiAvKiBHcmFwaGljc0NvbnRleHRG
bHVzaElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxM0RFODcwMjNBOTY5NzMwMDhG
QzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MzMzBBMDIx
REY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJN0JEREEzMUYyNzRGQTAyMTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCMTAzMzlFMjU0OTcyMTcwMEM4QzFBQyAvKiBH
cmFwaGljc0NvbnRleHRHTENWLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjEwMzM5RjI1NDk3MjFF
MDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3QkIzNEE0ODI1Mzc3NkNBMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1h
cHBlci5jbWFrZQppbmRleCBhZmRhOGE0MmExZDAxZWNiYzg3N2FiODBkMThiYWM0NWFkN2RmMTM1
Li4zZjNjMTAyYTVmYTk0MmY3YmNhZDYwMmMyYzRiMTM0MWRiMTNiYjUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTI0LDYgKzI0LDcgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0FOR0xFQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0JpdG1hcFRleHR1cmUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3Rh
Y2suaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1
cmVNYXBwZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZGJjNGY3M2Y1ZTEy
MjgxZGY1ZTMyZTVmNmQ3MDk1ZTczODhjMmNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTENvY29hPiBjcmVhdGUoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzJiYpOworICAgIH5HcmFwaGljc0NvbnRleHRHTENvY29hKCk7Cisg
ICAgSU9TdXJmYWNlKiBkaXNwbGF5QnVmZmVyKCk7CisgICAgdm9pZCBtYXJrRGlzcGxheUJ1ZmZl
ckluVXNlKCk7CisKKyAgICBlbnVtIGNsYXNzIFBidWZmZXJBdHRhY2htZW50VXNhZ2UgeyBSZWFk
LCBXcml0ZSwgUmVhZFdyaXRlIH07CisgICAgLy8gUmV0dXJucyBhIGhhbmRsZSB3aGljaCwgaWYg
bm9uLW51bGwsIG11c3QgYmUgcmVsZWFzZWQgdmlhIHRoZQorICAgIC8vIGRldGFjaCBjYWxsIGJl
bG93LgorICAgIHZvaWQqIGNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0g
dGFyZ2V0LCBQYnVmZmVyQXR0YWNobWVudFVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZh
Y2VSZWYsIEdDR0x1aW50IHBsYW5lKTsKKyAgICB2b2lkIGRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNo
SU9TdXJmYWNlKHZvaWQqIGhhbmRsZSk7CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxB
VE9SKQorICAgIHZvaWQqIGF0dGFjaElPU3VyZmFjZVRvU2hhcmVkVGV4dHVyZShHQ0dMZW51bSB0
YXJnZXQsIElPU3VyZmFjZSopOworICAgIHZvaWQgZGV0YWNoSU9TdXJmYWNlRnJvbVNoYXJlZFRl
eHR1cmUodm9pZCogaGFuZGxlKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgR3JhcGhpY3ND
b250ZXh0R0xDb2NvYShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7Cisg
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xD
b2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNz
Q29udGV4dEdMQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNhYmNjOTAzNzJjYWJiMDEzMzQ2MDRhODk0
ZTdiNmNjY2ZiNmUxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0KQEAgLTAsMCArMSw4Mjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0R0xDb2NvYS5oIgorCisjaW1wb3J0ICJBTkdMRVV0aWxpdGllcy5oIgorI2ltcG9ydCAi
QU5HTEVVdGlsaXRpZXNDb2NvYS5oIgorI2ltcG9ydCAiQ1ZVdGlsaXRpZXMuaCIKKyNpbXBvcnQg
IkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTElPU3VyZmFj
ZVN3YXBDaGFpbi5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgi
CisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
aCIKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KKyNpbXBvcnQgPE1l
dGFsL01ldGFsLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL01ldGFsU1BJLmg+CisjaW1wb3J0
IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL2Rhcndpbi9XZWFrTGlu
a2luZy5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxF
KFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRS5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUg
Ik1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2VuZGlmCisKK1dURl9XRUFLX0xJTktfRk9SQ0VfSU1Q
T1JUKEVHTF9Jbml0aWFsaXplKTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIHBsYXRm
b3JtSXNBTkdMRUF2YWlsYWJsZSgpCit7CisgICAgLy8gVGhlIEFOR0xFIGlzIHdlYWsgbGlua2Vk
IGluIGZ1bGwsIGFuZCB0aGUgRUdMX0luaXRpYWxpemUgaXMgZXhwbGljaXRseSB3ZWFrIGxpbmtl
ZCBhYm92ZQorICAgIC8vIHNvIHRoYXQgd2UgY2FuIGRldGVjdCB0aGUgY2FzZSB3aGVyZSBBTkdM
RSBpcyBub3QgcHJlc2VudC4KKyAgICByZXR1cm4gISFFR0xfSW5pdGlhbGl6ZTsKK30KKworLy8g
SW4gaXNDdXJyZW50Q29udGV4dFByZWRpY3RhYmxlKCkgPT0gdHJ1ZSBjYXNlIHRoaXMgdmFyaWFi
bGUgaXMgYWNjZXNzZWQgaW4gc2luZ2xlLXRocmVhZGVkIG1hbm5lci4KKy8vIEluIGlzQ3VycmVu
dENvbnRleHRQcmVkaWN0YWJsZSgpID09IGZhbHNlIGNhc2UgdGhpcyB2YXJpYWJsZSBpcyBhY2Nl
c3NlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYnV0IGFsd2F5cyBzZXF1ZW50aWFsbHkKKy8vIGFu
ZCBpdCBhbHdheXMgY29udGFpbnMgbnVsbHB0ciBhbmQgbnVsbHB0ciBpcyBhbHdheXMgd3JpdHRl
biB0byBpdC4KK3N0YXRpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY3VycmVudENvbnRleHQ7
CisKK3N0YXRpYyBib29sIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpCit7CisgICAgc3Rh
dGljIGJvb2wgdmFsdWUgPSBpc0luV2ViUHJvY2VzcygpIHx8IGlzSW5HUFVQcm9jZXNzKCk7Cisg
ICAgcmV0dXJuIHZhbHVlOworfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKy8vIFJldHVybnMgdHJ1
ZSBpZiB3ZSBoYXZlIHZvbGF0aWxlIGNvbnRleHQgZXh0ZW5zaW9uIGZvciB0aGUgcGFydGljdWxh
ciBBUEkgb3IKKy8vIGlmIHRoZSBwYXJ0aWN1bGFyIEFQSSBpcyBub3QgdXNlZC4KK3N0YXRpYyBi
b29sIGNoZWNrVm9sYXRpbGVDb250ZXh0U3VwcG9ydElmRGV2aWNlRXhpc3RzKEVHTERpc3BsYXkg
ZGlzcGxheSwgY29uc3QgY2hhciogZGV2aWNlQ29udGV4dFZvbGF0aWxlRXh0ZW5zaW9uLAorICAg
IGNvbnN0IGNoYXIqIGRldmljZUNvbnRleHRFeHRlbnNpb24sIEVHTGludCBkZXZpY2VDb250ZXh0
VHlwZSkKK3sKKyAgICBjb25zdCBjaGFyICpjbGllbnRFeHRlbnNpb25zID0gRUdMX1F1ZXJ5U3Ry
aW5nKEVHTF9OT19ESVNQTEFZLCBFR0xfRVhURU5TSU9OUyk7CisgICAgaWYgKGNsaWVudEV4dGVu
c2lvbnMgJiYgc3Ryc3RyKGNsaWVudEV4dGVuc2lvbnMsIGRldmljZUNvbnRleHRWb2xhdGlsZUV4
dGVuc2lvbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIEVHTERldmljZUVYVCBkZXZpY2Ug
PSBFR0xfTk9fREVWSUNFX0VYVDsKKyAgICBpZiAoIUVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQo
ZGlzcGxheSwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRl
dmljZSkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZGV2aWNlID09IEVHTF9OT19E
RVZJQ0VfRVhUKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBjaGFyKiBkZXZpY2VF
eHRlbnNpb25zID0gRUdMX1F1ZXJ5RGV2aWNlU3RyaW5nRVhUKGRldmljZSwgRUdMX0VYVEVOU0lP
TlMpOworICAgIGlmICghZGV2aWNlRXh0ZW5zaW9ucyB8fCAhc3Ryc3RyKGRldmljZUV4dGVuc2lv
bnMsIGRldmljZUNvbnRleHRFeHRlbnNpb24pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB2
b2lkKiBkZXZpY2VDb250ZXh0ID0gbnVsbHB0cjsKKyAgICBpZiAoIUVHTF9RdWVyeURldmljZUF0
dHJpYkVYVChkZXZpY2UsIGRldmljZUNvbnRleHRUeXBlLCByZWludGVycHJldF9jYXN0PEVHTEF0
dHJpYio+KCZkZXZpY2VDb250ZXh0KSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biAhZGV2aWNlQ29udGV4dDsKK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbCBwbGF0Zm9ybVN1cHBv
cnRzTWV0YWwoYm9vbCBpc1dlYkdMMikKK3sKKyAgICBhdXRvIGRldmljZSA9IGFkb3B0TlMoTVRM
Q3JlYXRlU3lzdGVtRGVmYXVsdERldmljZSgpKTsKKworICAgIGlmIChkZXZpY2UpIHsKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCisg
ICAgICAgIC8vIEE4IGRldmljZXMgKGlQYWQgTWluaSA0LCBpUGFkIEFpciAyKSBjYW5ub3QgdXNl
IFdlYkdMMiB2aWEgTWV0YWwuCisgICAgICAgIC8vIFRoaXMgY2hlY2sgY2FuIGJlIHJlbW92ZWQg
b25jZSB0aGV5IGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLgorICAgICAgICBpZiAoaXNXZWJHTDIp
CisgICAgICAgICAgICByZXR1cm4gW2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlB
cHBsZTNdOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKGlzV2ViR0wyKTsKKyNlbmRpZgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgRUdMRGlzcGxheSBpbml0aWFsaXplRUdMRGlzcGxheShjb25zdCBHcmFwaGljc0Nv
bnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJzKQoreworICAgIGlmICghcGxhdGZvcm1Jc0FOR0xFQXZh
aWxhYmxlKCkpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgdG8gbG9hZCBBTkdMRSBz
aGFyZWQgbGlicmFyeS4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZOworICAgIH0K
KworICAgIEVHTGludCBtYWpvclZlcnNpb24gPSAwOworICAgIEVHTGludCBtaW5vclZlcnNpb24g
PSAwOworICAgIEVHTERpc3BsYXkgZGlzcGxheTsKKworICAgIFZlY3RvcjxFR0xpbnQ+IGRpc3Bs
YXlBdHRyaWJ1dGVzOworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbWUgaW4gZnJvbSB0
aGUgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLgorICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6
ZVdpdGhWb2xhdGlsZUNvbnRleHRTdXBwb3J0ID0gIWlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpOworICAgIGlmIChzaG91bGRJbml0aWFsaXplV2l0aFZvbGF0aWxlQ29udGV4dFN1cHBvcnQp
IHsKKyAgICAgICAgLy8gRm9yIFdLMSB0eXBlIEFQSXMgd2UgbmVlZCB0byBzZXQgInZvbGF0aWxl
IHBsYXRmb3JtIGNvbnRleHQiIGZvciBzcGVjaWZpYworICAgICAgICAvLyBBUElzLCBzaW5jZSBj
bGllbnQgY29kZSB3aWxsIGJlIGFibGUgdG8gb3ZlcnJpZGUgdGhlIHRocmVhZC1nbG9iYWwgY29u
dGV4dAorICAgICAgICAvLyB0aGF0IEFOR0xFIGV4cGVjdHMuCisgICAgICAgIGRpc3BsYXlBdHRy
aWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVfREVWSUNFX0NPTlRFWFRfVk9MQVRJTEVf
RUFHTF9BTkdMRSk7CisgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7
CisgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVfREVW
SUNFX0NPTlRFWFRfVk9MQVRJTEVfQ0dMX0FOR0xFKTsKKyAgICAgICAgZGlzcGxheUF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9UUlVFKTsKKyAgICB9CisKKyAgICBMT0coV2ViR0wsICJBdHRlbXB0aW5n
IHRvIHVzZSBBTkdMRSdzICVzIGJhY2tlbmQuIiwgYXR0cnMudXNlTWV0YWwgPyAiTWV0YWwiIDog
Ik9wZW5HTCIpOworICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVmYXVsdERpc3BsYXk7CisgICAgaWYgKGF0dHJzLnVzZU1l
dGFsKSB7CisgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5H
TEVfVFlQRV9BTkdMRSk7CisgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExB
VEZPUk1fQU5HTEVfVFlQRV9NRVRBTF9BTkdMRSk7CisgICAgICAgIC8vIFRoZXNlIHByb3BlcnRp
ZXMgYXJlIGRlZmluZWQgZm9yIEVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIGFzIEVHTENvbnRl
eHQgYXR0cmlidXRlcywKKyAgICAgICAgLy8gYnV0IE1ldGFsIGJhY2tlbmQgdXNlcyBFR0xEaXNw
bGF5IGF0dHJpYnV0ZXMuCisgICAgICAgIGF1dG8gcG93ZXJQcmVmZXJlbmNlID0gYXR0cnMuZm9y
Y2VSZXF1ZXN0Rm9ySGlnaFBlcmZvcm1hbmNlR1BVID8gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzOjpQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSA6IGF0dHJzLnBvd2VyUHJlZmVy
ZW5jZTsKKyAgICAgICAgaWYgKHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXM6OlBvd2VyUHJlZmVyZW5jZTo6TG93UG93ZXIpIHsKKyAgICAgICAgICAgIGRpc3Bs
YXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7CisgICAgICAg
ICAgICBkaXNwbGF5QXR0cmlidXRlcy5hcHBlbmQoRUdMX0xPV19QT1dFUl9BTkdMRSk7CisgICAg
ICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omxvd1Bvd2Vy
RGlzcGxheTsKKyAgICAgICAgfSBlbHNlIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgewor
ICAgICAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJFTkNF
X0FOR0xFKTsKKyAgICAgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfSElHSF9Q
T1dFUl9BTkdMRSk7CisgICAgICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmhpZ2hQZXJmb3JtYW5jZURpc3BsYXk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKKyAgICBkaXNwbGF5ID0gRUdMX0dl
dFBsYXRmb3JtRGlzcGxheUVYVChFR0xfUExBVEZPUk1fQU5HTEVfQU5HTEUsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KG5hdGl2ZURpc3BsYXkpLCBkaXNwbGF5QXR0cmlidXRlcy5kYXRhKCkpOwor
CisgICAgaWYgKEVHTF9Jbml0aWFsaXplKGRpc3BsYXksICZtYWpvclZlcnNpb24sICZtaW5vclZl
cnNpb24pID09IEVHTF9GQUxTRSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IElu
aXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZOwor
ICAgIH0KKyAgICBMT0coV2ViR0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6
ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb24pOworICAgIGlmIChzaG91bGRJbml0aWFs
aXplV2l0aFZvbGF0aWxlQ29udGV4dFN1cHBvcnQpIHsKKyAgICAgICAgLy8gQWZ0ZXIgaW5pdGlh
bGl6YXRpb24sIEVHTF9ERUZBVUxUX0RJU1BMQVkgd2lsbCByZXR1cm4gdGhlIHBsYXRmb3JtLWN1
c3RvbWl6ZWQgZGlzcGxheS4KKyAgICAgICAgQVNTRVJUKGRpc3BsYXkgPT0gRUdMX0dldERpc3Bs
YXkobmF0aXZlRGlzcGxheSkpOworICAgICAgICBBU1NFUlQoY2hlY2tWb2xhdGlsZUNvbnRleHRT
dXBwb3J0SWZEZXZpY2VFeGlzdHMoZGlzcGxheSwgIkVHTF9BTkdMRV9wbGF0Zm9ybV9kZXZpY2Vf
Y29udGV4dF92b2xhdGlsZV9lYWdsIiwgIkVHTF9BTkdMRV9kZXZpY2VfZWFnbCIsIEVHTF9FQUdM
X0NPTlRFWFRfQU5HTEUpKTsKKyAgICAgICAgQVNTRVJUKGNoZWNrVm9sYXRpbGVDb250ZXh0U3Vw
cG9ydElmRGV2aWNlRXhpc3RzKGRpc3BsYXksICJFR0xfQU5HTEVfcGxhdGZvcm1fZGV2aWNlX2Nv
bnRleHRfdm9sYXRpbGVfY2dsIiwgIkVHTF9BTkdMRV9kZXZpY2VfY2dsIiwgRUdMX0NHTF9DT05U
RVhUX0FOR0xFKSk7CisgICAgfQorICAgIHJldHVybiBkaXNwbGF5OworfQorCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgc3RhdHVzQ2hlY2tUaHJlc2hvbGQgPSA1OworCisjaWYgUExBVEZPUk0oTUFD
KSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKK3N0YXRpYyBib29sIG5lZWRzRUFHTE9uTWFjKCkK
K3sKKyNpZiBQTEFURk9STShNQUNDQVRBTFlTVCkgJiYgQ1BVKEFSTTY0KQorICAgIHJldHVybiB0
cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKyNlbmRpZgorCitSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0R0xDb2NvYT4gR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6Y3JlYXRl
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCit7Cisg
ICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0NvbnRleHRHTENvY29hKFdU
Rk1vdmUoYXR0cmlidXRlcykpKTsKKyAgICBpZiAoIWNvbnRleHQtPmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK0dyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6On5HcmFwaGljc0NvbnRleHRHTENvY29hKCkgPSBkZWZhdWx0OworCitJT1N1
cmZhY2UqIEdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmRpc3BsYXlCdWZmZXIoKQoreworICAgIHJl
dHVybiBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCkuc3VyZmFjZS5nZXQoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTENvY29hOjptYXJrRGlzcGxheUJ1ZmZlckluVXNlKCkKK3sKKyAg
ICByZXR1cm4gbV9zd2FwQ2hhaW4ubWFya0Rpc3BsYXlCdWZmZXJJblVzZSgpOworfQorCitHcmFw
aGljc0NvbnRleHRHTENvY29hOjpHcmFwaGljc0NvbnRleHRHTENvY29hKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCisgICAgOiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQoreworfQorCisvLyBGSVhNRTogQmVsb3cg
aXMgZnVuY3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRH
TENvY29hIHRvIHNpbXBsaWZ5IHRoZSBiYXNlIGNsYXNzLgorCitHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
IGF0dHJzKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cnMpCit7CisgICAgbV9pc0Zvcldl
YkdMMiA9IGF0dHJzLndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lv
bjo6V2ViR0wyOworICAgIGlmIChhdHRycy51c2VNZXRhbCAmJiAhcGxhdGZvcm1TdXBwb3J0c01l
dGFsKG1faXNGb3JXZWJHTDIpKSB7CisgICAgICAgIGF0dHJzLnVzZU1ldGFsID0gZmFsc2U7Cisg
ICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICB9CisKKyNpZiBFTkFCTEUo
V0VCWFIpCisgICAgaWYgKGF0dHJzLnhyQ29tcGF0aWJsZSkgeworICAgICAgICAvLyBGSVhNRTog
SXQncyBhbG1vc3QgY2VydGFpbiB0aGF0IGFueSBjb25uZWN0ZWQgaGVhZHNldCB3aWxsIHJlcXVp
cmUgdGhlIGhpZ2gtcG93ZXIgR1BVLAorICAgICAgICAvLyB3aGljaCBpcyB0aGUgc2FtZSBHUFUg
d2UgbmVlZCB0aGlzIGNvbnRleHQgdG8gdXNlLiBIb3dldmVyLCB0aGlzIGlzIG5vdCBndWFyYW50
ZWVkLCBhbmQKKyAgICAgICAgLy8gdGhlcmUgaXMgYWxzbyB0aGUgY2hhbmNlIHRoYXQgdGhlcmUg
YXJlIG11bHRpcGxlIEdQVXMuIEdpdmVuIHRoYXQgeW91IGNhbiByZXF1ZXN0IHRoZQorICAgICAg
ICAvLyBHcmFwaGljc0NvbnRleHRHTCBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBXZWJYUiBzZXNz
aW9uLCB3ZSdsbCBuZWVkIHNvbWUgd2F5IHRvCisgICAgICAgIC8vIG1pZ3JhdGUgdGhlIGNvbnRl
eHQgdG8gdGhlIGFwcHJvcHJpYXRlIEdQVSB3aGVuIHRoZSBjb2RlIGhlcmUgZG9lcyBub3Qgd29y
ay4KKyAgICAgICAgTE9HKFdlYkdMLCAiV2ViWFIgY29tcGF0aWJsZSBjb250ZXh0IHJlcXVlc3Rl
ZC4gVGhpcyB3aWxsIGFsc28gdHJpZ2dlciBhIHJlcXVlc3QgZm9yIHRoZSBoaWdoLXBvd2VyIEdQ
VS4iKTsKKyAgICAgICAgYXR0cnMuZm9yY2VSZXF1ZXN0Rm9ySGlnaFBlcmZvcm1hbmNlR1BVID0g
dHJ1ZTsKKyAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOworICAgIH0KKyNlbmRp
ZgorCisgICAgbV9kaXNwbGF5T2JqID0gaW5pdGlhbGl6ZUVHTERpc3BsYXkoYXR0cnMpOworICAg
IGlmICghbV9kaXNwbGF5T2JqKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShNQUMp
CisgICAgaWYgKCFhdHRycy51c2VNZXRhbCkgeworICAgICAgICAvLyBGb3IgT3BlbkdMLCBFR0xf
QU5HTEVfcG93ZXJfcHJlZmVyZW5jZSBpcyB1c2VkLiBUaGUgY29udGV4dCBpcyBpbml0aWFsaXpl
ZCB3aXRoIHRoZQorICAgICAgICAvLyBkZWZhdWx0LCBsb3ctcG93ZXIgZGV2aWNlLiBGb3IgaGln
aC1wZXJmb3JtYW5jZSBjb250ZXh0cywgd2UgcmVxdWVzdCB0aGUgaGlnaC1wZXJmb3JtYW5jZQor
ICAgICAgICAvLyBHUFUgaW4gc2V0Q29udGV4dFZpc2liaWxpdHkuIFdoZW4gdGhlIHJlcXVlc3Qg
aXMgZnVsbGZpbGxlZCBieSB0aGUgc3lzdGVtLCB3ZSBnZXQgdGhlCisgICAgICAgIC8vIGRpc3Bs
YXkgcmVjb25maWd1cmF0aW9uIGNhbGxiYWNrLiBVcG9uIHRoaXMsIHdlIHVwZGF0ZSB0aGUgQ0dM
IGNvbnRleHRzIGluc2lkZSBBTkdMRS4KKyAgICAgICAgY29uc3QgY2hhciAqZGlzcGxheUV4dGVu
c2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcobV9kaXNwbGF5T2JqLCBFR0xfRVhURU5TSU9OUyk7Cisg
ICAgICAgIGJvb2wgc3VwcG9ydHNQb3dlclByZWZlcmVuY2UgPSBzdHJzdHIoZGlzcGxheUV4dGVu
c2lvbnMsICJFR0xfQU5HTEVfcG93ZXJfcHJlZmVyZW5jZSIpOworICAgICAgICBpZiAoc3VwcG9y
dHNQb3dlclByZWZlcmVuY2UpIHsKKyAgICAgICAgICAgIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlS
ZWNvbmZpZ3VyYXRpb24gPSBhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0
R0xQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZQorICAgICAgICAgICAgICAgIHx8IGF0
dHJzLmZvcmNlUmVxdWVzdEZvckhpZ2hQZXJmb3JtYW5jZUdQVTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0
R0xQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgeworICAgICAgICAgICAgICAgIGF0
dHJzLnBvd2VyUHJlZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpE
ZWZhdWx0OworICAgICAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgRUdMaW50IGNvbmZp
Z0F0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9FUzJfQklULAorICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9T
SVpFLCA4LAorICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0la
RSwgOCwKKyAgICAgICAgRUdMX0RFUFRIX1NJWkUsIDAsCisgICAgICAgIEVHTF9TVEVOQ0lMX1NJ
WkUsIDAsCisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKyAgICBFR0xpbnQgbnVtYmVyQ29uZmln
c1JldHVybmVkID0gMDsKKyAgICBFR0xfQ2hvb3NlQ29uZmlnKG1fZGlzcGxheU9iaiwgY29uZmln
QXR0cmlidXRlcywgJm1fY29uZmlnT2JqLCAxLCAmbnVtYmVyQ29uZmlnc1JldHVybmVkKTsKKyAg
ICBpZiAobnVtYmVyQ29uZmlnc1JldHVybmVkICE9IDEpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAi
RUdMQ29uZmlnIEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29uZmlnIik7CisKKyAgICBFR0xfQmluZEFQSShF
R0xfT1BFTkdMX0VTX0FQSSk7CisgICAgaWYgKEVHTF9HZXRFcnJvcigpICE9IEVHTF9TVUNDRVNT
KSB7CisgICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRvIE9QRU5HTF9FU19BUEki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxFR0xpbnQ+IGVnbENvbnRl
eHRBdHRyaWJ1dGVzOworICAgIGlmIChtX2lzRm9yV2ViR0wyKSB7CisgICAgICAgIGVnbENvbnRl
eHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7CisgICAgICAg
IGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZCgzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
Z2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOwor
ICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMik7CisgICAgICAgIC8vIEFOR0xF
IHdpbGwgdXBncmFkZSB0aGUgY29udGV4dCB0byBFUzMgYXV0b21hdGljYWxseSB1bmxlc3MgdGhp
cyBpcyBzcGVjaWZpZWQuCisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xf
Q09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUpOworICAgICAgICBlZ2xD
b250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKKyAgICB9CisgICAgZWdsQ29udGV4
dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUp
OworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7CisKKyAgICAvLyBX
ZWJHTCByZXF1aXJlcyB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIGNsZWFyZWQgYXQgY3JlYXRpb24u
CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ST0JVU1RfUkVTT1VSQ0VfSU5J
VElBTElaQVRJT05fQU5HTEUpOworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xf
VFJVRSk7CisKKyAgICAvLyBXZWJHTCBkb2Vzbid0IGFsbG93IGNsaWVudCBhcnJheXMuCisgICAg
ZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5B
QkxFRF9BTkdMRSk7CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7
CisgICAgLy8gV2ViR0wgZG9lc24ndCBhbGxvdyBpbXBsaWNpdCBjcmVhdGlvbiBvZiBvYmplY3Rz
IG9uIGJpbmQuCisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0JJ
TkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNKTsKKyAgICBlZ2xDb250ZXh0QXR0cmlidXRl
cy5hcHBlbmQoRUdMX0ZBTFNFKTsKKworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfTk9ORSk7CisKKyAgICBtX2NvbnRleHRPYmogPSBFR0xfQ3JlYXRlQ29udGV4dChtX2Rpc3Bs
YXlPYmosIG1fY29uZmlnT2JqLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJpYnV0ZXMu
ZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0T2JqID09IEVHTF9OT19DT05URVhUIHx8ICFtYWtl
Q3VycmVudChtX2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaikpIHsKKyAgICAgICAgTE9HKFdlYkdM
LCAiRUdMQ29udGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgTE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKKworICAgIGlmIChtX2lz
Rm9yV2ViR0wyKQorICAgICAgICBnbDo6RW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpQUklNSVRJ
VkVfUkVTVEFSVF9GSVhFRF9JTkRFWCk7CisKKyAgICBWZWN0b3I8QVNDSUlMaXRlcmFsLCA0PiBy
ZXF1aXJlZEV4dGVuc2lvbnM7CisgICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAgLy8g
Rm9yIFdlYkdMIDIuMCBvY2NsdXNpb24gcXVlcmllcyB0byB3b3JrLgorICAgICAgICByZXF1aXJl
ZEV4dGVuc2lvbnMuYXBwZW5kKCJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4iX3MpOwor
ICAgIH0KKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorICAgIGlm
ICghbmVlZHNFQUdMT25NYWMoKSkgeworICAgICAgICAvLyBGb3IgSU9TdXJmYWNlLWJhY2tlZCB0
ZXh0dXJlcy4KKyAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfQU5HTEVfdGV4
dHVyZV9yZWN0YW5nbGUiX3MpOworICAgICAgICAvLyBGb3IgY3JlYXRpbmcgdGhlIEVHTCBzdXJm
YWNlIGZyb20gYW4gSU9TdXJmYWNlLgorICAgICAgICByZXF1aXJlZEV4dGVuc2lvbnMuYXBwZW5k
KCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiX3MpOworICAgIH0KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorI2lmIEVOQUJMRShXRUJYUikg
JiYgIVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQorICAgIGlmIChjb250ZXh0QXR0cmli
dXRlcygpLnhyQ29tcGF0aWJsZSkKKyAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgi
R0xfT0VTX0VHTF9pbWFnZSJfcyk7CisjZW5kaWYKKyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAg
ICAgICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUiX3MpOworICAgIEV4dGVuc2lvbnNHTCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lv
bnMoKTsKKyAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IHJlcXVpcmVkRXh0ZW5zaW9ucykgewor
ICAgICAgICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoZXh0ZW5zaW9uKSkgeworICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiTWlzc2luZyByZXF1aXJlZCBleHRlbnNpb24uICVzIiwgZXh0ZW5zaW9u
LmNoYXJhY3RlcnMoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
ZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVuc2lvbik7CisgICAgfQorICAgIGlmIChjb250
ZXh0QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7CisgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1w
bGVtZW50YXRpb25zLgorICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3RzIGFyZSBub3Qgc2ln
bmFsaW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVycywgc28KKyAgICAg
ICAgLy8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0bGluZy4gT3BlbkdM
IGRyaXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAorICAgICAgICAvLyBzb21lIHNvcnQgb2YgaW50
ZXJuYWwgdGhyb3R0bGluZy4KKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FS
Ql9zeW5jIl9zKSkgeworICAgICAgICAgICAgbV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxp
bWl0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQVJC
X3N5bmMiX3MpOworICAgICAgICB9CisgICAgfQorICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwor
ICAgIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2Vk
IGR1cmluZyB2YWxpZGF0aW9uLgorCisgICAgLy8gQ3JlYXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2ls
bCBiZSB1c2VkIGZvciB0aGUgZnJhbWVidWZmZXIuCisgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQg
PSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworCisgICAgZ2w6OkdlblRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1
cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRl
cmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7
CisKKyAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1fc3RhdGUuYm91bmREcmF3RkJP
ID0gbV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKKworICAgIGlmICghYXR0cnMuYW50aWFs
aWFzICYmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkKKyAgICAgICAgZ2w6OkdlblJl
bmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKworICAgIC8vIElmIG5lY2Vz
c2FyeSwgY3JlYXRlIGFub3RoZXIgZnJhbWVidWZmZXIgZm9yIHRoZSBtdWx0aXNhbXBsZSByZXN1
bHRzLgorICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkdlbkZyYW1lYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAg
ICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Cisg
ICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2w6
OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwor
ICAgIH0gZWxzZSBpZiAoYXR0cnMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8v
IElmIG5lY2Vzc2FyeSwgY3JlYXRlIGFub3RoZXIgdGV4dHVyZSB0byBoYW5kbGUgcHJlc2VydmVE
cmF3aW5nQnVmZmVyOnRydWUgd2l0aG91dAorICAgICAgICAvLyBhbnRpYWxpYXNpbmcuCisgICAg
ICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlKTsK
KyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcHJlc2VydmVEcmF3aW5n
QnVmZmVyVGV4dHVyZSk7CisgICAgICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6
OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgICAgICAvLyBDcmVhdGUgYW4gRkJP
IHdpdGggd2hpY2ggdG8gcGVyZm9ybSBCbGl0RnJhbWVidWZmZXIgZnJvbSBvbmUgdGV4dHVyZSB0
byB0aGUgb3RoZXIuCisgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVE
cmF3aW5nQnVmZmVyRkJPKTsKKyAgICB9CisKKyAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAw
KTsKKworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAo
JXApLiIsIHRoaXMpOworfQorCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOworICAgIGlmIChtYWtlQ29udGV4dEN1
cnJlbnQoKSkgeworICAgICAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICAgICAgZ2w6OkRlbGV0
ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyKQorICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKQorICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykK
KyAgICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbDo6RGVs
ZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBpZiAo
bV9mYm8pCisgICAgICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Cisg
ICAgICAgIGlmIChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUpCisgICAgICAgICAgICBn
bDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7Cisg
ICAgICAgIGlmIChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTykKKyAgICAgICAgICAgIGdsOjpE
ZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKKyAgICAg
ICAgLy8gSWYgZmVuY2VzIGFyZSBub3QgZW5hYmxlZCwgdGhpcyBsb29wIHdpbGwgbm90IGV4ZWN1
dGUuCisgICAgICAgIGZvciAoYXV0byYgZmVuY2UgOiBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlcykK
KyAgICAgICAgICAgIGZlbmNlLnJlc2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChh
dXRvJiBmZW5jZSA6IG1fZnJhbWVDb21wbGV0aW9uRmVuY2VzKQorICAgICAgICAgICAgZmVuY2Uu
YWJhbmRvbigpOworICAgIH0KKyAgICBpZiAobV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikKKyAgICAg
ICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZl
cik7CisgICAgYXV0byByZWN5Y2xlZEJ1ZmZlciA9IG1fc3dhcENoYWluLnJlY3ljbGVCdWZmZXIo
KTsKKyAgICBpZiAocmVjeWNsZWRCdWZmZXIuaGFuZGxlKQorICAgICAgICBFR0xfRGVzdHJveVN1
cmZhY2UobV9kaXNwbGF5T2JqLCByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpOworICAgIGF1dG8gY29u
dGVudHNIYW5kbGUgPSBtX3N3YXBDaGFpbi5kZXRhY2hDbGllbnQoKTsKKyAgICBpZiAoY29udGVu
dHNIYW5kbGUpCisgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIGNvbnRl
bnRzSGFuZGxlKTsKKyAgICBpZiAobV9jb250ZXh0T2JqKSB7CisgICAgICAgIG1ha2VDdXJyZW50
KG1fZGlzcGxheU9iaiwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRl
eHQobV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOworICAgIH0KKyAgICBBU1NFUlQoY3VycmVu
dENvbnRleHQgIT0gdGhpcyk7CisgICAgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCA9IC0x
OworICAgIExPRyhXZWJHTCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMICgl
cCkuIiwgdGhpcyk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6aXNWYWxpZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dHVyZTsKK30KKworUGxhdGZvcm1MYXllciogR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVy
biBudWxscHRyOworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXQoKQoreworICAgIGlmIChtX2RyYXdpbmdCdWZmZXJUZXh0dXJl
VGFyZ2V0ID09IC0xKQorICAgICAgICBFR0xfR2V0Q29uZmlnQXR0cmliKG1fZGlzcGxheU9iaiwg
bV9jb25maWdPYmosIEVHTF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUX0FOR0xFLCAmbV9kcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldCk7CisKKyAgICBzd2l0Y2ggKG1fZHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXQpIHsKKyAgICBjYXNlIEVHTF9URVhUVVJFXzJEOgorICAgICAgICByZXR1cm4gVEVY
VFVSRV8yRDsKKyAgICBjYXNlIEVHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRToKKyAgICAgICAg
cmV0dXJuIFRFWFRVUkVfUkVDVEFOR0xFX0FSQjsKKworICAgIH0KKyAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGZhbHNlLCAiSW52YWxpZCBlbnVtIHJldHVybmVkIGZyb20gRUdMX0dldENvbmZpZ0F0
dHJpYiIpOworICAgIHJldHVybiAwOworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoR0NH
TGVudW0gZHJhd2luZ1RhcmdldCkKK3sKKyAgICBzd2l0Y2ggKGRyYXdpbmdUYXJnZXQpIHsKKyAg
ICBjYXNlIFRFWFRVUkVfMkQ6CisgICAgICAgIHJldHVybiBURVhUVVJFX0JJTkRJTkdfMkQ7Cisg
ICAgY2FzZSBURVhUVVJFX1JFQ1RBTkdMRV9BUkI6CisgICAgICAgIHJldHVybiBURVhUVVJFX0JJ
TkRJTkdfUkVDVEFOR0xFX0FSQjsKKyAgICB9CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxz
ZSwgIkludmFsaWQgZHJhd2luZyB0YXJnZXQiKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK0dDR0xp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkVHTERyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0
Rm9yRHJhd2luZ1RhcmdldChHQ0dMZW51bSBkcmF3aW5nVGFyZ2V0KQoreworICAgIHN3aXRjaCAo
ZHJhd2luZ1RhcmdldCkgeworICAgIGNhc2UgVEVYVFVSRV8yRDoKKyAgICAgICAgcmV0dXJuIEVH
TF9URVhUVVJFXzJEOworICAgIGNhc2UgVEVYVFVSRV9SRUNUQU5HTEVfQVJCOgorICAgICAgICBy
ZXR1cm4gRUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFOworICAgIH0KKyAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGZhbHNlLCAiSW52YWxpZCBkcmF3aW5nIHRhcmdldCIpOworICAgIHJldHVybiAw
OworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQo
KQoreworICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gZHJhd2luZyBidWZmZXIsIHdlIGZhaWxlZCB0byBhbGxvY2F0ZSBv
bmUgZHVyaW5nIHByZXBhcmluZyBmb3IgZGlzcGxheS4KKyAgICAvLyBUaGUgZXhjZXB0aW9uIGlz
IHRoZSBjYXNlIHdoZW4gdGhlIGNvbnRleHQgaXMgdXNlZCBiZWZvcmUgcmVzaGFwaW5nLgorICAg
IGlmICghbV9kaXNwbGF5QnVmZmVyQmFja2luZyAmJiAhZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY3VycmVudENv
bnRleHQgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gQ2FsbGluZyBNYWtl
Q3VycmVudCBpcyBpbXBvcnRhbnQgdG8gc2V0IHZvbGF0aWxlIHBsYXRmb3JtIGNvbnRleHQuIFNl
ZSBpbml0aWFsaXplRUdMRGlzcGxheSgpLgorICAgIGlmICghRUdMX01ha2VDdXJyZW50KG1fZGlz
cGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpKQorICAgICAgICBjdXJyZW50Q29udGV4dCA9IHRoaXM7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3RhdHVzKCkKK3sKKyAg
ICBpZiAobV9mYWlsTmV4dFN0YXR1c0NoZWNrKSB7CisgICAgICAgIExPRyhXZWJHTCwgIlByZXRl
bmRpbmcgdGhlIEdQVSBoYXMgcmVzZXQgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsK
KyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gZmFsc2U7CisgICAgICAgIGZvcmNlQ29u
dGV4dExvc3QoKTsKKyAgICAgICAgbWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fQ09O
VEVYVCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPbmx5IGRvIHRoZSBjaGVj
ayBldmVyeSBzdGF0dXNDaGVja1RocmVzaG9sZCBjYWxscy4KKyAgICBpZiAobV9zdGF0dXNDaGVj
a0NvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXR1c0NoZWNrQ291bnQgPSAobV9z
dGF0dXNDaGVja0NvdW50ICsgMSkgJSBzdGF0dXNDaGVja1RocmVzaG9sZDsKKworICAgIEdMaW50
IHJlc3RhcnRTdGF0dXMgPSAwOworICAgIC8vIEZJWE1FOiBjaGVjayB2aWEgS0hSX3JvYnVzdG5l
c3MuCisgICAgcmVzdGFydFN0YXR1cyA9IDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wgaXNWaXNpYmxlKQoreworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBpZiAoIW1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24p
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNWaXNpYmxlKQorICAgICAgICBtX2hpZ2hQZXJm
b3JtYW5jZUdQVVJlcXVlc3QgPSBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0OjphY3F1
aXJlKCk7CisgICAgZWxzZQorICAgICAgICBtX2hpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QgPSB7
IH07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpc1Zpc2libGUpOworI2VuZGlmCit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoKQorewor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAobV9zd2l0Y2hlc0dQVU9uRGlzcGxheVJlY29uZmln
dXJhdGlvbikKKyAgICAgICAgRUdMX0hhbmRsZUdQVVN3aXRjaEFOR0xFKG1fZGlzcGxheU9iaik7
CisjZW5kaWYKKyAgICBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2lu
ZygpCit7CisgICAgQVNTRVJUKCFnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHko
KSk7CisgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgYmFja2J1ZmZlciBub3cgYmVmb3JlIGFsbG9j
YXRpbmcgYSBuZXcgb25lIGluIG9yZGVyIHRvIHNsaWdodGx5IHJlZHVjZSBtZW1vcnkgcHJlc3N1
cmUuCisgICAgaWYgKG1fZGlzcGxheUJ1ZmZlckJhY2tpbmcpIHsKKyAgICAgICAgbV9kaXNwbGF5
QnVmZmVyQmFja2luZy5yZXNldCgpOworICAgICAgICBFR0xfUmVsZWFzZVRleEltYWdlKG1fZGlz
cGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKTsKKyAgICAg
ICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZl
cik7CisgICAgICAgIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIgPSBFR0xfTk9fU1VSRkFDRTsKKyAg
ICB9CisgICAgLy8gUmVzZXQgdGhlIGZ1dHVyZSByZWN5Y2xlZCBidWZmZXIgbm93LCBiZWNhdXNl
IGl0IG1vc3QgbGlrZWx5IHdpbGwgbm90IGJlIHJldXNhYmxlIGF0IHRoZSB0aW1lIGl0IHdpbGwg
YmUgcmV1c2VkLgorICAgIGF1dG8gcmVjeWNsZWRCdWZmZXIgPSBtX3N3YXBDaGFpbi5yZWN5Y2xl
QnVmZmVyKCk7CisgICAgaWYgKHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkKKyAgICAgICAgRUdMX0Rl
c3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgcmVjeWNsZWRCdWZmZXIuaGFuZGxlKTsKKyAgICBy
ZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlLnJlc2V0KCk7CisgICAgcmV0dXJuIGFsbG9jYXRlQW5kQmlu
ZERpc3BsYXlCdWZmZXJCYWNraW5nKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmFsbG9jYXRlQW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCkKK3sKKyAgICBBU1NFUlQo
IWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKTsKKyAgICBhdXRvIGJhY2tp
bmcgPSBJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBiYWNraW5nLT5taWdyYXRlQ29sb3JTcGFjZVRvUHJvcGVydGll
cygpOworCisgICAgY29uc3QgYm9vbCB1c2luZ0FscGhhID0gY29udGV4dEF0dHJpYnV0ZXMoKS5h
bHBoYTsKKyAgICBjb25zdCBhdXRvIHNpemUgPSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
OworICAgIGNvbnN0IEVHTGludCBzdXJmYWNlQXR0cmlidXRlc1tdID0geworICAgICAgICBFR0xf
V0lEVEgsIHNpemUud2lkdGgoKSwKKyAgICAgICAgRUdMX0hFSUdIVCwgc2l6ZS5oZWlnaHQoKSwK
KyAgICAgICAgRUdMX0lPU1VSRkFDRV9QTEFORV9BTkdMRSwgMCwKKyAgICAgICAgRUdMX1RFWFRV
UkVfVEFSR0VULCBFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZvckRyYXdpbmdUYXJnZXQo
ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSksCisgICAgICAgIEVHTF9URVhUVVJFX0lOVEVS
TkFMX0ZPUk1BVF9BTkdMRSwgdXNpbmdBbHBoYSA/IEdMX0JHUkFfRVhUIDogR0xfUkdCLAorICAg
ICAgICBFR0xfVEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEsCisgICAgICAgIEVHTF9U
RVhUVVJFX1RZUEVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsCisgICAgICAgIC8vIE9ubHkgaGFz
IGFuIGVmZmVjdCBvbiB0aGUgaU9TIFNpbXVsYXRvci4KKyAgICAgICAgRUdMX0lPU1VSRkFDRV9V
U0FHRV9ISU5UX0FOR0xFLCBFR0xfSU9TVVJGQUNFX1dSSVRFX0hJTlRfQU5HTEUsCisgICAgICAg
IEVHTF9OT05FLCBFR0xfTk9ORQorICAgIH07CisgICAgRUdMU3VyZmFjZSBwYnVmZmVyID0gRUdM
X0NyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKG1fZGlzcGxheU9iaiwgRUdMX0lPU1VSRkFD
RV9BTkdMRSwgYmFja2luZy0+c3VyZmFjZSgpLCBtX2NvbmZpZ09iaiwgc3VyZmFjZUF0dHJpYnV0
ZXMpOworICAgIGlmICghcGJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShiYWNraW5nKSwgcGJ1ZmZlcik7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmREaXNwbGF5QnVmZmVyQmFja2lu
ZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKQorewor
ICAgIEdDR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgp
OworICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChkcmF3aW5nQnVmZmVyVGV4
dHVyZVRhcmdldCgpKSwgdGV4dHVyZVRhcmdldCwgdGV4dHVyZVRhcmdldCAhPSBURVhUVVJFX1JF
Q1RBTkdMRV9BUkIpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1
cmUpOworICAgIGlmICghRUdMX0JpbmRUZXhJbWFnZShtX2Rpc3BsYXlPYmosIHBidWZmZXIsIEVH
TF9CQUNLX0JVRkZFUikpIHsKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9i
aiwgcGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9kaXNwbGF5
QnVmZmVyUGJ1ZmZlciA9IHBidWZmZXI7CisgICAgbV9kaXNwbGF5QnVmZmVyQmFja2luZyA9IFdU
Rk1vdmUoYmFja2luZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5
IGRpc3BsYXksIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dCkKK3sKKyAgICBjdXJy
ZW50Q29udGV4dCA9IG51bGxwdHI7CisgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChkaXNwbGF5
LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQpOworfQorCit2b2lkKiBH
cmFwaGljc0NvbnRleHRHTENvY29hOjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKEdD
R0xlbnVtIHRhcmdldCwgUGJ1ZmZlckF0dGFjaG1lbnRVc2FnZSB1c2FnZSwgR0NHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0g
dHlwZSwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIEdDR0x1aW50IHBsYW5lKQoreworICAgIGlmICh0
YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFy
Z2V0KCkpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiVW5rbm93biB0ZXh0dXJlIHRhcmdldCAlZC4i
LCBzdGF0aWNfY2FzdDxpbnQ+KHRhcmdldCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBhdXRvIHVzYWdlSGludCA9IFsmXSAoKSAtPiBFR0xpbnQgeworICAgICAgICBp
ZiAodXNhZ2UgPT0gUGJ1ZmZlckF0dGFjaG1lbnRVc2FnZTo6UmVhZCkKKyAgICAgICAgICAgIHJl
dHVybiBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRTsKKyAgICAgICAgaWYgKHVzYWdlID09
IFBidWZmZXJBdHRhY2htZW50VXNhZ2U6OldyaXRlKQorICAgICAgICAgICAgcmV0dXJuIEVHTF9J
T1NVUkZBQ0VfV1JJVEVfSElOVF9BTkdMRTsKKyAgICAgICAgcmV0dXJuIEVHTF9JT1NVUkZBQ0Vf
UkVBRF9ISU5UX0FOR0xFIHwgRUdMX0lPU1VSRkFDRV9XUklURV9ISU5UX0FOR0xFOworICAgIH0o
KTsKKworICAgIHJldHVybiBXZWJDb3JlOjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNl
KG1fZGlzcGxheU9iaiwgbV9jb25maWdPYmosIHRhcmdldCwgdXNhZ2VIaW50LCBpbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgc3VyZmFjZSwgcGxhbmUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMQ29jb2E6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKHZv
aWQqIGhhbmRsZSkKK3sKKyAgICBXZWJDb3JlOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3Vy
ZmFjZShtX2Rpc3BsYXlPYmosIGhhbmRsZSk7Cit9CisKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WV9TSU1VTEFUT1IpCit2b2lkKiBHcmFwaGljc0NvbnRleHRHTENvY29hOjphdHRhY2hJT1N1cmZh
Y2VUb1NoYXJlZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBJT1N1cmZhY2UqIHN1cmZhY2UpCit7
CisgICAgY29uc3RleHByIEVHTGludCBlbXB0eUF0dHJpYnV0ZXNbXSA9IHsgRUdMX05PTkUgfTsK
KworICAgIC8vIENyZWF0ZSBhIE1UTFRleHR1cmUgb3V0IG9mIHRoZSBJT1N1cmZhY2UuCisgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gdXNlIHRoZSBzYW1lIGRldmljZSB0aGF0IEFOR0xFIGlzIHVz
aW5nLCB3aGljaCBtaWdodCBub3QgYmUgdGhlIGRlZmF1bHQuCisKKyAgICBSZXRhaW5QdHI8TVRM
U2hhcmVkVGV4dHVyZUhhbmRsZT4gaGFuZGxlID0gYWRvcHROUyhbW01UTFNoYXJlZFRleHR1cmVI
YW5kbGUgYWxsb2NdIGluaXRXaXRoSU9TdXJmYWNlOnN1cmZhY2UtPnN1cmZhY2UoKSBsYWJlbDpA
IldlYlhSIl0pOworICAgIGlmICghaGFuZGxlKSB7CisgICAgICAgIExPRyhXZWJHTCwgIlVuYWJs
ZSB0byBjcmVhdGUgYSBNVExTaGFyZWRUZXh0dXJlSGFuZGxlIGZyb20gdGhlIElPU3VyZmFjZSBp
biBhdHRhY2hJT1N1cmZhY2VUb1RleHR1cmUuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIGlmICghaGFuZGxlLmdldCgpLmRldmljZSkgeworICAgICAgICBMT0coV2Vi
R0wsICJNVExTaGFyZWRUZXh0dXJlSGFuZGxlIGRvZXMgbm90IGhhdmUgYSBNZXRhbCBkZXZpY2Ug
aW4gYXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBhdXRvIHRleHR1cmUgPSBhZG9wdE5TKFtoYW5kbGUuZ2V0KCkuZGV2aWNl
IG5ld1NoYXJlZFRleHR1cmVXaXRoSGFuZGxlOmhhbmRsZS5nZXQoKV0pOworICAgIGlmICghdGV4
dHVyZSkgeworICAgICAgICBMT0coV2ViR0wsICJVbmFibGUgdG8gY3JlYXRlIGEgTVRMU2hhcmVk
VGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGhhbmRsZSBpbiBhdHRhY2hJT1N1cmZhY2VUb1RleHR1
cmUuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIEZJWE1FOiBE
b2VzIHRoZSB0ZXh0dXJlIGhhdmUgdGhlIGNvcnJlY3QgdXNhZ2UgbW9kZT8KKworICAgIC8vIENy
ZWF0ZSBhbiBFR0xJbWFnZSBvdXQgb2YgdGhlIE1UTFRleHR1cmUKKyAgICBhdXRvIGRpc3BsYXkg
PSBwbGF0Zm9ybURpc3BsYXkoKTsKKyAgICBhdXRvIGVnbEltYWdlID0gRUdMX0NyZWF0ZUltYWdl
S0hSKGRpc3BsYXksIEVHTF9OT19DT05URVhULCBFR0xfTUVUQUxfVEVYVFVSRV9BTkdMRSwgcmVp
bnRlcnByZXRfY2FzdDxFR0xDbGllbnRCdWZmZXI+KHRleHR1cmUuZ2V0KCkpLCBlbXB0eUF0dHJp
YnV0ZXMpOworICAgIGlmICghZWdsSW1hZ2UpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiVW5hYmxl
IHRvIGNyZWF0ZSBhbiBFR0xJbWFnZSBmcm9tIHRoZSBNZXRhbCBoYW5kbGUgaW4gYXR0YWNoSU9T
dXJmYWNlVG9UZXh0dXJlLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICAvLyBUZWxsIHRoZSBjdXJyZW50bHkgYm91bmQgdGV4dHVyZSB0byB1c2UgdGhlIEVHTEltYWdl
LgorICAgIGdsOjpFR0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyh0YXJnZXQsIGVnbEltYWdlKTsK
KworICAgIHJldHVybiBlZ2xJbWFnZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTENvY29h
OjpkZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVkVGV4dHVyZSh2b2lkKiBoYW5kbGUpCit7CisgICAg
YXV0byBkaXNwbGF5ID0gcGxhdGZvcm1EaXNwbGF5KCk7CisgICAgRUdMX0Rlc3Ryb3lJbWFnZUtI
UihkaXNwbGF5LCBoYW5kbGUpOworfQorI2VuZGlmCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzRm9yV2Vi
R0wyOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUV2ZW50Rm9y
VGVzdGluZyhTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCit7CisgICAgaWYgKGV2ZW50
ID09IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6Q29udGV4dENoYW5nZSkgeworICAgICAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5kaXNwbGF5V2Fz
UmVjb25maWd1cmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGV2ZW50ID09
IFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6R1BVU3RhdHVzRmFpbHVyZSkgeworICAgICAgICBt
X2ZhaWxOZXh0U3RhdHVzQ2hlY2sgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlRm9yRGlzcGxheSgpCit7Cisg
ICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHByZXBhcmVUZXh0dXJlSW1w
bCgpOworCisgICAgLy8gVGhlIElPU3VyZmFjZSB3aWxsIGJlIHVzZWQgZnJvbSBvdGhlciBncmFw
aGljcyBzdWJzeXN0ZW0sIHNvIGZsdXNoIEdMIGNvbW1hbmRzLgorICAgIGdsOjpGbHVzaCgpOwor
CisgICAgYXV0byByZWN5Y2xlZEJ1ZmZlciA9IG1fc3dhcENoYWluLnJlY3ljbGVCdWZmZXIoKTsK
KworICAgIEVHTF9SZWxlYXNlVGV4SW1hZ2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlCdWZmZXJQ
YnVmZmVyLCBFR0xfQkFDS19CVUZGRVIpOworICAgIG1fc3dhcENoYWluLnByZXNlbnQoeyBXVEZN
b3ZlKG1fZGlzcGxheUJ1ZmZlckJhY2tpbmcpLCBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyIH0pOwor
ICAgIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIgPSBFR0xfTk9fU1VSRkFDRTsKKworICAgIGJvb2wg
aGFzTmV3QmFja2luZyA9IGZhbHNlOworICAgIGlmIChyZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlICYm
IHJlY3ljbGVkQnVmZmVyLnN1cmZhY2UtPnNpemUoKSA9PSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVy
U2l6ZSgpKSB7CisgICAgICAgIGhhc05ld0JhY2tpbmcgPSBiaW5kRGlzcGxheUJ1ZmZlckJhY2tp
bmcoV1RGTW92ZShyZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlKSwgcmVjeWNsZWRCdWZmZXIuaGFuZGxl
KTsKKyAgICAgICAgcmVjeWNsZWRCdWZmZXIuaGFuZGxlID0gbnVsbHB0cjsKKyAgICB9CisgICAg
cmVjeWNsZWRCdWZmZXIuc3VyZmFjZS5yZXNldCgpOworICAgIGlmIChyZWN5Y2xlZEJ1ZmZlci5o
YW5kbGUpCisgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVk
QnVmZmVyLmhhbmRsZSk7CisKKyAgICAvLyBFcnJvciB3aWxsIGJlIGhhbmRsZWQgYnkgbmV4dCBj
YWxsIHRvIG1ha2VDb250ZXh0Q3VycmVudCgpIHdoaWNoIHdpbGwgbm90aWNlIGxhY2sgb2YgZGlz
cGxheSBidWZmZXIuCisgICAgaWYgKCFoYXNOZXdCYWNraW5nKQorICAgICAgICBhbGxvY2F0ZUFu
ZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpOworCisgICAgbWFya0xheWVyQ29tcG9zaXRlZCgp
OworCisgICAgaWYgKG1fdXNlRmVuY2VTeW5jRm9yRGlzcGxheVJhdGVMaW1pdCkgeworICAgICAg
ICBib29sIHN1Y2Nlc3MgPSB3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKTsKKyAgICAgICAgVU5V
U0VEX1ZBUklBQkxFKHN1Y2Nlc3MpOyAvLyBGSVhNRTogaW1wbGVtZW50IGNvbnRleHQgbG9zdC4K
KyAgICB9Cit9CisKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKK0dy
YXBoaWNzQ29udGV4dEdMQ1YqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKCkKK3sKKyAg
ICBpZiAoIW1fY3YpCisgICAgICAgIG1fY3YgPSBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNy
ZWF0ZSgqdGhpcyk7CisgICAgcmV0dXJuIG1fY3YuZ2V0KCk7Cit9CisjZW5kaWYKKworc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3Np
dGVkUmVzdWx0cygpCit7CisgICAgYXV0byYgZGlzcGxheUJ1ZmZlciA9IG1fc3dhcENoYWluLmRp
c3BsYXlCdWZmZXIoKTsKKyAgICBpZiAoIWRpc3BsYXlCdWZmZXIuc3VyZmFjZSB8fCAhZGlzcGxh
eUJ1ZmZlci5oYW5kbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGRp
c3BsYXlCdWZmZXIuc3VyZmFjZS0+c2l6ZSgpICE9IGdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gTm90ZTogV2UgYXJlIHVz
aW5nIEdMIHRvIHJlYWQgdGhlIElPU3VyZmFjZS4gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhl
cmUgYXJlIG5vIGNvbnZpbmllbnQKKyAgICAvLyBmdW5jdGlvbnMgdG8gY29udmVydCB0aGUgSU9T
dXJmYWNlIHBpeGVsIGRhdGEgdG8gSW1hZ2VEYXRhLiBUaGUgaW1hZ2UgZGF0YSBlbmRzIHVwIGJl
aW5nCisgICAgLy8gZHJhd24gdG8gYSBJbWFnZUJ1ZmZlciwgYnV0IGF0IHRoZSB0aW1lIHRoZXJl
J3Mgbm8gZnVuY3Rpb25zIHRvIGNvbnN0cnVjdCBhIE5hdGl2ZUltYWdlCisgICAgLy8gb3V0IG9m
IGFuIElPU3VyZmFjZSBpbiBzdWNoIGEgd2F5IHRoYXQgZHJhd2luZyB0aGUgTmF0aXZlSW1hZ2Ug
d291bGQgYmUgZ3VhcmFudGVlZCBsZWF2ZQorICAgIC8vIHRoZSBJT1N1cmZhY2UgYmUgdW5yZWZl
bmNlZCBhZnRlciB0aGUgZHJhdyBjYWxsIGZpbmlzaGVzLgorICAgIFNjb3BlZFRleHR1cmUgdGV4
dHVyZTsKKyAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVU
YXJnZXQoKTsKKyAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmco
ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoZHJhd2luZ0J1
ZmZlclRleHR1cmVUYXJnZXQoKSksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVY
VFVSRV9SRUNUQU5HTEVfQVJCKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwg
dGV4dHVyZSk7CisgICAgaWYgKCFFR0xfQmluZFRleEltYWdlKG1fZGlzcGxheU9iaiwgZGlzcGxh
eUJ1ZmZlci5oYW5kbGUsIEVHTF9CQUNLX0JVRkZFUikpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9N
SU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIFNjb3BlZEZyYW1lYnVmZmVyIGZibzsKKyAgICBT
Y29wZWRSZXN0b3JlUmVhZEZyYW1lYnVmZmVyQmluZGluZyBmYm9CaW5kaW5nKG1faXNGb3JXZWJH
TDIsIG1fc3RhdGUuYm91bmRSZWFkRkJPLCBmYm8pOworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1
cmUyRChmYm9CaW5kaW5nLmZyYW1lYnVmZmVyVGFyZ2V0KCksIEdMX0NPTE9SX0FUVEFDSE1FTlQw
LCB0ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlLCAwKTsKKyAgICBBU1NFUlQoZ2w6OkNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoZmJvQmluZGluZy5mcmFtZWJ1ZmZlclRhcmdldCgpKSA9PSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHJlYWRQaXhlbHNGb3JQYWludFJl
c3VsdHMoKTsKKworICAgIEVHTEJvb2xlYW4gcmVsZWFzZU9rID0gRUdMX1JlbGVhc2VUZXhJbWFn
ZShtX2Rpc3BsYXlPYmosIGRpc3BsYXlCdWZmZXIuaGFuZGxlLCBFR0xfQkFDS19CVUZGRVIpOwor
ICAgIEFTU0VSVF9VTlVTRUQocmVsZWFzZU9rLCByZWxlYXNlT2spOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorUmVmUHRyPE1lZGlhU2FtcGxlPiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1w
bGUoKQoreworICAgIGF1dG8gJmRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVm
ZmVyKCk7CisgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIu
aGFuZGxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoZGlzcGxheUJ1ZmZlci5z
dXJmYWNlLT5zaXplKCkgIT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgbV9zd2FwQ2hhaW4ubWFya0Rpc3BsYXlCdWZmZXJJblVzZSgp
OworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBjcmVhdGVDVlBpeGVsQnVmZmVyKGRpc3BsYXlCdWZm
ZXIuc3VyZmFjZS0+c3VyZmFjZSgpKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGVJbWFn
ZVNhbXBsZShXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIE1lZGlhU2FtcGxlQVZGT2JqQzo6VmlkZW9S
b3RhdGlvbjo6VXBzaWRlRG93biwgdHJ1ZSk7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCkKK3sKKyAgICBj
dXJyZW50Q29udGV4dCA9IG51bGxwdHI7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmYjcyM2RkNDIyZGU5YjlkYWRhOWU0Y2I4OTdkMDYxY2JlNmQ2
MDNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Q29jb2EubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4MDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoV0VCR0wpCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgot
Ci0jaW1wb3J0ICJBTkdMRVV0aWxpdGllcy5oIgotI2ltcG9ydCAiQU5HTEVVdGlsaXRpZXNDb2Nv
YS5oIgotI2ltcG9ydCAiQ1ZVdGlsaXRpZXMuaCIKLSNpbXBvcnQgIkV4dGVuc2lvbnNHTEFOR0xF
LmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oIgotI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCi0jaW1wb3J0ICJMb2dnaW5n
LmgiCi0jaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbXBvcnQgPENvcmVH
cmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KLSNpbXBvcnQgPE1ldGFsL01ldGFsLmg+Ci0jaW1w
b3J0IDxwYWwvc3BpL2NvY29hL01ldGFsU1BJLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhj
ZXB0aW9ucy5oPgotI2ltcG9ydCA8d3RmL2Rhcndpbi9XZWFrTGlua2luZy5oPgotI2ltcG9ydCA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbXBvcnQg
IldlYkNvcmVUaHJlYWQuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZG
T1VOREFUSU9OKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oIgotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2Jq
Qy5oIgotI2VuZGlmCi0KLVdURl9XRUFLX0xJTktfRk9SQ0VfSU1QT1JUKEVHTF9Jbml0aWFsaXpl
KTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIHBsYXRmb3JtSXNBTkdMRUF2YWlsYWJs
ZSgpCi17Ci0gICAgLy8gVGhlIEFOR0xFIGlzIHdlYWsgbGlua2VkIGluIGZ1bGwsIGFuZCB0aGUg
RUdMX0luaXRpYWxpemUgaXMgZXhwbGljaXRseSB3ZWFrIGxpbmtlZCBhYm92ZQotICAgIC8vIHNv
IHRoYXQgd2UgY2FuIGRldGVjdCB0aGUgY2FzZSB3aGVyZSBBTkdMRSBpcyBub3QgcHJlc2VudC4K
LSAgICByZXR1cm4gISFFR0xfSW5pdGlhbGl6ZTsKLX0KLQotLy8gSW4gaXNDdXJyZW50Q29udGV4
dFByZWRpY3RhYmxlKCkgPT0gdHJ1ZSBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWNjZXNzZWQgaW4g
c2luZ2xlLXRocmVhZGVkIG1hbm5lci4KLS8vIEluIGlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJs
ZSgpID09IGZhbHNlIGNhc2UgdGhpcyB2YXJpYWJsZSBpcyBhY2Nlc3NlZCBmcm9tIG11bHRpcGxl
IHRocmVhZHMgYnV0IGFsd2F5cyBzZXF1ZW50aWFsbHkKLS8vIGFuZCBpdCBhbHdheXMgY29udGFp
bnMgbnVsbHB0ciBhbmQgbnVsbHB0ciBpcyBhbHdheXMgd3JpdHRlbiB0byBpdC4KLXN0YXRpYyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCogY3VycmVudENvbnRleHQ7Ci0KLXN0YXRpYyBib29sIGlz
Q3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpCi17Ci0gICAgc3RhdGljIGJvb2wgdmFsdWUgPSBp
c0luV2ViUHJvY2VzcygpIHx8IGlzSW5HUFVQcm9jZXNzKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwot
fQotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLS8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBoYXZlIHZvbGF0
aWxlIGNvbnRleHQgZXh0ZW5zaW9uIGZvciB0aGUgcGFydGljdWxhciBBUEkgb3IKLS8vIGlmIHRo
ZSBwYXJ0aWN1bGFyIEFQSSBpcyBub3QgdXNlZC4KLXN0YXRpYyBib29sIGNoZWNrVm9sYXRpbGVD
b250ZXh0U3VwcG9ydElmRGV2aWNlRXhpc3RzKEVHTERpc3BsYXkgZGlzcGxheSwgY29uc3QgY2hh
ciogZGV2aWNlQ29udGV4dFZvbGF0aWxlRXh0ZW5zaW9uLAotICAgIGNvbnN0IGNoYXIqIGRldmlj
ZUNvbnRleHRFeHRlbnNpb24sIEVHTGludCBkZXZpY2VDb250ZXh0VHlwZSkKLXsKLSAgICBjb25z
dCBjaGFyICpjbGllbnRFeHRlbnNpb25zID0gRUdMX1F1ZXJ5U3RyaW5nKEVHTF9OT19ESVNQTEFZ
LCBFR0xfRVhURU5TSU9OUyk7Ci0gICAgaWYgKGNsaWVudEV4dGVuc2lvbnMgJiYgc3Ryc3RyKGNs
aWVudEV4dGVuc2lvbnMsIGRldmljZUNvbnRleHRWb2xhdGlsZUV4dGVuc2lvbikpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBFR0xfTk9fREVWSUNFX0VY
VDsKLSAgICBpZiAoIUVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQoZGlzcGxheSwgRUdMX0RFVklD
RV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBpZiAoZGV2aWNlID09IEVHTF9OT19ERVZJQ0VfRVhUKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjb25zdCBjaGFyKiBkZXZpY2VFeHRlbnNpb25zID0gRUdMX1F1
ZXJ5RGV2aWNlU3RyaW5nRVhUKGRldmljZSwgRUdMX0VYVEVOU0lPTlMpOwotICAgIGlmICghZGV2
aWNlRXh0ZW5zaW9ucyB8fCAhc3Ryc3RyKGRldmljZUV4dGVuc2lvbnMsIGRldmljZUNvbnRleHRF
eHRlbnNpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB2b2lkKiBkZXZpY2VDb250ZXh0
ID0gbnVsbHB0cjsKLSAgICBpZiAoIUVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIGRl
dmljZUNvbnRleHRUeXBlLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZkZXZpY2VDb250
ZXh0KSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhZGV2aWNlQ29udGV4dDsK
LX0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCBwbGF0Zm9ybVN1cHBvcnRzTWV0YWwoYm9vbCBpc1dl
YkdMMikKLXsKLSAgICBhdXRvIGRldmljZSA9IGFkb3B0TlMoTVRMQ3JlYXRlU3lzdGVtRGVmYXVs
dERldmljZSgpKTsKLQotICAgIGlmIChkZXZpY2UpIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCi0gICAgICAgIC8vIEE4IGRldmlj
ZXMgKGlQYWQgTWluaSA0LCBpUGFkIEFpciAyKSBjYW5ub3QgdXNlIFdlYkdMMiB2aWEgTWV0YWwu
Ci0gICAgICAgIC8vIFRoaXMgY2hlY2sgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGV5IGFyZSBubyBs
b25nZXIgc3VwcG9ydGVkLgotICAgICAgICBpZiAoaXNXZWJHTDIpCi0gICAgICAgICAgICByZXR1
cm4gW2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNdOwotI2Vsc2UKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKGlzV2ViR0wyKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgRUdMRGlzcGxh
eSBpbml0aWFsaXplRUdMRGlzcGxheShjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMm
IGF0dHJzKQotewotICAgIGlmICghcGxhdGZvcm1Jc0FOR0xFQXZhaWxhYmxlKCkpIHsKLSAgICAg
ICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgdG8gbG9hZCBBTkdMRSBzaGFyZWQgbGlicmFyeS4iKTsK
LSAgICAgICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZOwotICAgIH0KLQotICAgIEVHTGludCBtYWpv
clZlcnNpb24gPSAwOwotICAgIEVHTGludCBtaW5vclZlcnNpb24gPSAwOwotICAgIEVHTERpc3Bs
YXkgZGlzcGxheTsKLQotICAgIFZlY3RvcjxFR0xpbnQ+IGRpc3BsYXlBdHRyaWJ1dGVzOwotCi0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbWUgaW4gZnJvbSB0aGUgR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzLgotICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZVdpdGhWb2xhdGlsZUNvbnRl
eHRTdXBwb3J0ID0gIWlzQ3VycmVudENvbnRleHRQcmVkaWN0YWJsZSgpOwotICAgIGlmIChzaG91
bGRJbml0aWFsaXplV2l0aFZvbGF0aWxlQ29udGV4dFN1cHBvcnQpIHsKLSAgICAgICAgLy8gRm9y
IFdLMSB0eXBlIEFQSXMgd2UgbmVlZCB0byBzZXQgInZvbGF0aWxlIHBsYXRmb3JtIGNvbnRleHQi
IGZvciBzcGVjaWZpYwotICAgICAgICAvLyBBUElzLCBzaW5jZSBjbGllbnQgY29kZSB3aWxsIGJl
IGFibGUgdG8gb3ZlcnJpZGUgdGhlIHRocmVhZC1nbG9iYWwgY29udGV4dAotICAgICAgICAvLyB0
aGF0IEFOR0xFIGV4cGVjdHMuCi0gICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xf
UExBVEZPUk1fQU5HTEVfREVWSUNFX0NPTlRFWFRfVk9MQVRJTEVfRUFHTF9BTkdMRSk7Ci0gICAg
ICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7Ci0gICAgICAgIGRpc3BsYXlB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVfREVWSUNFX0NPTlRFWFRfVk9MQVRJ
TEVfQ0dMX0FOR0xFKTsKLSAgICAgICAgZGlzcGxheUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9UUlVF
KTsKLSAgICB9Ci0KLSAgICBMT0coV2ViR0wsICJBdHRlbXB0aW5nIHRvIHVzZSBBTkdMRSdzICVz
IGJhY2tlbmQuIiwgYXR0cnMudXNlTWV0YWwgPyAiTWV0YWwiIDogIk9wZW5HTCIpOwotICAgIEVH
TE5hdGl2ZURpc3BsYXlUeXBlIG5hdGl2ZURpc3BsYXkgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVmYXVsdERpc3BsYXk7Ci0gICAgaWYgKGF0dHJzLnVzZU1ldGFsKSB7Ci0gICAgICAgIGRp
c3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9BTkdMRSk7Ci0g
ICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9N
RVRBTF9BTkdMRSk7Ci0gICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgZm9y
IEVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIGFzIEVHTENvbnRleHQgYXR0cmlidXRlcywKLSAg
ICAgICAgLy8gYnV0IE1ldGFsIGJhY2tlbmQgdXNlcyBFR0xEaXNwbGF5IGF0dHJpYnV0ZXMuCi0g
ICAgICAgIGF1dG8gcG93ZXJQcmVmZXJlbmNlID0gYXR0cnMuZm9yY2VSZXF1ZXN0Rm9ySGlnaFBl
cmZvcm1hbmNlR1BVID8gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzOjpQb3dlclByZWZlcmVu
Y2U6OkhpZ2hQZXJmb3JtYW5jZSA6IGF0dHJzLnBvd2VyUHJlZmVyZW5jZTsKLSAgICAgICAgaWYg
KHBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM6OlBvd2VyUHJl
ZmVyZW5jZTo6TG93UG93ZXIpIHsKLSAgICAgICAgICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVu
ZChFR0xfUE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7Ci0gICAgICAgICAgICBkaXNwbGF5QXR0cmli
dXRlcy5hcHBlbmQoRUdMX0xPV19QT1dFUl9BTkdMRSk7Ci0gICAgICAgICAgICBuYXRpdmVEaXNw
bGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omxvd1Bvd2VyRGlzcGxheTsKLSAgICAgICAg
fSBlbHNlIGlmIChwb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
OjpQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgewotICAgICAgICAgICAgZGlzcGxh
eUF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xFKTsKLSAgICAgICAg
ICAgIGRpc3BsYXlBdHRyaWJ1dGVzLmFwcGVuZChFR0xfSElHSF9QT1dFUl9BTkdMRSk7Ci0gICAg
ICAgICAgICBuYXRpdmVEaXNwbGF5ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpZ2hQZXJm
b3JtYW5jZURpc3BsYXk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGlzcGxheUF0dHJpYnV0ZXMu
YXBwZW5kKEVHTF9OT05FKTsKLSAgICBkaXNwbGF5ID0gRUdMX0dldFBsYXRmb3JtRGlzcGxheUVY
VChFR0xfUExBVEZPUk1fQU5HTEVfQU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5hdGl2
ZURpc3BsYXkpLCBkaXNwbGF5QXR0cmlidXRlcy5kYXRhKCkpOwotCi0gICAgaWYgKEVHTF9Jbml0
aWFsaXplKGRpc3BsYXksICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNpb24pID09IEVHTF9GQUxT
RSkgewotICAgICAgICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxl
ZC4iKTsKLSAgICAgICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZOwotICAgIH0KLSAgICBMT0coV2Vi
R0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9u
LCBtaW5vclZlcnNpb24pOwotICAgIGlmIChzaG91bGRJbml0aWFsaXplV2l0aFZvbGF0aWxlQ29u
dGV4dFN1cHBvcnQpIHsKLSAgICAgICAgLy8gQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIEVHTF9ERUZB
VUxUX0RJU1BMQVkgd2lsbCByZXR1cm4gdGhlIHBsYXRmb3JtLWN1c3RvbWl6ZWQgZGlzcGxheS4K
LSAgICAgICAgQVNTRVJUKGRpc3BsYXkgPT0gRUdMX0dldERpc3BsYXkobmF0aXZlRGlzcGxheSkp
OwotICAgICAgICBBU1NFUlQoY2hlY2tWb2xhdGlsZUNvbnRleHRTdXBwb3J0SWZEZXZpY2VFeGlz
dHMoZGlzcGxheSwgIkVHTF9BTkdMRV9wbGF0Zm9ybV9kZXZpY2VfY29udGV4dF92b2xhdGlsZV9l
YWdsIiwgIkVHTF9BTkdMRV9kZXZpY2VfZWFnbCIsIEVHTF9FQUdMX0NPTlRFWFRfQU5HTEUpKTsK
LSAgICAgICAgQVNTRVJUKGNoZWNrVm9sYXRpbGVDb250ZXh0U3VwcG9ydElmRGV2aWNlRXhpc3Rz
KGRpc3BsYXksICJFR0xfQU5HTEVfcGxhdGZvcm1fZGV2aWNlX2NvbnRleHRfdm9sYXRpbGVfY2ds
IiwgIkVHTF9BTkdMRV9kZXZpY2VfY2dsIiwgRUdMX0NHTF9DT05URVhUX0FOR0xFKSk7Ci0gICAg
fQotICAgIHJldHVybiBkaXNwbGF5OwotfQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3RhdHVz
Q2hlY2tUaHJlc2hvbGQgPSA1OwotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUND
QVRBTFlTVCkKLXN0YXRpYyBib29sIG5lZWRzRUFHTE9uTWFjKCkKLXsKLSNpZiBQTEFURk9STShN
QUNDQVRBTFlTVCkgJiYgQ1BVKEFSTTY0KQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0
dHJzKQotICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cnMpCi17Ci0gICAgbV9pc0ZvcldlYkdM
MiA9IGF0dHJzLndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6
V2ViR0wyOwotICAgIGlmIChhdHRycy51c2VNZXRhbCAmJiAhcGxhdGZvcm1TdXBwb3J0c01ldGFs
KG1faXNGb3JXZWJHTDIpKSB7Ci0gICAgICAgIGF0dHJzLnVzZU1ldGFsID0gZmFsc2U7Ci0gICAg
ICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoV0VC
WFIpCi0gICAgaWYgKGF0dHJzLnhyQ29tcGF0aWJsZSkgewotICAgICAgICAvLyBGSVhNRTogSXQn
cyBhbG1vc3QgY2VydGFpbiB0aGF0IGFueSBjb25uZWN0ZWQgaGVhZHNldCB3aWxsIHJlcXVpcmUg
dGhlIGhpZ2gtcG93ZXIgR1BVLAotICAgICAgICAvLyB3aGljaCBpcyB0aGUgc2FtZSBHUFUgd2Ug
bmVlZCB0aGlzIGNvbnRleHQgdG8gdXNlLiBIb3dldmVyLCB0aGlzIGlzIG5vdCBndWFyYW50ZWVk
LCBhbmQKLSAgICAgICAgLy8gdGhlcmUgaXMgYWxzbyB0aGUgY2hhbmNlIHRoYXQgdGhlcmUgYXJl
IG11bHRpcGxlIEdQVXMuIEdpdmVuIHRoYXQgeW91IGNhbiByZXF1ZXN0IHRoZQotICAgICAgICAv
LyBHcmFwaGljc0NvbnRleHRHTCBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBXZWJYUiBzZXNzaW9u
LCB3ZSdsbCBuZWVkIHNvbWUgd2F5IHRvCi0gICAgICAgIC8vIG1pZ3JhdGUgdGhlIGNvbnRleHQg
dG8gdGhlIGFwcHJvcHJpYXRlIEdQVSB3aGVuIHRoZSBjb2RlIGhlcmUgZG9lcyBub3Qgd29yay4K
LSAgICAgICAgTE9HKFdlYkdMLCAiV2ViWFIgY29tcGF0aWJsZSBjb250ZXh0IHJlcXVlc3RlZC4g
VGhpcyB3aWxsIGFsc28gdHJpZ2dlciBhIHJlcXVlc3QgZm9yIHRoZSBoaWdoLXBvd2VyIEdQVS4i
KTsKLSAgICAgICAgYXR0cnMuZm9yY2VSZXF1ZXN0Rm9ySGlnaFBlcmZvcm1hbmNlR1BVID0gdHJ1
ZTsKLSAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgbV9kaXNwbGF5T2JqID0gaW5pdGlhbGl6ZUVHTERpc3BsYXkoYXR0cnMpOwotICAgIGlm
ICghbV9kaXNwbGF5T2JqKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgaWYgKCFhdHRycy51c2VNZXRhbCkgewotICAgICAgICAvLyBGb3IgT3BlbkdMLCBFR0xfQU5H
TEVfcG93ZXJfcHJlZmVyZW5jZSBpcyB1c2VkLiBUaGUgY29udGV4dCBpcyBpbml0aWFsaXplZCB3
aXRoIHRoZQotICAgICAgICAvLyBkZWZhdWx0LCBsb3ctcG93ZXIgZGV2aWNlLiBGb3IgaGlnaC1w
ZXJmb3JtYW5jZSBjb250ZXh0cywgd2UgcmVxdWVzdCB0aGUgaGlnaC1wZXJmb3JtYW5jZQotICAg
ICAgICAvLyBHUFUgaW4gc2V0Q29udGV4dFZpc2liaWxpdHkuIFdoZW4gdGhlIHJlcXVlc3QgaXMg
ZnVsbGZpbGxlZCBieSB0aGUgc3lzdGVtLCB3ZSBnZXQgdGhlCi0gICAgICAgIC8vIGRpc3BsYXkg
cmVjb25maWd1cmF0aW9uIGNhbGxiYWNrLiBVcG9uIHRoaXMsIHdlIHVwZGF0ZSB0aGUgQ0dMIGNv
bnRleHRzIGluc2lkZSBBTkdMRS4KLSAgICAgICAgY29uc3QgY2hhciAqZGlzcGxheUV4dGVuc2lv
bnMgPSBFR0xfUXVlcnlTdHJpbmcobV9kaXNwbGF5T2JqLCBFR0xfRVhURU5TSU9OUyk7Ci0gICAg
ICAgIGJvb2wgc3VwcG9ydHNQb3dlclByZWZlcmVuY2UgPSBzdHJzdHIoZGlzcGxheUV4dGVuc2lv
bnMsICJFR0xfQU5HTEVfcG93ZXJfcHJlZmVyZW5jZSIpOwotICAgICAgICBpZiAoc3VwcG9ydHNQ
b3dlclByZWZlcmVuY2UpIHsKLSAgICAgICAgICAgIG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNv
bmZpZ3VyYXRpb24gPSBhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xQ
b3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZQotICAgICAgICAgICAgICAgIHx8IGF0dHJz
LmZvcmNlUmVxdWVzdEZvckhpZ2hQZXJmb3JtYW5jZUdQVTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xQ
b3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgewotICAgICAgICAgICAgICAgIGF0dHJz
LnBvd2VyUHJlZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpEZWZh
dWx0OwotICAgICAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgRUdMaW50IGNvbmZpZ0F0
dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9F
UzJfQklULAotICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCi0gICAgICAgIEVHTF9HUkVFTl9TSVpF
LCA4LAotICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAotICAgICAgICBFR0xfQUxQSEFfU0laRSwg
OCwKLSAgICAgICAgRUdMX0RFUFRIX1NJWkUsIDAsCi0gICAgICAgIEVHTF9TVEVOQ0lMX1NJWkUs
IDAsCi0gICAgICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xpbnQgbnVtYmVyQ29uZmlnc1Jl
dHVybmVkID0gMDsKLSAgICBFR0xfQ2hvb3NlQ29uZmlnKG1fZGlzcGxheU9iaiwgY29uZmlnQXR0
cmlidXRlcywgJm1fY29uZmlnT2JqLCAxLCAmbnVtYmVyQ29uZmlnc1JldHVybmVkKTsKLSAgICBp
ZiAobnVtYmVyQ29uZmlnc1JldHVybmVkICE9IDEpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdM
Q29uZmlnIEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29uZmlnIik7Ci0KLSAgICBFR0xfQmluZEFQSShFR0xf
T1BFTkdMX0VTX0FQSSk7Ci0gICAgaWYgKEVHTF9HZXRFcnJvcigpICE9IEVHTF9TVUNDRVNTKSB7
Ci0gICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRvIE9QRU5HTF9FU19BUEkiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxFR0xpbnQ+IGVnbENvbnRleHRB
dHRyaWJ1dGVzOwotICAgIGlmIChtX2lzRm9yV2ViR0wyKSB7Ci0gICAgICAgIGVnbENvbnRleHRB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7Ci0gICAgICAgIGVn
bENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZCgzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlZ2xD
b250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOwotICAg
ICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMik7Ci0gICAgICAgIC8vIEFOR0xFIHdp
bGwgdXBncmFkZSB0aGUgY29udGV4dCB0byBFUzMgYXV0b21hdGljYWxseSB1bmxlc3MgdGhpcyBp
cyBzcGVjaWZpZWQuCi0gICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09O
VEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUpOwotICAgICAgICBlZ2xDb250
ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKLSAgICB9Ci0gICAgZWdsQ29udGV4dEF0
dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOwot
ICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7Ci0KLSAgICAvLyBXZWJH
TCByZXF1aXJlcyB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIGNsZWFyZWQgYXQgY3JlYXRpb24uCi0g
ICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ST0JVU1RfUkVTT1VSQ0VfSU5JVElB
TElaQVRJT05fQU5HTEUpOwotICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJV
RSk7Ci0KLSAgICAvLyBXZWJHTCBkb2Vzbid0IGFsbG93IGNsaWVudCBhcnJheXMuCi0gICAgZWds
Q29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxF
RF9BTkdMRSk7Ci0gICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7Ci0g
ICAgLy8gV2ViR0wgZG9lc24ndCBhbGxvdyBpbXBsaWNpdCBjcmVhdGlvbiBvZiBvYmplY3RzIG9u
IGJpbmQuCi0gICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0JJTkRf
R0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNKTsKLSAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5h
cHBlbmQoRUdMX0ZBTFNFKTsKLQotICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xf
Tk9ORSk7Ci0KLSAgICBtX2NvbnRleHRPYmogPSBFR0xfQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXlP
YmosIG1fY29uZmlnT2JqLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJpYnV0ZXMuZGF0
YSgpKTsKLSAgICBpZiAobV9jb250ZXh0T2JqID09IEVHTF9OT19DT05URVhUIHx8ICFtYWtlQ3Vy
cmVudChtX2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaikpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAi
RUdMQ29udGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgTE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKLQotICAgIGlmIChtX2lzRm9y
V2ViR0wyKQotICAgICAgICBnbDo6RW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpQUklNSVRJVkVf
UkVTVEFSVF9GSVhFRF9JTkRFWCk7Ci0KLSAgICBWZWN0b3I8QVNDSUlMaXRlcmFsLCA0PiByZXF1
aXJlZEV4dGVuc2lvbnM7Ci0gICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKLSAgICAgICAgLy8gRm9y
IFdlYkdMIDIuMCBvY2NsdXNpb24gcXVlcmllcyB0byB3b3JrLgotICAgICAgICByZXF1aXJlZEV4
dGVuc2lvbnMuYXBwZW5kKCJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4iX3MpOwotICAg
IH0KLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlmICgh
bmVlZHNFQUdMT25NYWMoKSkgewotICAgICAgICAvLyBGb3IgSU9TdXJmYWNlLWJhY2tlZCB0ZXh0
dXJlcy4KLSAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfQU5HTEVfdGV4dHVy
ZV9yZWN0YW5nbGUiX3MpOwotICAgICAgICAvLyBGb3IgY3JlYXRpbmcgdGhlIEVHTCBzdXJmYWNl
IGZyb20gYW4gSU9TdXJmYWNlLgotICAgICAgICByZXF1aXJlZEV4dGVuc2lvbnMuYXBwZW5kKCJH
TF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiX3MpOwotICAgIH0KLSNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotI2lmIEVOQUJMRShXRUJYUikgJiYg
IVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQotICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cygpLnhyQ29tcGF0aWJsZSkKLSAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xf
T0VTX0VHTF9pbWFnZSJfcyk7Ci0jZW5kaWYKLSAgICBpZiAobV9pc0ZvcldlYkdMMikKLSAgICAg
ICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUiX3MpOwotICAgIEV4dGVuc2lvbnNHTCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMo
KTsKLSAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IHJlcXVpcmVkRXh0ZW5zaW9ucykgewotICAg
ICAgICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoZXh0ZW5zaW9uKSkgewotICAgICAgICAgICAg
TE9HKFdlYkdMLCAiTWlzc2luZyByZXF1aXJlZCBleHRlbnNpb24uICVzIiwgZXh0ZW5zaW9uLmNo
YXJhY3RlcnMoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZXh0
ZW5zaW9ucy5lbnN1cmVFbmFibGVkKGV4dGVuc2lvbik7Ci0gICAgfQotICAgIGlmIChjb250ZXh0
QXR0cmlidXRlcygpLnVzZU1ldGFsKSB7Ci0gICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMIHVzZXMgc3luYyBvYmplY3RzIHRvIHRocm90dGxlIGRpc3BsYXkgb24gTWV0YWwgaW1wbGVt
ZW50YXRpb25zLgotICAgICAgICAvLyBPcGVuR0wgc3luYyBvYmplY3RzIGFyZSBub3Qgc2lnbmFs
aW5nIHVwb24gY29tcGxldGlvbiBvbiBDYXRhbGluYS1lcmEgZHJpdmVycywgc28KLSAgICAgICAg
Ly8gT3BlbkdMIGNhbm5vdCB1c2UgdGhpcyBtZXRob2Qgb2YgdGhyb3R0bGluZy4gT3BlbkdMIGRy
aXZlcnMgdHlwaWNhbGx5IGltcGxlbWVudAotICAgICAgICAvLyBzb21lIHNvcnQgb2YgaW50ZXJu
YWwgdGhyb3R0bGluZy4KLSAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FSQl9z
eW5jIl9zKSkgewotICAgICAgICAgICAgbV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQVJCX3N5
bmMiX3MpOwotICAgICAgICB9Ci0gICAgfQotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotICAg
IGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1
cmluZyB2YWxpZGF0aW9uLgotCi0gICAgLy8gQ3JlYXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2lsbCBi
ZSB1c2VkIGZvciB0aGUgZnJhbWVidWZmZXIuCi0gICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBk
cmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOwotCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZt
X3RleHR1cmUpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUp
OwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBH
TF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmko
dGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9D
TEFNUF9UT19FREdFKTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7Ci0K
LSAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0g
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPSBtX2ZibzsKLQotICAgIGlmICghYXR0cnMuYW50aWFsaWFz
ICYmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkKLSAgICAgICAgZ2w6OkdlblJlbmRl
cmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLQotICAgIC8vIElmIG5lY2Vzc2Fy
eSwgY3JlYXRlIGFub3RoZXIgZnJhbWVidWZmZXIgZm9yIHRoZSBtdWx0aXNhbXBsZSByZXN1bHRz
LgotICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgZ2w6OkdlbkZyYW1lYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAgICAgICAg
Z2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAg
ICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2w6Okdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
IH0gZWxzZSBpZiAoYXR0cnMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIElm
IG5lY2Vzc2FyeSwgY3JlYXRlIGFub3RoZXIgdGV4dHVyZSB0byBoYW5kbGUgcHJlc2VydmVEcmF3
aW5nQnVmZmVyOnRydWUgd2l0aG91dAotICAgICAgICAvLyBhbnRpYWxpYXNpbmcuCi0gICAgICAg
IGdsOjpHZW5UZXh0dXJlcygxLCAmbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlKTsKLSAg
ICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcHJlc2VydmVEcmF3aW5nQnVm
ZmVyVGV4dHVyZSk7Ci0gICAgICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2w6OlRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAg
ICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgZ2w6OkJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgICAgICAvLyBDcmVhdGUgYW4gRkJPIHdp
dGggd2hpY2ggdG8gcGVyZm9ybSBCbGl0RnJhbWVidWZmZXIgZnJvbSBvbmUgdGV4dHVyZSB0byB0
aGUgb3RoZXIuCi0gICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3
aW5nQnVmZmVyRkJPKTsKLSAgICB9Ci0KLSAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsK
LQotICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXAp
LiIsIHRoaXMpOwotfQotCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJl
ZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIGlmIChtYWtlQ29udGV4dEN1cnJl
bnQoKSkgewotICAgICAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICAgICAgZ2w6OkRlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKQotICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVm
ZmVyKQotICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykKLSAg
ICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwot
ICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbDo6RGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBpZiAobV9m
Ym8pCi0gICAgICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAg
ICAgIGlmIChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUpCi0gICAgICAgICAgICBnbDo6
RGVsZXRlVGV4dHVyZXMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7Ci0gICAg
ICAgIGlmIChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTykKLSAgICAgICAgICAgIGdsOjpEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKLSAgICAgICAg
Ly8gSWYgZmVuY2VzIGFyZSBub3QgZW5hYmxlZCwgdGhpcyBsb29wIHdpbGwgbm90IGV4ZWN1dGUu
Ci0gICAgICAgIGZvciAoYXV0byYgZmVuY2UgOiBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlcykKLSAg
ICAgICAgICAgIGZlbmNlLnJlc2V0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChhdXRv
JiBmZW5jZSA6IG1fZnJhbWVDb21wbGV0aW9uRmVuY2VzKQotICAgICAgICAgICAgZmVuY2UuYWJh
bmRvbigpOwotICAgIH0KLSAgICBpZiAobV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikKLSAgICAgICAg
RUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcik7
Ci0gICAgYXV0byByZWN5Y2xlZEJ1ZmZlciA9IG1fc3dhcENoYWluLnJlY3ljbGVCdWZmZXIoKTsK
LSAgICBpZiAocmVjeWNsZWRCdWZmZXIuaGFuZGxlKQotICAgICAgICBFR0xfRGVzdHJveVN1cmZh
Y2UobV9kaXNwbGF5T2JqLCByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpOwotICAgIGF1dG8gY29udGVu
dHNIYW5kbGUgPSBtX3N3YXBDaGFpbi5kZXRhY2hDbGllbnQoKTsKLSAgICBpZiAoY29udGVudHNI
YW5kbGUpCi0gICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIGNvbnRlbnRz
SGFuZGxlKTsKLSAgICBpZiAobV9jb250ZXh0T2JqKSB7Ci0gICAgICAgIG1ha2VDdXJyZW50KG1f
ZGlzcGxheU9iaiwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQo
bV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOwotICAgIH0KLSAgICBBU1NFUlQoY3VycmVudENv
bnRleHQgIT0gdGhpcyk7Ci0gICAgbV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCA9IC0xOwot
ICAgIExPRyhXZWJHTCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMICglcCku
IiwgdGhpcyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmFsaWQoKSBj
b25zdAotewotICAgIHJldHVybiBtX3RleHR1cmU7Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0KCkKLXsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyVGV4dHVyZVRh
cmdldCA9PSAtMSkKLSAgICAgICAgRUdMX0dldENvbmZpZ0F0dHJpYihtX2Rpc3BsYXlPYmosIG1f
Y29uZmlnT2JqLCBFR0xfQklORF9UT19URVhUVVJFX1RBUkdFVF9BTkdMRSwgJm1fZHJhd2luZ0J1
ZmZlclRleHR1cmVUYXJnZXQpOwotCi0gICAgc3dpdGNoIChtX2RyYXdpbmdCdWZmZXJUZXh0dXJl
VGFyZ2V0KSB7Ci0gICAgY2FzZSBFR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgcmV0dXJuIFRFWFRV
UkVfMkQ7Ci0gICAgY2FzZSBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEU6Ci0gICAgICAgIHJl
dHVybiBURVhUVVJFX1JFQ1RBTkdMRV9BUkI7Ci0KLSAgICB9Ci0gICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShmYWxzZSwgIkludmFsaWQgZW51bSByZXR1cm5lZCBmcm9tIEVHTF9HZXRDb25maWdBdHRy
aWIiKTsKLSAgICByZXR1cm4gMDsKLX0KLQotR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KEdDR0xl
bnVtIGRyYXdpbmdUYXJnZXQpCi17Ci0gICAgc3dpdGNoIChkcmF3aW5nVGFyZ2V0KSB7Ci0gICAg
Y2FzZSBURVhUVVJFXzJEOgotICAgICAgICByZXR1cm4gVEVYVFVSRV9CSU5ESU5HXzJEOwotICAg
IGNhc2UgVEVYVFVSRV9SRUNUQU5HTEVfQVJCOgotICAgICAgICByZXR1cm4gVEVYVFVSRV9CSU5E
SU5HX1JFQ1RBTkdMRV9BUkI7Ci0gICAgfQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2Us
ICJJbnZhbGlkIGRyYXdpbmcgdGFyZ2V0Iik7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1HQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldEZv
ckRyYXdpbmdUYXJnZXQoR0NHTGVudW0gZHJhd2luZ1RhcmdldCkKLXsKLSAgICBzd2l0Y2ggKGRy
YXdpbmdUYXJnZXQpIHsKLSAgICBjYXNlIFRFWFRVUkVfMkQ6Ci0gICAgICAgIHJldHVybiBFR0xf
VEVYVFVSRV8yRDsKLSAgICBjYXNlIFRFWFRVUkVfUkVDVEFOR0xFX0FSQjoKLSAgICAgICAgcmV0
dXJuIEVHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRTsKLSAgICB9Ci0gICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShmYWxzZSwgIkludmFsaWQgZHJhd2luZyB0YXJnZXQiKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkK
LXsKLSAgICBpZiAoIW1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8v
IElmIHRoZXJlIGlzIG5vIGRyYXdpbmcgYnVmZmVyLCB3ZSBmYWlsZWQgdG8gYWxsb2NhdGUgb25l
IGR1cmluZyBwcmVwYXJpbmcgZm9yIGRpc3BsYXkuCi0gICAgLy8gVGhlIGV4Y2VwdGlvbiBpcyB0
aGUgY2FzZSB3aGVuIHRoZSBjb250ZXh0IGlzIHVzZWQgYmVmb3JlIHJlc2hhcGluZy4KLSAgICBp
ZiAoIW1fZGlzcGxheUJ1ZmZlckJhY2tpbmcgJiYgIWdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGN1cnJlbnRDb250
ZXh0ID09IHRoaXMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIENhbGxpbmcgTWFrZUN1
cnJlbnQgaXMgaW1wb3J0YW50IHRvIHNldCB2b2xhdGlsZSBwbGF0Zm9ybSBjb250ZXh0LiBTZWUg
aW5pdGlhbGl6ZUVHTERpc3BsYXkoKS4KLSAgICBpZiAoIUVHTF9NYWtlQ3VycmVudChtX2Rpc3Bs
YXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpc0N1cnJlbnRDb250ZXh0UHJlZGljdGFibGUo
KSkKLSAgICAgICAgY3VycmVudENvbnRleHQgPSB0aGlzOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCi17Ci0gICAg
aWYgKG1fZmFpbE5leHRTdGF0dXNDaGVjaykgewotICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5k
aW5nIHRoZSBHUFUgaGFzIHJlc2V0ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7Ci0g
ICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IGZhbHNlOwotICAgICAgICBmb3JjZUNvbnRl
eHRMb3N0KCk7Ci0gICAgICAgIG1ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX0NPTlRF
WFQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gT25seSBkbyB0aGUgY2hlY2sg
ZXZlcnkgc3RhdHVzQ2hlY2tUaHJlc2hvbGQgY2FsbHMuCi0gICAgaWYgKG1fc3RhdHVzQ2hlY2tD
b3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0dXNDaGVja0NvdW50ID0gKG1fc3Rh
dHVzQ2hlY2tDb3VudCArIDEpICUgc3RhdHVzQ2hlY2tUaHJlc2hvbGQ7Ci0KLSAgICBHTGludCBy
ZXN0YXJ0U3RhdHVzID0gMDsKLSAgICAvLyBGSVhNRTogY2hlY2sgdmlhIEtIUl9yb2J1c3RuZXNz
LgotICAgIHJlc3RhcnRTdGF0dXMgPSAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKLXsKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgaWYgKCFtX3N3aXRjaGVzR1BVT25EaXNwbGF5UmVjb25maWd1cmF0aW9uKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzVmlzaWJsZSkKLSAgICAgICAgbV9oaWdoUGVyZm9y
bWFuY2VHUFVSZXF1ZXN0ID0gU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdDo6YWNxdWly
ZSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9oaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0ID0geyB9
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaXNWaXNpYmxlKTsKLSNlbmRpZgotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkKLXsKLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1fc3dpdGNoZXNHUFVPbkRpc3BsYXlSZWNvbmZpZ3Vy
YXRpb24pCi0gICAgICAgIEVHTF9IYW5kbGVHUFVTd2l0Y2hBTkdMRShtX2Rpc3BsYXlPYmopOwot
I2VuZGlmCi0gICAgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmco
KQotewotICAgIEFTU0VSVCghZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkp
OwotICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IGJhY2tidWZmZXIgbm93IGJlZm9yZSBhbGxvY2F0
aW5nIGEgbmV3IG9uZSBpbiBvcmRlciB0byBzbGlnaHRseSByZWR1Y2UgbWVtb3J5IHByZXNzdXJl
LgotICAgIGlmIChtX2Rpc3BsYXlCdWZmZXJCYWNraW5nKSB7Ci0gICAgICAgIG1fZGlzcGxheUJ1
ZmZlckJhY2tpbmcucmVzZXQoKTsKLSAgICAgICAgRUdMX1JlbGVhc2VUZXhJbWFnZShtX2Rpc3Bs
YXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUik7Ci0gICAgICAg
IEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIp
OwotICAgICAgICBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyID0gRUdMX05PX1NVUkZBQ0U7Ci0gICAg
fQotICAgIC8vIFJlc2V0IHRoZSBmdXR1cmUgcmVjeWNsZWQgYnVmZmVyIG5vdywgYmVjYXVzZSBp
dCBtb3N0IGxpa2VseSB3aWxsIG5vdCBiZSByZXVzYWJsZSBhdCB0aGUgdGltZSBpdCB3aWxsIGJl
IHJldXNlZC4KLSAgICBhdXRvIHJlY3ljbGVkQnVmZmVyID0gbV9zd2FwQ2hhaW4ucmVjeWNsZUJ1
ZmZlcigpOwotICAgIGlmIChyZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpCi0gICAgICAgIEVHTF9EZXN0
cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVkQnVmZmVyLmhhbmRsZSk7Ci0gICAgcmVj
eWNsZWRCdWZmZXIuc3VyZmFjZS5yZXNldCgpOwotICAgIHJldHVybiBhbGxvY2F0ZUFuZEJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZygpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpCi17Ci0gICAgQVNTRVJUKCFn
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSk7Ci0gICAgYXV0byBiYWNraW5n
ID0gSU9TdXJmYWNlOjpjcmVhdGUoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgIGlmICghYmFja2luZykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYmFja2luZy0+bWlncmF0ZUNvbG9yU3BhY2VUb1Byb3BlcnRpZXMo
KTsKLQotICAgIGNvbnN0IGJvb2wgdXNpbmdBbHBoYSA9IGNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGE7Ci0gICAgY29uc3QgYXV0byBzaXplID0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsK
LSAgICBjb25zdCBFR0xpbnQgc3VyZmFjZUF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgRUdMX1dJ
RFRILCBzaXplLndpZHRoKCksCi0gICAgICAgIEVHTF9IRUlHSFQsIHNpemUuaGVpZ2h0KCksCi0g
ICAgICAgIEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUsIDAsCi0gICAgICAgIEVHTF9URVhUVVJF
X1RBUkdFVCwgRUdMRHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRGb3JEcmF3aW5nVGFyZ2V0KGRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkpLAotICAgICAgICBFR0xfVEVYVFVSRV9JTlRFUk5B
TF9GT1JNQVRfQU5HTEUsIHVzaW5nQWxwaGEgPyBHTF9CR1JBX0VYVCA6IEdMX1JHQiwKLSAgICAg
ICAgRUdMX1RFWFRVUkVfRk9STUFULCBFR0xfVEVYVFVSRV9SR0JBLAotICAgICAgICBFR0xfVEVY
VFVSRV9UWVBFX0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLAotICAgICAgICAvLyBPbmx5IGhhcyBh
biBlZmZlY3Qgb24gdGhlIGlPUyBTaW11bGF0b3IuCi0gICAgICAgIEVHTF9JT1NVUkZBQ0VfVVNB
R0VfSElOVF9BTkdMRSwgRUdMX0lPU1VSRkFDRV9XUklURV9ISU5UX0FOR0xFLAotICAgICAgICBF
R0xfTk9ORSwgRUdMX05PTkUKLSAgICB9OwotICAgIEVHTFN1cmZhY2UgcGJ1ZmZlciA9IEVHTF9D
cmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihtX2Rpc3BsYXlPYmosIEVHTF9JT1NVUkZBQ0Vf
QU5HTEUsIGJhY2tpbmctPnN1cmZhY2UoKSwgbV9jb25maWdPYmosIHN1cmZhY2VBdHRyaWJ1dGVz
KTsKLSAgICBpZiAoIXBidWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKFdURk1vdmUoYmFja2luZyksIHBidWZmZXIpOwotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcikKLXsKLSAg
ICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsK
LSAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJhd2luZ0J1
ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQoZHJhd2luZ0J1ZmZlclRleHR1
cmVUYXJnZXQoKSksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNU
QU5HTEVfQVJCKTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJl
KTsKLSAgICBpZiAoIUVHTF9CaW5kVGV4SW1hZ2UobV9kaXNwbGF5T2JqLCBwYnVmZmVyLCBFR0xf
QkFDS19CVUZGRVIpKSB7Ci0gICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmos
IHBidWZmZXIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1fZGlzcGxheUJ1
ZmZlclBidWZmZXIgPSBwYnVmZmVyOwotICAgIG1fZGlzcGxheUJ1ZmZlckJhY2tpbmcgPSBXVEZN
b3ZlKGJhY2tpbmcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjptYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBk
aXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHQpCi17Ci0gICAgY3VycmVu
dENvbnRleHQgPSBudWxscHRyOwotICAgIHJldHVybiBFR0xfTWFrZUN1cnJlbnQoZGlzcGxheSwg
RUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBjb250ZXh0KTsKLX0KLQotdm9pZCogR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NH
TGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNobWVudFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0
eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0NHTHVpbnQgcGxhbmUpCi17Ci0gICAgaWYgKHRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJn
ZXQoKSkgewotICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIs
IHN0YXRpY19jYXN0PGludD4odGFyZ2V0KSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLQotICAgIGF1dG8gdXNhZ2VIaW50ID0gWyZdICgpIC0+IEVHTGludCB7Ci0gICAgICAgIGlm
ICh1c2FnZSA9PSBQYnVmZmVyQXR0YWNobWVudFVzYWdlOjpSZWFkKQotICAgICAgICAgICAgcmV0
dXJuIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFOwotICAgICAgICBpZiAodXNhZ2UgPT0g
UGJ1ZmZlckF0dGFjaG1lbnRVc2FnZTo6V3JpdGUpCi0gICAgICAgICAgICByZXR1cm4gRUdMX0lP
U1VSRkFDRV9XUklURV9ISU5UX0FOR0xFOwotICAgICAgICByZXR1cm4gRUdMX0lPU1VSRkFDRV9S
RUFEX0hJTlRfQU5HTEUgfCBFR0xfSU9TVVJGQUNFX1dSSVRFX0hJTlRfQU5HTEU7Ci0gICAgfSgp
OwotCi0gICAgcmV0dXJuIFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2Uo
bV9kaXNwbGF5T2JqLCBtX2NvbmZpZ09iaiwgdGFyZ2V0LCB1c2FnZUhpbnQsIGludGVybmFsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBzdXJmYWNlLCBwbGFuZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKHZv
aWQqIGhhbmRsZSkKLXsKLSAgICBXZWJDb3JlOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3Vy
ZmFjZShtX2Rpc3BsYXlPYmosIGhhbmRsZSk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WV9TSU1VTEFUT1IpCi12b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoSU9TdXJm
YWNlVG9TaGFyZWRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgSU9TdXJmYWNlKiBzdXJmYWNlKQot
ewotICAgIGNvbnN0ZXhwciBFR0xpbnQgZW1wdHlBdHRyaWJ1dGVzW10gPSB7IEVHTF9OT05FIH07
Ci0KLSAgICAvLyBDcmVhdGUgYSBNVExUZXh0dXJlIG91dCBvZiB0aGUgSU9TdXJmYWNlLgotICAg
IC8vIEZJWE1FOiBXZSBuZWVkIHRvIHVzZSB0aGUgc2FtZSBkZXZpY2UgdGhhdCBBTkdMRSBpcyB1
c2luZywgd2hpY2ggbWlnaHQgbm90IGJlIHRoZSBkZWZhdWx0LgotCi0gICAgUmV0YWluUHRyPE1U
TFNoYXJlZFRleHR1cmVIYW5kbGU+IGhhbmRsZSA9IGFkb3B0TlMoW1tNVExTaGFyZWRUZXh0dXJl
SGFuZGxlIGFsbG9jXSBpbml0V2l0aElPU3VyZmFjZTpzdXJmYWNlLT5zdXJmYWNlKCkgbGFiZWw6
QCJXZWJYUiJdKTsKLSAgICBpZiAoIWhhbmRsZSkgewotICAgICAgICBMT0coV2ViR0wsICJVbmFi
bGUgdG8gY3JlYXRlIGEgTVRMU2hhcmVkVGV4dHVyZUhhbmRsZSBmcm9tIHRoZSBJT1N1cmZhY2Ug
aW4gYXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBpZiAoIWhhbmRsZS5nZXQoKS5kZXZpY2UpIHsKLSAgICAgICAgTE9HKFdl
YkdMLCAiTVRMU2hhcmVkVGV4dHVyZUhhbmRsZSBkb2VzIG5vdCBoYXZlIGEgTWV0YWwgZGV2aWNl
IGluIGF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgYXV0byB0ZXh0dXJlID0gYWRvcHROUyhbaGFuZGxlLmdldCgpLmRldmlj
ZSBuZXdTaGFyZWRUZXh0dXJlV2l0aEhhbmRsZTpoYW5kbGUuZ2V0KCldKTsKLSAgICBpZiAoIXRl
eHR1cmUpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiVW5hYmxlIHRvIGNyZWF0ZSBhIE1UTFNoYXJl
ZFRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBoYW5kbGUgaW4gYXR0YWNoSU9TdXJmYWNlVG9UZXh0
dXJlLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTog
RG9lcyB0aGUgdGV4dHVyZSBoYXZlIHRoZSBjb3JyZWN0IHVzYWdlIG1vZGU/Ci0KLSAgICAvLyBD
cmVhdGUgYW4gRUdMSW1hZ2Ugb3V0IG9mIHRoZSBNVExUZXh0dXJlCi0gICAgYXV0byBkaXNwbGF5
ID0gcGxhdGZvcm1EaXNwbGF5KCk7Ci0gICAgYXV0byBlZ2xJbWFnZSA9IEVHTF9DcmVhdGVJbWFn
ZUtIUihkaXNwbGF5LCBFR0xfTk9fQ09OVEVYVCwgRUdMX01FVEFMX1RFWFRVUkVfQU5HTEUsIHJl
aW50ZXJwcmV0X2Nhc3Q8RUdMQ2xpZW50QnVmZmVyPih0ZXh0dXJlLmdldCgpKSwgZW1wdHlBdHRy
aWJ1dGVzKTsKLSAgICBpZiAoIWVnbEltYWdlKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlVuYWJs
ZSB0byBjcmVhdGUgYW4gRUdMSW1hZ2UgZnJvbSB0aGUgTWV0YWwgaGFuZGxlIGluIGF0dGFjaElP
U3VyZmFjZVRvVGV4dHVyZS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgLy8gVGVsbCB0aGUgY3VycmVudGx5IGJvdW5kIHRleHR1cmUgdG8gdXNlIHRoZSBFR0xJbWFn
ZS4KLSAgICBnbDo6RUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVModGFyZ2V0LCBlZ2xJbWFnZSk7
Ci0KLSAgICByZXR1cm4gZWdsSW1hZ2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRldGFjaElPU3VyZmFjZUZyb21TaGFyZWRUZXh0dXJlKHZvaWQqIGhhbmRsZSkKLXsKLSAg
ICBhdXRvIGRpc3BsYXkgPSBwbGF0Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xfRGVzdHJveUltYWdl
S0hSKGRpc3BsYXksIGhhbmRsZSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNGb3JX
ZWJHTDI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRlRXZlbnRG
b3JUZXN0aW5nKFNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZyBldmVudCkKLXsKLSAgICBpZiAoZXZl
bnQgPT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpDb250ZXh0Q2hhbmdlKSB7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpc3BsYXlX
YXNSZWNvbmZpZ3VyZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZXZlbnQg
PT0gU2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpHUFVTdGF0dXNGYWlsdXJlKSB7Ci0gICAgICAg
IG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKLXsK
LSAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgcHJlcGFyZVRleHR1cmVJ
bXBsKCk7Ci0KLSAgICAvLyBUaGUgSU9TdXJmYWNlIHdpbGwgYmUgdXNlZCBmcm9tIG90aGVyIGdy
YXBoaWNzIHN1YnN5c3RlbSwgc28gZmx1c2ggR0wgY29tbWFuZHMuCi0gICAgZ2w6OkZsdXNoKCk7
Ci0KLSAgICBhdXRvIHJlY3ljbGVkQnVmZmVyID0gbV9zd2FwQ2hhaW4ucmVjeWNsZUJ1ZmZlcigp
OwotCi0gICAgRUdMX1JlbGVhc2VUZXhJbWFnZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZl
clBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUik7Ci0gICAgbV9zd2FwQ2hhaW4ucHJlc2VudCh7IFdU
Rk1vdmUobV9kaXNwbGF5QnVmZmVyQmFja2luZyksIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIgfSk7
Ci0gICAgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciA9IEVHTF9OT19TVVJGQUNFOwotCi0gICAgYm9v
bCBoYXNOZXdCYWNraW5nID0gZmFsc2U7Ci0gICAgaWYgKHJlY3ljbGVkQnVmZmVyLnN1cmZhY2Ug
JiYgcmVjeWNsZWRCdWZmZXIuc3VyZmFjZS0+c2l6ZSgpID09IGdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkpIHsKLSAgICAgICAgaGFzTmV3QmFja2luZyA9IGJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyhXVEZNb3ZlKHJlY3ljbGVkQnVmZmVyLnN1cmZhY2UpLCByZWN5Y2xlZEJ1ZmZlci5oYW5k
bGUpOwotICAgICAgICByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUgPSBudWxscHRyOwotICAgIH0KLSAg
ICByZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlLnJlc2V0KCk7Ci0gICAgaWYgKHJlY3ljbGVkQnVmZmVy
LmhhbmRsZSkKLSAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgcmVjeWNs
ZWRCdWZmZXIuaGFuZGxlKTsKLQotICAgIC8vIEVycm9yIHdpbGwgYmUgaGFuZGxlZCBieSBuZXh0
IGNhbGwgdG8gbWFrZUNvbnRleHRDdXJyZW50KCkgd2hpY2ggd2lsbCBub3RpY2UgbGFjayBvZiBk
aXNwbGF5IGJ1ZmZlci4KLSAgICBpZiAoIWhhc05ld0JhY2tpbmcpCi0gICAgICAgIGFsbG9jYXRl
QW5kQmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCk7Ci0KLSAgICBtYXJrTGF5ZXJDb21wb3NpdGVk
KCk7Ci0KLSAgICBpZiAobV91c2VGZW5jZVN5bmNGb3JEaXNwbGF5UmF0ZUxpbWl0KSB7Ci0gICAg
ICAgIGJvb2wgc3VjY2VzcyA9IHdhaXRBbmRVcGRhdGVPbGRlc3RGcmFtZSgpOwotICAgICAgICBV
TlVTRURfVkFSSUFCTEUoc3VjY2Vzcyk7IC8vIEZJWE1FOiBpbXBsZW1lbnQgY29udGV4dCBsb3N0
LgotICAgIH0KLX0KLQotCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQot
R3JhcGhpY3NDb250ZXh0R0xDViogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFzQ1YoKQotewot
ICAgIGlmICghbV9jdikKLSAgICAgICAgbV9jdiA9IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6
Y3JlYXRlKCp0aGlzKTsKLSAgICByZXR1cm4gbV9jdi5nZXQoKTsKLX0KLSNlbmRpZgotCi1zdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBv
c2l0ZWRSZXN1bHRzKCkKLXsKLSAgICBhdXRvJiBkaXNwbGF5QnVmZmVyID0gbV9zd2FwQ2hhaW4u
ZGlzcGxheUJ1ZmZlcigpOwotICAgIGlmICghZGlzcGxheUJ1ZmZlci5zdXJmYWNlIHx8ICFkaXNw
bGF5QnVmZmVyLmhhbmRsZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBpZiAo
ZGlzcGxheUJ1ZmZlci5zdXJmYWNlLT5zaXplKCkgIT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAvLyBOb3RlOiBXZSBhcmUg
dXNpbmcgR0wgdG8gcmVhZCB0aGUgSU9TdXJmYWNlLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0
aGVyZSBhcmUgbm8gY29udmluaWVudAotICAgIC8vIGZ1bmN0aW9ucyB0byBjb252ZXJ0IHRoZSBJ
T1N1cmZhY2UgcGl4ZWwgZGF0YSB0byBJbWFnZURhdGEuIFRoZSBpbWFnZSBkYXRhIGVuZHMgdXAg
YmVpbmcKLSAgICAvLyBkcmF3biB0byBhIEltYWdlQnVmZmVyLCBidXQgYXQgdGhlIHRpbWUgdGhl
cmUncyBubyBmdW5jdGlvbnMgdG8gY29uc3RydWN0IGEgTmF0aXZlSW1hZ2UKLSAgICAvLyBvdXQg
b2YgYW4gSU9TdXJmYWNlIGluIHN1Y2ggYSB3YXkgdGhhdCBkcmF3aW5nIHRoZSBOYXRpdmVJbWFn
ZSB3b3VsZCBiZSBndWFyYW50ZWVkIGxlYXZlCi0gICAgLy8gdGhlIElPU3VyZmFjZSBiZSB1bnJl
ZmVuY2VkIGFmdGVyIHRoZSBkcmF3IGNhbGwgZmluaXNoZXMuCi0gICAgU2NvcGVkVGV4dHVyZSB0
ZXh0dXJlOwotICAgIEdDR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVy
ZVRhcmdldCgpOwotICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGlu
ZyhkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5Rm9yRHJhd2luZ1RhcmdldChkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldCgpKSwgdGV4dHVyZVRhcmdldCwgdGV4dHVyZVRhcmdldCAhPSBU
RVhUVVJFX1JFQ1RBTkdMRV9BUkIpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0
LCB0ZXh0dXJlKTsKLSAgICBpZiAoIUVHTF9CaW5kVGV4SW1hZ2UobV9kaXNwbGF5T2JqLCBkaXNw
bGF5QnVmZmVyLmhhbmRsZSwgRUdMX0JBQ0tfQlVGRkVSKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgU2NvcGVkRnJhbWVidWZmZXIgZmJvOwotICAg
IFNjb3BlZFJlc3RvcmVSZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0Zvcldl
YkdMMiwgbV9zdGF0ZS5ib3VuZFJlYWRGQk8sIGZibyk7Ci0gICAgZ2w6OkZyYW1lYnVmZmVyVGV4
dHVyZTJEKGZib0JpbmRpbmcuZnJhbWVidWZmZXJUYXJnZXQoKSwgR0xfQ09MT1JfQVRUQUNITUVO
VDAsIHRleHR1cmVUYXJnZXQsIHRleHR1cmUsIDApOwotICAgIEFTU0VSVChnbDo6Q2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhmYm9CaW5kaW5nLmZyYW1lYnVmZmVyVGFyZ2V0KCkpID09IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gcmVhZFBpeGVsc0ZvclBhaW50
UmVzdWx0cygpOwotCi0gICAgRUdMQm9vbGVhbiByZWxlYXNlT2sgPSBFR0xfUmVsZWFzZVRleElt
YWdlKG1fZGlzcGxheU9iaiwgZGlzcGxheUJ1ZmZlci5oYW5kbGUsIEVHTF9CQUNLX0JVRkZFUik7
Ci0gICAgQVNTRVJUX1VOVVNFRChyZWxlYXNlT2ssIHJlbGVhc2VPayk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi1SZWZQdHI8TWVkaWFTYW1wbGU+
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNh
bXBsZSgpCi17Ci0gICAgYXV0byAmZGlzcGxheUJ1ZmZlciA9IG1fc3dhcENoYWluLmRpc3BsYXlC
dWZmZXIoKTsKLSAgICBpZiAoIWRpc3BsYXlCdWZmZXIuc3VyZmFjZSB8fCAhZGlzcGxheUJ1ZmZl
ci5oYW5kbGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChkaXNwbGF5QnVmZmVy
LnN1cmZhY2UtPnNpemUoKSAhPSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBtX3N3YXBDaGFpbi5tYXJrRGlzcGxheUJ1ZmZlckluVXNl
KCk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IGNyZWF0ZUNWUGl4ZWxCdWZmZXIoZGlzcGxheUJ1
ZmZlci5zdXJmYWNlLT5zdXJmYWNlKCkpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUlt
YWdlU2FtcGxlKFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgTWVkaWFTYW1wbGVBVkZPYmpDOjpWaWRl
b1JvdGF0aW9uOjpVcHNpZGVEb3duLCB0cnVlKTsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQotewotICAg
IGN1cnJlbnRDb250ZXh0ID0gbnVsbHB0cjsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NWY0OTdhMzc0NjY2MDAzZjc5ZDAwMmQ2ZDlkNWQxMzIzMmRiNjJiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
UHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0KQEAgLTAsMCArMSw5OCBAQAorCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdM
Q29jb2EuaCIgLy8gTk9MSU5UCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXIuaCIKKyNpbXBvcnQgIldlYkdMTGF5ZXIuaCIKKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNl
cHRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBS
ZXRhaW5QdHI8V2ViR0xMYXllcj4gY3JlYXRlV2ViR0xMYXllcihjb25zdCBHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCit7CisgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+
IGxheWVyOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIGxheWVyID0gYWRv
cHROUyhbW1dlYkdMTGF5ZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlUGl4ZWxSYXRpbzphdHRyaWJ1
dGVzLmRldmljZVBpeGVsUmF0aW8gY29udGVudHNPcGFxdWU6IWF0dHJpYnV0ZXMuYWxwaGFdKTsK
KyNpZm5kZWYgTkRFQlVHCisgICAgW2xheWVyIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOworI2Vu
ZGlmCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIHJldHVybiBsYXllcjsKK30K
KworLy8gR3JhcGhpY3NDb250ZXh0R0wgdHlwZSB0aGF0IGlzIHVzZWQgd2hlbiBXZWJHTCBpcyBy
dW4gaW4tcHJvY2VzcyBpbiBXZWJDb250ZW50IHByb2Nlc3MuCitjbGFzcyBXZWJQcm9jZXNzR3Jh
cGhpY3NDb250ZXh0R0xDb2NvYSBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTENvY29h
IHsKK3B1YmxpYzoKKyAgICB+V2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EoKSA9IGRl
ZmF1bHQ7CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0
R0xDb2NvYTo6aXNWYWxpZCgpICYmIG1fd2ViR0xMYXllcjsgfQorICAgIC8vIEdyYXBoaWNzQ29u
dGV4dEdMQ29jb2Egb3ZlcnJpZGVzLgorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdM
TGF5ZXIuZ2V0KCkpOyB9CisgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpIGZpbmFsOworcHJp
dmF0ZToKKyAgICBXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xDb2NvYShHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dEdM
Q29jb2EoV1RGTW92ZShhdHRyaWJ1dGVzKSkKKyAgICAgICAgLCBtX3dlYkdMTGF5ZXIoY3JlYXRl
V2ViR0xMYXllcihjb250ZXh0QXR0cmlidXRlcygpKSkKKyAgICB7CisgICAgfQorICAgIFJldGFp
blB0cjxXZWJHTExheWVyPiBtX3dlYkdMTGF5ZXI7CisKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w7Cit9OworCit2b2lkIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRH
TENvY29hOjpwcmVwYXJlRm9yRGlzcGxheSgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6cHJlcGFyZUZvckRpc3BsYXkoKTsKKyAgICBhdXRvIHN1cmZhY2UgPSBtX3N3YXBDaGFpbi5k
aXNwbGF5QnVmZmVyKCkuc3VyZmFjZS5nZXQoKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAg
IHJldHVybjsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbbV93ZWJHTExh
eWVyIHNldENvbnRlbnRzOnN1cmZhY2UtPmFzTGF5ZXJDb250ZW50cygpXTsKKyAgICBbbV93ZWJH
TExheWVyIHNldE5lZWRzRGlzcGxheV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwor
fQorCit9CisKK1JlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywg
SG9zdFdpbmRvdyopCit7CisgICAgLy8gTWFrZSBzcGFjZSBmb3IgdGhlIGluY29taW5nIGNvbnRl
eHQgaWYgd2UncmUgZnVsbC4KKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS5yZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCk7CisgICAgaWYgKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmhhc1Rvb01hbnlDb250
ZXh0cygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGNvbnRleHQgPSBhZG9w
dFJlZihuZXcgV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMQ29jb2EoV1RGTW92ZShhdHRyaWJ1
dGVzKSkpOworICAgIGlmICghY29udGV4dC0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIo
KS5hZGRDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworCisgICAgcmV0dXJuIGNvbnRleHQ7Cit9Cit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xDb2NvYS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2MjVlZGJm
ZTI1NGUzNzVmZWYxNjk4MTY5ZjUyZWZkNGFhNzcyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDk4ICswLDAgQEAKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCR0wp
Ci0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIiAvLyBOT0xJTlQKLSNpbXBvcnQg
IkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgotI2ltcG9ydCAiV2ViR0xMYXllci5o
IgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotbmFtZXNwYWNlIHsKLQotc3RhdGljIFJldGFpblB0cjxXZWJHTExheWVyPiBjcmVhdGVX
ZWJHTExheWVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cmlidXRlcykK
LXsKLSAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbGF5ZXI7Ci0gICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCi0gICAgbGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5p
dFdpdGhEZXZpY2VQaXhlbFJhdGlvOmF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyBjb250ZW50
c09wYXF1ZTohYXR0cmlidXRlcy5hbHBoYV0pOwotI2lmbmRlZiBOREVCVUcKLSAgICBbbGF5ZXIg
c2V0TmFtZTpAIldlYkdMIExheWVyIl07Ci0jZW5kaWYKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TCi0gICAgcmV0dXJuIGxheWVyOwotfQotCi0vLyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCB0eXBlIHRoYXQgaXMgdXNlZCB3aGVuIFdlYkdMIGlzIHJ1biBpbi1wcm9jZXNzIGluIFdlYkNv
bnRlbnQgcHJvY2Vzcy4KLWNsYXNzIFdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBm
aW5hbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB7Ci1wdWJsaWM6Ci0gICAgfldl
YlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpID0gZGVmYXVsdDsKLSAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWYWxpZCgp
ICYmIG1fd2ViR0xMYXllcjsgfQotICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIG92ZXJy
aWRlcy4KLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQot
ICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgV2ViUHJv
Y2Vzc0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBh
dHRyaWJ1dGVzKQotICAgICAgICA6IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJpYnV0ZXMp
Ci0gICAgICAgICwgbV93ZWJHTExheWVyKGNyZWF0ZVdlYkdMTGF5ZXIoYXR0cmlidXRlcykpCi0g
ICAgewotICAgIH0KLSAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwotCi0g
ICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotfTsKLQotdm9pZCBXZWJQ
cm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKLXsKLSAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKTsKLSAgICBhdXRv
IHN1cmZhY2UgPSBtX3N3YXBDaGFpbi5kaXNwbGF5QnVmZmVyKCkuc3VyZmFjZS5nZXQoKTsKLSAg
ICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybjsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKLSAgICBbbV93ZWJHTExheWVyIHNldENvbnRlbnRzOnN1cmZhY2UtPmFzTGF5ZXJD
b250ZW50cygpXTsKLSAgICBbbV93ZWJHTExheWVyIHNldE5lZWRzRGlzcGxheV07Ci0gICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi19Ci0KLVJlZlB0cjxHcmFwaGljc0NvbnRleHRH
TE9wZW5HTD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyopCi17Ci0gICAgLy8gTWFrZSBzcGFj
ZSBmb3IgdGhlIGluY29taW5nIGNvbnRleHQgaWYgd2UncmUgZnVsbC4KLSAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZWN5Y2xlQ29udGV4dElmTmVj
ZXNzYXJ5KCk7Ci0gICAgaWYgKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLmhhc1Rvb01hbnlDb250ZXh0cygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBhdXRvIGNvbnRleHQgPSBhZG9wdFJlZihuZXcgV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKFdURk1vdmUoYXR0cmlidXRlcykpKTsKLSAgICBpZiAoIWNvbnRleHQtPmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuYWRkQ29udGV4dChjb250ZXh0LmdldCgpKTsKLQot
ICAgIHJldHVybiBjb250ZXh0OwotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCmluZGV4IGU4ODQ5ZjI5YzU1YTNjNzU5ZDIyMjIxNTk0MWQ5OGFlOTBk
ODc4N2EuLjNiZWMwOTlmMzdlYzNjZDNkYmMzODEyMTVhMjdhOTViMzcyYzIxNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcApAQCAtNTEsMTMgKzUxLDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNWYWxpZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0j
ZW5kaWYKLQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzZXRCdWZmZXJzVG9BdXRv
Q2xlYXIoKQogewogICAgIEdDR0x1aW50IGJ1ZmZlcnMgPSBHcmFwaGljc0NvbnRleHRHTDo6Q09M
T1JfQlVGRkVSX0JJVDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggMzgy
NzNiMDcyYjU2ZDNmZGEyYmNkZTM0OGIzZTBmNzQyYzIwMDVlNS4uYjVjMmY3ZTMwOGRkYTU3ZDZk
Y2I3MzhmMjI1YWU3MmVmYWQ1Mjk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgKQEAgLTUyMiwxOCArNTIyLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgcGFpbnRU
b0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBQaXhlbEJ1ZmZlciYm
LCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmKTsKIAotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIGVudW0gY2xhc3MgUGJ1ZmZlckF0dGFjaG1lbnRVc2FnZSB7IFJl
YWQsIFdyaXRlLCBSZWFkV3JpdGUgfTsKLSAgICAvLyBSZXR1cm5zIGEgaGFuZGxlIHdoaWNoLCBp
ZiBub24tbnVsbCwgbXVzdCBiZSByZWxlYXNlZCB2aWEgdGhlCi0gICAgLy8gZGV0YWNoIGNhbGwg
YmVsb3cuCi0gICAgdm9pZCogY3JlYXRlUGJ1ZmZlckFuZEF0dGFjaElPU3VyZmFjZShHQ0dMZW51
bSB0YXJnZXQsIFBidWZmZXJBdHRhY2htZW50VXNhZ2UsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIHR5cGUsIElPU3Vy
ZmFjZVJlZiwgR0NHTHVpbnQgcGxhbmUpOwotICAgIHZvaWQgZGVzdHJveVBidWZmZXJBbmREZXRh
Y2hJT1N1cmZhY2Uodm9pZCogaGFuZGxlKTsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1V
TEFUT1IpCi0gICAgdm9pZCogYXR0YWNoSU9TdXJmYWNlVG9TaGFyZWRUZXh0dXJlKEdDR0xlbnVt
IHRhcmdldCwgSU9TdXJmYWNlKik7Ci0gICAgdm9pZCBkZXRhY2hJT1N1cmZhY2VGcm9tU2hhcmVk
VGV4dHVyZSh2b2lkKiBoYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQogI2lmIFVTRShBTkdMRSkK
ICAgICBjb25zdGV4cHIgc3RhdGljIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRlZmF1bHREaXNwbGF5
ID0gRUdMX0RFRkFVTFRfRElTUExBWTsKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTU0NCwxMCAr
NTMyLDE0IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7Ci0gICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3Q7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VT
d2FwQ2hhaW4gbV9zd2FwQ2hhaW47CisgICAgRUdMRGlzcGxheSBtX2Rpc3BsYXlPYmogeyBudWxs
cHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBudWxs
cHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBtX2NvbmZpZ09iaiB7
IG51bGxwdHIgfTsKICNlbmRpZgorICAgIEdDR0x1aW50IG1fdGV4dHVyZSB7IDAgfTsKKwogcHJp
dmF0ZToKICAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMg
dGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0
aGUgcHVibGljIGVudHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBldmVudHVhbGx5IGNh
bGwgT3BlbkdMLgpAQCAtNTg4LDE4ICs1ODAsNiBAQCBwcml2YXRlOgogICAgIC8vIFBsYXRmb3Jt
IHNwZWNpZmljIGJlaGF2aW9yIGZvciByZWxlYXNlUmVzb3VyY2VzKCk7CiAgICAgc3RhdGljIHZv
aWQgcGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKCk7CiAKLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGUgY29udGV4
dCBkcmF3cyB0byBhIGltYWdlIGJ1ZmZlci4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTgxNzkgLgotICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsgbnVs
bHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsgbnVs
bHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWdPYmog
eyBudWxscHRyIH07Ci0jZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCi0KLSNpZiBQTEFURk9STShX
SU4pICYmIFVTRShDQSkKLSAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBtX3dlYkdMTGF5ZXI7
Ci0jZW5kaWYKLQogI2lmICFVU0UoQU5HTEUpCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
VW5pcXVlUmVmPHNoOjpTaGFkZXJWYXJpYWJsZT4+IFNoYWRlclN5bWJvbE1hcDsKIApAQCAtNjg4
LDcgKzY2OCw2IEBAIHByaXZhdGU6CiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsK
ICNlbmRpZgogCi0gICAgR0NHTHVpbnQgbV90ZXh0dXJlIHsgMCB9OwogICAgIEdDR0x1aW50IG1f
ZmJvIHsgMCB9OwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBHQ0dMdWludCBt
X2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xCYXNlLmNwcAppbmRleCAyZTQ2YjYxNTM2YzgzNWRmY2FjZjlmNzllMTBlNmQ1OWFlN2Ez
ODM2Li42OGI2Y2QzZjUyNGJmNmEwOWVhZjdmZDY4NDhmYmFjMWRhNzMzYWIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcApAQCAtMTQzLDE0ICsxNDMsNiBA
QCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXpl
JiBzaXplKQogICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTwogICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CiAgICAgQVNTRVJUKG1fdGV4dHVyZSk7
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdT
dG9yZShzaXplKSkgewotICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBVbmFibGUg
dG8gYWxsb2NhdGUgYmFja2luZyBzdG9yZSBvZiBzaXplICVkIHggJWQiLCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1fdGV4
dHVyZSwgMCk7Ci0jZWxzZQogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUpOwogICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxD
b2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIDApOwogICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAw
KTsKQEAgLTE2NCw3ICsxNTYsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNo
YXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNv
bG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICAgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIDApOwogICAgIH0KLSNlbmRpZgogI2VuZGlmCiAKICAgICBhdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXIuY3BwCmluZGV4IGUyODUxYzJlM2QyMjE3NzE2OTRiZGQ2ZjEyZjBlNWY3ODk5Yzc1NWIu
LmMwMDU1YmYzOTVhMzI1NjFjNzc1ZjkxNzgzNWU2MDExMmJmZGYxMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC0yNyw3ICsyNyw3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgiCiAK
ICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJFX01BUFBFUikKIApAQCAtNjYsNiArNjYs
MjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyPiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcihXVEZNb3ZlKGF0dHJpYnV0
ZXMpKSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6fkdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlcigpID0gZGVmYXVsdDsKKworR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIoR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKKyAgICA6IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KFdURk1vdmUoYXR0cmlidXRlcykpCit7Cit9CisKKy8vIEZJWE1FOiBCZWxvdyBmdW5jdGlvbmFs
aXR5IHNob3VsZCBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIgdG8g
c2ltcGxpZnkgdGhlIGJhc2UgY2xhc3MuCisKIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5H
TD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyopCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlh
bGl6ZWQgPSBmYWxzZTsKQEAgLTg1LDcgKzk5LDcgQEAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEcK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBDcmVhdGUgdGhlIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMIG9iamVjdCBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc3QgYSBjdXJyZW50
IGNvbnRleHQgb24gdGhpcyB0aHJlYWQuCi0gICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYobmV3
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJpYnV0ZXMpKTsKKyAgICBhdXRvIGNvbnRleHQg
PSBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgeyBhdHRyaWJ1dGVzIH0pOwogCiAjaWYgVVNFKExJQkVQT1hZKSAmJiBVU0Uo
T1BFTkdMX0VTKSAmJiBFTkFCTEUoV0VCR0wyKQogICAgIC8vIEJhaWwgaWYgR0xFUzMgd2FzIHJl
cXVlc3RlZCBidXQgY2Fubm90IGJlIHByb3ZpZGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiZjlhMTlhY2Q3ZDdmZDc5YmQ5NGFi
NGM5NjlmOTViMjA1ZTkxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJD
T1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyPiBjcmVhdGUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzJiYpOworICAgIH5HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIoKTsKKwor
cHJvdGVjdGVkOgorICAgIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcihXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL0dQVVByb2Nlc3NHcmFwaGlj
c0NvbnRleHRHTC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL0dQVVByb2Nl
c3NHcmFwaGljc0NvbnRleHRHTC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWVl
MThkNjJmMDUwOWYwMDlmMzRjM2VkZTY4ZDM1ZTBkMDg5NjUzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9HUFVQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0wuaAorKysgL2Rldi9udWxsCkBAIC0xLDUz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykgJiYgRU5BQkxFKFdFQkdMKQotI2luY2x1ZGUgPFdlYkNvcmUvRXh0ZW5zaW9uc0dMLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oPgotCi1jbGFzcyBH
UFVQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8R1BV
UHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjcmVhdGUoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgewotICAgICAgICBhdXRvIGNvbnRl
eHQgPSBhZG9wdFJlZigqbmV3IEdQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRHTE9wZW5HTChXVEZN
b3ZlKGF0dHJpYnV0ZXMpKSk7Ci0gICAgICAgIGlmICghY29udGV4dC0+aXNWYWxpZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBjb250ZXh0OwotICAgIH0K
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFdlYkNvcmU6OklPU3VyZmFjZSogZGlzcGxheUJ1
ZmZlcigpIHsgcmV0dXJuIG1fc3dhcENoYWluLmRpc3BsYXlCdWZmZXIoKS5zdXJmYWNlLmdldCgp
OyB9Ci0gICAgdm9pZCBtYXJrRGlzcGxheUJ1ZmZlckluVXNlKCkgeyByZXR1cm4gbV9zd2FwQ2hh
aW4ubWFya0Rpc3BsYXlCdWZmZXJJblVzZSgpOyB9Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgR1BV
UHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgICAgICA6IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KGF0dHJpYnV0ZXMpCi0gICAgewotICAgIH0KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wuaAppbmRleCBhMDcyOTc2NWNiNWQ3MThjZjVhNzVjYTg2MmU3ZmJlNTc0ODc2ZWRiLi5hZTMx
N2IxNTIxMDg0N2U3ZWFlZjg5NzRhMDI3ODdmYjExMGQ5MjMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wuaApAQCAtMjksMTcgKzI5LDIzIEBACiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5j
bHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgIkdQVVByb2Nlc3NH
cmFwaGljc0NvbnRleHRHTC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIlF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY29wZWRXZWJH
TFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QuaCIKICNpbmNsdWRlICJTdHJlYW1NZXNzYWdlUmVj
ZWl2ZXIuaCIKICNpbmNsdWRlICJTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9FeHRlbnNpb25zR0wuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZEFzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHRHTENvY29hLmg+CisjZWxzZQorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyLmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5Q29uZmlndXJhdGlvbi5oPgogI2VuZGlmCkBAIC0x
MTMsNyArMTE5LDEzIEBAIHByaXZhdGU6CiBwcm90ZWN0ZWQ6CiAgICAgV2Vha1B0cjxHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVm
UHRyPElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwotICAg
IFJlZlB0cjxHUFVQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IG1fY29udGV4dCBXVEZf
R1VBUkRFRF9CWV9MT0NLKG1fc3RyZWFtVGhyZWFkKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICB1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMID0gV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xDb2NvYTsKKyNlbHNlCisgICAgdXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCA9
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjsKKyNlbmRpZgorICAgIAor
ICAgIFJlZlB0cjxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMPiBtX2NvbnRleHQgV1RGX0dVQVJE
RURfQllfTE9DSyhtX3N0cmVhbVRocmVhZCk7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyOwogICAgIFJlZjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiAgICAgU2NvcGVkV2ViR0xSZW5kZXJpbmdS
ZXNvdXJjZXNSZXF1ZXN0IG1fcmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TENvY29hLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTENvY29hLmNwcAppbmRleCBkYzJmYWJkNGVmNTVmNzgzMTcyNzBjMzIyMTAy
M2UzODYxZTgwNzFkLi4xMGE1MzYyOTljZjIzZWI5Zjg2ZjU3MjdlODUyMzgzY2U4YTA0MDA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2EuY3BwCkBAIC03MSw3ICs3MSw3IEBAIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2Eo
R1BVQ29ubmVjdGlvblRvV2ViUHJvCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2E6
OnBsYXRmb3JtV29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQogewogICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7Ci0gICAgbV9jb250ZXh0ID0gR1BVUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGUoV1RGTW92ZShhdHRyaWJ1dGVzKSk7CisgICAgbV9jb250ZXh0ID0gR3JhcGhpY3ND
b250ZXh0R0xDb2NvYTo6Y3JlYXRlKFdURk1vdmUoYXR0cmlidXRlcykpOwogfQogCiB2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnByZXBhcmVGb3JEaXNwbGF5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoV1RGOjpNYWNoU2VuZFJpZ2h0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbi5jcHAKaW5kZXggNzBmMGM0NjQwMzJiOTMzYzhmNDU5
MTljODY4YWM2NzZkYzE3MWQ2Zi4uMjI0ZmExOGM4MTU5MjYyZmVmM2RlOGVlNTA3YTViN2Q3ZDc5
ZGI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xXaW4uY3BwCkBAIC0yOCwxMSArMjgsMTAg
QEAKICNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIgogCiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wpICYmIFBMQVRGT1JNKFdJTikKLQogI2luY2x1ZGUg
IkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBjbGFzcyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbiBmaW5h
bCA6IHB1YmxpYyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCB7CiBwdWJsaWM6CkBAIC00Myw3ICs0
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBsYXRmb3JtV29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJikgZmluYWw7CiB9OwogCi1SZWY8UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpjcmVhdGUoR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcywgR3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyIGdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCYgcmVuZGVyaW5nQmFja2VuZCwgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFt
KQorUmVmPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMsIEdy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciBncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQmIHJlbmRlcmluZ0JhY2tlbmQsIElQQzo6U3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlciYmIHN0cmVhbSkKIHsKICAgICBhdXRvIGluc3RhbmNlID0gYWRvcHRSZWYoKm5l
dyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBn
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIHJlbmRlcmluZ0JhY2tlbmQsIFdURk1vdmUoc3Ry
ZWFtKSkpOwogICAgIGluc3RhbmNlLT5pbml0aWFsaXplKFdURk1vdmUoYXR0cmlidXRlcykpOwpA
QCAtNTcsNyArNTYsNyBAQCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFdpbjo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xXaW4oR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMV2luOjpwbGF0Zm9ybVdvcmtRdWV1ZUluaXRpYWxpemUoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKIHsKLSAgICBtX2NvbnRl
eHQgPSBHUFVQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShXVEZNb3ZlKGF0
dHJpYnV0ZXMpKTsKKyAgICBtX2NvbnRleHQgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6cHJlcGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjU0MGViMGJjZjZjNmIxMzFkMTc4NDRmZWRh
MzVjMDcwY2QxY2EwZS4uNjUyYzJiZTNiOGJmMGQ2YWNmZGU3OGViMGM5MDE1NTBiNTlhZDE0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00ODQ2LDcgKzQ4NDYsNiBAQAogCQk3QUZCRDM2RDIxRTU0NkUzMDA1REJBQ0IgLyogUGVyc2lz
dGVuY3lVdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJzaXN0ZW5jeVV0aWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRkJEMzZFMjFFNTQ2RTMwMDVEQkFDQiAvKiBQZXJzaXN0
ZW5jeVV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBlcnNpc3RlbmN5VXRpbHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjE2MTkxMjI3MTk4QUE5MDBDNDBFQUMgLyog
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk3QjE2MTkxMzI3MTlBRTc2MDBDNDBFQUMgLyogR1BVUHJvY2Vzc0dyYXBo
aWNzQ29udGV4dEdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVByb2Nlc3NHcmFwaGljc0NvbnRleHRH
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjFEQjI2NTI1NjY4Q0UwMDAwRTI2
QkMgLyogQXJyYXlSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXJyYXlSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I0ODNGMUIy
NUNEREE5QjAwMTIwNDg2IC8qIE1lc3NhZ2VSZWNlaXZlUXVldWVNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QjQ4M0YxQzI1Q0REQTlCMDAxMjA0ODYgLyogTWVzc2FnZVJl
Y2VpdmVRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdlUmVj
ZWl2ZVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzcwLDcgKzkzNjks
NiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQzk4QzAxQzI3
NDQ2OTI2MDAyQ0NCNzggLyogV2ViR1BVICovLAotCQkJCTdCMTYxOTEzMjcxOUFFNzYwMEM0MEVB
QyAvKiBHUFVQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0wuaCAqLywKIAkJCQk1NUFEMDk0MzI0MDhB
MEU2MDBERTREMkYgLyogUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlci5oICovLAogCQkJCTFDQzU0
QUZEMjcwRjk2NTQwMDVCRjhCRSAvKiBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIuaCAqLywKIAkJCQkxQ0JGOTAxMjI3MTAxOEI1MDAwQzQ1N0QgLyogUXVhbGlmaWVkUmVzb3Vy
Y2VIZWFwLmggKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggNWY1MDYzMTdiMzM4MWI2YjlmOTA0NzYzMmQ2ZjZjMTliNzY3NWJjZi4uNDZjNTc5
ZTRkYmNjNzJiN2Q0MmVjZjdmMzgwNWI3YjVlZTQxYWRkYyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIxLTExLTI1
ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0R0wgaW1wbGVtZW50YXRpb25zIHNob3VsZCBoYXZlIHNlcGFyYXRlIGNsYXNzIGRl
ZmluaXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM0OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGp1c3QgVGVzdEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EgdG8KKyAgICAgICAgVGVz
dEdyYXBoaWNzQ29udGV4dEdMQ29jb2EgYWZ0ZXIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wKKyAg
ICAgICAgQ29jb2EgdmFyaWFudCByZW5hbWUgdG8gR3JhcGhpY3NDb250ZXh0R0xDb2NvYS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0
R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbTogUmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5t
bS4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZURlZmF1bHRUZXN0Q29udGV4dCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpjaGFuZ2VDb250ZXh0Q29udGVudHMpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAyMS0xMS0yNSAgS2ltbW8gS2lubnVuZW4gIDxr
a2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFOR0xFIE1ldGFsOiBUaGUgbWVtb3J5IGJh
Y2tpbmcgSU9TdXJmYWNlcyBvZiBmb3JtZXIgY2xpZW50IGJ1ZmZlciBwYnVmZmVycyBpcyBsZWFr
ZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2JkMTI1Nzc5ZTdkZDNlYjU1ZDU4NWYwY2Qy
NDAzOGQ5YmJjZWJlNi4uODZkMjk0ZjZkYmE3MzA5Y2Q5NWEyNTVkNjNhZWY2MWJiYTJlNDkzZSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUxMyw3ICs1MTMsNyBAQAogCQk3QjI3MzlGMzI2
MzJBQjY0MDA0MEYxODIgLyogVGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IyNzM5RjIyNjMyQUI2NDAwNDBGMTgy
IC8qIFRocmVhZEFzc2VydGlvbnNUZXN0LmNwcCAqLzsgfTsKIAkJN0I3NzQ5MDYyNjdDQ0U3MjAw
OTg3M0I0IC8qIFRlc3RSdW5uZXJUZXN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjc3NDkwNDI2N0NDRTY4MDA5ODczQjQgLyogVGVzdFJ1bm5l
clRlc3RzLmNwcCAqLzsgfTsKIAkJN0I3RDA5NkEyNTE5RjhGOTAwMTdBMDc4IC8qIFdlYkdMTm9D
cmFzaE9uT3RoZXJUaHJlYWRBY2Nlc3MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QjdEMDk2OTI1MTlGOEY5MDAxN0EwNzggLyogV2ViR0xOb0NyYXNo
T25PdGhlclRocmVhZEFjY2Vzcy5tbSAqLzsgfTsKLQkJN0JBMzkzNkMyNzFFREZDQTAwMTU5MTFD
IC8qIFRlc3RHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JBMzkzNkIyNzFFREZDQTAwMTU5MTFDIC8q
IFRlc3RHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tICovOyB9OworCQk3QkEzOTM2QzI3
MUVERkNBMDAxNTkxMUMgLyogVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkEzOTM2QjI3MUVERkNBMDAx
NTkxMUMgLyogVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0gKi87IH07CiAJCTdDMzk2NTA2
MUNERDc0RjkwMDk0REJCOCAvKiBDb2xvclRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzk2NTA1MUNERDc0RjkwMDk0REJCOCAvKiBDb2xv
clRlc3RzLmNwcCAqLzsgfTsKIAkJN0M0ODZCQTExQUExMjU2NzAwM0Y2RjlCIC8qIGJ1bmRsZS1m
aWxlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0M0ODZCQTAxQUExMjU0QjAwM0Y2RjlCIC8qIGJ1bmRsZS1maWxlLmh0bWwgKi87IH07
CiAJCTdDNzRDOEZBMjJERkJBOTYwMERBMkRBQiAvKiBXVEZTdHJpbmdVdGlsaXRpZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCRDVBMjIyMkRF
NDJBNjAwNEE5RTMyIC8qIFdURlN0cmluZ1V0aWxpdGllcy5jcHAgKi87IH07CkBAIC0yMzcwLDcg
KzIzNzAsNyBAQAogCQk3QjI3MzlGMjI2MzJBQjY0MDA0MEYxODIgLyogVGhyZWFkQXNzZXJ0aW9u
c1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkQXNz
ZXJ0aW9uc1Rlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qjc3NDkwNDI2
N0NDRTY4MDA5ODczQjQgLyogVGVzdFJ1bm5lclRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRlc3RSdW5uZXJUZXN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdCN0QwOTY5MjUxOUY4RjkwMDE3QTA3OCAvKiBXZWJHTE5vQ3Jhc2hPbk90
aGVyVGhyZWFkQWNjZXNzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViR0xOb0NyYXNoT25P
dGhlclRocmVhZEFjY2Vzcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0JBMzkz
NkIyNzFFREZDQTAwMTU5MTFDIC8qIFRlc3RHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGVzdEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCQTM5
MzZCMjcxRURGQ0EwMDE1OTExQyAvKiBUZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRlc3RHcmFwaGljc0NvbnRleHRH
TENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkEzOTM2RDI3MUVFQzUz
MDAxNTkxMUMgLyogV2ViQ29yZVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJDb3JlVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdCQjc1NEFGMjc0RTM5QTEwMEQwMEVDMSAvKiBUZXN0VXRpbGl0aWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRlc3RVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0JCNzU0
QjAyNzRFMzlBMTAwRDAwRUMxIC8qIFRlc3RVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVGVzdFV0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTA4
LDcgKzQ5MDgsNyBAQAogCQkJCTU3RjFDOTEwMjVEREQ1MTkwMEU4RjZFQSAvKiBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudENvY29hLm1tICovLAogCQkJCTU3NjlDNTBBMUQ5QjAwMDEwMDA4NDdGQiAv
KiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5tbSAqLywKIAkJCQlBMTc5OTE4NjFFMUM5OTRFMDBB
NTA1RUQgLyogU2hhcmVkQnVmZmVyLm1tICovLAotCQkJCTdCQTM5MzZCMjcxRURGQ0EwMDE1OTEx
QyAvKiBUZXN0R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSAqLywKKwkJCQk3QkEzOTM2
QjI3MUVERkNBMDAxNTkxMUMgLyogVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0gKi8sCiAJ
CQkJQ0Q4OUQwMzgxQzRFREIyQTAwMDQwQTA0IC8qIFdlYkNvcmVOU1VSTFNlc3Npb24ubW0gKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGNvY29hOwpAQCAtNTY1Miw3ICs1NjUyLDcgQEAKIAkJCQlGNDYx
MjhDQjIxMUQ0NzUxMDBEOUZBREIgLyogVGVzdERyYWdnaW5nSW5mby5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUY0RTBBMkI4MjEyMjg0NzQwMEFGN0M3RiAvKiBUZXN0RmlsZVByb21pc2VSZWNlaXZl
ci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0RjVCQjUyMjE2NjdCQUEwMDJEMDZCOSAvKiBUZXN0
Rm9udE9wdGlvbnMubW0gaW4gU291cmNlcyAqLywKLQkJCQk3QkEzOTM2QzI3MUVERkNBMDAxNTkx
MUMgLyogVGVzdEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gaW4gU291cmNlcyAqLywK
KwkJCQk3QkEzOTM2QzI3MUVERkNBMDAxNTkxMUMgLyogVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNDVFMTU3NjIxMTJDRTYyMDAzMDdFODIgLyogVGVz
dElucHV0RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNDVEMzg5MTIxNUE3QjRCMDAy
QTI5NzkgLyogVGVzdEluc3BlY3RvckJhci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNjI4MTI1
MjMyNUMxODAwMEJCN0U0MiAvKiBUZXN0UERGRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3Jh
cGhpY3NDb250ZXh0R0xDb2NvYS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzZjNzQ0
ODA4ZjQzNjFlM2NkNTJmNTNmZmQ2ZjYwMDNhOGEwZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRH
TENvY29hLm1tCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0LmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFdF
QkdMKQorI2ltcG9ydCAiVGVzdFV0aWxpdGllcy5oIgorI2ltcG9ydCAiV2ViQ29yZVV0aWxpdGll
cy5oIgorI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oPgorI2ltcG9ydCA8b3B0
aW9uYWw+CisjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgorI2ltcG9ydCA8d3RmL01lbW9yeUZvb3Rw
cmludC5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25hbWVzcGFjZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dEdMQ29jb2FUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7
CitwdWJsaWM6CisgICAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIC8vIE5PTElOVAorICAgIHsKKyAg
ICAgICAgbV9zY29wZWRQcm9jZXNzVHlwZSA9IFNjb3BlZFNldEF1eGlsaWFyeVByb2Nlc3NUeXBl
Rm9yVGVzdGluZyB7IFdlYkNvcmU6OkF1eGlsaWFyeVByb2Nlc3NUeXBlOjpHUFUgfTsKKyAgICB9
CisgICAgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIC8vIE5PTElOVAorICAgIHsKKyAgICAgICAg
bV9zY29wZWRQcm9jZXNzVHlwZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICB9Citwcml2YXRlOgorICAg
IHN0ZDo6b3B0aW9uYWw8U2NvcGVkU2V0QXV4aWxpYXJ5UHJvY2Vzc1R5cGVGb3JUZXN0aW5nPiBt
X3Njb3BlZFByb2Nlc3NUeXBlOworfTsKKworfQorCitzdGF0aWMgY29uc3QgaW50IGV4cGVjdGVk
RGlzcGxheUJ1ZmZlclBvb2xTaXplID0gMzsKKworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTENvY29hPiBjcmVhdGVEZWZhdWx0VGVzdENvbnRleHQoV2ViQ29yZTo6SW50
U2l6ZSBjb250ZXh0U2l6ZSkKK3sKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgYXR0cmlidXRlczsKKyAgICBhdHRyaWJ1dGVzLnVzZU1ldGFsID0gdHJ1ZTsKKyAgICBh
dHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMuZGVwdGggPSBmYWxz
ZTsKKyAgICBhdHRyaWJ1dGVzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICBhdHRyaWJ1dGVzLmFscGhh
ID0gdHJ1ZTsKKyAgICBhdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlOwor
ICAgIGF1dG8gY29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0
ZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIGNvbnRleHQtPnJlc2hhcGUoY29udGV4dFNpemUud2lkdGgoKSwgY29u
dGV4dFNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBjb250ZXh0OworfQorCitzdGF0aWMgOjp0
ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQgY2hhbmdlQ29udGV4dENvbnRlbnRzKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQ29jb2EmIGNvbnRleHQsIGludCBpdGVyYXRpb24pCit7CisgICAgY29u
dGV4dC5tYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICBXZWJDb3JlOjpDb2xvciBleHBlY3RlZCB7
IGl0ZXJhdGlvbiAlIDIgPyBXZWJDb3JlOjpDb2xvcjo6Z3JlZW4gOiBXZWJDb3JlOjpDb2xvcjo6
eWVsbG93IH07CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBleHBlY3RlZC5j
b2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIFVOVVNFRF9WQVJJQUJMRShjb2xvclNwYWNl
KTsKKyAgICBjb250ZXh0LmNsZWFyQ29sb3IoY29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwg
Y29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7CisgICAgY29udGV4dC5jbGVhcihXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVCk7CisgICAgdWludDhfdCBnb3RW
YWx1ZXNbNF0gPSB7IH07CisgICAgYXV0byBzYW1wbGVBdCA9IGNvbnRleHQuZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKTsKKyAgICBzYW1wbGVBdC5jb250cmFjdCgyLCAzKTsKKyAgICBzYW1w
bGVBdC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgY29udGV4dC5yZWFkblBpeGVscyhzYW1w
bGVBdC53aWR0aCgpLCBzYW1wbGVBdC5oZWlnaHQoKSwgMSwgMSwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0w6OlJHQkEsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRF
LCBnb3RWYWx1ZXMpOworICAgIFdlYkNvcmU6OkNvbG9yIGdvdCB7IFdlYkNvcmU6OlNSR0JBPHVp
bnQ4X3Q+IHsgZ290VmFsdWVzWzBdLCBnb3RWYWx1ZXNbMV0sIGdvdFZhbHVlc1syXSwgZ290VmFs
dWVzWzNdIH0gfTsKKyAgICBpZiAoZ290ICE9IGV4cGVjdGVkKQorICAgICAgICByZXR1cm4gOjp0
ZXN0aW5nOjpBc3NlcnRpb25GYWlsdXJlKCkgPDwgIkZhaWxlZCB0byB2ZXJpZnkgZHJhdyB0byBj
b250ZXh0LiBHb3Q6ICIgPDwgZ290IDw8ICIsIGV4cGVjdGVkOiAiIDw8IGV4cGVjdGVkIDw8ICIu
IjsKKyAgICByZXR1cm4gOjp0ZXN0aW5nOjpBc3NlcnRpb25TdWNjZXNzKCk7Cit9CisKK3N0YXRp
YyBib29sIGhhc011bHRpcGxlR1BVcygpCit7CisjaWYgKFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oTUFDQ0FUQUxZU1QpKQorICAgIGF1dG8gZGV2aWNlcyA9IGFkb3B0TlMoTVRMQ29weUFsbERl
dmljZXMoKSk7CisgICAgcmV0dXJuIFtkZXZpY2VzIGNvdW50XSA+IDE7CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjaWYgSEFWRShXRUJHTF9DT01QQVRJQkxFX01FVEFM
KSAmJiAoUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkpCisjZGVmaW5lIE1B
WUJFX011bHRpcGxlR1BVc0RpZmZlcmVudFBvd2VyUHJlZmVyZW5jZU1ldGFsIE11bHRpcGxlR1BV
c0RpZmZlcmVudFBvd2VyUHJlZmVyZW5jZU1ldGFsCisjZWxzZQorI2RlZmluZSBNQVlCRV9NdWx0
aXBsZUdQVXNEaWZmZXJlbnRQb3dlclByZWZlcmVuY2VNZXRhbCBESVNBQkxFRF9NdWx0aXBsZUdQ
VXNEaWZmZXJlbnRQb3dlclByZWZlcmVuY2VNZXRhbAorI2VuZGlmCisvLyBUZXN0cyBmb3IgYSBi
dWcgd2hlcmUgaGlnaC1wZXJmb3JtYW5jZSBjb250ZXh0IHdvdWxkIHVzZSBsb3ctcG93ZXIgR1BV
IGlmIGxvdy1wb3dlciBvciBkZWZhdWx0CisvLyBjb250ZXh0IHdhcyBjcmVhdGVkIGZpcnN0LiBU
ZXN0IGlzIGFwcGxpY2FibGUgb25seSBmb3IgTWV0YWwsIHNpbmNlIEdQVSBzZWxlY3Rpb24gZm9y
IE9wZW5HTCBpcworLy8gdmVyeSBkaWZmZXJlbnQuCitURVNUX0YoR3JhcGhpY3NDb250ZXh0R0xD
b2NvYVRlc3QsIE1BWUJFX011bHRpcGxlR1BVc0RpZmZlcmVudFBvd2VyUHJlZmVyZW5jZU1ldGFs
KQoreworICAgIGlmICghaGFzTXVsdGlwbGVHUFVzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgIGF0
dHJpYnV0ZXMudXNlTWV0YWwgPSB0cnVlOworICAgIEVYUEVDVF9FUShhdHRyaWJ1dGVzLnBvd2Vy
UHJlZmVyZW5jZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U6OkRl
ZmF1bHQpOworICAgIGF1dG8gZGVmYXVsdENvbnRleHQgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpjcmVhdGUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIHsg
YXR0cmlidXRlcyB9KTsKKyAgICBBU1NFUlRfTkUoZGVmYXVsdENvbnRleHQsIG51bGxwdHIpOwor
CisgICAgYXR0cmlidXRlcy5wb3dlclByZWZlcmVuY2UgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTFBvd2VyUHJlZmVyZW5jZTo6TG93UG93ZXI7CisgICAgYXV0byBsb3dQb3dlckNvbnRleHQg
PSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTENvY29hOjpjcmVhdGUoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzIHsgYXR0cmlidXRlcyB9KTsKKyAgICBBU1NFUlRfTkUobG93
UG93ZXJDb250ZXh0LCBudWxscHRyKTsKKworICAgIGF0dHJpYnV0ZXMucG93ZXJQcmVmZXJlbmNl
ID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3Jt
YW5jZTsKKyAgICBhdXRvIGhpZ2hQZXJmb3JtYW5jZUNvbnRleHQgPSBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTENvY29hOjpjcmVhdGUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzIHsgYXR0cmlidXRlcyB9KTsKKyAgICBBU1NFUlRfTkUoaGlnaFBlcmZvcm1hbmNlQ29udGV4
dCwgbnVsbHB0cik7CisKKyAgICBFWFBFQ1RfTkUobG93UG93ZXJDb250ZXh0LT5nZXRTdHJpbmco
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkVSKSwgaGlnaFBlcmZvcm1hbmNlQ29u
dGV4dC0+Z2V0U3RyaW5nKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJFUikpOwor
ICAgIEVYUEVDVF9FUShkZWZhdWx0Q29udGV4dC0+Z2V0U3RyaW5nKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMOjpSRU5ERVJFUiksIGxvd1Bvd2VyQ29udGV4dC0+Z2V0U3RyaW5nKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJFUikpOworfQorCitURVNUX0YoR3JhcGhpY3NDb250
ZXh0R0xDb2NvYVRlc3QsIERpc3BsYXlCdWZmZXJzQXJlUmVjeWNsZWQpCit7CisgICAgYXV0byBj
b250ZXh0ID0gY3JlYXRlRGVmYXVsdFRlc3RDb250ZXh0KHsgMjAsIDIwIH0pOworICAgIEFTU0VS
VF9ORShjb250ZXh0LCBudWxscHRyKTsKKyAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBleHBl
Y3RlZERpc3BsYXlCdWZmZXJzW2V4cGVjdGVkRGlzcGxheUJ1ZmZlclBvb2xTaXplXTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hhbmdl
Q29udGV4dENvbnRlbnRzKCpjb250ZXh0LCBpKSk7CisgICAgICAgIGNvbnRleHQtPnByZXBhcmVG
b3JEaXNwbGF5KCk7CisgICAgICAgIGF1dG8qIHN1cmZhY2UgPSBjb250ZXh0LT5kaXNwbGF5QnVm
ZmVyKCk7CisgICAgICAgIEFTU0VSVF9ORShzdXJmYWNlLCBudWxscHRyKTsKKyAgICAgICAgaW50
IHNsb3QgPSBpICUgZXhwZWN0ZWREaXNwbGF5QnVmZmVyUG9vbFNpemU7CisgICAgICAgIGlmICgh
ZXhwZWN0ZWREaXNwbGF5QnVmZmVyc1tzbG90XSkKKyAgICAgICAgICAgIGV4cGVjdGVkRGlzcGxh
eUJ1ZmZlcnNbc2xvdF0gPSBzdXJmYWNlLT5zdXJmYWNlKCk7CisgICAgICAgIEVYUEVDVF9FUShl
eHBlY3RlZERpc3BsYXlCdWZmZXJzW3Nsb3RdLmdldCgpLCBzdXJmYWNlLT5zdXJmYWNlKCkpIDw8
ICJmb3IgaToiIDw8IGkgPDwgIiBzbG90OiAiIDw8IHNsb3Q7CisgICAgfQorICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZXhwZWN0ZWREaXNwbGF5QnVmZmVyUG9vbFNpemUgLSAxOyArK2kpIHsKKyAg
ICAgICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgZXhwZWN0ZWREaXNwbGF5QnVmZmVyUG9vbFNp
emU7ICsraikKKyAgICAgICAgICAgIEVYUEVDVF9ORShleHBlY3RlZERpc3BsYXlCdWZmZXJzW2ld
LmdldCgpLCBleHBlY3RlZERpc3BsYXlCdWZmZXJzW2pdLmdldCgpKSA8PCAiZm9yIGk6ICIgPDwg
aSA8PCAiIGo6IiA8PCBqOworICAgIH0KK30KKworLy8gVGVzdCB0aGF0IGRyYXdpbmcgYnVmZmVy
cyBhcmUgbm90IHJlY3ljbGVkIGlmIGBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFya0Rpc3Bs
YXlCdWZmZXJJblVzZSgpYAorLy8gaXMgY2FsbGVkLgorVEVTVF9GKEdyYXBoaWNzQ29udGV4dEdM
Q29jb2FUZXN0LCBEaXNwbGF5QnVmZmVyc0FyZU5vdFJlY3ljbGVkV2hlbk1hcmtlZEluVXNlKQor
eworICAgIGF1dG8gY29udGV4dCA9IGNyZWF0ZURlZmF1bHRUZXN0Q29udGV4dCh7IDIwLCAyMCB9
KTsKKyAgICBBU1NFUlRfTkUoY29udGV4dCwgbnVsbHB0cik7CisgICAgSGFzaFNldDxSZXRhaW5Q
dHI8SU9TdXJmYWNlUmVmPj4gc2VlblN1cmZhY2VSZWZzOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNTA7ICsraSkgeworICAgICAgICBFWFBFQ1RfVFJVRShjaGFuZ2VDb250ZXh0Q29udGVudHMo
KmNvbnRleHQsIGkpKTsKKyAgICAgICAgY29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsKKyAg
ICAgICAgV2ViQ29yZTo6SU9TdXJmYWNlKiBzdXJmYWNlID0gY29udGV4dC0+ZGlzcGxheUJ1ZmZl
cigpOworICAgICAgICBBU1NFUlRfTkUoc3VyZmFjZSwgbnVsbHB0cik7CisgICAgICAgIElPU3Vy
ZmFjZVJlZiBzdXJmYWNlUmVmID0gc3VyZmFjZS0+c3VyZmFjZSgpOworICAgICAgICBFWFBFQ1Rf
TkUoc3VyZmFjZVJlZiwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9GQUxTRShzZWVuU3VyZmFj
ZVJlZnMuY29udGFpbnMoc3VyZmFjZVJlZikpOworICAgICAgICBzZWVuU3VyZmFjZVJlZnMuYWRk
KHN1cmZhY2VSZWYpOworCisgICAgICAgIGNvbnRleHQtPm1hcmtEaXNwbGF5QnVmZmVySW5Vc2Uo
KTsKKyAgICB9CisgICAgQVNTRVJUX0VRKHNlZW5TdXJmYWNlUmVmcy5zaXplKCksIDUwdSk7Cit9
CisKKy8vIFRlc3QgdGhhdCBkcmF3aW5nIGJ1ZmZlcnMgYXJlIG5vdCByZWN5Y2xlZCBpZiB0aGUg
dXNlIGNvdW50IG9mIHRoZSB1bmRlcmx5aW5nIElPU3VyZmFjZQorLy8gY2hhbmdlcy4gVXNlIGNv
dW50IGlzIG1vZGlmaWVkIGZvciBleGFtcGxlIGJ5IENvcmVBbmltYXRpb24gd2hlbiB0aGUgSU9T
dXJmYWNlIGlzIGF0dGFjaGVkCisvLyB0byB0aGUgY29udGVudHMuCitURVNUX0YoR3JhcGhpY3ND
b250ZXh0R0xDb2NvYVRlc3QsIERpc3BsYXlCdWZmZXJzQXJlTm90UmVjeWNsZWRXaGVkSW5Vc2Up
Cit7CisgICAgYXV0byBjb250ZXh0ID0gY3JlYXRlRGVmYXVsdFRlc3RDb250ZXh0KHsgMjAsIDIw
IH0pOworICAgIEFTU0VSVF9ORShjb250ZXh0LCBudWxscHRyKTsKKyAgICBIYXNoU2V0PFJldGFp
blB0cjxJT1N1cmZhY2VSZWY+PiBzZWVuU3VyZmFjZVJlZnM7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA1MDsgKytpKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoYW5nZUNvbnRleHRDb250ZW50
cygqY29udGV4dCwgaSkpOworICAgICAgICBjb250ZXh0LT5wcmVwYXJlRm9yRGlzcGxheSgpOwor
ICAgICAgICBXZWJDb3JlOjpJT1N1cmZhY2UqIHN1cmZhY2UgPSBjb250ZXh0LT5kaXNwbGF5QnVm
ZmVyKCk7CisgICAgICAgIEFTU0VSVF9ORShzdXJmYWNlLCBudWxscHRyKTsKKyAgICAgICAgSU9T
dXJmYWNlUmVmIHN1cmZhY2VSZWYgPSBzdXJmYWNlLT5zdXJmYWNlKCk7CisgICAgICAgIEVYUEVD
VF9ORShzdXJmYWNlUmVmLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHNlZW5TdXJm
YWNlUmVmcy5jb250YWlucyhzdXJmYWNlUmVmKSk7CisgICAgICAgIHNlZW5TdXJmYWNlUmVmcy5h
ZGQoc3VyZmFjZVJlZik7CisKKyAgICAgICAgSU9TdXJmYWNlSW5jcmVtZW50VXNlQ291bnQoc3Vy
ZmFjZVJlZik7CisgICAgfQorICAgIEFTU0VSVF9FUShzZWVuU3VyZmFjZVJlZnMuc2l6ZSgpLCA1
MHUpOworfQorCisvLyBUZXN0IHRoYXQgZHJhd2luZyB0byBHcmFwaGljc0NvbnRleHRHTCBhbmQg
bWFya2luZyB0aGUgZGlzcGxheSBidWZmZXIgaW4gdXNlIGRvZXMgbm90IGxlYWsgYmlnCisvLyBh
bW91bnRzIG9mIG1lbW9yeSBmb3IgZWFjaCBkaXNwbGF5ZWQgYnVmZmVyLgorVEVTVF9GKEdyYXBo
aWNzQ29udGV4dEdMQ29jb2FUZXN0LCBVbnJlY3ljbGVkRGlzcGxheUJ1ZmZlcnNOb0xlYWtzKQor
eworICAgIC8vIFRoZSB0ZXN0IGRldGVjdHMgdGhlIGxlYWsgYnkgb2JzZXJ2aW5nIG1lbW9yeSBm
b290cHJpbnQuIEhvd2V2ZXIsIHNvbWUgb2YgdGhlIGZyZWVkIElPU3VyZmFjZQorICAgIC8vIG1l
bW9yeSAoMTMwbWIpIHN0YXlzIHJlc2lkZW50LCBwcmVzdW1hYmx5IGJ5IGludGVudGlvbiBvZiBJ
T0tpdC4gVGhlIHRlc3Qgd291bGQgb3JpZ2luYWxseSBsZWFrCisgICAgLy8gMi43Z2Igc28gdGhl
IGludGVuZGVkIGJ1ZyB3b3VsZCBiZSBkZXRlY3RlZCB3aXRoIDE1MG1iIGVycm9yIHJhbmdlLgor
ICAgIHNpemVfdCBmb290cHJpbnRFcnJvciA9IDE1MCAqIDEwMjQgKiAxMDI0OworICAgIHNpemVf
dCBmb290cHJpbnRDaGFuZ2UgPSAwOworCisgICAgYXV0byBjb250ZXh0ID0gY3JlYXRlRGVmYXVs
dFRlc3RDb250ZXh0KHsgMjA0OCwgMjA0OCB9KTsKKyAgICBBU1NFUlRfTkUoY29udGV4dCwgbnVs
bHB0cik7CisKKyAgICBXVEY6OnJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeSgpOworICAgIGF1
dG8gbGFzdEZvb3RwcmludCA9IG1lbW9yeUZvb3RwcmludCgpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoYW5nZUNvbnRleHRDb250
ZW50cygqY29udGV4dCwgaSkpOworICAgICAgICBjb250ZXh0LT5wcmVwYXJlRm9yRGlzcGxheSgp
OworICAgICAgICBFWFBFQ1RfTkUoY29udGV4dC0+ZGlzcGxheUJ1ZmZlcigpLCBudWxscHRyKTsK
KyAgICAgICAgY29udGV4dC0+bWFya0Rpc3BsYXlCdWZmZXJJblVzZSgpOworICAgIH0KKworICAg
IEVYUEVDVF9UUlVFKG1lbW9yeUZvb3RwcmludENoYW5nZWRCeShsYXN0Rm9vdHByaW50LCBmb290
cHJpbnRDaGFuZ2UsIGZvb3RwcmludEVycm9yKSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29jb2EubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGI5MzNkNTFiMTRlMTJkMDg4Y2RjNWRkYWI3ZTgzZWUyODE1MWUw
NDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvY29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3QuaCIKLQotI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBFTkFCTEUoV0VCR0wpCi0jaW1wb3J0ICJUZXN0VXRpbGl0aWVzLmgiCi0jaW1wb3J0
ICJXZWJDb3JlVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxNZXRhbC9NZXRhbC5oPgotI2ltcG9ydCA8
V2ViQ29yZS9Db2xvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oPgotI2ltcG9ydCA8b3B0aW9uYWw+Ci0jaW1wb3J0IDx3dGYvSGFzaFNldC5oPgotI2ltcG9y
dCA8d3RmL01lbW9yeUZvb3RwcmludC5oPgotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0K
LW5hbWVzcGFjZSB7Ci0KLWNsYXNzIFRlc3RlZEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIDogcHVi
bGljIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmUHRyPFRlc3RlZEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjcmVhdGUoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgewotICAgICAgICBh
dXRvIGNvbnRleHQgPSBhZG9wdFJlZigqbmV3IFRlc3RlZEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KFdURk1vdmUoYXR0cmlidXRlcykpKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQ7Ci0gICAgfQot
ICAgIFdlYkNvcmU6OklPU3VyZmFjZSogZGlzcGxheUJ1ZmZlcigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbV9zd2FwQ2hhaW4uZGlzcGxheUJ1ZmZlcigpLnN1cmZhY2UuZ2V0KCk7Ci0gICAgfQot
ICAgIHZvaWQgbWFya0Rpc3BsYXlCdWZmZXJJblVzZSgpCi0gICAgewotICAgICAgICBtX3N3YXBD
aGFpbi5tYXJrRGlzcGxheUJ1ZmZlckluVXNlKCk7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBUZXN0
ZWRHcmFwaGljc0NvbnRleHRHTE9wZW5HTChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgYXR0cmlidXRlcykKLSAgICAgICAgOiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTChXVEZNb3ZlKGF0dHJpYnV0ZXMpKQotICAgIHsKLSAgICB9Ci19OwotCi1jbGFzcyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvY29hVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3Qgewot
cHVibGljOgotICAgIHZvaWQgU2V0VXAoKSBvdmVycmlkZSAvLyBOT0xJTlQKLSAgICB7Ci0gICAg
ICAgIG1fc2NvcGVkUHJvY2Vzc1R5cGUgPSBTY29wZWRTZXRBdXhpbGlhcnlQcm9jZXNzVHlwZUZv
clRlc3RpbmcgeyBXZWJDb3JlOjpBdXhpbGlhcnlQcm9jZXNzVHlwZTo6R1BVIH07Ci0gICAgfQot
ICAgIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSAvLyBOT0xJTlQKLSAgICB7Ci0gICAgICAgIG1f
c2NvcGVkUHJvY2Vzc1R5cGUgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBz
dGQ6Om9wdGlvbmFsPFNjb3BlZFNldEF1eGlsaWFyeVByb2Nlc3NUeXBlRm9yVGVzdGluZz4gbV9z
Y29wZWRQcm9jZXNzVHlwZTsKLX07Ci0KLX0KLQotc3RhdGljIGNvbnN0IGludCBleHBlY3RlZERp
c3BsYXlCdWZmZXJQb29sU2l6ZSA9IDM7Ci0KLXN0YXRpYyBSZWZQdHI8VGVzdGVkR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w+IGNyZWF0ZURlZmF1bHRUZXN0Q29udGV4dChXZWJDb3JlOjpJbnRTaXpl
IGNvbnRleHRTaXplKQotewotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0ZXMudXNlTWV0YWwgPSB0cnVlOwotICAgIGF0dHJp
YnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgYXR0cmlidXRlcy5kZXB0aCA9IGZhbHNlOwot
ICAgIGF0dHJpYnV0ZXMuc3RlbmNpbCA9IGZhbHNlOwotICAgIGF0dHJpYnV0ZXMuYWxwaGEgPSB0
cnVlOwotICAgIGF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7Ci0gICAg
YXV0byBjb250ZXh0ID0gVGVzdGVkR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShhdHRy
aWJ1dGVzKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IGNvbnRleHQtPnJlc2hhcGUoY29udGV4dFNpemUud2lkdGgoKSwgY29udGV4dFNpemUuaGVpZ2h0
KCkpOwotICAgIHJldHVybiBjb250ZXh0OwotfQotCi1zdGF0aWMgOjp0ZXN0aW5nOjpBc3NlcnRp
b25SZXN1bHQgY2hhbmdlQ29udGV4dENvbnRlbnRzKFRlc3RlZEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMJiBjb250ZXh0LCBpbnQgaXRlcmF0aW9uKQotewotICAgIGNvbnRleHQubWFya0NvbnRleHRD
aGFuZ2VkKCk7Ci0gICAgV2ViQ29yZTo6Q29sb3IgZXhwZWN0ZWQgeyBpdGVyYXRpb24gJSAyID8g
V2ViQ29yZTo6Q29sb3I6OmdyZWVuIDogV2ViQ29yZTo6Q29sb3I6OnllbGxvdyB9OwotICAgIGF1
dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gZXhwZWN0ZWQuY29sb3JTcGFjZUFuZENvbXBv
bmVudHMoKTsKLSAgICBVTlVTRURfVkFSSUFCTEUoY29sb3JTcGFjZSk7Ci0gICAgY29udGV4dC5j
bGVhckNvbG9yKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNv
bXBvbmVudHNbM10pOwotICAgIGNvbnRleHQuY2xlYXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0w6OkNPTE9SX0JVRkZFUl9CSVQpOwotICAgIHVpbnQ4X3QgZ290VmFsdWVzWzRdID0geyB9Owot
ICAgIGF1dG8gc2FtcGxlQXQgPSBjb250ZXh0LmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7
Ci0gICAgc2FtcGxlQXQuY29udHJhY3QoMiwgMyk7Ci0gICAgc2FtcGxlQXQuY2xhbXBOZWdhdGl2
ZVRvWmVybygpOwotICAgIGNvbnRleHQucmVhZG5QaXhlbHMoc2FtcGxlQXQud2lkdGgoKSwgc2Ft
cGxlQXQuaGVpZ2h0KCksIDEsIDEsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgZ290VmFsdWVzKTsKLSAg
ICBXZWJDb3JlOjpDb2xvciBnb3QgeyBXZWJDb3JlOjpTUkdCQTx1aW50OF90PiB7IGdvdFZhbHVl
c1swXSwgZ290VmFsdWVzWzFdLCBnb3RWYWx1ZXNbMl0sIGdvdFZhbHVlc1szXSB9IH07Ci0gICAg
aWYgKGdvdCAhPSBleHBlY3RlZCkKLSAgICAgICAgcmV0dXJuIDo6dGVzdGluZzo6QXNzZXJ0aW9u
RmFpbHVyZSgpIDw8ICJGYWlsZWQgdG8gdmVyaWZ5IGRyYXcgdG8gY29udGV4dC4gR290OiAiIDw8
IGdvdCA8PCAiLCBleHBlY3RlZDogIiA8PCBleHBlY3RlZCA8PCAiLiI7Ci0gICAgcmV0dXJuIDo6
dGVzdGluZzo6QXNzZXJ0aW9uU3VjY2VzcygpOwotfQotCi1zdGF0aWMgYm9vbCBoYXNNdWx0aXBs
ZUdQVXMoKQotewotI2lmIChQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKSkK
LSAgICBhdXRvIGRldmljZXMgPSBhZG9wdE5TKE1UTENvcHlBbGxEZXZpY2VzKCkpOwotICAgIHJl
dHVybiBbZGV2aWNlcyBjb3VudF0gPiAxOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5k
aWYKLX0KLQotI2lmIEhBVkUoV0VCR0xfQ09NUEFUSUJMRV9NRVRBTCkgJiYgKFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpKQotI2RlZmluZSBNQVlCRV9NdWx0aXBsZUdQVXNE
aWZmZXJlbnRQb3dlclByZWZlcmVuY2VNZXRhbCBNdWx0aXBsZUdQVXNEaWZmZXJlbnRQb3dlclBy
ZWZlcmVuY2VNZXRhbAotI2Vsc2UKLSNkZWZpbmUgTUFZQkVfTXVsdGlwbGVHUFVzRGlmZmVyZW50
UG93ZXJQcmVmZXJlbmNlTWV0YWwgRElTQUJMRURfTXVsdGlwbGVHUFVzRGlmZmVyZW50UG93ZXJQ
cmVmZXJlbmNlTWV0YWwKLSNlbmRpZgotLy8gVGVzdHMgZm9yIGEgYnVnIHdoZXJlIGhpZ2gtcGVy
Zm9ybWFuY2UgY29udGV4dCB3b3VsZCB1c2UgbG93LXBvd2VyIEdQVSBpZiBsb3ctcG93ZXIgb3Ig
ZGVmYXVsdAotLy8gY29udGV4dCB3YXMgY3JlYXRlZCBmaXJzdC4gVGVzdCBpcyBhcHBsaWNhYmxl
IG9ubHkgZm9yIE1ldGFsLCBzaW5jZSBHUFUgc2VsZWN0aW9uIGZvciBPcGVuR0wgaXMKLS8vIHZl
cnkgZGlmZmVyZW50LgotVEVTVF9GKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2FUZXN0LCBN
QVlCRV9NdWx0aXBsZUdQVXNEaWZmZXJlbnRQb3dlclByZWZlcmVuY2VNZXRhbCkKLXsKLSAgICBp
ZiAoIWhhc011bHRpcGxlR1BVcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLnVz
ZU1ldGFsID0gdHJ1ZTsKLSAgICBFWFBFQ1RfRVEoYXR0cmlidXRlcy5wb3dlclByZWZlcmVuY2Us
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpEZWZhdWx0KTsKLSAg
ICBhdXRvIGRlZmF1bHRDb250ZXh0ID0gVGVzdGVkR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZShhdHRyaWJ1dGVzKTsKLSAgICBBU1NFUlRfTkUoZGVmYXVsdENvbnRleHQsIG51bGxwdHIp
OwotCi0gICAgYXR0cmlidXRlcy5wb3dlclByZWZlcmVuY2UgPSBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6TG93UG93ZXI7Ci0gICAgYXV0byBsb3dQb3dlckNvbnRl
eHQgPSBUZXN0ZWRHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKGF0dHJpYnV0ZXMpOwot
ICAgIEFTU0VSVF9ORShsb3dQb3dlckNvbnRleHQsIG51bGxwdHIpOwotCi0gICAgYXR0cmlidXRl
cy5wb3dlclByZWZlcmVuY2UgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVy
ZW5jZTo6SGlnaFBlcmZvcm1hbmNlOwotICAgIGF1dG8gaGlnaFBlcmZvcm1hbmNlQ29udGV4dCA9
IFRlc3RlZEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoYXR0cmlidXRlcyk7Ci0gICAg
QVNTRVJUX05FKGhpZ2hQZXJmb3JtYW5jZUNvbnRleHQsIG51bGxwdHIpOwotCi0gICAgRVhQRUNU
X05FKGxvd1Bvd2VyQ29udGV4dC0+Z2V0U3RyaW5nKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJFUiksIGhpZ2hQZXJmb3JtYW5jZUNvbnRleHQtPmdldFN0cmluZyhXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTDo6UkVOREVSRVIpKTsKLSAgICBFWFBFQ1RfRVEoZGVmYXVsdENvbnRl
eHQtPmdldFN0cmluZyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSRVIpLCBsb3dQ
b3dlckNvbnRleHQtPmdldFN0cmluZyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6UkVOREVS
RVIpKTsKLX0KLQotVEVTVF9GKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2FUZXN0LCBEaXNw
bGF5QnVmZmVyc0FyZVJlY3ljbGVkKQotewotICAgIGF1dG8gY29udGV4dCA9IGNyZWF0ZURlZmF1
bHRUZXN0Q29udGV4dCh7IDIwLCAyMCB9KTsKLSAgICBBU1NFUlRfTkUoY29udGV4dCwgbnVsbHB0
cik7Ci0gICAgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gZXhwZWN0ZWREaXNwbGF5QnVmZmVyc1tl
eHBlY3RlZERpc3BsYXlCdWZmZXJQb29sU2l6ZV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1
MDsgKytpKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGNoYW5nZUNvbnRleHRDb250ZW50cygqY29u
dGV4dCwgaSkpOwotICAgICAgICBjb250ZXh0LT5wcmVwYXJlRm9yRGlzcGxheSgpOwotICAgICAg
ICBhdXRvKiBzdXJmYWNlID0gY29udGV4dC0+ZGlzcGxheUJ1ZmZlcigpOwotICAgICAgICBBU1NF
UlRfTkUoc3VyZmFjZSwgbnVsbHB0cik7Ci0gICAgICAgIGludCBzbG90ID0gaSAlIGV4cGVjdGVk
RGlzcGxheUJ1ZmZlclBvb2xTaXplOwotICAgICAgICBpZiAoIWV4cGVjdGVkRGlzcGxheUJ1ZmZl
cnNbc2xvdF0pCi0gICAgICAgICAgICBleHBlY3RlZERpc3BsYXlCdWZmZXJzW3Nsb3RdID0gc3Vy
ZmFjZS0+c3VyZmFjZSgpOwotICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWREaXNwbGF5QnVmZmVy
c1tzbG90XS5nZXQoKSwgc3VyZmFjZS0+c3VyZmFjZSgpKSA8PCAiZm9yIGk6IiA8PCBpIDw8ICIg
c2xvdDogIiA8PCBzbG90OwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVk
RGlzcGxheUJ1ZmZlclBvb2xTaXplIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAoaW50IGogPSBp
ICsgMTsgaiA8IGV4cGVjdGVkRGlzcGxheUJ1ZmZlclBvb2xTaXplOyArK2opCi0gICAgICAgICAg
ICBFWFBFQ1RfTkUoZXhwZWN0ZWREaXNwbGF5QnVmZmVyc1tpXS5nZXQoKSwgZXhwZWN0ZWREaXNw
bGF5QnVmZmVyc1tqXS5nZXQoKSkgPDwgImZvciBpOiAiIDw8IGkgPDwgIiBqOiIgPDwgajsKLSAg
ICB9Ci19Ci0KLS8vIFRlc3QgdGhhdCBkcmF3aW5nIGJ1ZmZlcnMgYXJlIG5vdCByZWN5Y2xlZCBp
ZiBgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKWAKLS8v
IGlzIGNhbGxlZC4KLVRFU1RfRihHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hVGVzdCwgRGlz
cGxheUJ1ZmZlcnNBcmVOb3RSZWN5Y2xlZFdoZW5NYXJrZWRJblVzZSkKLXsKLSAgICBhdXRvIGNv
bnRleHQgPSBjcmVhdGVEZWZhdWx0VGVzdENvbnRleHQoeyAyMCwgMjAgfSk7Ci0gICAgQVNTRVJU
X05FKGNvbnRleHQsIG51bGxwdHIpOwotICAgIEhhc2hTZXQ8UmV0YWluUHRyPElPU3VyZmFjZVJl
Zj4+IHNlZW5TdXJmYWNlUmVmczsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDUwOyArK2kpIHsK
LSAgICAgICAgRVhQRUNUX1RSVUUoY2hhbmdlQ29udGV4dENvbnRlbnRzKCpjb250ZXh0LCBpKSk7
Ci0gICAgICAgIGNvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5KCk7Ci0gICAgICAgIFdlYkNvcmU6
OklPU3VyZmFjZSogc3VyZmFjZSA9IGNvbnRleHQtPmRpc3BsYXlCdWZmZXIoKTsKLSAgICAgICAg
QVNTRVJUX05FKHN1cmZhY2UsIG51bGxwdHIpOwotICAgICAgICBJT1N1cmZhY2VSZWYgc3VyZmFj
ZVJlZiA9IHN1cmZhY2UtPnN1cmZhY2UoKTsKLSAgICAgICAgRVhQRUNUX05FKHN1cmZhY2VSZWYs
IG51bGxwdHIpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uoc2VlblN1cmZhY2VSZWZzLmNvbnRhaW5z
KHN1cmZhY2VSZWYpKTsKLSAgICAgICAgc2VlblN1cmZhY2VSZWZzLmFkZChzdXJmYWNlUmVmKTsK
LQotICAgICAgICBjb250ZXh0LT5tYXJrRGlzcGxheUJ1ZmZlckluVXNlKCk7Ci0gICAgfQotICAg
IEFTU0VSVF9FUShzZWVuU3VyZmFjZVJlZnMuc2l6ZSgpLCA1MHUpOwotfQotCi0vLyBUZXN0IHRo
YXQgZHJhd2luZyBidWZmZXJzIGFyZSBub3QgcmVjeWNsZWQgaWYgdGhlIHVzZSBjb3VudCBvZiB0
aGUgdW5kZXJseWluZyBJT1N1cmZhY2UKLS8vIGNoYW5nZXMuIFVzZSBjb3VudCBpcyBtb2RpZmll
ZCBmb3IgZXhhbXBsZSBieSBDb3JlQW5pbWF0aW9uIHdoZW4gdGhlIElPU3VyZmFjZSBpcyBhdHRh
Y2hlZAotLy8gdG8gdGhlIGNvbnRlbnRzLgotVEVTVF9GKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Q29jb2FUZXN0LCBEaXNwbGF5QnVmZmVyc0FyZU5vdFJlY3ljbGVkV2hlZEluVXNlKQotewotICAg
IGF1dG8gY29udGV4dCA9IGNyZWF0ZURlZmF1bHRUZXN0Q29udGV4dCh7IDIwLCAyMCB9KTsKLSAg
ICBBU1NFUlRfTkUoY29udGV4dCwgbnVsbHB0cik7Ci0gICAgSGFzaFNldDxSZXRhaW5QdHI8SU9T
dXJmYWNlUmVmPj4gc2VlblN1cmZhY2VSZWZzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTA7
ICsraSkgewotICAgICAgICBFWFBFQ1RfVFJVRShjaGFuZ2VDb250ZXh0Q29udGVudHMoKmNvbnRl
eHQsIGkpKTsKLSAgICAgICAgY29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsKLSAgICAgICAg
V2ViQ29yZTo6SU9TdXJmYWNlKiBzdXJmYWNlID0gY29udGV4dC0+ZGlzcGxheUJ1ZmZlcigpOwot
ICAgICAgICBBU1NFUlRfTkUoc3VyZmFjZSwgbnVsbHB0cik7Ci0gICAgICAgIElPU3VyZmFjZVJl
ZiBzdXJmYWNlUmVmID0gc3VyZmFjZS0+c3VyZmFjZSgpOwotICAgICAgICBFWFBFQ1RfTkUoc3Vy
ZmFjZVJlZiwgbnVsbHB0cik7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShzZWVuU3VyZmFjZVJlZnMu
Y29udGFpbnMoc3VyZmFjZVJlZikpOwotICAgICAgICBzZWVuU3VyZmFjZVJlZnMuYWRkKHN1cmZh
Y2VSZWYpOwotCi0gICAgICAgIElPU3VyZmFjZUluY3JlbWVudFVzZUNvdW50KHN1cmZhY2VSZWYp
OwotICAgIH0KLSAgICBBU1NFUlRfRVEoc2VlblN1cmZhY2VSZWZzLnNpemUoKSwgNTB1KTsKLX0K
LQotLy8gVGVzdCB0aGF0IGRyYXdpbmcgdG8gR3JhcGhpY3NDb250ZXh0R0wgYW5kIG1hcmtpbmcg
dGhlIGRpc3BsYXkgYnVmZmVyIGluIHVzZSBkb2VzIG5vdCBsZWFrIGJpZwotLy8gYW1vdW50cyBv
ZiBtZW1vcnkgZm9yIGVhY2ggZGlzcGxheWVkIGJ1ZmZlci4KLVRFU1RfRihHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvY29hVGVzdCwgVW5yZWN5Y2xlZERpc3BsYXlCdWZmZXJzTm9MZWFrcykKLXsK
LSAgICAvLyBUaGUgdGVzdCBkZXRlY3RzIHRoZSBsZWFrIGJ5IG9ic2VydmluZyBtZW1vcnkgZm9v
dHByaW50LiBIb3dldmVyLCBzb21lIG9mIHRoZSBmcmVlZCBJT1N1cmZhY2UKLSAgICAvLyBtZW1v
cnkgKDEzMG1iKSBzdGF5cyByZXNpZGVudCwgcHJlc3VtYWJseSBieSBpbnRlbnRpb24gb2YgSU9L
aXQuIFRoZSB0ZXN0IHdvdWxkIG9yaWdpbmFsbHkgbGVhawotICAgIC8vIDIuN2diIHNvIHRoZSBp
bnRlbmRlZCBidWcgd291bGQgYmUgZGV0ZWN0ZWQgd2l0aCAxNTBtYiBlcnJvciByYW5nZS4KLSAg
ICBzaXplX3QgZm9vdHByaW50RXJyb3IgPSAxNTAgKiAxMDI0ICogMTAyNDsKLSAgICBzaXplX3Qg
Zm9vdHByaW50Q2hhbmdlID0gMDsKLQotICAgIGF1dG8gY29udGV4dCA9IGNyZWF0ZURlZmF1bHRU
ZXN0Q29udGV4dCh7IDIwNDgsIDIwNDggfSk7Ci0gICAgQVNTRVJUX05FKGNvbnRleHQsIG51bGxw
dHIpOwotCi0gICAgV1RGOjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKTsKLSAgICBhdXRv
IGxhc3RGb290cHJpbnQgPSBtZW1vcnlGb290cHJpbnQoKTsKLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgNTA7ICsraSkgewotICAgICAgICBFWFBFQ1RfVFJVRShjaGFuZ2VDb250ZXh0Q29udGVu
dHMoKmNvbnRleHQsIGkpKTsKLSAgICAgICAgY29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsK
LSAgICAgICAgRVhQRUNUX05FKGNvbnRleHQtPmRpc3BsYXlCdWZmZXIoKSwgbnVsbHB0cik7Ci0g
ICAgICAgIGNvbnRleHQtPm1hcmtEaXNwbGF5QnVmZmVySW5Vc2UoKTsKLSAgICB9Ci0KLSAgICBF
WFBFQ1RfVFJVRShtZW1vcnlGb290cHJpbnRDaGFuZ2VkQnkobGFzdEZvb3RwcmludCwgZm9vdHBy
aW50Q2hhbmdlLCBmb290cHJpbnRFcnJvcikpOwotfQotCi19Ci0KLSNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>