<?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>205949</bug_id>
          
          <creation_ts>2020-01-08 12:06:12 -0800</creation_ts>
          <short_desc>[WebGL] More GraphicsContext3D to GraphicsContextGL renaming</short_desc>
          <delta_ts>2020-01-08 12:28:55 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>annulen</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>graouts</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1604218</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-01-08 12:06:12 -0800</bug_when>
    <thetext>[WebGL] More GraphicsContext3D to GraphicsContextGL renaming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604219</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-08 12:06:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/58416989&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604220</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-08 12:06:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/58416991&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604228</commentid>
    <comment_count>3</comment_count>
      <attachid>387127</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-01-08 12:15:10 -0800</bug_when>
    <thetext>Created attachment 387127
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604234</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-01-08 12:28:55 -0800</bug_when>
    <thetext>Committed r254214: &lt;https://trac.webkit.org/changeset/254214&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387127</attachid>
            <date>2020-01-08 12:15:10 -0800</date>
            <delta_ts>2020-01-08 12:16:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205949-20200109071508.patch</filename>
            <type>text/plain</type>
            <size>613107</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRmNzVlYTRkZDVkNzA4
N2I5NDE5NTljOWZmZTBlMDRiNGE5ZjVkMy4uNTQyZDc4ZDU3MjA3MTcyYzliYWVjYjc1ODhhNTMy
MTM3NTYzNjVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMS0wOCAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdMXSBNb3JlIEdyYXBo
aWNzQ29udGV4dDNEIHRvIEdyYXBoaWNzQ29udGV4dEdMIHJlbmFtaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU5NDkKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzU4NDE2OTg5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbmFtZSB0aGUgR0MzRC1wcmVmaXhlZCB0eXBlcy4KKworICAgICAgICAq
IEhlYWRlcnMuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogaHRt
bC9IVE1MVmlkZW9FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmNwcDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9P
RVNWZXJ0ZXhBcnJheU9iamVjdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xCdWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNw
cDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmg6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNw
cDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9n
cmFtLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5jcHA6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xRdWVyeS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMU2FtcGxlci5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMU2hhZGVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJl
Y2lzaW9uRm9ybWF0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTeW5jLmNwcDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFN5bmMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xVbmlmb3JtTG9jYXRpb24uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2UuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNl
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHA6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnNHTC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzVHlwZXNHTC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlczNELmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW06Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3Bl
bkdMLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dM
T3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorCiAyMDIwLTAx
LTA2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR0xdIEZp
bGwgaW4gbWlzc2luZyBXZWJHTDIgZW50cnkgcG9pbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDgwZTc1ODM4MGFm
NDJiZmE2ZjUxOTIxOTI1MDg1OWVlZWEzODNiNzcuLjkwZmNiYmE3YTc0YzI3N2I1NTllODJjMjdj
MjJhYTc3YTQ5MGQ3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDEtMDggIERl
YW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJHTF0gTW9yZSBHcmFw
aGljc0NvbnRleHQzRCB0byBHcmFwaGljc0NvbnRleHRHTCByZW5hbWluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1OTQ5CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81ODQxNjk4OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJl
bW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6Y29w
eVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuaDoKKwogMjAyMC0wMS0wNyAgS2VpdGgg
Um9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmb3JtYXQgV2ViRnJhbWVM
b2FkZXJDbGllbnQgbG9nZ2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNDY2MTljNjVkNmIzYzNk
ODFmZjRjMmU1MDA1MjE2YWE0OTYyZWMxNC4uYzlhNDhmZDdhMzdkYjdjZjMzMzkzYWI5NjE0OTg4
MDQxZGE2ZjUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMDY2LDcgKzEwNjYsNyBAQCBzZXQo
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllclRyYW5zZm9ybS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllclVwZGF0ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMzRC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlc0dMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNr
aW5nU3RvcmUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGVjNDA4NGQ5ODQ1OGMzNTMyNDI1YmM5ZWVmNzUzN2Y1MDYzNWIzNTAu
LjE3MGIyYzA2NzE0NjQ1OWQ3NjhhMWE2ZTVmM2EwMmVjZDRjODQ3ZjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIxNTIsNyAr
MjE1Miw3IEBACiAJCTc3NzlCRDk2MUYzMjI0NkEwMEMyMTQxNyAvKiBKU1Zpc3VhbFZpZXdwb3J0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Nzc5QkQ5
MjFGMkZEQkY3MDBDMjE0MTcgLyogSlNWaXN1YWxWaWV3cG9ydC5oICovOyB9OwogCQk3N0ExN0E3
MjEyRjI4MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4QXJyYXlPYmplY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3QTE3QTZGMTJGMjgxODIwMDRFMDJG
NiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5oICovOyB9OwogCQk3N0ExN0E3ODEyRjI4NjQyMDA0
RTAyRjYgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdBMTdBNzUxMkYyODY0MjAwNEUwMkY2IC8qIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCAqLzsgfTsKLQkJNzdBMTdBN0IxMkYyODkwQjAwNEUw
MkY2IC8qIEdyYXBoaWNzVHlwZXMzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzdBMTdBN0ExMkYyODkwQjAwNEUwMkY2IC8qIEdyYXBoaWNzVHlwZXMz
RC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc3
QTE3QTdCMTJGMjg5MEIwMDRFMDJGNiAvKiBHcmFwaGljc1R5cGVzR0wuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3QTE3QTdBMTJGMjg5MEIwMDRFMDJG
NiAvKiBHcmFwaGljc1R5cGVzR0wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3N0ExN0FBNzEyRjI4QjJBMDA0RTAyRjYgLyogSlNPRVNWZXJ0ZXhB
cnJheU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzdBMTdBQTMxMkYyOEIyQTAwNEUwMkY2IC8qIEpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCAq
LzsgfTsKIAkJNzdENTEwMDQxRUQ0RjcxRTAwREE0Qzg3IC8qIEpTQ3JlZGVudGlhbFJlcXVlc3RP
cHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
N0Q1MEZGRjFFRDRGNzBDMDBEQTRDODcgLyogSlNDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCAq
LzsgfTsKIAkJNzdENTEwMDYxRUQ0RjcyNTAwREE0Qzg3IC8qIEpTQ3JlZGVudGlhbENyZWF0aW9u
T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzdENTBGRkQxRUQ0RjcwQzAwREE0Qzg3IC8qIEpTQ3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5o
ICovOyB9OwpAQCAtOTY2OCw3ICs5NjY4LDcgQEAKIAkJNzdBMTdBNzQxMkYyODY0MjAwNEUwMkY2
IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc3QTE3QTc1MTJGMjg2NDIwMDRFMDJGNiAvKiBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzdB
MTdBNzYxMkYyODY0MjAwNEUwMkY2IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3N0ExN0E3QTEyRjI4OTBCMDA0RTAyRjYgLyogR3Jh
cGhpY3NUeXBlczNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNz
VHlwZXMzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3N0ExN0E3QTEyRjI4OTBC
MDA0RTAyRjYgLyogR3JhcGhpY3NUeXBlc0dMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEdyYXBoaWNzVHlwZXNHTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
N0ExN0FBMjEyRjI4QjJBMDA0RTAyRjYgLyogSlNPRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09FU1ZlcnRleEFycmF5T2JqZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzdBMTdBQTMxMkYyOEIyQTAwNEUw
MkY2IC8qIEpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNPRVNWZXJ0ZXhBcnJheU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3N0FBRDY4MzFFQ0ZCNjYyMDBCRkEyRDEgLyogQ3JlZGVudGlhbENyZWF0aW9uT3B0
aW9ucy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTA2OSw3ICsyNTA2OSw3IEBA
CiAJCQkJMEZBMjRENzgxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmgg
Ki8sCiAJCQkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICov
LAogCQkJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8sCi0J
CQkJNzdBMTdBN0ExMkYyODkwQjAwNEUwMkY2IC8qIEdyYXBoaWNzVHlwZXMzRC5oICovLAorCQkJ
CTc3QTE3QTdBMTJGMjg5MEIwMDRFMDJGNiAvKiBHcmFwaGljc1R5cGVzR0wuaCAqLywKIAkJCQlD
REE1OTU5MjIxNDZERUMzMDBBODQxODUgLyogSEVWQ1V0aWxpdGllcy5jcHAgKi8sCiAJCQkJQ0RB
NTk1OTEyMTQ2REVDMzAwQTg0MTg1IC8qIEhFVkNVdGlsaXRpZXMuaCAqLywKIAkJCQlCMjc1MzU0
MDBCMDUzODE0MDAyQ0U2NEYgLyogSWNvbi5oICovLApAQCAtMzAwNjAsNyArMzAwNjAsNyBAQAog
CQkJCTFBQzY5NTkzMTYxQTFFNTMwMDM3MzJDQiAvKiBHcmFwaGljc0xheWVyRmFjdG9yeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZBMjREN0ExNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5
ZXJVcGRhdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNFMEUg
LyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzdBMTdBN0IxMkYyODkwQjAw
NEUwMkY2IC8qIEdyYXBoaWNzVHlwZXMzRC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzdBMTdBN0Ix
MkYyODkwQjAwNEUwMkY2IC8qIEdyYXBoaWNzVHlwZXNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTExMkY0NzIxRTNBODYxNjAwRDZDREZEIC8qIEdyaWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
M0UyNTFDMTgwNDZCMDYwMEUyN0Y1NiAvKiBHcmlkQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0RFRjRGRDcxN0U4NUM4RjAwQUVFMjRCIC8qIEdyaWRMZW5ndGguaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5kZXggY2M5M2FkYTk1YTVi
M2RhZGQ3NjU1NGE5N2ZhMGFlZTk1N2U5ZTVhOC4uOWVmYTczYWRmNmFhNzI4MjIwMWIxY2Y0YjFm
M2YxMWYwODAzMTlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3Bw
CkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpwYWludEN1cnJlbnRG
cmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnMKICAgICBwbGF5ZXIt
PnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGNvbnRleHQsIGRlc3RSZWN0KTsKIH0KIAotYm9v
bCBIVE1MVmlkZW9FbGVtZW50Ojpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwg
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJv
b2wgZmxpcFkpCitib29sIEhUTUxWaWRlb0VsZW1lbnQ6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRm
b3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm1HTE9i
amVjdCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICAgICBpZiAoIXBsYXllcigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCmluZGV4IDRj
ODgyMDg0NGZhNGM3YzkyNWQzZTljNmM5ZGQwMjBhMjQzYjY0NjEuLmJiZmNiOTk3MzlmMTJjODQ0
YmJkNzc4MjU0MTk1NTYzMjc5ZTE4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5oCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFVzZWQgYnkgV2ViR0wg
dG8gZG8gR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IGlmIHBvc3NpYmxlLgogICAgIC8vIFNlZSBtb3Jl
IGRldGFpbHMgYXQgTWVkaWFQbGF5ZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVy
ZSgpIGRlZmluZWQgaW4gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXIuaC4KLSAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpOwor
ICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSk7CiAKICAgICBi
b29sIHNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGRpc3BsYXlNb2Rl
KCkgPT0gUG9zdGVyIHx8IGRpc3BsYXlNb2RlKCkgPT0gUG9zdGVyV2FpdGluZ0ZvclZpZGVvOyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAppbmRleCAwOTFhMzY5OTJh
OWMzNWYxMzBmODVkY2M4MThmOTU5N2UyNzJkZWNmLi5mNzQ0ODUxMjAwMTU3NWI0YWY0YmJhMjRl
YWE1N2FiZTZhMDY0M2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
CkBAIC0xNTQsNyArMTU0LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zm
c2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgICAgICAvLyBjcmVhdGVz
IGEgbmV3IGJhY2tpbmcgc3RvcmUuIFNpbmNlIHdlJ3JlIG5vdCBkb2luZyB0aGF0IHlldCwgd2UK
ICAgICAgICAgLy8gbmVlZCB0byBlcmFzZSB3aGF0J3MgdGhlcmUuCiAKLSAgICAgICAgR0MzRGZs
b2F0IGNsZWFyQ29sb3JbNF07CisgICAgICAgIEdDR0xmbG9hdCBjbGVhckNvbG9yWzRdOwogICAg
ICAgICBnYzNkLT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0NMRUFSX1ZBTFVF
LCBjbGVhckNvbG9yKTsKICAgICAgICAgZ2MzZC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKICAg
ICAgICAgZ2MzZC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQgfCBH
cmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX0JVRkZFUl9CSVQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
QU5HTEVJbnN0YW5jZWRBcnJheXMuY3BwCmluZGV4IDhkNzRlNDA5ODIzNzU2MDAxOGVjMGUzOWE5
MWU5NmM3MDFlNzkyYWUuLjNkNTcwMTNmZjZhMjU3YjRmZTBhMzc3MmIyNzFhZGJlOTVkYTI5ZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJy
YXlzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFy
cmF5cy5jcHAKQEAgLTY2LDIxICs2NiwyMSBAQCBib29sIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpz
dXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKICNlbmRpZgogfQog
Ci12b2lkIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0Mz
RGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJp
bWNvdW50KQordm9pZCBBTkdMRUluc3RhbmNlZEFycmF5czo6ZHJhd0FycmF5c0luc3RhbmNlZEFO
R0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNp
emVpIHByaW1jb3VudCkKIHsKICAgICBpZiAobV9jb250ZXh0LmlzQ29udGV4dExvc3QoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZp
cnN0LCBjb3VudCwgcHJpbWNvdW50KTsKIH0KIAotdm9pZCBBTkdMRUluc3RhbmNlZEFycmF5czo6
ZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50
LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQor
dm9pZCBBTkdMRUluc3RhbmNlZEFycmF5czo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NH
TGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmIChtX2NvbnRleHQuaXNDb250ZXh0
TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LmRyYXdFbGVtZW50c0luc3Rh
bmNlZChtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOwogfQogCi12b2lkIEFO
R0xFSW5zdGFuY2VkQXJyYXlzOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoR0MzRHVpbnQgaW5k
ZXgsIEdDM0R1aW50IGRpdmlzb3IpCit2b2lkIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yQU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7CiAg
ICAgaWYgKG1fY29udGV4dC5pc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCmluZGV4
IGQ0MTM4Mjc3ZmNhYmZjNjBiY2VkMWI0YWRjZjkzMjUzYjVjOWFmNmEuLjgzNzA5MTQxZWU2MmFi
NzQwZjNjMDE1MGFiNjA1MjUwOGMyNTAyOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuaApAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYp
OwogCi0gICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0MzRGVudW0gbW9kZSwgR0Mz
RGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKLSAgICB2
b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3Vu
dCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoR0MzRHVpbnQgaW5kZXgsIEdD
M0R1aW50IGRpdmlzb3IpOworICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xl
bnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1j
b3VudCk7CisgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xz
aXplaSBwcmltY291bnQpOworICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvckFOR0xFKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2Jq
ZWN0LmNwcAppbmRleCA0MTBjZWE1ZjRkYmE1ODYxNDdmODJlZTc4YjVkYmE3OTk5MTk3YTA0Li43
NmM2MTIwMzE4M2E5ZGNjMWJkYzFiYmE5YzcyMjEyMDQxYmIwZDI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwCkBAIC02NCw3
ICs2NCw3IEBAIHZvaWQgT0VTVmVydGV4QXJyYXlPYmplY3Q6OmRlbGV0ZVZlcnRleEFycmF5T0VT
KFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMqIGFycmF5CiAgICAgYXJyYXlPYmplY3QtPmRlbGV0
ZU9iamVjdChtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKSk7CiB9CiAKLUdDM0Rib29sZWFu
IE9FU1ZlcnRleEFycmF5T2JqZWN0Ojppc1ZlcnRleEFycmF5T0VTKFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMqIGFycmF5T2JqZWN0KQorR0NHTGJvb2xlYW4gT0VTVmVydGV4QXJyYXlPYmplY3Q6
OmlzVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJyYXlPYmplY3Qp
CiB7CiAgICAgcmV0dXJuIGFycmF5T2JqZWN0ICYmICFtX2NvbnRleHQuaXNDb250ZXh0TG9zdCgp
ICYmIGFycmF5T2JqZWN0LT5oYXNFdmVyQmVlbkJvdW5kKCkKICAgICAgICAgJiYgbV9jb250ZXh0
LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFy
cmF5T2JqZWN0LT5vYmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
T0VTVmVydGV4QXJyYXlPYmplY3QuaAppbmRleCAzNTY0YjNiZTdlZTUxYjIzYmIwNmU1YWU3ZWY1
ZjUyNzQ0OWRlOTIzLi45NTA4ZTZhNThlNjMxYTYyZjYzZjA0MGIzNmZlZjEyZTNkMTVmZTlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0
LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgogI2luY2x1ZGUg
IldlYkdMRXh0ZW5zaW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogCiAgICAgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGNyZWF0
ZVZlcnRleEFycmF5T0VTKCk7CiAgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTKik7Ci0gICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKik7CisgICAgR0NHTGJvb2xlYW4gaXNWZXJ0ZXhBcnJh
eU9FUyhXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKik7CiAgICAgdm9pZCBiaW5kVmVydGV4QXJy
YXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyopOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcApp
bmRleCA4MjVlNzVhOThjMWE0YzEzZGQ5NTVjNzg1MzIzMWRhODdhOTM4MWNjLi5iYWU5YjRiMWY0
OTNjODU0ZDI1MTdmYWJmYTNhZTk1YTIyMzMzZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTM4LDcgKzEz
OCw3IEBAIGlubGluZSBzdGF0aWMgT3B0aW9uYWw8dW5zaWduZWQ+IGFycmF5QnVmZmVyVmlld0Vs
ZW1lbnRTaXplKGNvbnN0IEFycmF5QnVmZmVyVmllCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgY29uc3QgQXJyYXlCdWZmZXJWaWV3JiBkYXRhLCBHQzNEZW51bSB1c2Fn
ZSwgR0MzRHVpbnQgc3JjT2Zmc2V0LCBHQzNEdWludCBsZW5ndGgpCit2b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCBBcnJheUJ1ZmZl
clZpZXcmIGRhdGEsIEdDR0xlbnVtIHVzYWdlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50
IGxlbmd0aCkKIHsKICAgICBhdXRvIG9wdGlvbmFsRWxlbWVudFNpemUgPSBhcnJheUJ1ZmZlclZp
ZXdFbGVtZW50U2l6ZShkYXRhKTsKICAgICBpZiAoIW9wdGlvbmFsRWxlbWVudFNpemUpIHsKQEAg
LTE0NiwxMiArMTQ2LDEyIEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0
YShHQzNEZW51bSB0YXJnZXQsIGNvbnN0IEFycmF5QnVmZmVyVmlldyYKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBhdXRvIGVsZW1lbnRTaXplID0gb3B0aW9uYWxFbGVtZW50U2l6ZS52YWx1
ZSgpOwotICAgIENoZWNrZWQ8R0MzRHVpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkRWxlbWVu
dFNpemUoZWxlbWVudFNpemUpOworICAgIENoZWNrZWQ8R0NHTHVpbnQsIFJlY29yZE92ZXJmbG93
PiBjaGVja2VkRWxlbWVudFNpemUoZWxlbWVudFNpemUpOwogCi0gICAgQ2hlY2tlZDxHQzNEdWlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTcmNPZmZzZXQoc3JjT2Zmc2V0KTsKLSAgICBDaGVj
a2VkPEdDM0R1aW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZEJ5dGVTcmNPZmZzZXQgPSBjaGVj
a2VkU3JjT2Zmc2V0ICogY2hlY2tlZEVsZW1lbnRTaXplOwotICAgIENoZWNrZWQ8R0MzRHVpbnQs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkbGVuZ3RoKGxlbmd0aCk7Ci0gICAgQ2hlY2tlZDxHQzNE
dWludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRCeXRlTGVuZ3RoID0gY2hlY2tlZGxlbmd0aCAq
IGNoZWNrZWRFbGVtZW50U2l6ZTsKKyAgICBDaGVja2VkPEdDR0x1aW50LCBSZWNvcmRPdmVyZmxv
dz4gY2hlY2tlZFNyY09mZnNldChzcmNPZmZzZXQpOworICAgIENoZWNrZWQ8R0NHTHVpbnQsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkQnl0ZVNyY09mZnNldCA9IGNoZWNrZWRTcmNPZmZzZXQgKiBj
aGVja2VkRWxlbWVudFNpemU7CisgICAgQ2hlY2tlZDxHQ0dMdWludCwgUmVjb3JkT3ZlcmZsb3c+
IGNoZWNrZWRsZW5ndGgobGVuZ3RoKTsKKyAgICBDaGVja2VkPEdDR0x1aW50LCBSZWNvcmRPdmVy
Zmxvdz4gY2hlY2tlZEJ5dGVMZW5ndGggPSBjaGVja2VkbGVuZ3RoICogY2hlY2tlZEVsZW1lbnRT
aXplOwogCiAgICAgaWYgKGNoZWNrZWRCeXRlU3JjT2Zmc2V0Lmhhc092ZXJmbG93ZWQoKQogICAg
ICAgICB8fCBjaGVja2VkQnl0ZUxlbmd0aC5oYXNPdmVyZmxvd2VkKCkKQEAgLTE2OSw3ICsxNjks
NyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBjb25zdCBBcnJheUJ1ZmZlclZpZXcmCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YnVmZmVyRGF0YSh0YXJnZXQsIEJ1ZmZlckRhdGFTb3VyY2Uoc2xpY2UuZ2V0KCkpLCB1c2Fn
ZSk7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNE
ZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIGNvbnN0IEFycmF5QnVmZmVyVmlldyYgZGF0
YSwgR0MzRHVpbnQgc3JjT2Zmc2V0LCBHQzNEdWludCBsZW5ndGgpCit2b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zm
c2V0LCBjb25zdCBBcnJheUJ1ZmZlclZpZXcmIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NH
THVpbnQgbGVuZ3RoKQogewogICAgIGF1dG8gb3B0aW9uYWxFbGVtZW50U2l6ZSA9IGFycmF5QnVm
ZmVyVmlld0VsZW1lbnRTaXplKGRhdGEpOwogICAgIGlmICghb3B0aW9uYWxFbGVtZW50U2l6ZSkg
ewpAQCAtMTc3LDEyICsxNzcsMTIgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpidWZm
ZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgY28KICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBhdXRvIGVsZW1lbnRTaXplID0gb3B0aW9uYWxFbGVtZW50U2l6
ZS52YWx1ZSgpOwotICAgIENoZWNrZWQ8R0MzRHVpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2Vk
RWxlbWVudFNpemUoZWxlbWVudFNpemUpOworICAgIENoZWNrZWQ8R0NHTHVpbnQsIFJlY29yZE92
ZXJmbG93PiBjaGVja2VkRWxlbWVudFNpemUoZWxlbWVudFNpemUpOwogCi0gICAgQ2hlY2tlZDxH
QzNEdWludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTcmNPZmZzZXQoc3JjT2Zmc2V0KTsKLSAg
ICBDaGVja2VkPEdDM0R1aW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZEJ5dGVTcmNPZmZzZXQg
PSBjaGVja2VkU3JjT2Zmc2V0ICogY2hlY2tlZEVsZW1lbnRTaXplOwotICAgIENoZWNrZWQ8R0Mz
RHVpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkbGVuZ3RoKGxlbmd0aCk7Ci0gICAgQ2hlY2tl
ZDxHQzNEdWludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRCeXRlTGVuZ3RoID0gY2hlY2tlZGxl
bmd0aCAqIGNoZWNrZWRFbGVtZW50U2l6ZTsKKyAgICBDaGVja2VkPEdDR0x1aW50LCBSZWNvcmRP
dmVyZmxvdz4gY2hlY2tlZFNyY09mZnNldChzcmNPZmZzZXQpOworICAgIENoZWNrZWQ8R0NHTHVp
bnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQnl0ZVNyY09mZnNldCA9IGNoZWNrZWRTcmNPZmZz
ZXQgKiBjaGVja2VkRWxlbWVudFNpemU7CisgICAgQ2hlY2tlZDxHQ0dMdWludCwgUmVjb3JkT3Zl
cmZsb3c+IGNoZWNrZWRsZW5ndGgobGVuZ3RoKTsKKyAgICBDaGVja2VkPEdDR0x1aW50LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZEJ5dGVMZW5ndGggPSBjaGVja2VkbGVuZ3RoICogY2hlY2tlZEVs
ZW1lbnRTaXplOwogCiAgICAgaWYgKGNoZWNrZWRCeXRlU3JjT2Zmc2V0Lmhhc092ZXJmbG93ZWQo
KQogICAgICAgICB8fCBjaGVja2VkQnl0ZUxlbmd0aC5oYXNPdmVyZmxvd2VkKCkKQEAgLTIwMSw3
ICsyMDEsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBjbwogICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIEJ1ZmZlckRhdGFTb3VyY2Uo
c2xpY2UuZ2V0KCkpKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpjb3B5QnVm
ZmVyU3ViRGF0YShHQzNEZW51bSByZWFkVGFyZ2V0LCBHQzNEZW51bSB3cml0ZVRhcmdldCwgR0Mz
RGludDY0IHJlYWRPZmZzZXQsIEdDM0RpbnQ2NCB3cml0ZU9mZnNldCwgR0MzRGludDY0IHNpemUp
Cit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVt
IHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50NjQgcmVhZE9mZnNldCwg
R0NHTGludDY0IHdyaXRlT2Zmc2V0LCBHQ0dMaW50NjQgc2l6ZSkKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CkBAIC0yMjEsOSArMjIxLDkgQEAg
dm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpjb3B5QnVmZmVyU3ViRGF0YShHQzNEZW51bSBy
ZWFkVGFyZ2V0LCBHQzNEZW51bSB3cmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENo
ZWNrZWQ8R0MzRGludHB0ciwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRSZWFkT2Zmc2V0KHJlYWRP
ZmZzZXQpOwotICAgIENoZWNrZWQ8R0MzRGludHB0ciwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRX
cml0ZU9mZnNldCh3cml0ZU9mZnNldCk7Ci0gICAgQ2hlY2tlZDxHQzNEc2l6ZWlwdHIsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkU2l6ZShzaXplKTsKKyAgICBDaGVja2VkPEdDR0xpbnRwdHIsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkUmVhZE9mZnNldChyZWFkT2Zmc2V0KTsKKyAgICBDaGVja2Vk
PEdDR0xpbnRwdHIsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkV3JpdGVPZmZzZXQod3JpdGVPZmZz
ZXQpOworICAgIENoZWNrZWQ8R0NHTHNpemVpcHRyLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFNp
emUoc2l6ZSk7CiAgICAgaWYgKGNoZWNrZWRSZWFkT2Zmc2V0Lmhhc092ZXJmbG93ZWQoKSB8fCBj
aGVja2VkV3JpdGVPZmZzZXQuaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRTaXplLmhhc092ZXJm
bG93ZWQoKSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIk9mZnNldCBvciBzaXplIGlzIHRv
byBiaWciKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6Y29weUJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gcmVhZFRhcmdldCwg
R0MzRGVudW0gd3JpCiAgICAgfQogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omdl
dEJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc3JjQnl0ZU9mZnNldCwg
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJiBkc3REYXRhLCBHQzNEdWludCBkc3RPZmZzZXQsIEdD
M0R1aW50IGxlbmd0aCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyU3Vi
RGF0YShHQ0dMZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzcmNCeXRlT2Zmc2V0LCBSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiYmIGRzdERhdGEsIEdDR0x1aW50IGRzdE9mZnNldCwgR0NHTHVpbnQgbGVu
Z3RoKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI3NCwxMCArMjc0LDEwIEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
QnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzcmNCeXRlCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBHQzNEdWludCBjb3B5TGVuZ3RoID0gbGVuZ3RoID8gbGVu
Z3RoIDogZHN0RGF0YUxlbmd0aCAtIGRzdE9mZnNldDsKKyAgICBHQ0dMdWludCBjb3B5TGVuZ3Ro
ID0gbGVuZ3RoID8gbGVuZ3RoIDogZHN0RGF0YUxlbmd0aCAtIGRzdE9mZnNldDsKIAotICAgIENo
ZWNrZWQ8R0MzRHVpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkRHN0T2Zmc2V0KGRzdE9mZnNl
dCk7Ci0gICAgQ2hlY2tlZDxHQzNEdWludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3B5TGVu
Z3RoKGNvcHlMZW5ndGgpOworICAgIENoZWNrZWQ8R0NHTHVpbnQsIFJlY29yZE92ZXJmbG93PiBj
aGVja2VkRHN0T2Zmc2V0KGRzdE9mZnNldCk7CisgICAgQ2hlY2tlZDxHQ0dMdWludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRDb3B5TGVuZ3RoKGNvcHlMZW5ndGgpOwogICAgIGF1dG8gY2hlY2tl
ZERlc3RpbmF0aW9uRW5kID0gY2hlY2tlZERzdE9mZnNldCArIGNoZWNrZWRDb3B5TGVuZ3RoOwog
ICAgIGlmIChjaGVja2VkRGVzdGluYXRpb25FbmQuaGFzT3ZlcmZsb3dlZCgpKSB7CiAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
ImdldEJ1ZmZlclN1YkRhdGEiLCAiZHN0T2Zmc2V0ICsgY29weUxlbmd0aCBpcyB0b28gaGlnaCIp
OwpAQCAtMjk0LDkgKzI5NCw5IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVm
ZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzcmNCeXRlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBDaGVja2VkPEdDM0RpbnRwdHIsIFJlY29yZE92ZXJmbG93PiBj
aGVja2VkU3JjQnl0ZU9mZnNldChzcmNCeXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPEdDM0RpbnRw
dHIsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ29weUxlbmd0aFB0cihjb3B5TGVuZ3RoKTsKLSAg
ICBDaGVja2VkPEdDM0RpbnRwdHIsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkRWxlbWVudFNpemUo
ZWxlbWVudFNpemUpOworICAgIENoZWNrZWQ8R0NHTGludHB0ciwgUmVjb3JkT3ZlcmZsb3c+IGNo
ZWNrZWRTcmNCeXRlT2Zmc2V0KHNyY0J5dGVPZmZzZXQpOworICAgIENoZWNrZWQ8R0NHTGludHB0
ciwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3B5TGVuZ3RoUHRyKGNvcHlMZW5ndGgpOworICAg
IENoZWNrZWQ8R0NHTGludHB0ciwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRFbGVtZW50U2l6ZShl
bGVtZW50U2l6ZSk7CiAgICAgYXV0byBjaGVja2VkU291cmNlRW5kID0gY2hlY2tlZFNyY0J5dGVP
ZmZzZXQgKyBjaGVja2VkQ29weUxlbmd0aFB0ciAqIGNoZWNrZWRFbGVtZW50U2l6ZTsKICAgICBp
ZiAoY2hlY2tlZFNvdXJjZUVuZC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZFNvdXJjZUVuZC51
bnNhZmVHZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKSB7CiAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1
YkRhdGEiLCAiUGFyYW1ldGVycyB3b3VsZCByZWFkIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUg
c291cmNlIGJ1ZmZlciIpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzcmNC
eXRlCiAgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBGSVhNRTogQ29hbGVzY2UgbXVsdGlwbGUgZ2V0QnVm
ZmVyU3ViRGF0YSgpIGNhbGxzIHRvIHVzZSBhIHNpbmdsZSBtYXAoKSBjYWxsCi0gICAgdm9pZCog
cHRyID0gbV9jb250ZXh0LT5tYXBCdWZmZXJSYW5nZSh0YXJnZXQsIGNoZWNrZWRTcmNCeXRlT2Zm
c2V0LnVuc2FmZUdldCgpLCBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KGNoZWNrZWRDb3B5TGVu
Z3RoUHRyLnVuc2FmZUdldCgpICogY2hlY2tlZEVsZW1lbnRTaXplLnVuc2FmZUdldCgpKSwgR3Jh
cGhpY3NDb250ZXh0R0w6Ok1BUF9SRUFEX0JJVCk7CisgICAgdm9pZCogcHRyID0gbV9jb250ZXh0
LT5tYXBCdWZmZXJSYW5nZSh0YXJnZXQsIGNoZWNrZWRTcmNCeXRlT2Zmc2V0LnVuc2FmZUdldCgp
LCBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KGNoZWNrZWRDb3B5TGVuZ3RoUHRyLnVuc2FmZUdl
dCgpICogY2hlY2tlZEVsZW1lbnRTaXplLnVuc2FmZUdldCgpKSwgR3JhcGhpY3NDb250ZXh0R0w6
Ok1BUF9SRUFEX0JJVCk7CiAgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihkc3REYXRhLT5i
YXNlQWRkcmVzcygpKSArIGRzdERhdGEtPmJ5dGVPZmZzZXQoKSArIGRzdE9mZnNldCAqIGVsZW1l
bnRTaXplLCBwdHIsIGNvcHlMZW5ndGggKiBlbGVtZW50U2l6ZSk7CiAgICAgaWYgKCFtX2NvbnRl
eHQtPnVubWFwQnVmZmVyKHRhcmdldCkpCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiRmFp
bGVkIHdoaWxlIHVubWFwcGluZyBidWZmZXIiKTsKQEAgLTMxNCwxOCArMzE0LDE4IEBAIHZvaWQg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQs
IGxvbmcgbG9uZyBzcmNCeXRlCiAgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpibGl0RnJhbWVi
dWZmZXIoR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGlu
dCwgR0MzRGludCwgR0MzRGludCwgR0MzRGJpdGZpZWxkLCBHQzNEZW51bSkKK3ZvaWQgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xp
bnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xiaXRm
aWVsZCwgR0NHTGVudW0pCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1d
IGJsaXRGcmFtZWJ1ZmZlcigpIik7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0MzRGVudW0sIEdDM0RlbnVtLCBXZWJHTFRleHR1cmUq
LCBHQzNEaW50LCBHQzNEaW50KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1
ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSwgR0NHTGVudW0sIFdlYkdMVGV4dHVyZSosIEdDR0xp
bnQsIEdDR0xpbnQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIGZy
YW1lYnVmZmVyVGV4dHVyZUxheWVyKCkiKTsKIH0KIAogI2lmICFVU0UoT1BFTkdMX0VTKQotc3Rh
dGljIGJvb2wgaXNSZW5kZXJhYmxlSW50ZXJuYWxmb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQpCitzdGF0aWMgYm9vbCBpc1JlbmRlcmFibGVJbnRlcm5hbGZvcm1hdChHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCkKIHsKICAgICAvLyBPcGVuR0wgRVMgMzogaW50ZXJuYWxmb3JtYXQgbXVzdCBi
ZSBhIGNvbG9yLXJlbmRlcmFibGUsIGRlcHRoLXJlbmRlcmFibGUsIG9yIHN0ZW5jaWwtcmVuZGVy
YWJsZSBmb3JtYXQsIGFzIHNob3duIGluIFRhYmxlIDEgYmVsb3cuCiAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkgewpAQCAtMzY4LDcgKzM2OCw3IEBAIHN0YXRpYyBib29sIGlzUmVuZGVyYWJs
ZUludGVybmFsZm9ybWF0KEdDM0RlbnVtIGludGVybmFsZm9ybWF0KQogfQogI2VuZGlmCiAKLVdl
YkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEludGVybmFsZm9ybWF0UGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIHBuYW1l
KQorV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50ZXJuYWxmb3JtYXRQYXJh
bWV0ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0g
cG5hbWUpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0zODIsNyArMzgyLDcgQEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6Z2V0SW50ZXJuYWxmb3JtYXRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzMK
ICNpZiBVU0UoT1BFTkdMX0VTKQogICAgIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxmb3JtYXRpdih0
YXJnZXQsIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6TlVNX1NBTVBMRV9DT1VO
VFMsIDEsICZudW1WYWx1ZXMpOwogCi0gICAgR0MzRGludCBwYXJhbXNbbnVtVmFsdWVzXTsKKyAg
ICBHQ0dMaW50IHBhcmFtc1tudW1WYWx1ZXNdOwogICAgIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxm
b3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgbnVtVmFsdWVzLCBwYXJhbXMp
OwogI2Vsc2UKICAgICAvLyBPbiBkZXNrdG9wIE9wZW5HTCA0LjEgb3IgYmVsb3cgd2UgbXVzdCBl
bXVsYXRlIGdsR2V0SW50ZXJuYWxmb3JtYXRpdi4KQEAgLTM5OSw3ICszOTksNyBAQCBXZWJHTEFu
eSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDMwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBW
ZWN0b3I8R0MzRGludD4gc2FtcGxlczsKKyAgICBWZWN0b3I8R0NHTGludD4gc2FtcGxlczsKICAg
ICAvLyBUaGUgd2F5IEkgdW5kZXJzdGFuZCB0aGlzIGlzIHRoYXQgdGhpcyB3aWxsIHJldHVybiBh
IE1JTklNVU0gbnVtU2FtcGxlcyBmb3IgYWxsIGFjY2VwZXRlZCBpbnRlcm5hbGZvcm1hdHMuCiAg
ICAgLy8gSG93ZXZlciwgdGhlIHRydWUgdmFsdWUgb2YgdGhpcyBvbiBzdXBwb3J0ZWQgR0wgdmVy
c2lvbnMgaXMgZ2xlYW5lZCB2aWEgYSBnZXRJbnRlcm5hbGZvcm1hdGl2IGNhbGwgdGhhdCBkZXBl
bmRzIG9uIGludGVybmFsZm9ybWF0LgogICAgIGludCBudW1TYW1wbGVzTWFzayA9IGdldEludFBh
cmFtZXRlcihHcmFwaGljc0NvbnRleHRHTDo6TUFYX1NBTVBMRVMpOwpAQCAtNDEyLDcgKzQxMiw3
IEBAIFdlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEludGVybmFsZm9ybWF0UGFy
YW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzCiAgICAgLy8gU2luY2UgbXVsdGlzYW1wbGluZyBp
cyBub3Qgc3VwcG9ydGVkIGZvciBzaWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXIgaW50ZXJuYWwg
Zm9ybWF0cywKICAgICAvLyB0aGUgdmFsdWUgb2YgR0xfTlVNX1NBTVBMRV9DT1VOVFMgd2lsbCBi
ZSB6ZXJvIGZvciBzdWNoIGZvcm1hdHMuCiAgICAgbnVtVmFsdWVzID0gaXNJbnRlZ2VyRm9ybWF0
KGludGVybmFsZm9ybWF0KSA/IDAgOiBzYW1wbGVzLnNpemUoKTsKLSAgICBHQzNEaW50IHBhcmFt
c1tudW1WYWx1ZXNdOworICAgIEdDR0xpbnQgcGFyYW1zW251bVZhbHVlc107CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzYW1wbGVzLnNpemUoKTsgKytpKQogICAgICAgICBwYXJhbXNbaV0g
PSBzYW1wbGVzW2ldOwogI2VuZGlmCkBAIC00MjAsMjIgKzQyMCwyMiBAQCBXZWJHTEFueSBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRlcihHQzNEZW51bSB0
YXJnZXQsIEdDMwogICAgIHJldHVybiBJbnQzMkFycmF5Ojp0cnlDcmVhdGUocGFyYW1zLCBudW1W
YWx1ZXMpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmludmFsaWRhdGVGcmFt
ZWJ1ZmZlcihHQzNEZW51bSwgY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYpCit2b2lkIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OmludmFsaWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSwgY29uc3QgVmVj
dG9yPEdDR0xlbnVtPiYpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1d
IGludmFsaWRhdGVGcmFtZWJ1ZmZlcigpIik7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDM0RlbnVtLCBjb25zdCBWZWN0b3I8R0Mz
RGVudW0+JiwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCit2b2lkIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSwg
Y29uc3QgVmVjdG9yPEdDR0xlbnVtPiYsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NH
THNpemVpKQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSBpbnZhbGlk
YXRlU3ViRnJhbWVidWZmZXIoKSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnJlYWRCdWZmZXIoR0MzRGVudW0pCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnJlYWRC
dWZmZXIoR0NHTGVudW0pCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1d
IHJlYWRCdWZmZXIoKSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1w
bGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAg
ICAvLyBUbyBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggV2ViR0wgMSwgYWxzbyBhY2NlcHRz
IGludGVybmFsIGZvcm1hdCBERVBUSF9TVEVOQ0lMLAogICAgIC8vIHdoaWNoIHNob3VsZCBiZSBt
YXBwZWQgdG8gREVQVEgyNF9TVEVOQ0lMOCBieSBpbXBsZW1lbnRhdGlvbnMuCkBAIC01MDQsNyAr
NTA0LDcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBHQzMKICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7
CiB9CiAKLWJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhTdG9yYWdlRnVu
Y1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUpCitib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
VGV4U3RvcmFnZUZ1bmNQYXJhbWV0ZXJzKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVs
cywgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQogewogICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwpA
QCAtNTk1LDcgKzU5NSw3IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXhTdG9yYWdlRnVuY1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3RvcmFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CkBA
IC02MTksMTggKzYxOSwxOCBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN0b3Jh
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDMwogICAgIG1fY29udGV4
dC0+dGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiAKICAgICB7Ci0gICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKLSAgICAgICAgR0MzRGVu
dW0gdHlwZTsKKyAgICAgICAgR0NHTGVudW0gZm9ybWF0OworICAgICAgICBHQ0dMZW51bSB0eXBl
OwogICAgICAgICBpZiAoIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb3NzaWJsZUZvcm1hdEFu
ZFR5cGVGb3JJbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlKSkgewog
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgInRleFN0b3JhZ2UyRCIsICJUZXh0dXJlIGhhcyB1bmtub3duIGludGVybmFsIGZvcm1h
dCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgR0MzRHNpemVp
IGxldmVsV2lkdGggPSB3aWR0aDsKLSAgICAgICAgR0MzRHNpemVpIGxldmVsSGVpZ2h0ID0gaGVp
Z2h0OworICAgICAgICBHQ0dMc2l6ZWkgbGV2ZWxXaWR0aCA9IHdpZHRoOworICAgICAgICBHQ0dM
c2l6ZWkgbGV2ZWxIZWlnaHQgPSBoZWlnaHQ7CiAKICAgICAgICAgdW5zaWduZWQgc2l6ZTsKLSAg
ICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCBu
dWxscHRyKTsKKyAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFn
ZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1l
bnQsICZzaXplLCBudWxscHRyKTsKICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4
dEdMOjpOT19FUlJPUikgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJ0
ZXhTdG9yYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTYzOSw3ICs2MzksNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN0b3JhZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDMwogICAgICAgICBWZWN0b3I8
Y2hhcj4gZGF0YShzaXplKTsKICAgICAgICAgbWVtc2V0KGRhdGEuZGF0YSgpLCAwLCBzaXplKTsK
IAotICAgICAgICBmb3IgKEdDM0RzaXplaSBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyArK2xl
dmVsKSB7CisgICAgICAgIGZvciAoR0NHTHNpemVpIGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7
ICsrbGV2ZWwpIHsKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfQ1VCRV9NQVApIHsKICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1Yklt
YWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgbGV2
ZWwsIDAsIDAsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0
YSgpKTsKICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgbGV2ZWwsIDAsIDAsIGxldmVs
V2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsKQEAgLTY1NCw3
ICs2NTQsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN0b3JhZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDMwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgZm9yIChHQzNEc2l6ZWkgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgKytsZXZlbCkgewor
ICAgIGZvciAoR0NHTHNpemVpIGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7ICsrbGV2ZWwpIHsK
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01B
UCkgewogICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpOwogICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1gsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpOwpAQCAtNjY3LDIwNyArNjY3LDIwNyBAQCB2
b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RzaXplaSBsZXZlbHMsIEdDMwogICAgIH0KIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdG9yYWdlM0QoR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0Rz
aXplaSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnRleFN0b3JhZ2UzRChHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTHNpemVpLCBH
Q0dMc2l6ZWksIEdDR0xzaXplaSkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5U
RUQgXV0gdGV4U3RvcmFnZTNEKCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rz
aXplaSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50NjQpCit2b2lkIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQs
IEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xp
bnQ2NCkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gdGV4SW1hZ2Uy
RCgpIik7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQoR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVp
LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0sIFRleEltYWdlU291cmNlJiYpCitFeGNlcHRp
b25Pcjx2b2lkPiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0s
IEdDR0xlbnVtLCBUZXhJbWFnZVNvdXJjZSYmKQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJ
TVBMRU1FTlRFRCBdXSB0ZXhJbWFnZTJEKCkiKTsKICAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0sIEdDM0RpbnQsIEdD
M0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0s
IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYsIEdDM0R1aW50KQordm9pZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiYmLCBHQ0dMdWludCkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVN
RU5URUQgXV0gdGV4SW1hZ2UyRCgpIik7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UzRChHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNE
c2l6ZWksIEdDM0RzaXplaSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50NjQp
Cit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlM0QoR0NHTGVudW0sIEdDR0xp
bnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEdD
R0xlbnVtLCBHQ0dMZW51bSwgR0NHTGludDY0KQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJ
TVBMRU1FTlRFRCBdXSB0ZXhJbWFnZTNEKCkiKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UzRChHQzNEZW51bSwgR0MzRGludCwgR0MzRGlu
dCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGludCwgR0MzRGVudW0sIEdD
M0RlbnVtLCBUZXhJbWFnZVNvdXJjZSYmKQorRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTHNp
emVpLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBU
ZXhJbWFnZVNvdXJjZSYmKQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBd
XSB0ZXhJbWFnZTNEKCkiKTsKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlM0QoR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0Rz
aXplaSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEZW51bSwg
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJikKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
dGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dMc2l6
ZWksIEdDR0xzaXplaSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiYmKQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSB0
ZXhJbWFnZTNEKCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFn
ZTNEKEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0Mz
RHNpemVpLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0sIFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+JiYsIEdDM0R1aW50KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTNE
KEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNp
emVpLCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
JiYsIEdDR0x1aW50KQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSB0
ZXhJbWFnZTNEKCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdD
M0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50NjQpCit2b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xpbnQ2
NCkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gdGV4U3ViSW1hZ2Uy
RCgpIik7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXpl
aSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRGVudW0sIFRleEltYWdlU291cmNlJiYpCitFeGNl
cHRpb25Pcjx2b2lkPiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDR0xl
bnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NH
TGVudW0sIEdDR0xlbnVtLCBUZXhJbWFnZVNvdXJjZSYmKQogewogICAgIExPRyhXZWJHTCwgIltb
IE5PVCBJTVBMRU1FTlRFRCBdXSB0ZXhTdWJJbWFnZTJEKCkiKTsKICAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0s
IEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEZW51
bSwgR0MzRGVudW0sIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYsIEdDM0R1aW50KQordm9pZCBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtLCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVt
LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmLCBHQ0dMdWludCkKIHsKICAgICBMT0coV2ViR0ws
ICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gdGV4U3ViSW1hZ2UyRCgpIik7CiB9CiAKLXZvaWQgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UzRChHQzNEZW51bSwgR0MzRGludCwgR0Mz
RGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSwg
R0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50NjQpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OnRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBHQ0dMZW51
bSwgR0NHTGludDY0KQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSB0
ZXhTdWJJbWFnZTNEKCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTNEKEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBH
QzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRGVudW0sIFJlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+JiYsIEdDM0R1aW50KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dMaW50LCBH
Q0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVu
dW0sIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYsIEdDR0x1aW50KQogewogICAgIExPRyhXZWJH
TCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSB0ZXhTdWJJbWFnZTNEKCkiKTsKIH0KIAotRXhjZXB0
aW9uT3I8dm9pZD4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UzRChHQzNEZW51
bSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6
ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBUZXhJbWFnZVNvdXJjZSYmKQorRXhj
ZXB0aW9uT3I8dm9pZD4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UzRChHQ0dM
ZW51bSwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NHTHNpemVpLCBHQ0dM
c2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBUZXhJbWFnZVNvdXJjZSYmKQog
ewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSB0ZXhTdWJJbWFnZTNEKCki
KTsKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNv
cHlUZXhTdWJJbWFnZTNEKEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNE
aW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKK3ZvaWQgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0sIEdDR0xpbnQsIEdD
R0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NH
THNpemVpKQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSBjb3B5VGV4
U3ViSW1hZ2UzRCgpIik7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJl
c3NlZFRleEltYWdlM0QoR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEc2l6ZWksIEdD
M0RzaXplaSwgR0MzRHNpemVpLCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RpbnQ2NCkKK3ZvaWQg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0sIEdD
R0xpbnQsIEdDR0xlbnVtLCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMaW50
LCBHQ0dMc2l6ZWksIEdDR0xpbnQ2NCkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVN
RU5URUQgXV0gY29tcHJlc3NlZFRleEltYWdlM0QoKSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhJbWFnZTNEKEdDM0RlbnVtLCBHQzNEaW50LCBHQzNE
ZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGludCwgQXJyYXlCdWZm
ZXJWaWV3JiwgR0MzRHVpbnQsIEdDM0R1aW50KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Ojpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xz
aXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWksIEdDR0xpbnQsIEFycmF5QnVmZmVyVmlldyYsIEdD
R0x1aW50LCBHQ0dMdWludCkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQg
XV0gY29tcHJlc3NlZFRleEltYWdlM0QoKSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50
LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNE
ZW51bSwgR0MzRHNpemVpLCBHQzNEaW50NjQpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtLCBHQ0dMaW50LCBHQ0dMaW50LCBHQ0dM
aW50LCBHQ0dMaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwg
R0NHTHNpemVpLCBHQ0dMaW50NjQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVO
VEVEIF1dIGNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHQzNEZW51bSwgR0MzRGludCwg
R0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXpl
aSwgR0MzRGVudW0sIEFycmF5QnVmZmVyVmlldyYsIEdDM0R1aW50LCBHQzNEdWludCkKK3ZvaWQg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0s
IEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xpbnQsIEdDR0xzaXplaSwgR0NHTHNpemVp
LCBHQ0dMc2l6ZWksIEdDR0xlbnVtLCBBcnJheUJ1ZmZlclZpZXcmLCBHQ0dMdWludCwgR0NHTHVp
bnQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIGNvbXByZXNzZWRU
ZXhTdWJJbWFnZTNEKCkiKTsKIH0KIAotR0MzRGludCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRGcmFnRGF0YUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSYsIGNvbnN0IFN0cmluZyYpCitHQ0dMaW50
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYWdEYXRhTG9jYXRpb24oV2ViR0xQcm9ncmFt
JiwgY29uc3QgU3RyaW5nJikKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQg
XV0gZ2V0RnJhZ0RhdGFMb2NhdGlvbigpIik7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTF1aShXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdD
M0R1aW50KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMXVpKFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiwgR0NHTHVpbnQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExF
TUVOVEVEIF1dIHVuaWZvcm0xdWkoKSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0ydWkoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEdWludCwgR0MzRHVpbnQp
Cit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0ydWkoV2ViR0xVbmlmb3JtTG9j
YXRpb24qLCBHQ0dMdWludCwgR0NHTHVpbnQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElN
UExFTUVOVEVEIF1dIHVuaWZvcm0ydWkoKSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zdWkoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEdWludCwgR0MzRHVp
bnQsIEdDM0R1aW50KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM3VpKFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTHVpbnQsIEdDR0x1aW50LCBHQ0dMdWludCkKIHsKICAg
ICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gdW5pZm9ybTN1aSgpIik7CiB9CiAK
LXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTR1aShXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiosIEdDM0R1aW50LCBHQzNEdWludCwgR0MzRHVpbnQsIEdDM0R1aW50KQordm9pZCBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNHVpKFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NH
THVpbnQsIEdDR0x1aW50LCBHQ0dMdWludCwgR0NHTHVpbnQpCiB7CiAgICAgTE9HKFdlYkdMLCAi
W1sgTk9UIElNUExFTUVOVEVEIF1dIHVuaWZvcm00dWkoKSIpOwogfQogCi12b2lkIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xdWl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgVWludDMy
TGlzdCYmLCBHQzNEdWludCwgR0MzRHVpbnQpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0xdWl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgVWludDMyTGlzdCYmLCBHQ0dMdWlu
dCwgR0NHTHVpbnQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIHVu
aWZvcm0xdWl2KCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MnVpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIFVpbnQzMkxpc3QmJiwgR0MzRHVpbnQsIEdDM0R1
aW50KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMnVpdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiosIFVpbnQzMkxpc3QmJiwgR0NHTHVpbnQsIEdDR0x1aW50KQogewogICAgIExP
RyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSB1bmlmb3JtMnVpdigpIik7CiB9CiAKLXZv
aWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTN1aXYoV2ViR0xVbmlmb3JtTG9jYXRp
b24qLCBVaW50MzJMaXN0JiYsIEdDM0R1aW50LCBHQzNEdWludCkKK3ZvaWQgV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTN1aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBVaW50MzJMaXN0
JiYsIEdDR0x1aW50LCBHQ0dMdWludCkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVN
RU5URUQgXV0gdW5pZm9ybTN1aXYoKSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm00dWl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgVWludDMyTGlzdCYmLCBHQzNE
dWludCwgR0MzRHVpbnQpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00dWl2
KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgVWludDMyTGlzdCYmLCBHQ0dMdWludCwgR0NHTHVpbnQp
CiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIHVuaWZvcm00dWl2KCki
KTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MngzZnYo
V2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiwgRmxvYXQzMkxpc3QmJiwgR0MzRHVp
bnQsIEdDM0R1aW50KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4
MngzZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQ0dMYm9vbGVhbiwgRmxvYXQzMkxpc3QmJiwg
R0NHTHVpbnQsIEdDR0x1aW50KQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRF
RCBdXSB1bmlmb3JtTWF0cml4MngzZnYoKSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm1NYXRyaXgzeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29s
ZWFuLCBGbG9hdDMyTGlzdCYmLCBHQzNEdWludCwgR0MzRHVpbnQpCit2b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdD
R0xib29sZWFuLCBGbG9hdDMyTGlzdCYmLCBHQ0dMdWludCwgR0NHTHVpbnQpCiB7CiAgICAgTE9H
KFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIHVuaWZvcm1NYXRyaXgzeDJmdigpIik7CiB9
CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4sIEZsb2F0MzJMaXN0JiYsIEdDM0R1aW50LCBH
QzNEdWludCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJ4NGZ2
KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTGJvb2xlYW4sIEZsb2F0MzJMaXN0JiYsIEdDR0x1
aW50LCBHQ0dMdWludCkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0g
dW5pZm9ybU1hdHJpeDJ4NGZ2KCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtTWF0cml4NHgyZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiwg
RmxvYXQzMkxpc3QmJiwgR0MzRHVpbnQsIEdDM0R1aW50KQordm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtTWF0cml4NHgyZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQ0dMYm9v
bGVhbiwgRmxvYXQzMkxpc3QmJiwgR0NHTHVpbnQsIEdDR0x1aW50KQogewogICAgIExPRyhXZWJH
TCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSB1bmlmb3JtTWF0cml4NHgyZnYoKSIpOwogfQogCi12
b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzeDRmdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuLCBGbG9hdDMyTGlzdCYmLCBHQzNEdWludCwgR0MzRHVp
bnQpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzeDRmdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiosIEdDR0xib29sZWFuLCBGbG9hdDMyTGlzdCYmLCBHQ0dMdWludCwg
R0NHTHVpbnQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIHVuaWZv
cm1NYXRyaXgzeDRmdigpIik7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDR4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4sIEZsb2F0
MzJMaXN0JiYsIEdDM0R1aW50LCBHQzNEdWludCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDR4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTGJvb2xlYW4s
IEZsb2F0MzJMaXN0JiYsIEdDR0x1aW50LCBHQ0dMdWludCkKIHsKICAgICBMT0coV2ViR0wsICJb
WyBOT1QgSU1QTEVNRU5URUQgXV0gdW5pZm9ybU1hdHJpeDR4M2Z2KCkiKTsKIH0KIAotdm9pZCBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJJNGkoR0MzRHVpbnQsIEdDM0RpbnQs
IEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCwgR0NHTGludCwgR0NHTGludCwgR0NHTGludCwgR0NH
TGludCkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gdmVydGV4QXR0
cmliSTRpKCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWJJNGl2KEdDM0R1aW50LCBJbnQzMkxpc3QmJikKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCwgSW50MzJMaXN0JiYpCiB7CiAgICAgTE9HKFdl
YkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIHZlcnRleEF0dHJpYkk0aXYoKSIpOwogfQogCi12
b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYkk0dWkoR0MzRHVpbnQsIEdD
M0R1aW50LCBHQzNEdWludCwgR0MzRHVpbnQsIEdDM0R1aW50KQordm9pZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50LCBHQ0dMdWludCwgR0NHTHVpbnQs
IEdDR0x1aW50LCBHQ0dMdWludCkKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5U
RUQgXV0gdmVydGV4QXR0cmliSTR1aSgpIik7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliSTR1aXYoR0MzRHVpbnQsIFVpbnQzMkxpc3QmJikKK3ZvaWQgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQsIFVpbnQzMkxp
c3QmJikKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gdmVydGV4QXR0
cmliSTR1aXYoKSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYklQb2ludGVyKEdDM0R1aW50LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNE
aW50NjQpCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYklQb2ludGVy
KEdDR0x1aW50LCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMaW50NjQpCiB7CiAg
ICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIHZlcnRleEF0dHJpYklQb2ludGVy
KCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0Zmll
bGQgbWFzaykKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIoR0NHTGJpdGZpZWxk
IG1hc2spCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtODg5LDcgKzg4OSw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXIoR0MzRGJpdGZpZWxkIG1hc2spCiAgICAgbWFya0NvbnRleHRDaGFuZ2VkQW5kTm90aWZ5Q2Fu
dmFzT2JzZXJ2ZXIoKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQordm9pZCBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCBkaXZpc29yKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTg5Nyw3ICs4OTcsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlz
bwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYkRpdmlzb3IoaW5k
ZXgsIGRpdmlzb3IpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJh
eXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50
LCBHQzNEc2l6ZWkgaW5zdGFuY2VDb3VudCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6
ZWkgY291bnQsIEdDR0xzaXplaSBpbnN0YW5jZUNvdW50KQogewogICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTkwNSw3ICs5MDUsNyBAQCB2b2lk
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgRwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdB
cnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKIH0KIAot
dm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVu
dW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50NjQgb2Zmc2V0
LCBHQzNEc2l6ZWkgaW5zdGFuY2VDb3VudCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludDY0IG9mZnNldCwgR0NHTHNpemVpIGluc3RhbmNlQ291bnQpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
OTEzLDE3ICs5MTMsMTcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVu
dHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW4KICAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUs
IG9mZnNldCwgaW5zdGFuY2VDb3VudCk7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd1JhbmdlRWxlbWVudHMoR0MzRGVudW0sIEdDM0R1aW50LCBHQzNEdWludCwgR0MzRHNp
emVpLCBHQzNEZW51bSwgR0MzRGludDY0KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSwgR0NHTHVpbnQsIEdDR0x1aW50LCBHQ0dMc2l6ZWks
IEdDR0xlbnVtLCBHQ0dMaW50NjQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVO
VEVEIF1dIGRyYXdSYW5nZUVsZW1lbnRzKCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpkcmF3QnVmZmVycyhjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZmZXJzKQordm9p
ZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpkcmF3QnVmZmVycyhjb25zdCBWZWN0b3I8R0NHTGVu
dW0+JiBidWZmZXJzKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBHQzNEc2l6ZWkgbiA9IGJ1ZmZlcnMuc2l6ZSgpOwotICAgIGNvbnN0IEdDM0RlbnVt
KiBidWZzID0gYnVmZmVycy5kYXRhKCk7CisgICAgR0NHTHNpemVpIG4gPSBidWZmZXJzLnNpemUo
KTsKKyAgICBjb25zdCBHQ0dMZW51bSogYnVmcyA9IGJ1ZmZlcnMuZGF0YSgpOwogICAgIGlmICgh
bV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKICAgICAgICAgaWYgKG4gIT0gMSkgewogICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJk
cmF3QnVmZmVycyIsICJtb3JlIHRoYW4gb25lIGJ1ZmZlciIpOwpAQCAtOTM0LDcgKzkzNCw3IEBA
IHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0J1ZmZlcnMoY29uc3QgVmVjdG9yPEdD
M0RlbnVtPiYgYnVmZmVycykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAvLyBCZWNhdXNlIHRoZSBiYWNrYnVmZmVyIGlzIHNpbXVsYXRlZCBvbiBhbGwgY3VycmVudCBX
ZWJLaXQgcG9ydHMsIHdlIG5lZWQgdG8gY2hhbmdlIEJBQ0sgdG8gQ09MT1JfQVRUQUNITUVOVDAu
Ci0gICAgICAgIEdDM0RlbnVtIHZhbHVlID0gKGJ1ZnNbMF0gPT0gR3JhcGhpY3NDb250ZXh0R0w6
OkJBQ0spID8gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwIDogR3JhcGhpY3ND
b250ZXh0R0w6Ok5PTkU7CisgICAgICAgIEdDR0xlbnVtIHZhbHVlID0gKGJ1ZnNbMF0gPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkJBQ0spID8gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1F
TlQwIDogR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dEdM
KCktPmdldEV4dGVuc2lvbnMoKS5kcmF3QnVmZmVyc0VYVCgxLCAmdmFsdWUpOwogICAgICAgICBz
ZXRCYWNrRHJhd0J1ZmZlcihidWZzWzBdKTsKICAgICB9IGVsc2UgewpAQCAtOTQyLDggKzk0Miw4
IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0J1ZmZlcnMoY29uc3QgVmVjdG9y
PEdDM0RlbnVtPiYgYnVmZmVycykKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnMiLCAibW9yZSB0aGFuIG1h
eCBkcmF3IGJ1ZmZlcnMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBmb3IgKEdDM0RzaXplaSBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgaWYgKGJ1
ZnNbaV0gIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUgJiYgYnVmc1tpXSAhPSBzdGF0aWNfY2Fz
dDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwICsgaSkpIHsK
KyAgICAgICAgZm9yIChHQ0dMc2l6ZWkgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChidWZzW2ldICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FICYmIGJ1ZnNbaV0gIT0gc3Rh
dGljX2Nhc3Q8R0NHTGVudW0+KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCAr
IGkpKSB7CiAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0J1ZmZlcnMiLCAiQ09MT1JfQVRUQUNITUVOVGkg
b3IgTk9ORSIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTk1
Miw3ICs5NTIsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmRyYXdCdWZmZXJzKGNv
bnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZmZlcnMpCiAgICAgfQogfQogCi12b2lkIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyQnVmZmVyaXYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50IGRy
YXdidWZmZXIsIEludDMyTGlzdCYmLCBHQzNEdWludCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwg
SW50MzJMaXN0JiYsIEdDR0x1aW50KQogewogICAgIHN3aXRjaCAoYnVmZmVyKSB7CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1I6CkBAIC05NzcsNyArOTc3LDcgQEAgdm9pZCBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0OjpjbGVhckJ1ZmZlcml2KEdDM0RlbnVtIGJ1ZmZlciwgR0MzRGlu
dCBkcmF3YnVmZmVyLAogICAgIH0KIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpj
bGVhckJ1ZmZlcnVpdihHQzNEZW51bSBidWZmZXIsIEdDM0RpbnQgZHJhd2J1ZmZlciwgVWludDMy
TGlzdCYmLCBHQzNEdWludCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZm
ZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIFVpbnQzMkxpc3QmJiwg
R0NHTHVpbnQpCiB7CiAgICAgc3dpdGNoIChidWZmZXIpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpDT0xPUjoKQEAgLTk5Niw3ICs5OTYsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmNsZWFyQnVmZmVydWl2KEdDM0RlbnVtIGJ1ZmZlciwgR0MzRGludCBkcmF3YnVmZmVy
LAogICAgIH0KIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjbGVhckJ1ZmZlcmZ2
KEdDM0RlbnVtIGJ1ZmZlciwgR0MzRGludCBkcmF3YnVmZmVyLCBGbG9hdDMyTGlzdCYmLCBHQzNE
dWludCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51
bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgRmxvYXQzMkxpc3QmJiwgR0NHTHVpbnQpCiB7
CiAgICAgc3dpdGNoIChidWZmZXIpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xP
UjoKQEAgLTEwMjEsNyArMTAyMSw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXJCdWZmZXJmdihHQzNEZW51bSBidWZmZXIsIEdDM0RpbnQgZHJhd2J1ZmZlciwKICAgICB9CiB9
CiAKLXZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJmaShHQzNEZW51bSBi
dWZmZXIsIEdDM0RpbnQgZHJhd2J1ZmZlciwgR0MzRGZsb2F0LCBHQzNEaW50KQordm9pZCBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0OjpjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGlu
dCBkcmF3YnVmZmVyLCBHQ0dMZmxvYXQsIEdDR0xpbnQpCiB7CiAgICAgc3dpdGNoIChidWZmZXIp
IHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOgpAQCAtMTA1MSwy
OSArMTA1MSwyOSBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVF1ZXJ5KFdl
YkdMUXVlcnkqKQogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSBkZWxldGVR
dWVyeSgpIik7CiB9CiAKLUdDM0Rib29sZWFuIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmlzUXVl
cnkoV2ViR0xRdWVyeSopCitHQ0dMYm9vbGVhbiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojppc1F1
ZXJ5KFdlYkdMUXVlcnkqKQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBd
XSBpc1F1ZXJ5KCkiKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6YmVnaW5RdWVyeShHQzNEZW51bSwgV2ViR0xRdWVyeSYpCit2b2lkIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OmJlZ2luUXVlcnkoR0NHTGVudW0sIFdlYkdMUXVlcnkmKQogewog
ICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSBiZWdpblF1ZXJ5KCkiKTsKIH0K
IAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjplbmRRdWVyeShHQzNEZW51bSkKK3ZvaWQg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6ZW5kUXVlcnkoR0NHTGVudW0pCiB7CiAgICAgTE9HKFdl
YkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIGVuZFF1ZXJ5KCkiKTsKIH0KIAotUmVmUHRyPFdl
YkdMUXVlcnk+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFF1ZXJ5KEdDM0RlbnVtLCBHQzNE
ZW51bSkKK1JlZlB0cjxXZWJHTFF1ZXJ5PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRRdWVy
eShHQ0dMZW51bSwgR0NHTGVudW0pCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVO
VEVEIF1dIGdldHF1ZXJ5KCkiKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotV2ViR0xBbnkg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXIoV2ViR0xRdWVyeSYsIEdD
M0RlbnVtKQorV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0
ZXIoV2ViR0xRdWVyeSYsIEdDR0xlbnVtKQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBM
RU1FTlRFRCBdXSBnZXRRdWVyeVBhcmFtZXRlcikiKTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTEwOTAsNDAgKzEwOTAsNDAgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVT
YW1wbGVyKFdlYkdMU2FtcGxlciopCiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVE
IF1dIGRlbGV0ZVNhbXBsZXIoKSIpOwogfQogCi1HQzNEYm9vbGVhbiBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Ojppc1NhbXBsZXIoV2ViR0xTYW1wbGVyKikKK0dDR0xib29sZWFuIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OmlzU2FtcGxlcihXZWJHTFNhbXBsZXIqKQogewogICAgIExPRyhXZWJHTCwg
IltbIE5PVCBJTVBMRU1FTlRFRCBdXSBpc1NhbXBsZXIoKSIpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpiaW5kU2FtcGxlcihHQzNEdWludCwg
V2ViR0xTYW1wbGVyKikKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YmluZFNhbXBsZXIo
R0NHTHVpbnQsIFdlYkdMU2FtcGxlciopCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExF
TUVOVEVEIF1dIGJpbmRTYW1wbGVyKCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0OjpzYW1wbGVyUGFyYW1ldGVyaShXZWJHTFNhbXBsZXImLCBHQzNEZW51bSwgR0MzRGludCkK
K3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6c2FtcGxlclBhcmFtZXRlcmkoV2ViR0xTYW1w
bGVyJiwgR0NHTGVudW0sIEdDR0xpbnQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExF
TUVOVEVEIF1dIHNhbXBsZXJQYXJhbWV0ZXJpKCkiKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0OjpzYW1wbGVyUGFyYW1ldGVyZihXZWJHTFNhbXBsZXImLCBHQzNEZW51bSwgR0Mz
RGZsb2F0KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVyUGFyYW1ldGVyZihX
ZWJHTFNhbXBsZXImLCBHQ0dMZW51bSwgR0NHTGZsb2F0KQogewogICAgIExPRyhXZWJHTCwgIltb
IE5PVCBJTVBMRU1FTlRFRCBdXSBzYW1wbGVyUGFyYW1ldGVyZigpIik7CiB9CiAKLVdlYkdMQW55
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFNhbXBsZXJQYXJhbWV0ZXIoV2ViR0xTYW1wbGVy
JiwgR0MzRGVudW0pCitXZWJHTEFueSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRTYW1wbGVy
UGFyYW1ldGVyKFdlYkdMU2FtcGxlciYsIEdDR0xlbnVtKQogewogICAgIExPRyhXZWJHTCwgIltb
IE5PVCBJTVBMRU1FTlRFRCBdXSBnZXRTYW1wbGVyUGFyYW1ldGVyKCkiKTsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotUmVmUHRyPFdlYkdMU3luYz4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
ZmVuY2VTeW5jKEdDM0RlbnVtLCBHQzNEYml0ZmllbGQpCitSZWZQdHI8V2ViR0xTeW5jPiBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0OjpmZW5jZVN5bmMoR0NHTGVudW0sIEdDR0xiaXRmaWVsZCkKIHsK
ICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gZmVuY2VTeW5jKCkiKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotR0MzRGJvb2xlYW4gV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6aXNTeW5jKFdlYkdMU3luYyopCitHQ0dMYm9vbGVhbiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Ojppc1N5bmMoV2ViR0xTeW5jKikKIHsKICAgICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5U
RUQgXV0gaXNTeW5jKCkiKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTM0LDcgKzExMzQsNyBA
QCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVN5bmMoV2ViR0xTeW5jKikKICAg
ICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gZGVsZXRlU3luYygpIik7CiB9CiAK
LUdDM0RlbnVtIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNsaWVudFdhaXRTeW5jKFdlYkdMU3lu
YyYsIEdDM0RiaXRmaWVsZCwgR0MzRHVpbnQ2NCkKK0dDR0xlbnVtIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmNsaWVudFdhaXRTeW5jKFdlYkdMU3luYyYsIEdDR0xiaXRmaWVsZCwgR0NHTHVpbnQ2
NCkKIHsKICAgICAvLyBOb3RlOiBEbyBub3QgaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gd2l0aG91
dCBjb25zdWx0aW5nIHdlYmtpdC1kZXYgYW5kIFdlYkdMCiAgICAgLy8gcmV2aWV3ZXJzIGJlZm9y
ZWhhbmQuIEFwcGxlIGZvbGtzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzM2NjY2NDU4Pi4KQEAgLTEx
NDIsMTIgKzExNDIsMTIgQEAgR0MzRGVudW0gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xpZW50
V2FpdFN5bmMoV2ViR0xTeW5jJiwgR0MzRGJpdGZpZWxkLCBHQzNEdWkKICAgICByZXR1cm4gMDsK
IH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp3YWl0U3luYyhXZWJHTFN5bmMmLCBH
QzNEYml0ZmllbGQsIEdDM0RpbnQ2NCkKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6d2Fp
dFN5bmMoV2ViR0xTeW5jJiwgR0NHTGJpdGZpZWxkLCBHQ0dMaW50NjQpCiB7CiAgICAgTE9HKFdl
YkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIHdhaXRTeW5jKCkiKTsKIH0KIAotV2ViR0xBbnkg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3luY1BhcmFtZXRlcihXZWJHTFN5bmMmLCBHQzNE
ZW51bSkKK1dlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFN5bmNQYXJhbWV0ZXIo
V2ViR0xTeW5jJiwgR0NHTGVudW0pCiB7CiAgICAgLy8gTm90ZTogRG8gbm90IGltcGxlbWVudCB0
aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY29uc3VsdGluZyB3ZWJraXQtZGV2IGFuZCBXZWJHTAogICAg
IC8vIHJldmlld2VycyBiZWZvcmVoYW5kLiBBcHBsZSBmb2xrcywgc2VlIDxyZGFyOi8vcHJvYmxl
bS8zNjY2NjQ1OD4uCkBAIC0xMTY2LDE4ICsxMTY2LDE4IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayop
CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIGRlbGV0ZVRyYW5zZm9ybUZl
ZWRiYWNrKCkiKTsKIH0KIAotR0MzRGJvb2xlYW4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6aXNU
cmFuc2Zvcm1GZWVkYmFjayhXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKikKK0dDR0xib29sZWFuIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OmlzVHJhbnNmb3JtRmVlZGJhY2soV2ViR0xUcmFuc2Zvcm1G
ZWVkYmFjayopCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIGlzVHJh
bnNmb3JtRmVlZGJhY2soKSIpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0OjpiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0MzRGVudW0sIFdlYkdMVHJh
bnNmb3JtRmVlZGJhY2sqKQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpiaW5kVHJhbnNm
b3JtRmVlZGJhY2soR0NHTGVudW0sIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2sqKQogewogICAgIExP
RyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSBiaW5kVHJhbnNmb3JtRmVlZGJhY2soKSIp
OwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJlZ2luVHJhbnNmb3JtRmVlZGJh
Y2soR0MzRGVudW0pCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJlZ2luVHJhbnNmb3Jt
RmVlZGJhY2soR0NHTGVudW0pCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVE
IF1dIGJlZ2luVHJhbnNmb3JtRmVlZGJhY2soKSIpOwogfQpAQCAtMTE4NywxMiArMTE4NywxMiBA
QCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKICAg
ICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gZW5kVHJhbnNmb3JtRmVlZGJhY2so
KSIpOwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3MoV2ViR0xQcm9ncmFtJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBHQzNEZW51bSkK
K3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhX
ZWJHTFByb2dyYW0mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEdDR0xlbnVtKQogewogICAgIExP
RyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSB0cmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
KCkiKTsKIH0KIAotUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFdlYkdMUHJvZ3JhbSYsIEdDM0R1aW50KQor
UmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nKFdlYkdMUHJvZ3JhbSYsIEdDR0x1aW50KQogewogICAgIExPRyhX
ZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSBnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmco
KSIpOwogICAgIHJldHVybiBudWxscHRyOwpAQCAtMTIwOCwxNyArMTIwOCwxNyBAQCB2b2lkIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCkKICAgICBMT0co
V2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gcmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKSIp
OwogfQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXJCYXNlKEdDM0Rl
bnVtLCBHQzNEdWludCwgV2ViR0xCdWZmZXIqKQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
OjpiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSwgR0NHTHVpbnQsIFdlYkdMQnVmZmVyKikKIHsKICAg
ICBMT0coV2ViR0wsICJbWyBOT1QgSU1QTEVNRU5URUQgXV0gYmluZEJ1ZmZlckJhc2UoKSIpOwog
fQogCi12b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXJSYW5nZShHQzNEZW51
bSwgR0MzRHVpbnQsIFdlYkdMQnVmZmVyKiwgR0MzRGludDY0LCBHQzNEaW50NjQpCit2b2lkIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSwgR0NHTHVpbnQs
IFdlYkdMQnVmZmVyKiwgR0NHTGludDY0LCBHQ0dMaW50NjQpCiB7CiAgICAgTE9HKFdlYkdMLCAi
W1sgTk9UIElNUExFTUVOVEVEIF1dIGJpbmRCdWZmZXJSYW5nZSgpIik7CiB9CiAKLVdlYkdMQW55
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEluZGV4ZWRQYXJhbWV0ZXIoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEdWludCkKK1dlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEluZGV4
ZWRQYXJhbWV0ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCkKIHsKICAgICBzd2l0Y2ggKHRh
cmdldCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJfQklORElORzoKQEAgLTEyMzUsMTMgKzEyMzUsMTMgQEAgV2ViR0xBbnkgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0SW5kZXhlZFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0R1
aW50KQogICAgIH0KIH0KIAotT3B0aW9uYWw8VmVjdG9yPEdDM0R1aW50Pj4gV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VW5pZm9ybUluZGljZXMoV2ViR0xQcm9ncmFtJiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mKQorT3B0aW9uYWw8VmVjdG9yPEdDR0x1aW50Pj4gV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VW5pZm9ybUluZGljZXMoV2ViR0xQcm9ncmFtJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKQogewogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSBnZXRVbmlmb3Jt
SW5kaWNlcygpIik7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotV2ViR0xBbnkgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybXMoV2ViR0xQcm9ncmFtJiBwcm9n
cmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0MzRGVudW0gcG5h
bWUpCitXZWJHTEFueSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVVbmlmb3JtcyhX
ZWJHTFByb2dyYW0mIHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRp
Y2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVVbmlmb3JtcyIsICZwcm9ncmFtKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMjU1LDcgKzEyNTUsNyBAQCBXZWJHTEFueSBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVVbmlmb3JtcyhXZWJHTFByb2dyYW0mIHBy
b2dyYW0sIGNvbnN0CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9NQVRSSVhf
U1RSSURFOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fSVNfUk9XX01BSk9S
OgogICAgICAgICB7Ci0gICAgICAgICAgICBWZWN0b3I8R0MzRGludD4gcGFyYW1zKHVuaWZvcm1J
bmRpY2VzLnNpemUoKSwgMCk7CisgICAgICAgICAgICBWZWN0b3I8R0NHTGludD4gcGFyYW1zKHVu
aWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEFjdGl2
ZVVuaWZvcm1zKHByb2dyYW0ub2JqZWN0KCksIHVuaWZvcm1JbmRpY2VzLCBwbmFtZSwgcGFyYW1z
KTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHBhcmFtcyk7CiAgICAgICAgIH0KQEAgLTEy
NjUsMjUgKzEyNjUsMjUgQEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0
aXZlVW5pZm9ybXMoV2ViR0xQcm9ncmFtJiBwcm9ncmFtLCBjb25zdAogICAgIH0KIH0KIAotR0Mz
RHVpbnQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoV2ViR0xQ
cm9ncmFtJiwgY29uc3QgU3RyaW5nJikKK0dDR0x1aW50IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OmdldFVuaWZvcm1CbG9ja0luZGV4KFdlYkdMUHJvZ3JhbSYsIGNvbnN0IFN0cmluZyYpCiB7CiAg
ICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIGdldFVuaWZvcm1CbG9ja0luZGV4
KCkiKTsKICAgICByZXR1cm4gMDsKIH0KIAotV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSYsIEdDM0R1aW50
LCBHQzNEZW51bSkKK1dlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVu
aWZvcm1CbG9ja1BhcmFtZXRlcihXZWJHTFByb2dyYW0mLCBHQ0dMdWludCwgR0NHTGVudW0pCiB7
CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElNUExFTUVOVEVEIF1dIGdldEFjdGl2ZVVuaWZvcm1C
bG9ja1BhcmFtZXRlcigpIik7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVdlYkdMQW55IFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoV2ViR0xQcm9n
cmFtJiwgR0MzRHVpbnQpCitXZWJHTEFueSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tOYW1lKFdlYkdMUHJvZ3JhbSYsIEdDR0x1aW50KQogewogICAgIExPRyhX
ZWJHTCwgIltbIE5PVCBJTVBMRU1FTlRFRCBdXSBnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKCki
KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtQmxvY2tCaW5kaW5nKFdlYkdMUHJvZ3JhbSYsIEdDM0R1aW50LCBHQzNEdWludCkK
K3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybUJsb2NrQmluZGluZyhXZWJHTFBy
b2dyYW0mLCBHQ0dMdWludCwgR0NHTHVpbnQpCiB7CiAgICAgTE9HKFdlYkdMLCAiW1sgTk9UIElN
UExFTUVOVEVEIF1dIHVuaWZvcm1CbG9ja0JpbmRpbmcoKSIpOwogfQpAQCAtMTMxNiw3ICsxMzE2
LDcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVWZXJ0ZXhBcnJheShXZWJH
TFZlcnRleEFycmF5T2JqZWN0KiBhcnJheU9iamUKICAgICBhcnJheU9iamVjdC0+ZGVsZXRlT2Jq
ZWN0KGdyYXBoaWNzQ29udGV4dEdMKCkpOwogfQogCi1HQzNEYm9vbGVhbiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Ojppc1ZlcnRleEFycmF5KFdlYkdMVmVydGV4QXJyYXlPYmplY3QqIGFycmF5T2Jq
ZWN0KQorR0NHTGJvb2xlYW4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6aXNWZXJ0ZXhBcnJheShX
ZWJHTFZlcnRleEFycmF5T2JqZWN0KiBhcnJheU9iamVjdCkKIHsKICAgICBpZiAoIWFycmF5T2Jq
ZWN0IHx8IGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQyMyw3
ICsxNDIzLDcgQEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBib29sIHZhbGlkYXRlRGVmYXVsdEZyYW1lYnVmZmVyQXR0YWNobWVudChHQzNEZW51bSYg
YXR0YWNobWVudCkKK3N0YXRpYyBib29sIHZhbGlkYXRlRGVmYXVsdEZyYW1lYnVmZmVyQXR0YWNo
bWVudChHQ0dMZW51bSYgYXR0YWNobWVudCkKIHsKICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLOgpAQCAtMTQzOCw3ICsxNDM4LDcgQEAg
c3RhdGljIGJvb2wgdmFsaWRhdGVEZWZhdWx0RnJhbWVidWZmZXJBdHRhY2htZW50KEdDM0RlbnVt
JiBhdHRhY2htZW50KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotV2ViR0xBbnkgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUpCitXZWJHTEFueSBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSkKIHsK
ICAgICBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUgPSAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyIjsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZUZyYW1lYnVmZmVyVGFyZ2V0KGZ1bmN0aW9uTmFtZSwgdGFyZ2V0KSkKQEAgLTE0NTIsNyArMTQ1
Miw3IEBAIFdlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnCiAgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIGF0dGFjaG1lbnQiKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
Ci0gICAgICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgICAgICBHQ0dMaW50IHZhbHVlID0gMDsK
ICAgICAgICAgbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0
YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7
CiAgICAgfQpAQCAtMTQ3NSw3ICsxNDc1LDcgQEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmcKICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJ
WkU6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9T
VEVOQ0lMX1NJWkU6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9DT01QT05FTlRfVFlQRTogewotICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAg
ICAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVl
KTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KQEAgLTE0OTAsNyArMTQ5MCw3IEBAIFdl
YkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcihHQzNEZW51bSB0YXJnCiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKICAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6
CiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
Q09MT1JfRU5DT0RJTkc6IHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgICAg
ICAgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2
YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgIH0KQEAgLTE1MjMsMTIg
KzE1MjMsMTIgQEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmcKICAgICB9CiB9CiAKLWJvb2wgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50KQorYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVu
Y1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQpCiB7CiAgICAgcmV0dXJuIHZhbGlkYXRlRnJhbWVidWZmZXJUYXJn
ZXQoZnVuY3Rpb25OYW1lLCB0YXJnZXQpICYmIHZhbGlkYXRlTm9uRGVmYXVsdEZyYW1lYnVmZmVy
QXR0YWNobWVudChmdW5jdGlvbk5hbWUsIGF0dGFjaG1lbnQpOwogfQogCi1ib29sIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJUYXJnZXQoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQpCitib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlRnJhbWVidWZmZXJUYXJnZXQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dM
ZW51bSB0YXJnZXQpCiB7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUjoKQEAgLTE1NDEsNyArMTU0MSw3IEBAIGJvb2wgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlclRhcmdldChjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlTm9uRGVmYXVsdEZyYW1lYnVmZmVyQXR0YWNobWVudChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCitib29sIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlTm9uRGVmYXVsdEZyYW1lYnVmZmVyQXR0YWNobWVudChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtIGF0dGFjaG1lbnQpCiB7CiAgICAgc3dpdGNo
IChhdHRhY2htZW50KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNI
TUVOVDoKQEAgLTE1NDksNyArMTU0OSw3IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVOb25EZWZhdWx0RnJhbWVidWZmZXJBdHRhY2htZW50KGNvbnN0IGNoYXIqCiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBH
cmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8IHN0YXRp
Y19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgKyBn
ZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpKQorICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHcmFw
aGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19j
YXN0PEdDR0xlbnVtPihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRN
YXhDb2xvckF0dGFjaG1lbnRzKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC0xNTU3LDE0ICsxNTU3LDE0IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVOb25EZWZhdWx0RnJhbWVidWZmZXJBdHRhY2htZW50KGNvbnN0IGNoYXIqCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1HQzNEaW50IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldE1heERy
YXdCdWZmZXJzKCkKK0dDR0xpbnQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4RHJhd0J1
ZmZlcnMoKQogewogICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKICAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX0RSQVdfQlVGRkVSUywgJm1fbWF4
RHJhd0J1ZmZlcnMpOwogICAgIHJldHVybiBtX21heERyYXdCdWZmZXJzOwogfQogCi1HQzNEaW50
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMoKQorR0NHTGlu
dCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKIHsKICAg
ICAvLyBEcmF3QnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPT0gTUFYX0RS
QVdfQlVGRkVSUwogICAgIGlmICghbV9tYXhDb2xvckF0dGFjaG1lbnRzKQpAQCAtMTU3Miw3ICsx
NTcyLDcgQEAgR0MzRGludCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFj
aG1lbnRzKCkKICAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwogfQogCi12b2lkIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNjQyLDcgKzE2NDIsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBp
bnRlcgogICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKIH0KIAotdm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKK3ZvaWQgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTY2MCw3ICsxNjYwLDcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpoaW50KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKICAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBt
b2RlKTsKIH0KIAotR0MzRGVudW0gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YmFzZUludGVybmFs
Rm9ybWF0RnJvbUludGVybmFsRm9ybWF0KEdDM0RlbnVtIGludGVybmFsZm9ybWF0KQorR0NHTGVu
dW0gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YmFzZUludGVybmFsRm9ybWF0RnJvbUludGVybmFs
Rm9ybWF0KEdDR0xlbnVtIGludGVybmFsZm9ybWF0KQogewogICAgIC8vIEhhbmRsZXMgc2l6ZWQs
IHVuc2l6ZWQsIGFuZCBjb21wcmVzc2VkIGludGVybmFsIGZvcm1hdHMuCiAgICAgc3dpdGNoIChp
bnRlcm5hbGZvcm1hdCkgewpAQCAtMTc0OCw3ICsxNzQ4LDcgQEAgR0MzRGVudW0gV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6YmFzZUludGVybmFsRm9ybWF0RnJvbUludGVybmFsRm9ybWF0KEdDM0Rl
bnVtIGkKICAgICB9CiB9CiAKLWJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6aXNJbnRlZ2Vy
Rm9ybWF0KEdDM0RlbnVtIGludGVybmFsZm9ybWF0KQorYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0Ojppc0ludGVnZXJGb3JtYXQoR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dp
dGNoIChiYXNlSW50ZXJuYWxGb3JtYXRGcm9tSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQp
KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6CkBAIC0xNzYwLDcg
KzE3NjAsNyBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmlzSW50ZWdlckZvcm1hdChH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVdlYkdMQW55
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK1dl
YkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQ0dMZW51bSBwbmFt
ZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTIwOTIsNyArMjA5Miw3IEBAIFdlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKICAgICB9CiB9CiAKLWJvb2wgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0Rl
bnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQorYm9vbCBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0NHTGVudW0gdHlw
ZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpCiB7CiAgICAgLy8gUGVyZm9ybXMgY29u
c2VydmF0aXZlIHZhbGlkYXRpb24gYnkgY2FjaGluZyBhIG1heGltdW0gaW5kZXggb2YKICAgICAv
LyB0aGUgZ2l2ZW4gdHlwZSBwZXIgZWxlbWVudCBhcnJheSBidWZmZXIuIElmIGFsbCBvZiB0aGUg
Ym91bmQKQEAgLTIxMDUsNyArMjEwNSw3IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnCiAgICAg
aWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5n
dGgoKTsKKyAgICBHQ0dMc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJyYXlCdWZmZXIt
PmJ5dGVMZW5ndGgoKTsKICAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBpcyBhbHJlYWR5IGRlYWx0
IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRp
dmUuCiAgICAgaWYgKCFudW1FbGVtZW50cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjEx
NywxMyArMjExNywxMyBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5k
ZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZwogICAgICAgICAvLyBDb21w
dXRlIHRoZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4g
dHlwZSBvZiBpbmRleC4KICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBtYXhJbmRleCA9IGdl
dE1heEluZGV4PEdDM0R1Ynl0ZT4oYnVmZmVyLCAwLCBudW1FbGVtZW50cyk7CisgICAgICAgICAg
ICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdDR0x1Ynl0ZT4oYnVmZmVyLCAwLCBudW1FbGVtZW50
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdDM0R1
c2hvcnQ+KGJ1ZmZlciwgMCwgbnVtRWxlbWVudHMgLyBzaXplb2YoR0MzRHVzaG9ydCkpOworICAg
ICAgICAgICAgbWF4SW5kZXggPSBnZXRNYXhJbmRleDxHQ0dMdXNob3J0PihidWZmZXIsIDAsIG51
bUVsZW1lbnRzIC8gc2l6ZW9mKEdDR0x1c2hvcnQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICBt
YXhJbmRleCA9IGdldE1heEluZGV4PEdDM0R1aW50PihidWZmZXIsIDAsIG51bUVsZW1lbnRzIC8g
c2l6ZW9mKEdDM0R1aW50KSk7CisgICAgICAgICAgICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdD
R0x1aW50PihidWZmZXIsIDAsIG51bUVsZW1lbnRzIC8gc2l6ZW9mKEdDR0x1aW50KSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTIxNDUsNyArMjE0NSw3IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVu
ZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSkKK2Jvb2wg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGVU5DX0FERDoKQEAgLTIxNjAsNyArMjE2MCw3IEBA
IGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzCiAgICAgfQogfQogCi1ib29sIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIGNhcCkKK2Jvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDYXBhYmls
aXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gY2FwKQogewogICAgIHN3aXRj
aCAoY2FwKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkQ6CkBAIC0yMTgwLDcg
KzIxODAsNyBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0
eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbgogICAgIH0KIH0KIAotdm9pZCBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBH
QzNEaW50NjQgb2Zmc2V0KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2Vk
VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50NjQgb2Zmc2V0KQogewogICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOwogICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7CkBAIC0yMTk0LDcgKzIx
OTQsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbAogICAgIExPRyhXZWJHTCwgIltbIE5PVCBJ
TVBMRU1FTlRFRCBdXSBjb21wcmVzc2VkVGV4SW1hZ2UyRCgpIik7CiB9CiAKLXZvaWQgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3JiBzcmNEYXRh
LCBHQzNEdWludCBzcmNPZmZzZXQsIEdDM0R1aW50IHNyY0xlbmd0aE92ZXJyaWRlKQordm9pZCBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcmIHNy
Y0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoT3ZlcnJpZGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CiAgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aAppbmRleCBhZjJjNDdhZmZiOTIzZThkM2VhZWJhNDIxNDgyZTQ1MzdhNDk5ZGI1Li4yMzkxNzJk
OTU0ZDZlMmEyYmNhZjA3MmEyMWEyZGU2Mjg4N2YwMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCkBAIC00NywyNiArNDcs
MjYgQEAgcHVibGljOgogICAgIC8vIEJ1ZmZlciBvYmplY3RzCiAgICAgdXNpbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YTsKICAgICB1c2luZyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpidWZmZXJTdWJEYXRhOwotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0
YXJnZXQsIGNvbnN0IEFycmF5QnVmZmVyVmlldyYgZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEdDM0R1
aW50IHNyY09mZnNldCwgR0MzRHVpbnQgbGVuZ3RoKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBjb25zdCBBcnJheUJ1ZmZlclZpZXcm
IGRhdGEsIEdDM0R1aW50IHNyY09mZnNldCwgR0MzRHVpbnQgbGVuZ3RoKTsKLSAgICB2b2lkIGNv
cHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0
LCBHQzNEaW50NjQgcmVhZE9mZnNldCwgR0MzRGludDY0IHdyaXRlT2Zmc2V0LCBHQzNEaW50NjQg
c2l6ZSk7Ci0gICAgdm9pZCBnZXRCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBs
b25nIHNyY0J5dGVPZmZzZXQsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgZHN0RGF0YSwgR0Mz
RHVpbnQgZHN0T2Zmc2V0ID0gMCwgR0MzRHVpbnQgbGVuZ3RoID0gMCk7CisgICAgdm9pZCBidWZm
ZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgY29uc3QgQXJyYXlCdWZmZXJWaWV3JiBkYXRhLCBHQ0dM
ZW51bSB1c2FnZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5ndGgpOworICAgIHZv
aWQgYnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIGNvbnN0
IEFycmF5QnVmZmVyVmlldyYgZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBsZW5n
dGgpOworICAgIHZvaWQgY29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NH
TGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnQ2NCByZWFkT2Zmc2V0LCBHQ0dMaW50NjQgd3JpdGVP
ZmZzZXQsIEdDR0xpbnQ2NCBzaXplKTsKKyAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0NHTGVu
dW0gdGFyZ2V0LCBsb25nIGxvbmcgc3JjQnl0ZU9mZnNldCwgUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4mJiBkc3REYXRhLCBHQ0dMdWludCBkc3RPZmZzZXQgPSAwLCBHQ0dMdWludCBsZW5ndGggPSAw
KTsKICAgICAKICAgICAvLyBGcmFtZWJ1ZmZlciBvYmplY3RzCi0gICAgV2ViR0xBbnkgZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gcG5hbWUpIGZpbmFsOwotICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVy
KEdDM0RpbnQgc3JjWDAsIEdDM0RpbnQgc3JjWTAsIEdDM0RpbnQgc3JjWDEsIEdDM0RpbnQgc3Jj
WTEsIEdDM0RpbnQgZHN0WDAsIEdDM0RpbnQgZHN0WTAsIEdDM0RpbnQgZHN0WDEsIEdDM0RpbnQg
ZHN0WTEsIEdDM0RiaXRmaWVsZCBtYXNrLCBHQzNEZW51bSBmaWx0ZXIpOwotICAgIHZvaWQgZnJh
bWVidWZmZXJUZXh0dXJlTGF5ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50IGxldmVsLCBHQzNEaW50IGxheWVyKTsKLSAgICBXZWJH
TEFueSBnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFtZSk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlRnJh
bWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBhdHRhY2ht
ZW50cyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBhdHRhY2htZW50cywgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWFkQnVm
ZmVyKEdDM0RlbnVtIHNyYyk7CisgICAgV2ViR0xBbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0g
cG5hbWUpIGZpbmFsOworICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdD
R0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAs
IEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVs
ZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlTGF5
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBXZWJHTFRleHR1cmUqLCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IGxheWVyKTsKKyAgICBXZWJHTEFueSBnZXRJbnRlcm5hbGZv
cm1hdFBhcmFtZXRlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
Q0dMZW51bSBwbmFtZSk7CisgICAgdm9pZCBpbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBjb25zdCBWZWN0b3I8R0NHTGVudW0+JiBhdHRhY2htZW50cyk7CisgICAgdm9pZCBp
bnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBjb25zdCBWZWN0b3I8R0NH
TGVudW0+JiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCk7CisgICAgdm9pZCByZWFkQnVmZmVyKEdDR0xlbnVtIHNyYyk7
CiAgICAgCiAgICAgLy8gUmVuZGVyYnVmZmVyIG9iamVjdHMKLSAgICB2b2lkIHJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KTsKICAgICAKICAgICAvLyBUZXh0dXJlIG9iamVjdHMK
LSAgICB2b2lkIHRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMs
IEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpOwotICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxl
dmVscywgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRHNpemVpIGRlcHRoKTsKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKTsKIAog
I2lmIEVOQUJMRShWSURFTykKICAgICB1c2luZyBUZXhJbWFnZVNvdXJjZSA9IFdURjo6VmFyaWFu
dDxSZWZQdHI8SW1hZ2VCaXRtYXA+LCBSZWZQdHI8SW1hZ2VEYXRhPiwgUmVmUHRyPEhUTUxJbWFn
ZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+LCBSZWZQdHI8SFRNTFZpZGVvRWxl
bWVudD4+OwpAQCAtNzUsNjQgKzc1LDY0IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdXNpbmcg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRDsKLSAgICB2b2lkIHRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQ2NCBwYm9PZmZzZXQpOwotICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFRleElt
YWdlU291cmNlJiYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJiBzcmNEYXRhLCBHQzNEdWludCBzcmNPZmZzZXQp
OworICAgIHZvaWQgdGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludDY0
IHBib09mZnNldCk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gdGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgVGV4SW1hZ2VTb3VyY2UmJik7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmIHNyY0RhdGEs
IEdDR0x1aW50IHNyY09mZnNldCk7CiAKLSAgICB2b2lkIHRleEltYWdlM0QoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCwgR0MzRGludCBib3JkZXIsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludDY0IHBib09mZnNldCk7Ci0gICAg
RXhjZXB0aW9uT3I8dm9pZD4gdGV4SW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRHNpemVpIGRlcHRoLCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBUZXhJbWFnZVNvdXJjZSYmKTsKLSAgICB2b2lkIHRleEltYWdlM0QoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCwgR0MzRGludCBi
b3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4mJiBwaXhlbHMpOwotICAgIHZvaWQgdGV4SW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoLCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmIHNyY0RhdGEs
IEdDM0R1aW50IHNyY09mZnNldCk7CisgICAgdm9pZCB0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQ2NCBwYm9PZmZzZXQpOworICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgVGV4SW1hZ2VTb3VyY2UmJik7CisgICAgdm9pZCB0ZXhJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+JiYgcGl4ZWxzKTsKKyAgICB2b2lkIHRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZv
cm1hdCwgR0NHTGVudW0gdHlwZSwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJiBzcmNEYXRhLCBH
Q0dMdWludCBzcmNPZmZzZXQpOwogCiAgICAgdXNpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4U3ViSW1hZ2UyRDsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnQ2NCBwYm9PZmZzZXQpOwotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFRleEltYWdlU291cmNlJiYpOwotICAgIHZvaWQgdGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJiBz
cmNEYXRhLCBHQzNEdWludCBzcmNPZmZzZXQpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludDY0IHBib09mZnNldCk7CisgICAgRXhjZXB0aW9uT3I8dm9p
ZD4gdGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
eG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgVGV4SW1hZ2VTb3VyY2UmJik7Cisg
ICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiYmIHNyY0RhdGEsIEdDR0x1aW50IHNyY09mZnNldCk7CiAKLSAgICB2b2lkIHRleFN1
YkltYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB6b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50NjQgcGJvT2Zmc2V0KTsKLSAgICB2b2lkIHRleFN1YkltYWdlM0QoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGludCB6b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RzaXplaSBkZXB0aCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiYmIHBpeGVscywgR0MzRHVpbnQgc3JjT2Zmc2V0KTsKLSAgICBFeGNlcHRp
b25Pcjx2b2lkPiB0ZXhTdWJJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgem9mZnNldCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgVGV4SW1hZ2VTb3VyY2UmJik7CisgICAgdm9pZCB0ZXhTdWJJ
bWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBH
Q0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludDY0IHBib09mZnNldCk7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
c2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgUmVmUHRyPEFycmF5
QnVmZmVyVmlldz4mJiBwaXhlbHMsIEdDR0x1aW50IHNyY09mZnNldCk7CisgICAgRXhjZXB0aW9u
T3I8dm9pZD4gdGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIFRleEltYWdlU291cmNlJiYpOwogCi0gICAgdm9pZCBjb3B5VGV4
U3ViSW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHpvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworICAgIHZvaWQgY29weVRleFN1
YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQs
IEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIHVzaW5nIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhJbWFnZTJEOwotICAgIHZvaWQgY29tcHJl
c3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgR0MzRGludDY0IG9mZnNldCk7Ci0gICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcmIGRhdGEsIEdDM0R1aW50IHNyY09mZnNl
dCwgR0MzRHVpbnQgc3JjTGVuZ3RoT3ZlcnJpZGUpOwotICAgIHZvaWQgY29tcHJlc3NlZFRleElt
YWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgs
IEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBHQzNEaW50NjQgb2Zmc2V0KTsK
LSAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRHNpemVpIGRlcHRoLCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3
JiBzcmNEYXRhLCBHQzNEdWludCBzcmNPZmZzZXQsIEdDM0R1aW50IHNyY0xlbmd0aE92ZXJyaWRl
KTsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnQ2
NCBvZmZzZXQpOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3JiBkYXRh
LCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aE92ZXJyaWRlKTsKKyAgICB2
b2lkIGNvbXByZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwg
R0NHTGludDY0IG9mZnNldCk7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3Jk
ZXIsIEFycmF5QnVmZmVyVmlldyYgc3JjRGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWlu
dCBzcmNMZW5ndGhPdmVycmlkZSk7CiAKICAgICB1c2luZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDsKICAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSBpbWFnZVNpemUsIEdMaW50cHRyIG9mZnNldCk7CiAgICAgdm9pZCBjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEFycmF5QnVmZmVyVmlldyYgc3JjRGF0YSwgR0x1aW50IHNyY09mZnNldCwgR0x1aW50IHNyY0xl
bmd0aE92ZXJyaWRlKTsKIAotICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGludCB6b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RzaXplaSBkZXB0aCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBHQzNE
aW50NjQgb2Zmc2V0KTsKLSAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RpbnQgem9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
c2l6ZWkgZGVwdGgsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3JiBkYXRhLCBHQzNE
dWludCBzcmNPZmZzZXQsIEdDM0R1aW50IHNyY0xlbmd0aE92ZXJyaWRlKTsKKyAgICB2b2lkIGNv
bXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludDY0IG9mZnNldCk7CisgICAgdm9pZCBjb21w
cmVzc2VkVGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xp
bnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQs
IEFycmF5QnVmZmVyVmlldyYgZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNM
ZW5ndGhPdmVycmlkZSk7CiAKICAgICAvLyBQcm9ncmFtcyBhbmQgc2hhZGVycwotICAgIEdDM0Rp
bnQgZ2V0RnJhZ0RhdGFMb2NhdGlvbihXZWJHTFByb2dyYW0mLCBjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIEdDR0xpbnQgZ2V0RnJhZ0RhdGFMb2NhdGlvbihXZWJHTFByb2dyYW0mLCBjb25zdCBT
dHJpbmcmIG5hbWUpOwogCiAgICAgLy8gVW5pZm9ybXMgYW5kIGF0dHJpYnV0ZXMKICAgICB1c2lu
ZyBVaW50MzJMaXN0ID0gVHlwZWRMaXN0PFVpbnQzMkFycmF5LCB1aW50MzJfdD47CiAgICAgdXNp
bmcgRmxvYXQzMkxpc3QgPSBUeXBlZExpc3Q8RmxvYXQzMkFycmF5LCBmbG9hdD47Ci0gICAgdm9p
ZCB1bmlmb3JtMXVpKFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRHVpbnQgdjApOwotICAgIHZv
aWQgdW5pZm9ybTJ1aShXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0R1aW50IHYwLCBHQzNEdWlu
dCB2MSk7Ci0gICAgdm9pZCB1bmlmb3JtM3VpKFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRHVp
bnQgdjAsIEdDM0R1aW50IHYxLCBHQzNEdWludCB2Mik7Ci0gICAgdm9pZCB1bmlmb3JtNHVpKFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRHVpbnQgdjAsIEdDM0R1aW50IHYxLCBHQzNEdWludCB2
MiwgR0MzRHVpbnQgdjMpOwotICAgIHZvaWQgdW5pZm9ybTF1aXYoV2ViR0xVbmlmb3JtTG9jYXRp
b24qLCBVaW50MzJMaXN0JiYgZGF0YSwgR0MzRHVpbnQgc3JjT2Zmc2V0LCBHQzNEdWludCBzcmNM
ZW5ndGgpOwotICAgIHZvaWQgdW5pZm9ybTJ1aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBVaW50
MzJMaXN0JiYgZGF0YSwgR0MzRHVpbnQgc3JjT2Zmc2V0LCBHQzNEdWludCBzcmNMZW5ndGgpOwot
ICAgIHZvaWQgdW5pZm9ybTN1aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBVaW50MzJMaXN0JiYg
ZGF0YSwgR0MzRHVpbnQgc3JjT2Zmc2V0LCBHQzNEdWludCBzcmNMZW5ndGgpOwotICAgIHZvaWQg
dW5pZm9ybTR1aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBVaW50MzJMaXN0JiYgZGF0YSwgR0Mz
RHVpbnQgc3JjT2Zmc2V0LCBHQzNEdWludCBzcmNMZW5ndGgpOwotICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDJ4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBG
bG9hdDMyTGlzdCYmIHZhbHVlLCBHQzNEdWludCBzcmNPZmZzZXQsIEdDM0R1aW50IHNyY0xlbmd0
aCk7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJMaXN0JiYgdmFsdWUsIEdDM0R1aW50IHNyY09m
ZnNldCwgR0MzRHVpbnQgc3JjTGVuZ3RoKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgyeDRmdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkxpc3Qm
JiB2YWx1ZSwgR0MzRHVpbnQgc3JjT2Zmc2V0LCBHQzNEdWludCBzcmNMZW5ndGgpOwotICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDR4MmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyTGlzdCYmIHZhbHVlLCBHQzNEdWludCBzcmNPZmZzZXQsIEdDM0R1
aW50IHNyY0xlbmd0aCk7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M3g0ZnYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJMaXN0JiYgdmFsdWUsIEdD
M0R1aW50IHNyY09mZnNldCwgR0MzRHVpbnQgc3JjTGVuZ3RoKTsKLSAgICB2b2lkIHVuaWZvcm1N
YXRyaXg0eDNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
RmxvYXQzMkxpc3QmJiB2YWx1ZSwgR0MzRHVpbnQgc3JjT2Zmc2V0LCBHQzNEdWludCBzcmNMZW5n
dGgpOwotICAgIHZvaWQgdmVydGV4QXR0cmliSTRpKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmli
STRpdihHQzNEdWludCBpbmRleCwgSW50MzJMaXN0JiYgdik7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRy
aWJJNHVpKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCB4LCBHQzNEdWludCB5LCBHQzNEdWludCB6
LCBHQzNEdWludCB3KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWl2KEdDM0R1aW50IGluZGV4
LCBVaW50MzJMaXN0JiYgdik7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQzNEdWlu
dCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgc3RyaWRlLCBH
QzNEaW50NjQgb2Zmc2V0KTsKKyAgICB2b2lkIHVuaWZvcm0xdWkoV2ViR0xVbmlmb3JtTG9jYXRp
b24qLCBHQ0dMdWludCB2MCk7CisgICAgdm9pZCB1bmlmb3JtMnVpKFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKTsKKyAgICB2b2lkIHVuaWZvcm0zdWkoV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYy
KTsKKyAgICB2b2lkIHVuaWZvcm00dWkoV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQ0dMdWludCB2
MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2Myk7CisgICAgdm9pZCB1bmlm
b3JtMXVpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIFVpbnQzMkxpc3QmJiBkYXRhLCBHQ0dMdWlu
dCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCk7CisgICAgdm9pZCB1bmlmb3JtMnVpdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiosIFVpbnQzMkxpc3QmJiBkYXRhLCBHQ0dMdWludCBzcmNPZmZz
ZXQsIEdDR0x1aW50IHNyY0xlbmd0aCk7CisgICAgdm9pZCB1bmlmb3JtM3VpdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiosIFVpbnQzMkxpc3QmJiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IHNyY0xlbmd0aCk7CisgICAgdm9pZCB1bmlmb3JtNHVpdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biosIFVpbnQzMkxpc3QmJiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xl
bmd0aCk7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4MngzZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24q
LCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJMaXN0JiYgdmFsdWUsIEdDR0x1aW50IHNy
Y09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgzeDJm
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkxp
c3QmJiB2YWx1ZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpOworICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDJ4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBGbG9hdDMyTGlzdCYmIHZhbHVlLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdD
R0x1aW50IHNyY0xlbmd0aCk7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NHgyZnYoV2ViR0xVbmlm
b3JtTG9jYXRpb24qLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJMaXN0JiYgdmFsdWUs
IEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKTsKKyAgICB2b2lkIHVuaWZv
cm1NYXRyaXgzeDRmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgRmxvYXQzMkxpc3QmJiB2YWx1ZSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNM
ZW5ndGgpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDR4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyTGlzdCYmIHZhbHVlLCBHQ0dMdWludCBz
cmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJNGko
R0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQg
dyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1aW50IGluZGV4LCBJbnQzMkxpc3Qm
JiB2KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50
IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdDR0x1aW50IHcpOworICAgIHZvaWQgdmVydGV4
QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgsIFVpbnQzMkxpc3QmJiB2KTsKKyAgICB2b2lkIHZl
cnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVt
IHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnQ2NCBvZmZzZXQpOwogCiAgICAgdXNpbmcg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFmdjsKICAgICB1c2luZyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmZ2OwpAQCAtMTYwLDg0ICsxNjAsODQgQEAgcHVi
bGljOgogICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJMaXN0IGRhdGEsIEdMdWludCBzcmNP
ZmZzZXQsIEdMdWludCBzcmNMZW5ndGgpOwogCiAgICAgLy8gV3JpdGluZyB0byB0aGUgZHJhd2lu
ZyBidWZmZXIKLSAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKSBmaW5hbDsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3Ip
OwotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBpbnN0YW5jZUNvdW50KTsKLSAgICB2b2lk
IGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RlbnVtIHR5cGUsIEdDM0RpbnQ2NCBvZmZzZXQsIEdDM0RzaXplaSBpbnN0YW5jZUNvdW50KTsK
LSAgICB2b2lkIGRyYXdSYW5nZUVsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0R1aW50IHN0YXJ0
LCBHQzNEdWludCBlbmQsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludDY0
IG9mZnNldCk7CisgICAgdm9pZCBjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykgZmluYWw7CisgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29y
KTsKKyAgICB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBm
aXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgaW5zdGFuY2VDb3VudCk7CisgICAgdm9p
ZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50NjQgb2Zmc2V0LCBHQ0dMc2l6ZWkgaW5zdGFuY2VDb3VudCk7
CisgICAgdm9pZCBkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFy
dCwgR0NHTHVpbnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQ2
NCBvZmZzZXQpOwogICAgIAogICAgIC8vIE11bHRpcGxlIHJlbmRlciB0YXJnZXRzCi0gICAgdm9p
ZCBkcmF3QnVmZmVycyhjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZmZXJzKTsKLSAgICB2b2lk
IGNsZWFyQnVmZmVyaXYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50IGRyYXdidWZmZXIsIEludDMy
TGlzdCYmIHZhbHVlcywgR0MzRHVpbnQgc3JjT2Zmc2V0KTsKLSAgICB2b2lkIGNsZWFyQnVmZmVy
dWl2KEdDM0RlbnVtIGJ1ZmZlciwgR0MzRGludCBkcmF3YnVmZmVyLCBVaW50MzJMaXN0JiYgdmFs
dWVzLCBHQzNEdWludCBzcmNPZmZzZXQpOwotICAgIHZvaWQgY2xlYXJCdWZmZXJmdihHQzNEZW51
bSBidWZmZXIsIEdDM0RpbnQgZHJhd2J1ZmZlciwgRmxvYXQzMkxpc3QmJiB2YWx1ZXMsIEdDM0R1
aW50IHNyY09mZnNldCk7Ci0gICAgdm9pZCBjbGVhckJ1ZmZlcmZpKEdDM0RlbnVtIGJ1ZmZlciwg
R0MzRGludCBkcmF3YnVmZmVyLCBHQzNEZmxvYXQgZGVwdGgsIEdDM0RpbnQgc3RlbmNpbCk7Cisg
ICAgdm9pZCBkcmF3QnVmZmVycyhjb25zdCBWZWN0b3I8R0NHTGVudW0+JiBidWZmZXJzKTsKKyAg
ICB2b2lkIGNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIs
IEludDMyTGlzdCYmIHZhbHVlcywgR0NHTHVpbnQgc3JjT2Zmc2V0KTsKKyAgICB2b2lkIGNsZWFy
QnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBVaW50MzJMaXN0
JiYgdmFsdWVzLCBHQ0dMdWludCBzcmNPZmZzZXQpOworICAgIHZvaWQgY2xlYXJCdWZmZXJmdihH
Q0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgRmxvYXQzMkxpc3QmJiB2YWx1ZXMs
IEdDR0x1aW50IHNyY09mZnNldCk7CisgICAgdm9pZCBjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1
ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMZmxvYXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNp
bCk7CiAgICAgCiAgICAgLy8gUXVlcnkgb2JqZWN0cwogICAgIFJlZlB0cjxXZWJHTFF1ZXJ5PiBj
cmVhdGVRdWVyeSgpOwogICAgIHZvaWQgZGVsZXRlUXVlcnkoV2ViR0xRdWVyeSopOwotICAgIEdD
M0Rib29sZWFuIGlzUXVlcnkoV2ViR0xRdWVyeSopOwotICAgIHZvaWQgYmVnaW5RdWVyeShHQzNE
ZW51bSB0YXJnZXQsIFdlYkdMUXVlcnkmKTsKLSAgICB2b2lkIGVuZFF1ZXJ5KEdDM0RlbnVtIHRh
cmdldCk7Ci0gICAgUmVmUHRyPFdlYkdMUXVlcnk+IGdldFF1ZXJ5KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUpOwotICAgIFdlYkdMQW55IGdldFF1ZXJ5UGFyYW1ldGVyKFdlYkdMUXVl
cnkmLCBHQzNEZW51bSBwbmFtZSk7CisgICAgR0NHTGJvb2xlYW4gaXNRdWVyeShXZWJHTFF1ZXJ5
Kik7CisgICAgdm9pZCBiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgV2ViR0xRdWVyeSYpOwor
ICAgIHZvaWQgZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KTsKKyAgICBSZWZQdHI8V2ViR0xRdWVy
eT4gZ2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSk7CisgICAgV2ViR0xB
bnkgZ2V0UXVlcnlQYXJhbWV0ZXIoV2ViR0xRdWVyeSYsIEdDR0xlbnVtIHBuYW1lKTsKICAgICAK
ICAgICAvLyBTYW1wbGVyIG9iamVjdHMKICAgICBSZWZQdHI8V2ViR0xTYW1wbGVyPiBjcmVhdGVT
YW1wbGVyKCk7CiAgICAgdm9pZCBkZWxldGVTYW1wbGVyKFdlYkdMU2FtcGxlciopOwotICAgIEdD
M0Rib29sZWFuIGlzU2FtcGxlcihXZWJHTFNhbXBsZXIqKTsKLSAgICB2b2lkIGJpbmRTYW1wbGVy
KEdDM0R1aW50IHVuaXQsIFdlYkdMU2FtcGxlciopOwotICAgIHZvaWQgc2FtcGxlclBhcmFtZXRl
cmkoV2ViR0xTYW1wbGVyJiwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwotICAgIHZv
aWQgc2FtcGxlclBhcmFtZXRlcmYoV2ViR0xTYW1wbGVyJiwgR0MzRGVudW0gcG5hbWUsIEdDM0Rm
bG9hdCBwYXJhbSk7Ci0gICAgV2ViR0xBbnkgZ2V0U2FtcGxlclBhcmFtZXRlcihXZWJHTFNhbXBs
ZXImLCBHQzNEZW51bSBwbmFtZSk7CisgICAgR0NHTGJvb2xlYW4gaXNTYW1wbGVyKFdlYkdMU2Ft
cGxlciopOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgV2ViR0xTYW1wbGVy
Kik7CisgICAgdm9pZCBzYW1wbGVyUGFyYW1ldGVyaShXZWJHTFNhbXBsZXImLCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCBwYXJhbSk7CisgICAgdm9pZCBzYW1wbGVyUGFyYW1ldGVyZihXZWJHTFNh
bXBsZXImLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKTsKKyAgICBXZWJHTEFueSBn
ZXRTYW1wbGVyUGFyYW1ldGVyKFdlYkdMU2FtcGxlciYsIEdDR0xlbnVtIHBuYW1lKTsKICAgICAK
ICAgICAvLyBTeW5jIG9iamVjdHMKLSAgICBSZWZQdHI8V2ViR0xTeW5jPiBmZW5jZVN5bmMoR0Mz
RGVudW0gY29uZGl0aW9uLCBHQzNEYml0ZmllbGQgZmxhZ3MpOwotICAgIEdDM0Rib29sZWFuIGlz
U3luYyhXZWJHTFN5bmMqKTsKKyAgICBSZWZQdHI8V2ViR0xTeW5jPiBmZW5jZVN5bmMoR0NHTGVu
dW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpOworICAgIEdDR0xib29sZWFuIGlzU3lu
YyhXZWJHTFN5bmMqKTsKICAgICB2b2lkIGRlbGV0ZVN5bmMoV2ViR0xTeW5jKik7Ci0gICAgR0Mz
RGVudW0gY2xpZW50V2FpdFN5bmMoV2ViR0xTeW5jJiwgR0MzRGJpdGZpZWxkIGZsYWdzLCBHQzNE
dWludDY0IHRpbWVvdXQpOwotICAgIHZvaWQgd2FpdFN5bmMoV2ViR0xTeW5jJiwgR0MzRGJpdGZp
ZWxkIGZsYWdzLCBHQzNEaW50NjQgdGltZW91dCk7Ci0gICAgV2ViR0xBbnkgZ2V0U3luY1BhcmFt
ZXRlcihXZWJHTFN5bmMmLCBHQzNEZW51bSBwbmFtZSk7CisgICAgR0NHTGVudW0gY2xpZW50V2Fp
dFN5bmMoV2ViR0xTeW5jJiwgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQp
OworICAgIHZvaWQgd2FpdFN5bmMoV2ViR0xTeW5jJiwgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dM
aW50NjQgdGltZW91dCk7CisgICAgV2ViR0xBbnkgZ2V0U3luY1BhcmFtZXRlcihXZWJHTFN5bmMm
LCBHQ0dMZW51bSBwbmFtZSk7CiAgICAgCiAgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrCiAgICAg
UmVmUHRyPFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s+IGNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCk7
CiAgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTFRyYW5zZm9ybUZlZWRiYWNr
KiBpZCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTFRyYW5zZm9y
bUZlZWRiYWNrKiBpZCk7Ci0gICAgdm9pZCBiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0MzRGVudW0g
dGFyZ2V0LCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKiBpZCk7Ci0gICAgdm9pZCBiZWdpblRyYW5z
Zm9ybUZlZWRiYWNrKEdDM0RlbnVtIHByaW1pdGl2ZU1vZGUpOworICAgIEdDR0xib29sZWFuIGlz
VHJhbnNmb3JtRmVlZGJhY2soV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayogaWQpOworICAgIHZvaWQg
YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgV2ViR0xUcmFuc2Zvcm1GZWVk
YmFjayogaWQpOworICAgIHZvaWQgYmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmlt
aXRpdmVNb2RlKTsKICAgICB2b2lkIGVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7Ci0gICAgdm9pZCB0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFdlYkdMUHJvZ3JhbSYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB2YXJ5aW5ncywgR0MzRGVudW0gYnVmZmVyTW9kZSk7Ci0gICAgUmVmUHRyPFdlYkdMQWN0
aXZlSW5mbz4gZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFdlYkdMUHJvZ3JhbSYsIEdDM0R1
aW50IGluZGV4KTsKKyAgICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoV2ViR0xQcm9n
cmFtJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2Rl
KTsKKyAgICBSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmcoV2ViR0xQcm9ncmFtJiwgR0NHTHVpbnQgaW5kZXgpOwogICAgIHZvaWQgcGF1c2VUcmFuc2Zv
cm1GZWVkYmFjaygpOwogICAgIHZvaWQgcmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKTsKICAgICAK
ICAgICAvLyBVbmlmb3JtIGJ1ZmZlciBvYmplY3RzIGFuZCB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVm
ZmVycwotICAgIHZvaWQgYmluZEJ1ZmZlckJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEdWludCBp
bmRleCwgV2ViR0xCdWZmZXIqKTsKLSAgICB2b2lkIGJpbmRCdWZmZXJSYW5nZShHQzNEZW51bSB0
YXJnZXQsIEdDM0R1aW50IGluZGV4LCBXZWJHTEJ1ZmZlciosIEdDM0RpbnQ2NCBvZmZzZXQsIEdD
M0RpbnQ2NCBzaXplKTsKLSAgICBXZWJHTEFueSBnZXRJbmRleGVkUGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRHVpbnQgaW5kZXgpOwotICAgIE9wdGlvbmFsPFZlY3RvcjxHQzNEdWludD4+
IGdldFVuaWZvcm1JbmRpY2VzKFdlYkdMUHJvZ3JhbSYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1
bmlmb3JtTmFtZXMpOwotICAgIFdlYkdMQW55IGdldEFjdGl2ZVVuaWZvcm1zKFdlYkdMUHJvZ3Jh
bSYsIGNvbnN0IFZlY3RvcjxHQzNEdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQzNEZW51bSBwbmFt
ZSk7Ci0gICAgR0MzRHVpbnQgZ2V0VW5pZm9ybUJsb2NrSW5kZXgoV2ViR0xQcm9ncmFtJiwgY29u
c3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKTsKLSAgICBXZWJHTEFueSBnZXRBY3RpdmVVbmlm
b3JtQmxvY2tQYXJhbWV0ZXIoV2ViR0xQcm9ncmFtJiwgR0MzRHVpbnQgdW5pZm9ybUJsb2NrSW5k
ZXgsIEdDM0RlbnVtIHBuYW1lKTsKLSAgICBXZWJHTEFueSBnZXRBY3RpdmVVbmlmb3JtQmxvY2tO
YW1lKFdlYkdMUHJvZ3JhbSYsIEdDM0R1aW50IHVuaWZvcm1CbG9ja0luZGV4KTsKLSAgICB2b2lk
IHVuaWZvcm1CbG9ja0JpbmRpbmcoV2ViR0xQcm9ncmFtJiwgR0MzRHVpbnQgdW5pZm9ybUJsb2Nr
SW5kZXgsIEdDM0R1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpOworICAgIHZvaWQgYmluZEJ1ZmZl
ckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgV2ViR0xCdWZmZXIqKTsKKyAg
ICB2b2lkIGJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBX
ZWJHTEJ1ZmZlciosIEdDR0xpbnQ2NCBvZmZzZXQsIEdDR0xpbnQ2NCBzaXplKTsKKyAgICBXZWJH
TEFueSBnZXRJbmRleGVkUGFyYW1ldGVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgp
OworICAgIE9wdGlvbmFsPFZlY3RvcjxHQ0dMdWludD4+IGdldFVuaWZvcm1JbmRpY2VzKFdlYkdM
UHJvZ3JhbSYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFtZXMpOworICAgIFdlYkdM
QW55IGdldEFjdGl2ZVVuaWZvcm1zKFdlYkdMUHJvZ3JhbSYsIGNvbnN0IFZlY3RvcjxHQ0dMdWlu
dD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSk7CisgICAgR0NHTHVpbnQgZ2V0VW5p
Zm9ybUJsb2NrSW5kZXgoV2ViR0xQcm9ncmFtJiwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tO
YW1lKTsKKyAgICBXZWJHTEFueSBnZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoV2ViR0xQ
cm9ncmFtJiwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lKTsKKyAg
ICBXZWJHTEFueSBnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFdlYkdMUHJvZ3JhbSYsIEdDR0x1
aW50IHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICB2b2lkIHVuaWZvcm1CbG9ja0JpbmRpbmcoV2Vi
R0xQcm9ncmFtJiwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1C
bG9ja0JpbmRpbmcpOwogICAgIAogICAgIC8vIFZlcnRleCBhcnJheSBvYmplY3RzCiAgICAgUmVm
UHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3Q+IGNyZWF0ZVZlcnRleEFycmF5KCk7CiAgICAgdm9p
ZCBkZWxldGVWZXJ0ZXhBcnJheShXZWJHTFZlcnRleEFycmF5T2JqZWN0KiB2ZXJ0ZXhBcnJheSk7
Ci0gICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheShXZWJHTFZlcnRleEFycmF5T2JqZWN0KiB2
ZXJ0ZXhBcnJheSk7CisgICAgR0NHTGJvb2xlYW4gaXNWZXJ0ZXhBcnJheShXZWJHTFZlcnRleEFy
cmF5T2JqZWN0KiB2ZXJ0ZXhBcnJheSk7CiAgICAgdm9pZCBiaW5kVmVydGV4QXJyYXkoV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdCogdmVydGV4QXJyYXkpOwogICAgIAogICAgIFdlYkdMRXh0ZW5zaW9u
KiBnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJikgZmluYWw7CiAgICAgT3B0aW9uYWw8VmVjdG9y
PFN0cmluZz4+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKSBmaW5hbDsKLSAgICBXZWJHTEFueSBn
ZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpIGZpbmFsOworICAgIFdlYkdMQW55IGdldFBhcmFt
ZXRlcihHQ0dMZW51bSBwbmFtZSkgZmluYWw7CiAKICAgICB1c2luZyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpyZWFkUGl4ZWxzOwogICAgIHZvaWQgcmVhZFBpeGVscyhHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50cHRyIG9mZnNldCk7CiAgICAgdm9pZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3JiBkc3REYXRhLCBHTHVpbnQgZHN0T2Zmc2V0KTsKIAot
ICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIGZpbmFsOwot
ICAgIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpIGZpbmFsOworICAg
IHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIGZpbmFsOworICAg
IHZvaWQgaGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpIGZpbmFsOwogCiBwcml2
YXRlOgogICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcyk7CkBAIC0yNDYsMjAgKzI0NiwyMCBAQCBwcml2YXRlOgogICAgIGJv
b2wgaXNXZWJHTDIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2b2lkIGlu
aXRpYWxpemVWZXJ0ZXhBcnJheU9iamVjdHMoKSBmaW5hbDsKLSAgICBHQzNEaW50IGdldE1heERy
YXdCdWZmZXJzKCkgZmluYWw7Ci0gICAgR0MzRGludCBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkg
ZmluYWw7Ci0gICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0g
dHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpIGZpbmFsOwotICAgIGJvb2wgdmFs
aWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSkgZmluYWw7Ci0gICAgYm9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBjYXApIGZpbmFsOwotICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZl
ckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50KSBmaW5hbDsKLSAgICBib29sIHZhbGlkYXRlRnJhbWVidWZm
ZXJUYXJnZXQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQpOwotICAg
IGJvb2wgdmFsaWRhdGVOb25EZWZhdWx0RnJhbWVidWZmZXJBdHRhY2htZW50KGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gYXR0YWNobWVudCk7CisgICAgR0NHTGludCBnZXRNYXhE
cmF3QnVmZmVycygpIGZpbmFsOworICAgIEdDR0xpbnQgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygp
IGZpbmFsOworICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDR0xlbnVt
IHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKSBmaW5hbDsKKyAgICBib29sIHZh
bGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtIG1v
ZGUpIGZpbmFsOworICAgIGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0NHTGVudW0gY2FwKSBmaW5hbDsKKyAgICBib29sIHZhbGlkYXRlRnJhbWVidWZm
ZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gYXR0YWNobWVudCkgZmluYWw7CisgICAgYm9vbCB2YWxpZGF0ZUZyYW1lYnVm
ZmVyVGFyZ2V0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gdGFyZ2V0KTsKKyAg
ICBib29sIHZhbGlkYXRlTm9uRGVmYXVsdEZyYW1lYnVmZmVyQXR0YWNobWVudChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtIGF0dGFjaG1lbnQpOwogICAgIAotICAgIEdDM0RlbnVt
IGJhc2VJbnRlcm5hbEZvcm1hdEZyb21JbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCk7Ci0gICAgYm9vbCBpc0ludGVnZXJGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQp
OworICAgIEdDR0xlbnVtIGJhc2VJbnRlcm5hbEZvcm1hdEZyb21JbnRlcm5hbEZvcm1hdChHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCk7CisgICAgYm9vbCBpc0ludGVnZXJGb3JtYXQoR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVNoYWRlckV4dGVuc2lvbnMoKTsK
IAotICAgIGJvb2wgdmFsaWRhdGVUZXhTdG9yYWdlRnVuY1BhcmFtZXRlcnMoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOworICAg
IGJvb2wgdmFsaWRhdGVUZXhTdG9yYWdlRnVuY1BhcmFtZXRlcnMoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xBY3RpdmVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFj
dGl2ZUluZm8uaAppbmRleCA2ZjQzYzA0MTA3YjM2MWQxNGM5OTlmNmQ5OGM1MGRjNzA0NWFmM2M0
Li5hZTY5NTQyZWY3NmYwZGVlMjRiN2EzMjlkZmMyMWE0ZjlhOGU5NjliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaApAQCAtMzUsMTYgKzM1LDE2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgV2ViR0xBY3RpdmVJbmZvIDogcHVibGljIFJl
ZkNvdW50ZWQ8V2ViR0xBY3RpdmVJbmZvPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJH
TEFjdGl2ZUluZm8+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnQgc2l6ZSkKKyAgICBzdGF0aWMgUmVmPFdlYkdMQWN0aXZlSW5mbz4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgbmFtZSwgR0NHTGVudW0gdHlwZSwgR0NHTGludCBzaXplKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViR0xBY3RpdmVJbmZvKG5hbWUsIHR5cGUsIHNpemUp
KTsKICAgICB9CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAg
ICBHQzNEZW51bSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgR0MzRGludCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgR0NHTGVudW0gdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEdDR0xpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQogCiBwcml2YXRlOgotICAgIFdlYkdMQWN0aXZlSW5mbyhjb25zdCBTdHJpbmcmIG5h
bWUsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgc2l6ZSkKKyAgICBXZWJHTEFjdGl2ZUluZm8oY29u
c3QgU3RyaW5nJiBuYW1lLCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHNpemUpCiAgICAgICAgIDog
bV9uYW1lKG5hbWUpCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9zaXplKHNp
emUpCkBAIC01NCw4ICs1NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChzaXplKTsKICAg
ICB9CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBHQzNEZW51bSBtX3R5cGU7Ci0gICAgR0MzRGlu
dCBtX3NpemU7CisgICAgR0NHTGVudW0gbV90eXBlOworICAgIEdDR0xpbnQgbV9zaXplOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xCdWZmZXIuY3BwCmluZGV4IGI4ZWUyNWZhY2Y2ODUwZjAyZmRkYzQ4Njg2NTJhMGNiNTNjNmY4
MGEuLjVlOTE1MjZhOWJiMWZmYWNhNDA3MTVhNzZkZjc3NWYwNTlhNDJjN2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKQEAgLTUxLDEyICs1MSwxMiBAQCBX
ZWJHTEJ1ZmZlcjo6fldlYkdMQnVmZmVyKCkKICAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKLXZv
aWQgV2ViR0xCdWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMQnVmZmVyOjpk
ZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRm
b3JtR0xPYmplY3Qgb2JqZWN0KQogewogICAgIGNvbnRleHQzZC0+ZGVsZXRlQnVmZmVyKG9iamVj
dCk7CiB9CiAKLWJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKGNvbnN0
IHZvaWQqIGRhdGEsIEdDM0RzaXplaXB0ciBieXRlTGVuZ3RoKQorYm9vbCBXZWJHTEJ1ZmZlcjo6
YXNzb2NpYXRlQnVmZmVyRGF0YUltcGwoY29uc3Qgdm9pZCogZGF0YSwgR0NHTHNpemVpcHRyIGJ5
dGVMZW5ndGgpCiB7CiAgICAgaWYgKGJ5dGVMZW5ndGggPCAwKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xMDIsNyArMTAyLDcgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVy
RGF0YUltcGwoY29uc3Qgdm9pZCogZGF0YSwgR0MzRHNpemVpcHRyIGJ5dGVMZW4KICAgICB9CiB9
CiAKLWJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGEoR0MzRHNpemVpcHRyIHNp
emUpCitib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhKEdDR0xzaXplaXB0ciBz
aXplKQogewogICAgIHJldHVybiBhc3NvY2lhdGVCdWZmZXJEYXRhSW1wbChudWxscHRyLCBzaXpl
KTsKIH0KQEAgLTEyMSwxNSArMTIxLDE1IEBAIGJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1
ZmZlckRhdGEoQXJyYXlCdWZmZXJWaWV3KiBhcnJheSkKICAgICByZXR1cm4gYXNzb2NpYXRlQnVm
ZmVyRGF0YUltcGwoYXJyYXktPmJhc2VBZGRyZXNzKCksIGFycmF5LT5ieXRlTGVuZ3RoKCkpOwog
fQogCi1ib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhSW1wbChHQzNEaW50
cHRyIG9mZnNldCwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRHNpemVpcHRyIGJ5dGVMZW5ndGgpCiti
b29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhSW1wbChHQ0dMaW50cHRyIG9m
ZnNldCwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTHNpemVpcHRyIGJ5dGVMZW5ndGgpCiB7CiAgICAg
aWYgKCFkYXRhIHx8IG9mZnNldCA8IDAgfHwgYnl0ZUxlbmd0aCA8IDApCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChieXRlTGVuZ3RoKSB7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGlu
dHB0ciwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRCdWZmZXJPZmZzZXQob2Zmc2V0KTsKLSAgICAg
ICAgQ2hlY2tlZDxHQzNEc2l6ZWlwdHIsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkRGF0YUxlbmd0
aChieXRlTGVuZ3RoKTsKLSAgICAgICAgQ2hlY2tlZDxHQzNEaW50cHRyLCBSZWNvcmRPdmVyZmxv
dz4gY2hlY2tlZEJ1ZmZlck1heCA9IGNoZWNrZWRCdWZmZXJPZmZzZXQgKyBjaGVja2VkRGF0YUxl
bmd0aDsKKyAgICAgICAgQ2hlY2tlZDxHQ0dMaW50cHRyLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tl
ZEJ1ZmZlck9mZnNldChvZmZzZXQpOworICAgICAgICBDaGVja2VkPEdDR0xzaXplaXB0ciwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWREYXRhTGVuZ3RoKGJ5dGVMZW5ndGgpOworICAgICAgICBDaGVj
a2VkPEdDR0xpbnRwdHIsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQnVmZmVyTWF4ID0gY2hlY2tl
ZEJ1ZmZlck9mZnNldCArIGNoZWNrZWREYXRhTGVuZ3RoOwogICAgICAgICBpZiAoY2hlY2tlZEJ1
ZmZlck1heC5oYXNPdmVyZmxvd2VkKCkgfHwgb2Zmc2V0ID4gbV9ieXRlTGVuZ3RoIHx8IGNoZWNr
ZWRCdWZmZXJNYXgudW5zYWZlR2V0KCkgPiBtX2J5dGVMZW5ndGgpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtMTYxLDM0ICsxNjEsMzQgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6
YXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwoR0MzRGludHB0ciBvZmZzZXQsIGNvbnN0IHZvaWQq
IGRhdGEKICAgICB9CiB9CiAKLWJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlclN1YkRh
dGEoR0MzRGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVyKiBhcnJheSkKK2Jvb2wgV2ViR0xCdWZm
ZXI6OmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoR0NHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVy
KiBhcnJheSkKIHsKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuIGFzc29jaWF0ZUJ1ZmZlclN1YkRhdGFJbXBsKG9mZnNldCwgYXJyYXktPmRhdGEoKSwg
YXJyYXktPmJ5dGVMZW5ndGgoKSk7CiB9CiAKLWJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1
ZmZlclN1YkRhdGEoR0MzRGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkpCiti
b29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhKEdDR0xpbnRwdHIgb2Zmc2V0
LCBBcnJheUJ1ZmZlclZpZXcqIGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gYXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwob2Zmc2V0
LCBhcnJheS0+YmFzZUFkZHJlc3MoKSwgYXJyYXktPmJ5dGVMZW5ndGgoKSk7CiB9CiAKLWJvb2wg
V2ViR0xCdWZmZXI6OmFzc29jaWF0ZUNvcHlCdWZmZXJTdWJEYXRhKGNvbnN0IFdlYkdMQnVmZmVy
JiByZWFkQnVmZmVyLCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZz
ZXQsIEdDM0RzaXplaXB0ciBzaXplKQorYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQ29weUJ1
ZmZlclN1YkRhdGEoY29uc3QgV2ViR0xCdWZmZXImIHJlYWRCdWZmZXIsIEdDR0xpbnRwdHIgcmVh
ZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAg
ICAgaWYgKHJlYWRPZmZzZXQgPCAwIHx8IHdyaXRlT2Zmc2V0IDwgMCB8fCBzaXplIDwgMCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgQ2hlY2tlZDxH
QzNEaW50cHRyLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFJlYWRCdWZmZXJPZmZzZXQocmVhZE9m
ZnNldCk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRHNpemVpcHRyLCBSZWNvcmRPdmVyZmxvdz4gY2hl
Y2tlZERhdGFMZW5ndGgoc2l6ZSk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludHB0ciwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRSZWFkQnVmZmVyTWF4ID0gY2hlY2tlZFJlYWRCdWZmZXJPZmZzZXQg
KyBjaGVja2VkRGF0YUxlbmd0aDsKKyAgICAgICAgQ2hlY2tlZDxHQ0dMaW50cHRyLCBSZWNvcmRP
dmVyZmxvdz4gY2hlY2tlZFJlYWRCdWZmZXJPZmZzZXQocmVhZE9mZnNldCk7CisgICAgICAgIENo
ZWNrZWQ8R0NHTHNpemVpcHRyLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZERhdGFMZW5ndGgoc2l6
ZSk7CisgICAgICAgIENoZWNrZWQ8R0NHTGludHB0ciwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRS
ZWFkQnVmZmVyTWF4ID0gY2hlY2tlZFJlYWRCdWZmZXJPZmZzZXQgKyBjaGVja2VkRGF0YUxlbmd0
aDsKICAgICAgICAgaWYgKGNoZWNrZWRSZWFkQnVmZmVyTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBy
ZWFkT2Zmc2V0ID4gcmVhZEJ1ZmZlci5ieXRlTGVuZ3RoKCkgfHwgY2hlY2tlZFJlYWRCdWZmZXJN
YXgudW5zYWZlR2V0KCkgPiByZWFkQnVmZmVyLmJ5dGVMZW5ndGgoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBDaGVja2VkPEdDM0RpbnRwdHIsIFJlY29yZE92ZXJmbG93
PiBjaGVja2VkV3JpdGVCdWZmZXJPZmZzZXQod3JpdGVPZmZzZXQpOwotICAgICAgICBDaGVja2Vk
PEdDM0RpbnRwdHIsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkV3JpdGVCdWZmZXJNYXggPSBjaGVj
a2VkV3JpdGVCdWZmZXJPZmZzZXQgKyBjaGVja2VkRGF0YUxlbmd0aDsKKyAgICAgICAgQ2hlY2tl
ZDxHQ0dMaW50cHRyLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFdyaXRlQnVmZmVyT2Zmc2V0KHdy
aXRlT2Zmc2V0KTsKKyAgICAgICAgQ2hlY2tlZDxHQ0dMaW50cHRyLCBSZWNvcmRPdmVyZmxvdz4g
Y2hlY2tlZFdyaXRlQnVmZmVyTWF4ID0gY2hlY2tlZFdyaXRlQnVmZmVyT2Zmc2V0ICsgY2hlY2tl
ZERhdGFMZW5ndGg7CiAgICAgICAgIGlmIChjaGVja2VkV3JpdGVCdWZmZXJNYXguaGFzT3ZlcmZs
b3dlZCgpIHx8IHdyaXRlT2Zmc2V0ID4gbV9ieXRlTGVuZ3RoIHx8IGNoZWNrZWRXcml0ZUJ1ZmZl
ck1heC51bnNhZmVHZXQoKSA+IG1fYnl0ZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC0yMjYsMTIgKzIyNiwxMiBAQCB2b2lkIFdlYkdMQnVmZmVyOjpkaXNhc3Nv
Y2lhdGVCdWZmZXJEYXRhKCkKICAgICBjbGVhckNhY2hlZE1heEluZGljZXMoKTsKIH0KIAotR0Mz
RHNpemVpcHRyIFdlYkdMQnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QKK0dDR0xzaXplaXB0ciBX
ZWJHTEJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYnl0ZUxlbmd0
aDsKIH0KIAotT3B0aW9uYWw8dW5zaWduZWQ+IFdlYkdMQnVmZmVyOjpnZXRDYWNoZWRNYXhJbmRl
eChHQzNEZW51bSB0eXBlKQorT3B0aW9uYWw8dW5zaWduZWQ+IFdlYkdMQnVmZmVyOjpnZXRDYWNo
ZWRNYXhJbmRleChHQ0dMZW51bSB0eXBlKQogewogICAgIGZvciAoYXV0byYgY2FjaGUgOiBtX21h
eEluZGV4Q2FjaGUpIHsKICAgICAgICAgaWYgKGNhY2hlLnR5cGUgPT0gdHlwZSkKQEAgLTI0MCw3
ICsyNDAsNyBAQCBPcHRpb25hbDx1bnNpZ25lZD4gV2ViR0xCdWZmZXI6OmdldENhY2hlZE1heElu
ZGV4KEdDM0RlbnVtIHR5cGUpCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotdm9pZCBX
ZWJHTEJ1ZmZlcjo6c2V0Q2FjaGVkTWF4SW5kZXgoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQgdmFs
dWUpCit2b2lkIFdlYkdMQnVmZmVyOjpzZXRDYWNoZWRNYXhJbmRleChHQ0dMZW51bSB0eXBlLCB1
bnNpZ25lZCB2YWx1ZSkKIHsKICAgICBmb3IgKGF1dG8mIGNhY2hlIDogbV9tYXhJbmRleENhY2hl
KSB7CiAgICAgICAgIGlmIChjYWNoZS50eXBlID09IHR5cGUpIHsKQEAgLTI1Myw3ICsyNTMsNyBA
QCB2b2lkIFdlYkdMQnVmZmVyOjpzZXRDYWNoZWRNYXhJbmRleChHQzNEZW51bSB0eXBlLCB1bnNp
Z25lZCB2YWx1ZSkKICAgICBtX25leHRBdmFpbGFibGVDYWNoZUVudHJ5ID0gKG1fbmV4dEF2YWls
YWJsZUNhY2hlRW50cnkgKyAxKSAlIFdURl9BUlJBWV9MRU5HVEgobV9tYXhJbmRleENhY2hlKTsK
IH0KIAotdm9pZCBXZWJHTEJ1ZmZlcjo6c2V0VGFyZ2V0KEdDM0RlbnVtIHRhcmdldCwgYm9vbCBm
b3JXZWJHTDIpCit2b2lkIFdlYkdMQnVmZmVyOjpzZXRUYXJnZXQoR0NHTGVudW0gdGFyZ2V0LCBi
b29sIGZvcldlYkdMMikKIHsKICAgICAvLyBJbiBXZWJHTCwgYSBidWZmZXIgaXMgYm91bmQgdG8g
b25lIHRhcmdldCBpbiBpdHMgbGlmZXRpbWUKICAgICBpZiAobV90YXJnZXQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAppbmRleCBiZDQzY2RkMDk5NDc3N2RlZDc1N2Vj
YjgyOGJhODc3N2Q4Zjk4MzgxLi45YWZkODU3MGNiM2RkZjc2YWIxODVlZDI0ZmU2NjM1OTcyMzQ5
Y2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgKQEAgLTQyLDM4
ICs0MiwzOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKICAgICB2aXJ0dWFsIH5XZWJHTEJ1ZmZlcigpOwog
Ci0gICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEdDM0RzaXplaXB0ciBzaXplKTsKKyAgICBi
b29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEoR0NHTHNpemVpcHRyIHNpemUpOwogICAgIGJvb2wgYXNz
b2NpYXRlQnVmZmVyRGF0YShKU0M6OkFycmF5QnVmZmVyKik7CiAgICAgYm9vbCBhc3NvY2lhdGVC
dWZmZXJEYXRhKEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAgYm9vbCBhc3NvY2lhdGVCdWZm
ZXJTdWJEYXRhKEdDM0RpbnRwdHIgb2Zmc2V0LCBKU0M6OkFycmF5QnVmZmVyKik7Ci0gICAgYm9v
bCBhc3NvY2lhdGVCdWZmZXJTdWJEYXRhKEdDM0RpbnRwdHIgb2Zmc2V0LCBKU0M6OkFycmF5QnVm
ZmVyVmlldyopOwotICAgIGJvb2wgYXNzb2NpYXRlQ29weUJ1ZmZlclN1YkRhdGEoY29uc3QgV2Vi
R0xCdWZmZXImIHJlYWRCdWZmZXIsIEdDM0RpbnRwdHIgcmVhZE9mZnNldCwgR0MzRGludHB0ciB3
cml0ZU9mZnNldCwgR0MzRHNpemVpcHRyKTsKKyAgICBib29sIGFzc29jaWF0ZUJ1ZmZlclN1YkRh
dGEoR0NHTGludHB0ciBvZmZzZXQsIEpTQzo6QXJyYXlCdWZmZXIqKTsKKyAgICBib29sIGFzc29j
aWF0ZUJ1ZmZlclN1YkRhdGEoR0NHTGludHB0ciBvZmZzZXQsIEpTQzo6QXJyYXlCdWZmZXJWaWV3
Kik7CisgICAgYm9vbCBhc3NvY2lhdGVDb3B5QnVmZmVyU3ViRGF0YShjb25zdCBXZWJHTEJ1ZmZl
ciYgcmVhZEJ1ZmZlciwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zm
c2V0LCBHQ0dMc2l6ZWlwdHIpOwogCiAgICAgdm9pZCBkaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7
CiAKLSAgICBHQzNEc2l6ZWlwdHIgYnl0ZUxlbmd0aCgpIGNvbnN0OworICAgIEdDR0xzaXplaXB0
ciBieXRlTGVuZ3RoKCkgY29uc3Q7CiAgICAgY29uc3QgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+
IGVsZW1lbnRBcnJheUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFycmF5QnVmZmVy
OyB9CiAKICAgICAvLyBHZXRzIHRoZSBjYWNoZWQgbWF4IGluZGV4IGZvciB0aGUgZ2l2ZW4gdHlw
ZSBpZiBvbmUgaGFzIGJlZW4gc2V0LgotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBnZXRDYWNoZWRN
YXhJbmRleChHQzNEZW51bSB0eXBlKTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gZ2V0Q2FjaGVk
TWF4SW5kZXgoR0NHTGVudW0gdHlwZSk7CiAgICAgLy8gU2V0cyB0aGUgY2FjaGVkIG1heCBpbmRl
eCBmb3IgdGhlIGdpdmVuIHR5cGUuCi0gICAgdm9pZCBzZXRDYWNoZWRNYXhJbmRleChHQzNEZW51
bSB0eXBlLCB1bnNpZ25lZCB2YWx1ZSk7CisgICAgdm9pZCBzZXRDYWNoZWRNYXhJbmRleChHQ0dM
ZW51bSB0eXBlLCB1bnNpZ25lZCB2YWx1ZSk7CiAKLSAgICBHQzNEZW51bSBnZXRUYXJnZXQoKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldDsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KEdDM0RlbnVtLCBi
b29sIGZvcldlYkdMMik7CisgICAgR0NHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXQ7IH0KKyAgICB2b2lkIHNldFRhcmdldChHQ0dMZW51bSwgYm9vbCBmb3JXZWJHTDIp
OwogCiAgICAgYm9vbCBoYXNFdmVyQmVlbkJvdW5kKCkgY29uc3QgeyByZXR1cm4gb2JqZWN0KCkg
JiYgbV90YXJnZXQ7IH0KIAogcHJvdGVjdGVkOgogICAgIFdlYkdMQnVmZmVyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtR0xPYmplY3Qp
IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEdDM0RlbnVtIG1fdGFyZ2V0IHsgMCB9OworICAg
IEdDR0xlbnVtIG1fdGFyZ2V0IHsgMCB9OwogCiAgICAgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+
IG1fZWxlbWVudEFycmF5QnVmZmVyOwotICAgIEdDM0RzaXplaXB0ciBtX2J5dGVMZW5ndGggeyAw
IH07CisgICAgR0NHTHNpemVpcHRyIG1fYnl0ZUxlbmd0aCB7IDAgfTsKIAogICAgIC8vIE9wdGlt
aXphdGlvbiBmb3IgaW5kZXggdmFsaWRhdGlvbi4gRm9yIGVhY2ggdHlwZSBvZiBpbmRleAogICAg
IC8vIChpLmUuLCBVTlNJR05FRF9TSE9SVCksIGNhY2hlIHRoZSBtYXhpbXVtIGluZGV4IGluIHRo
ZQpAQCAtODMsNyArODMsNyBAQCBwcml2YXRlOgogICAgIC8vIGRyYXcgY2FsbCBhcyBsb25nIGFz
IGFsbCBib3VuZCBhcnJheSBidWZmZXJzIGFyZSBhdCBsZWFzdAogICAgIC8vIHRoYXQgc2l6ZS4K
ICAgICBzdHJ1Y3QgTWF4SW5kZXhDYWNoZUVudHJ5IHsKLSAgICAgICAgR0MzRGVudW0gdHlwZTsK
KyAgICAgICAgR0NHTGVudW0gdHlwZTsKICAgICAgICAgdW5zaWduZWQgbWF4SW5kZXg7CiAgICAg
fTsKICAgICAvLyBPcGVuR0wgRVMgMi4wIG9ubHkgaGFzIHR3byB2YWxpZCBpbmRleCB0eXBlcyAo
VU5TSUdORURfQllURQpAQCAtOTUsOSArOTUsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJD
YWNoZWRNYXhJbmRpY2VzKCk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGJ5IHRo
ZSB0aHJlZSBhc3NvY2lhdGVCdWZmZXJEYXRhKCkuCi0gICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJE
YXRhSW1wbChjb25zdCB2b2lkKiBkYXRhLCBHQzNEc2l6ZWlwdHIgYnl0ZUxlbmd0aCk7CisgICAg
Ym9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhSW1wbChjb25zdCB2b2lkKiBkYXRhLCBHQ0dMc2l6ZWlw
dHIgYnl0ZUxlbmd0aCk7CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgdHdv
IGFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoKS4KLSAgICBib29sIGFzc29jaWF0ZUJ1ZmZlclN1YkRh
dGFJbXBsKEdDM0RpbnRwdHIgb2Zmc2V0LCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEc2l6ZWlwdHIg
Ynl0ZUxlbmd0aCk7CisgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJTdWJEYXRhSW1wbChHQ0dMaW50
cHRyIG9mZnNldCwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTHNpemVpcHRyIGJ5dGVMZW5ndGgpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcAppbmRleCBjZTM0NWU2OTgyZDMxZWZhOTNiM2Y5Mjgx
NWYwYzBkNzBiN2ViOWQzLi4yM2UxM2RkM2M2ZjQzZjE5NjMyMmM2ZTNkNWI1NzljYmRiMWFhNTAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNw
cApAQCAtNTUsMTIgKzU1LDEyIEBAIGJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJH
TERyYXdCdWZmZXJzOjpkcmF3QnVmZmVyc1dFQkdMKGNvbnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1
ZmZlcnMpCit2b2lkIFdlYkdMRHJhd0J1ZmZlcnM6OmRyYXdCdWZmZXJzV0VCR0woY29uc3QgVmVj
dG9yPEdDR0xlbnVtPiYgYnVmZmVycykKIHsKICAgICBpZiAobV9jb250ZXh0LmlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEdDM0RzaXplaSBuID0gYnVmZmVycy5zaXplKCk7
Ci0gICAgY29uc3QgR0MzRGVudW0qIGJ1ZnMgPSBidWZmZXJzLmRhdGEoKTsKKyAgICBHQ0dMc2l6
ZWkgbiA9IGJ1ZmZlcnMuc2l6ZSgpOworICAgIGNvbnN0IEdDR0xlbnVtKiBidWZzID0gYnVmZmVy
cy5kYXRhKCk7CiAgICAgaWYgKCFtX2NvbnRleHQubV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKICAg
ICAgICAgaWYgKG4gIT0gMSkgewogICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnNXRUJHTCIs
ICJtb3JlIHRoYW4gb25lIGJ1ZmZlciIpOwpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFdlYkdMRHJh
d0J1ZmZlcnM6OmRyYXdCdWZmZXJzV0VCR0woY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmZmVy
cykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBCZWNhdXNlIHRo
ZSBiYWNrYnVmZmVyIGlzIHNpbXVsYXRlZCBvbiBhbGwgY3VycmVudCBXZWJLaXQgcG9ydHMsIHdl
IG5lZWQgdG8gY2hhbmdlIEJBQ0sgdG8gQ09MT1JfQVRUQUNITUVOVDAuCi0gICAgICAgIEdDM0Rl
bnVtIHZhbHVlID0gKGJ1ZnNbMF0gPT0gR3JhcGhpY3NDb250ZXh0R0w6OkJBQ0spID8gR3JhcGhp
Y3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwIDogR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7
CisgICAgICAgIEdDR0xlbnVtIHZhbHVlID0gKGJ1ZnNbMF0gPT0gR3JhcGhpY3NDb250ZXh0R0w6
OkJBQ0spID8gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwIDogR3JhcGhpY3ND
b250ZXh0R0w6Ok5PTkU7CiAgICAgICAgIG1fY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5n
ZXRFeHRlbnNpb25zKCkuZHJhd0J1ZmZlcnNFWFQoMSwgJnZhbHVlKTsKICAgICAgICAgbV9jb250
ZXh0LnNldEJhY2tEcmF3QnVmZmVyKGJ1ZnNbMF0pOwogICAgIH0gZWxzZSB7CkBAIC03OSw4ICs3
OSw4IEBAIHZvaWQgV2ViR0xEcmF3QnVmZmVyczo6ZHJhd0J1ZmZlcnNXRUJHTChjb25zdCBWZWN0
b3I8R0MzRGVudW0+JiBidWZmZXJzKQogICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnNXRUJH
TCIsICJtb3JlIHRoYW4gbWF4IGRyYXcgYnVmZmVycyIpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIGZvciAoR0MzRHNpemVpIGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoYnVmc1tpXSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSAmJiBidWZz
W2ldICE9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1F
TlQwX0VYVCArIGkpKSB7CisgICAgICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBpIDwgbjsgKytp
KSB7CisgICAgICAgICAgICBpZiAoYnVmc1tpXSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSAm
JiBidWZzW2ldICE9IHN0YXRpY19jYXN0PEdDR0xlbnVtPihFeHRlbnNpb25zR0w6OkNPTE9SX0FU
VEFDSE1FTlQwX0VYVCArIGkpKSB7CiAgICAgICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdCdWZm
ZXJzV0VCR0wiLCAiQ09MT1JfQVRUQUNITUVOVGlfRVhUIG9yIE5PTkUiKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC05NSwxNCArOTUsMTQgQEAgYm9vbCBXZWJH
TERyYXdCdWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiB3ZWIKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCA9IHdl
YmdsQ29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpOwogCiAgICAgLy8gVGhpcyBpcyBjYWxsZWQg
YWZ0ZXIgd2UgbWFrZSBzdXJlIEdMX0VYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLgotICAg
IEdDM0RpbnQgbWF4RHJhd0J1ZmZlcnMgPSAwOwotICAgIEdDM0RpbnQgbWF4Q29sb3JBdHRhY2ht
ZW50cyA9IDA7CisgICAgR0NHTGludCBtYXhEcmF3QnVmZmVycyA9IDA7CisgICAgR0NHTGludCBt
YXhDb2xvckF0dGFjaG1lbnRzID0gMDsKICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zR0w6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbWF4RHJhd0J1ZmZlcnMpOwogICAgIGNvbnRl
eHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnNHTDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwg
Jm1heENvbG9yQXR0YWNobWVudHMpOwogICAgIGlmIChtYXhEcmF3QnVmZmVycyA8IDQgfHwgbWF4
Q29sb3JBdHRhY2htZW50cyA8IDQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFBsYXRm
b3JtM0RPYmplY3QgZmJvID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBQbGF0
Zm9ybUdMT2JqZWN0IGZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgZmJv
KTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnVmZmVyWzRdID0geyAwLCAwLCAwLCAwIH07
IC8vIHRleHR1cmVzIGFyZSByZXF1aXJlZCB0byBiZSBpbml0aWFsaXplZCBmb3Igb3RoZXIgcG9y
dHMuCkBAIC0xMTAsMjQgKzExMCwyNCBAQCBib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmll
c1dlYkdMUmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIHdlYgogICAgICAg
ICB8fCBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0FSQl9kZXB0aF90ZXh0
dXJlIik7CiAgICAgYm9vbCBzdXBwb3J0c0RlcHRoU3RlbmNpbCA9IChjb250ZXh0LT5nZXRFeHRl
bnNpb25zKCkuc3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpCiAgICAgICAg
IHx8IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIikpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgZGVwdGhTdGVuY2lsID0gMDsKKyAg
ICBQbGF0Zm9ybUdMT2JqZWN0IGRlcHRoU3RlbmNpbCA9IDA7CiAgICAgaWYgKHN1cHBvcnRzRGVw
dGhTdGVuY2lsKSB7CiAgICAgICAgIGRlcHRoU3RlbmNpbCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1
cmUoKTsKICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfMkQsIGRlcHRoU3RlbmNpbCk7CiAgICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9T
VEVOQ0lMLCAxLCAxLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCwgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84LCBidWZmZXIpOwogICAgIH0KLSAgICBQbGF0
Zm9ybTNET2JqZWN0IGRlcHRoID0gMDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGRlcHRoID0gMDsK
ICAgICBpZiAoc3VwcG9ydHNEZXB0aCkgewogICAgICAgICBkZXB0aCA9IGNvbnRleHQtPmNyZWF0
ZVRleHR1cmUoKTsKICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQsIGRlcHRoKTsKICAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NP
TVBPTkVOVCwgMSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVCwgYnVmZmVyKTsKICAgICB9CiAKLSAgICBWZWN0
b3I8UGxhdGZvcm0zRE9iamVjdD4gY29sb3JzOworICAgIFZlY3RvcjxQbGF0Zm9ybUdMT2JqZWN0
PiBjb2xvcnM7CiAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAgR0MzRGludCBtYXhBbGxvd2VkQnVm
ZmVycyA9IHN0ZDo6bWluKG1heERyYXdCdWZmZXJzLCBtYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAg
ICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBtYXhBbGxvd2VkQnVmZmVyczsgKytpKSB7Ci0gICAg
ICAgIFBsYXRmb3JtM0RPYmplY3QgY29sb3IgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Cisg
ICAgR0NHTGludCBtYXhBbGxvd2VkQnVmZmVycyA9IHN0ZDo6bWluKG1heERyYXdCdWZmZXJzLCBt
YXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICBmb3IgKEdDR0xpbnQgaSA9IDA7IGkgPCBtYXhBbGxv
d2VkQnVmZmVyczsgKytpKSB7CisgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgY29sb3IgPSBjb250
ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgICAgIGNvbG9ycy5hcHBlbmQoY29sb3IpOwogICAg
ICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwg
Y29sb3IpOwogICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgMSwgMSwgMCwgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkEsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBidWZmZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVy
cy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5oCmluZGV4
IGQ3ZTQ5ZDM0NjEwOTUzZjk5NmFhM2ZhMzUyZjM0NzM3NzhkNjkwODguLjIyY2MwMTVjMGI0YmFh
NGU5NWZlNTAzNmU1NmUyYjQyMzI1OWM2MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTERyYXdCdWZmZXJzLmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAg
RXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXdC
dWZmZXJzV0VCR0woY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmZmVycyk7CisgICAgdm9pZCBk
cmF3QnVmZmVyc1dFQkdMKGNvbnN0IFZlY3RvcjxHQ0dMZW51bT4mIGJ1ZmZlcnMpOwogCiBwcml2
YXRlOgogICAgIHN0YXRpYyBib29sIHNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5jcHAKaW5kZXggYjkzNjlmODc2NjM5Y2NmMzJiOWNiYzVmMjgzNWUyNjZh
Yjk0YzM5Yi4uYjk2N2Y4MzhlMjcxYjE1YTI2NGVmZWI3NDk3NGNhMmE0MmI5MjlmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKQEAgLTQz
LDE3ICs0MywxNyBAQCBuYW1lc3BhY2UgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgV2ViR0xS
ZW5kZXJidWZmZXJBdHRhY2htZW50KFdlYkdMUmVuZGVyYnVmZmVyKik7Ci0gICAgICAgIEdDM0Rz
aXplaSBnZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICBHQzNEc2l6ZWkgZ2V0SGVp
Z2h0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgIEdDM0RlbnVtIGdldEZvcm1hdCgpIGNvbnN0
IG92ZXJyaWRlOworICAgICAgICBHQ0dMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCBvdmVycmlkZTsK
KyAgICAgICAgR0NHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICBH
Q0dMZW51bSBnZXRGb3JtYXQoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgV2ViR0xTaGFyZWRP
YmplY3QqIGdldE9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBib29sIGlzU2hhcmVk
T2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBj
b25zdCBvdmVycmlkZTsKICAgICAgICAgdm9pZCBzZXRJbml0aWFsaXplZCgpIG92ZXJyaWRlOwog
ICAgICAgICB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKSBvdmVycmlk
ZTsKLSAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBHQzNEZW51
bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOworICAgICAgICB2
b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdDR0xlbnVtIGF0dGFjaG1lbnQp
IG92ZXJyaWRlOworICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KiwgR0NHTGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJi
dWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBAIC03MCwxNyArNzAsMTcgQEAgbmFtZXNwYWNlIHsK
ICAgICB7CiAgICAgfQogCi0gICAgR0MzRHNpemVpIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVu
dDo6Z2V0V2lkdGgoKSBjb25zdAorICAgIEdDR0xzaXplaSBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFj
aG1lbnQ6OmdldFdpZHRoKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3JlbmRlcmJ1
ZmZlci0+Z2V0V2lkdGgoKTsKICAgICB9CiAKLSAgICBHQzNEc2l6ZWkgV2ViR0xSZW5kZXJidWZm
ZXJBdHRhY2htZW50OjpnZXRIZWlnaHQoKSBjb25zdAorICAgIEdDR0xzaXplaSBXZWJHTFJlbmRl
cmJ1ZmZlckF0dGFjaG1lbnQ6OmdldEhlaWdodCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gbV9yZW5kZXJidWZmZXItPmdldEhlaWdodCgpOwogICAgIH0KIAotICAgIEdDM0RlbnVtIFdl
YkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6Z2V0Rm9ybWF0KCkgY29uc3QKKyAgICBHQ0dMZW51
bSBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OmdldEZvcm1hdCgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9yZW5kZXJidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CiAgICAg
fQpAQCAtMTE2LDEzICsxMTYsMTMgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgbV9yZW5kZXJidWZm
ZXItPm9uRGV0YWNoZWQoY29udGV4dCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1
ZmZlckF0dGFjaG1lbnQ6OmF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwg
R0MzRGVudW0gYXR0YWNobWVudCkKKyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVu
dDo6YXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBHQ0dMZW51bSBhdHRh
Y2htZW50KQogICAgIHsKLSAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QgPSBvYmplY3RP
clplcm8obV9yZW5kZXJidWZmZXIuZ2V0KCkpOworICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IG9i
amVjdCA9IG9iamVjdE9yWmVybyhtX3JlbmRlcmJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIGNvbnRl
eHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgb2JqZWN0KTsK
ICAgICB9CiAKLSAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6dW5hdHRhY2go
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCisg
ICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OnVuYXR0YWNoKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKiBjb250ZXh0LCBHQ0dMZW51bSBhdHRhY2htZW50KQogICAgIHsKICNpZiAh
VVNFKEFOR0xFKQogICAgICAgICBpZiAoYXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7CkBAIC0xMzUsNTIgKzEzNSw1MiBAQCBuYW1lc3Bh
Y2UgewogCiAgICAgY2xhc3MgV2ViR0xUZXh0dXJlQXR0YWNobWVudCA6IHB1YmxpYyBXZWJHTEZy
YW1lYnVmZmVyOjpXZWJHTEF0dGFjaG1lbnQgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFJlZjxXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEF0dGFjaG1lbnQ+IGNyZWF0ZShXZWJHTFRleHR1
cmUqLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpOworICAgICAgICBzdGF0aWMgUmVm
PFdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNobWVudD4gY3JlYXRlKFdlYkdMVGV4dHVyZSos
IEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCk7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBXZWJHTFRleHR1cmVBdHRhY2htZW50KFdlYkdMVGV4dHVyZSosIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCk7Ci0gICAgICAgIEdDM0RzaXplaSBnZXRXaWR0aCgpIGNvbnN0IG92ZXJy
aWRlOwotICAgICAgICBHQzNEc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
ICAgIEdDM0RlbnVtIGdldEZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICBXZWJHTFRl
eHR1cmVBdHRhY2htZW50KFdlYkdMVGV4dHVyZSosIEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCk7CisgICAgICAgIEdDR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRlOworICAg
ICAgICBHQ0dMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIEdDR0xl
bnVtIGdldEZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBXZWJHTFNoYXJlZE9iamVj
dCogZ2V0T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wgaXNTaGFyZWRPYmpl
Y3QoV2ViR0xTaGFyZWRPYmplY3QqKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0
IG92ZXJyaWRlOwogICAgICAgICB2b2lkIHNldEluaXRpYWxpemVkKCkgb3ZlcnJpZGU7CiAgICAg
ICAgIHZvaWQgb25EZXRhY2hlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopIG92ZXJyaWRlOwot
ICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdDM0RlbnVtIGF0
dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiwgR0MzRGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQg
YXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgR0NHTGVudW0gYXR0YWNobWVudCkgb3Zl
cnJpZGU7CisgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBH
Q0dMZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKIAogICAgICAgICBXZWJHTFRleHR1cmVBdHRh
Y2htZW50KCkgeyB9OwogCiAgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1fdGV4dHVyZTsK
LSAgICAgICAgR0MzRGVudW0gbV90YXJnZXQ7Ci0gICAgICAgIEdDM0RpbnQgbV9sZXZlbDsKKyAg
ICAgICAgR0NHTGVudW0gbV90YXJnZXQ7CisgICAgICAgIEdDR0xpbnQgbV9sZXZlbDsKICAgICB9
OwogCi0gICAgUmVmPFdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNobWVudD4gV2ViR0xUZXh0
dXJlQXR0YWNobWVudDo6Y3JlYXRlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsKQorICAgIFJlZjxXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEF0dGFj
aG1lbnQ+IFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmNyZWF0ZShXZWJHTFRleHR1cmUqIHRleHR1
cmUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQodGV4dHVyZSwgdGFyZ2V0LCBs
ZXZlbCkpOwogICAgIH0KIAotICAgIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OldlYkdMVGV4dHVy
ZUF0dGFjaG1lbnQoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwpCisgICAgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6V2ViR0xUZXh0dXJlQXR0YWNo
bWVudChXZWJHTFRleHR1cmUqIHRleHR1cmUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCkKICAgICAgICAgOiBtX3RleHR1cmUodGV4dHVyZSkKICAgICAgICAgLCBtX3RhcmdldCh0YXJn
ZXQpCiAgICAgICAgICwgbV9sZXZlbChsZXZlbCkKICAgICB7CiAgICAgfQogCi0gICAgR0MzRHNp
emVpIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmdldFdpZHRoKCkgY29uc3QKKyAgICBHQ0dMc2l6
ZWkgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6Z2V0V2lkdGgoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdGV4dHVyZS0+Z2V0V2lkdGgobV90YXJnZXQsIG1fbGV2ZWwpOwogICAgIH0K
IAotICAgIEdDM0RzaXplaSBXZWJHTFRleHR1cmVBdHRhY2htZW50OjpnZXRIZWlnaHQoKSBjb25z
dAorICAgIEdDR0xzaXplaSBXZWJHTFRleHR1cmVBdHRhY2htZW50OjpnZXRIZWlnaHQoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdGV4dHVyZS0+Z2V0SGVpZ2h0KG1fdGFyZ2V0LCBt
X2xldmVsKTsKICAgICB9CiAKLSAgICBHQzNEZW51bSBXZWJHTFRleHR1cmVBdHRhY2htZW50Ojpn
ZXRGb3JtYXQoKSBjb25zdAorICAgIEdDR0xlbnVtIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6Omdl
dEZvcm1hdCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90ZXh0dXJlLT5nZXRJbnRl
cm5hbEZvcm1hdChtX3RhcmdldCwgbV9sZXZlbCk7CiAgICAgfQpAQCAtMjE2LDEzICsyMTYsMTMg
QEAgbmFtZXNwYWNlIHsKICAgICAgICAgbV90ZXh0dXJlLT5vbkRldGFjaGVkKGNvbnRleHQpOwog
ICAgIH0KIAotICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YXR0YWNoKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBHQzNEZW51bSBhdHRhY2htZW50KQorICAgIHZvaWQg
V2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBj
b250ZXh0LCBHQ0dMZW51bSBhdHRhY2htZW50KQogICAgIHsKLSAgICAgICAgUGxhdGZvcm0zRE9i
amVjdCBvYmplY3QgPSBvYmplY3RPclplcm8obV90ZXh0dXJlLmdldCgpKTsKKyAgICAgICAgUGxh
dGZvcm1HTE9iamVjdCBvYmplY3QgPSBvYmplY3RPclplcm8obV90ZXh0dXJlLmdldCgpKTsKICAg
ICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBhdHRhY2htZW50LCBtX3RhcmdldCwgb2JqZWN0LCBtX2xldmVsKTsKICAgICB9
CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OnVuYXR0YWNoKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKiBjb250ZXh0LCBHQzNEZW51bSBhdHRhY2htZW50KQorICAgIHZvaWQgV2Vi
R0xUZXh0dXJlQXR0YWNobWVudDo6dW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNv
bnRleHQsIEdDR0xlbnVtIGF0dGFjaG1lbnQpCiAgICAgewogI2lmICFVU0UoQU5HTEUpCiAgICAg
ICAgIGlmIChhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FU
VEFDSE1FTlQpIHsKQEAgLTIzMywxMSArMjMzLDExIEBAIG5hbWVzcGFjZSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIGF0dGFjaG1lbnQsIG1fdGFyZ2V0LCAwLCBtX2xldmVsKTsKICAgICB9CiAKLSAgICBi
b29sIGlzQXR0YWNobWVudENvbXBsZXRlKFdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNobWVu
dCogYXR0YWNoZWRPYmplY3QsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIGNvbnN0IGNoYXIqKiByZWFz
b24pCisgICAgYm9vbCBpc0F0dGFjaG1lbnRDb21wbGV0ZShXZWJHTEZyYW1lYnVmZmVyOjpXZWJH
TEF0dGFjaG1lbnQqIGF0dGFjaGVkT2JqZWN0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBjb25zdCBj
aGFyKiogcmVhc29uKQogICAgIHsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0ICYmIGF0
dGFjaGVkT2JqZWN0LT5pc1ZhbGlkKCkpOwogICAgICAgICBBU1NFUlQocmVhc29uKTsKLSAgICAg
ICAgR0MzRGVudW0gZm9ybWF0ID0gYXR0YWNoZWRPYmplY3QtPmdldEZvcm1hdCgpOworICAgICAg
ICBHQ0dMZW51bSBmb3JtYXQgPSBhdHRhY2hlZE9iamVjdC0+Z2V0Rm9ybWF0KCk7CiAgICAgICAg
IHVuc2lnbmVkIG5lZWQgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2xlYXJCaXRzQnlB
dHRhY2htZW50VHlwZShhdHRhY2htZW50KTsKICAgICAgICAgdW5zaWduZWQgaGF2ZSA9IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpOwogCkBAIC0y
ODAsNyArMjgwLDcgQEAgV2ViR0xGcmFtZWJ1ZmZlcjo6fldlYkdMRnJhbWVidWZmZXIoKQogICAg
IGRlbGV0ZU9iamVjdCgwKTsKIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2ht
ZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhU
YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK3ZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0NHTGVudW0gYXR0
YWNobWVudCwgR0NHTGVudW0gdGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEdDR0xp
bnQgbGV2ZWwpCiB7CiAgICAgQVNTRVJUKGlzQm91bmQoKSk7CiAgICAgcmVtb3ZlQXR0YWNobWVu
dEZyb21Cb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQpOwpAQCAtMjkzLDcgKzI5Myw3IEBAIHZv
aWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0Mz
RGVudW0gYXR0YWNobWVudCwgR0MzCiAgICAgfQogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6
OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdl
YkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNl
dEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDR0xlbnVtIGF0dGFjaG1lbnQsIFdlYkdM
UmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7CiAgICAgQVNTRVJUKGlzQm91bmQoKSk7CiAg
ICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQpOwpAQCAt
MzA2LDcgKzMwNiw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJv
dW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgV2ViCiAgICAgfQogfQogCi12b2lk
IFdlYkdMRnJhbWVidWZmZXI6OmF0dGFjaChHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBh
dHRhY2htZW50UG9pbnQpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmF0dGFjaChHQ0dMZW51bSBh
dHRhY2htZW50LCBHQ0dMZW51bSBhdHRhY2htZW50UG9pbnQpCiB7CiAgICAgQVNTRVJUKGlzQm91
bmQoKSk7CiAgICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNobWVudE9iamVjdCA9IGdl
dEF0dGFjaG1lbnQoYXR0YWNobWVudCk7CkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBXZWJHTEZy
YW1lYnVmZmVyOjphdHRhY2goR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gYXR0YWNobWVu
dFBvaW50KQogICAgICAgICBhdHRhY2htZW50T2JqZWN0LT5hdHRhY2goY29udGV4dCgpLT5ncmFw
aGljc0NvbnRleHRHTCgpLCBhdHRhY2htZW50UG9pbnQpOwogfQogCi1XZWJHTFNoYXJlZE9iamVj
dCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudE9iamVjdChHQzNEZW51bSBhdHRhY2ht
ZW50KSBjb25zdAorV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFj
aG1lbnRPYmplY3QoR0NHTGVudW0gYXR0YWNobWVudCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVj
dCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMyMiwxMyArMzIyLDEzIEBAIFdlYkdMU2hhcmVk
T2JqZWN0KiBXZWJHTEZyYW1lYnVmZmVyOjpnZXRBdHRhY2htZW50T2JqZWN0KEdDM0RlbnVtIGF0
dGFjaG1lbnQpIGNvCiAgICAgcmV0dXJuIGF0dGFjaG1lbnRPYmplY3QgPyBhdHRhY2htZW50T2Jq
ZWN0LT5nZXRPYmplY3QoKSA6IDA7CiB9CiAKLVdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNo
bWVudCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50
KSBjb25zdAorV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2htZW50KiBXZWJHTEZyYW1lYnVm
ZmVyOjpnZXRBdHRhY2htZW50KEdDR0xlbnVtIGF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgY29u
c3QgQXR0YWNobWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmZpbmQo
YXR0YWNobWVudCk7CiAgICAgcmV0dXJuIChpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpKSA/IGl0
LT52YWx1ZS5nZXQoKSA6IDA7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0
YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQpCit2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSBhdHRhY2htZW50KQogewogICAgIEFTU0VSVChpc0JvdW5kKCkpOwogICAgIGlmICghb2Jq
ZWN0KCkpCkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoV2ViR0xTaGFyZWRPYmplY3QqIGEKICAgICAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYXR0YWNobWVudHMpIHsKICAgICAgICAgICAgIFJlZlB0
cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRPYmplY3QgPSBlbnRyeS52YWx1ZS5nZXQoKTsK
ICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0LT5pc1NoYXJlZE9iamVjdChhdHRhY2ht
ZW50KSkgewotICAgICAgICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gZW50cnku
a2V5OworICAgICAgICAgICAgICAgIEdDR0xlbnVtIGF0dGFjaG1lbnRUeXBlID0gZW50cnkua2V5
OwogICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3QtPnVuYXR0YWNoKGNvbnRleHQoKS0+
Z3JhcGhpY3NDb250ZXh0R0woKSwgYXR0YWNobWVudFR5cGUpOwogICAgICAgICAgICAgICAgIHJl
bW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50VHlwZSk7CiAgICAg
ICAgICAgICAgICAgY2hlY2tNb3JlID0gdHJ1ZTsKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJH
TFNoYXJlZE9iamVjdCogYQogICAgIH0gd2hpbGUgKGNoZWNrTW9yZSk7CiB9CiAKLUdDM0RzaXpl
aSBXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlcldpZHRoKCkgY29uc3QKK0dDR0xzaXpl
aSBXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlcldpZHRoKCkgY29uc3QKIHsKICAgICBp
ZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM5MSw3ICszOTEsNyBAQCBHQzNE
c2l6ZWkgV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJXaWR0aCgpIGNvbnN0CiAgICAg
cmV0dXJuIGF0dGFjaG1lbnQtPmdldFdpZHRoKCk7CiB9CiAKLUdDM0RzaXplaSBXZWJHTEZyYW1l
YnVmZmVyOjpnZXRDb2xvckJ1ZmZlckhlaWdodCgpIGNvbnN0CitHQ0dMc2l6ZWkgV2ViR0xGcmFt
ZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJIZWlnaHQoKSBjb25zdAogewogICAgIGlmICghb2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDAyLDcgKzQwMiw3IEBAIEdDM0RzaXplaSBXZWJH
TEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIGF0
dGFjaG1lbnQtPmdldEhlaWdodCgpOwogfQogCi1HQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpn
ZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0CitHQ0dMZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpn
ZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC00MTIsMTAgKzQxMiwxMCBAQCBHQzNEZW51bSBXZWJHTEZyYW1lYnVm
ZmVyOjpnZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0CiAgICAgcmV0dXJuIGF0dGFjaG1lbnQt
PmdldEZvcm1hdCgpOwogfQogCi1HQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1
cyhjb25zdCBjaGFyKiogcmVhc29uKSBjb25zdAorR0NHTGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6
Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioqIHJlYXNvbikgY29uc3QKIHsKICAgICB1bnNpZ25lZCBp
bnQgY291bnQgPSAwOwotICAgIEdDM0RzaXplaSB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAg
R0NHTHNpemVpIHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKICAgICBib29sIGhhdmVEZXB0aCA9IGZh
bHNlOwogICAgIGJvb2wgaGF2ZVN0ZW5jaWwgPSBmYWxzZTsKICAgICBib29sIGhhdmVEZXB0aFN0
ZW5jaWwgPSBmYWxzZTsKQEAgLTQyNyw3ICs0MjcsNyBAQCBHQzNEZW51bSBXZWJHTEZyYW1lYnVm
ZmVyOjpjaGVja1N0YXR1cyhjb25zdCBjaGFyKiogcmVhc29uKSBjb25zdAogICAgICAgICAgICAg
KnJlYXNvbiA9ICJhdHRhY2htZW50IGlzIG5vdCB2YWxpZCI7CiAgICAgICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICB9Ci0g
ICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRGb3JtYXQgPSBhdHRhY2htZW50LT5nZXRGb3JtYXQo
KTsKKyAgICAgICAgR0NHTGVudW0gYXR0YWNobWVudEZvcm1hdCA9IGF0dGFjaG1lbnQtPmdldEZv
cm1hdCgpOwogCiAgICAgICAgIC8vIEF0dGFjaGluZyBhbiBTUkdCX0VYVCBmb3JtYXQgYXR0YWNo
bWVudCB0byBhIGZyYW1lYnVmZmVyIGlzIGludmFsaWQuCiAgICAgICAgIGlmIChhdHRhY2htZW50
Rm9ybWF0ID09IEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQpCkBAIC00OTAsNyArNDkwLDcgQEAgYm9v
bCBXZWJHTEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsQnVmZmVyKCkgY29uc3QKICAgICByZXR1cm4g
YXR0YWNobWVudCAmJiBhdHRhY2htZW50LT5pc1ZhbGlkKCk7CiB9CiAKLXZvaWQgV2ViR0xGcmFt
ZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4
dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9y
bUdMT2JqZWN0IG9iamVjdCkKIHsKICAgICBmb3IgKGF1dG8mIGF0dGFjaG1lbnQgOiBtX2F0dGFj
aG1lbnRzLnZhbHVlcygpKQogICAgICAgICBhdHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRleHQz
ZCk7CkBAIC01MDEsMTAgKzUwMSwxMCBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9i
amVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdAogYm9vbCBX
ZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0YWNobWVudHMoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGczZCwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBBU1NFUlQob2JqZWN0KCkp
OwotICAgIEdDM0RiaXRmaWVsZCBtYXNrID0gMDsKKyAgICBHQ0dMYml0ZmllbGQgbWFzayA9IDA7
CiAKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9hdHRhY2htZW50cykgewotICAgICAgICBHQzNE
ZW51bSBhdHRhY2htZW50VHlwZSA9IGVudHJ5LmtleTsKKyAgICAgICAgR0NHTGVudW0gYXR0YWNo
bWVudFR5cGUgPSBlbnRyeS5rZXk7CiAgICAgICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0
dGFjaG1lbnQgPSBlbnRyeS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5p
c0luaXRpYWxpemVkKCkpCiAgICAgICAgICAgICBtYXNrIHw9IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKGF0dGFjaG1lbnRUeXBlKTsKQEAgLTUy
MywxMiArNTIzLDEyIEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1l
bnRzKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBnM2QsIGNvbnN0CiAgICAgYm9vbCBpbml0RGVw
dGggPSBtYXNrICYgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0JVRkZFUl9CSVQ7CiAgICAgYm9v
bCBpbml0U3RlbmNpbCA9IG1hc2sgJiBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJf
QklUOwogCi0gICAgR0MzRGZsb2F0IGNvbG9yQ2xlYXJWYWx1ZVtdID0gezAsIDAsIDAsIDB9LCBk
ZXB0aENsZWFyVmFsdWUgPSAwOwotICAgIEdDM0RpbnQgc3RlbmNpbENsZWFyVmFsdWUgPSAwOwot
ICAgIEdDM0Rib29sZWFuIGNvbG9yTWFza1tdID0gezAsIDAsIDAsIDB9LCBkZXB0aE1hc2sgPSAw
OwotICAgIEdDM0R1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZjsKLSAgICBHQzNEYm9vbGVh
biBpc1NjaXNzb3JFbmFibGVkID0gMDsKLSAgICBHQzNEYm9vbGVhbiBpc0RpdGhlckVuYWJsZWQg
PSAwOworICAgIEdDR0xmbG9hdCBjb2xvckNsZWFyVmFsdWVbXSA9IHswLCAwLCAwLCAwfSwgZGVw
dGhDbGVhclZhbHVlID0gMDsKKyAgICBHQ0dMaW50IHN0ZW5jaWxDbGVhclZhbHVlID0gMDsKKyAg
ICBHQ0dMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHswLCAwLCAwLCAwfSwgZGVwdGhNYXNrID0gMDsK
KyAgICBHQ0dMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7CisgICAgR0NHTGJvb2xlYW4g
aXNTY2lzc29yRW5hYmxlZCA9IDA7CisgICAgR0NHTGJvb2xlYW4gaXNEaXRoZXJFbmFibGVkID0g
MDsKICAgICBpZiAoaW5pdENvbG9yKSB7CiAgICAgICAgIGczZC0+Z2V0RmxvYXR2KEdyYXBoaWNz
Q29udGV4dEdMOjpDT0xPUl9DTEVBUl9WQUxVRSwgY29sb3JDbGVhclZhbHVlKTsKICAgICAgICAg
ZzNkLT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfV1JJVEVNQVNLLCBjb2xv
ck1hc2spOwpAQCAtNTQzLDcgKzU0Myw3IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlh
bGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBnM2QsIGNvbnN0CiAgICAg
fQogICAgIGlmIChpbml0U3RlbmNpbCkgewogICAgICAgICBnM2QtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmc3RlbmNpbENsZWFyVmFsdWUpOwot
ICAgICAgICBnM2QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1dSSVRF
TUFTSywgcmVpbnRlcnByZXRfY2FzdDxHQzNEaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAg
IGczZC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfV1JJVEVNQVNLLCBy
ZWludGVycHJldF9jYXN0PEdDR0xpbnQqPigmc3RlbmNpbE1hc2spKTsKICAgICAgICAgZzNkLT5j
bGVhclN0ZW5jaWwoMCk7CiAgICAgICAgIGczZC0+c3RlbmNpbE1hc2soMHhmZmZmZmZmZik7CiAg
ICAgfQpAQCAtNTc2LDkgKzU3Niw5IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6
ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBnM2QsIGNvbnN0CiAgICAgICAg
IGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHRHTDo6RElUSEVSKTsKIAogICAgIGZvciAoQXR0
YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1f
YXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5
cGUgPSBpdC0+a2V5OworICAgICAgICBHQ0dMZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7
CiAgICAgICAgIGF1dG8gYXR0YWNobWVudCA9IGl0LT52YWx1ZTsKLSAgICAgICAgR0MzRGJpdGZp
ZWxkIGJpdHMgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2ht
ZW50VHlwZShhdHRhY2htZW50VHlwZSk7CisgICAgICAgIEdDR0xiaXRmaWVsZCBiaXRzID0gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNo
bWVudFR5cGUpOwogICAgICAgICBpZiAoYml0cyAmIG1hc2spCiAgICAgICAgICAgICBhdHRhY2ht
ZW50LT5zZXRJbml0aWFsaXplZCgpOwogICAgIH0KQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIFdl
YkdMRnJhbWVidWZmZXI6OmlzQm91bmQoKSBjb25zdAogICAgIHJldHVybiAoY29udGV4dCgpLT5t
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSA9PSB0aGlzKSB8fCAoY29udGV4dCgpLT5tX3JlYWRG
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkgPT0gdGhpcyk7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1
ZmZlcjo6ZHJhd0J1ZmZlcnMoY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmcykKK3ZvaWQgV2Vi
R0xGcmFtZWJ1ZmZlcjo6ZHJhd0J1ZmZlcnMoY29uc3QgVmVjdG9yPEdDR0xlbnVtPiYgYnVmcykK
IHsKICAgICBtX2RyYXdCdWZmZXJzID0gYnVmczsKICAgICBtX2ZpbHRlcmVkRHJhd0J1ZmZlcnMu
cmVzaXplKG1fZHJhd0J1ZmZlcnMuc2l6ZSgpKTsKQEAgLTYyOSw3ICs2MjksNyBAQCB2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OmRyYXdCdWZmZXJzSWZOZWNlc3NhcnkoYm9vbCBmb3JjZSkKICAgICB9
CiB9CiAKLUdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXIoR0MzRGVudW0g
ZHJhd0J1ZmZlcikKK0dDR0xlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXIoR0NH
TGVudW0gZHJhd0J1ZmZlcikKIHsKICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRy
YXdCdWZmZXIgLSBFeHRlbnNpb25zR0w6OkRSQVdfQlVGRkVSMF9FWFQpOwogICAgIEFTU0VSVChp
bmRleCA+PSAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuaAppbmRleCA4YjRiOTVhYmM5NTMxZGI3OWUzMjVkMzVlY2I2ZGM2ZWMwNzVjODZmLi5iMGFl
ZWI2YmVkMjc4YzVhY2Q0NGQ4OTFhYTNjMDgyYjBkNmRiZjQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCkBAIC00NCwxNyArNDQsMTcgQEAgcHVi
bGljOgogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+V2ViR0xBdHRhY2htZW50KCk7CiAK
LSAgICAgICAgdmlydHVhbCBHQzNEc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgR0MzRHNpemVpIGdldEhlaWdodCgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVh
bCBHQzNEZW51bSBnZXRGb3JtYXQoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgR0NHTHNp
emVpIGdldFdpZHRoKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEdDR0xzaXplaSBnZXRI
ZWlnaHQoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgR0NHTGVudW0gZ2V0Rm9ybWF0KCkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIFdlYkdMU2hhcmVkT2JqZWN0KiBnZXRPYmplY3Qo
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NoYXJlZE9iamVjdChXZWJHTFNo
YXJlZE9iamVjdCopIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBj
b25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3QgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5pdGlhbGl6ZWQoKSA9IDA7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKikgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgR0MzRGVu
dW0gYXR0YWNobWVudCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqLCBHQzNEZW51bSBhdHRhY2htZW50KSA9IDA7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBHQ0dMZW51bSBhdHRh
Y2htZW50KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCosIEdDR0xlbnVtIGF0dGFjaG1lbnQpID0gMDsKIAogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgV2ViR0xBdHRhY2htZW50KCk7CkBAIC02NCwxNyArNjQsMTcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIFJlZjxXZWJHTEZyYW1lYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSYpOwogCi0gICAgdm9pZCBzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFdlYkdMVGV4dHVyZSos
IEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQgc2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZm
ZXIoR0MzRGVudW0gYXR0YWNobWVudCwgV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICB2b2lkIHNl
dEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xl
bnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0NHTGludCBsZXZlbCk7CisgICAgdm9pZCBz
ZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSBhdHRhY2htZW50LCBXZWJH
TFJlbmRlcmJ1ZmZlciopOwogICAgIC8vIElmIGFuIG9iamVjdCBpcyBhdHRhY2hlZCB0byB0aGUg
Y3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCByZW1vdmUgaXQuCiAgICAgdm9pZCByZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoV2ViR0xTaGFyZWRPYmplY3QqKTsKICAgICAv
LyBJZiBhIGdpdmVuIGF0dGFjaG1lbnQgcG9pbnQgZm9yIHRoZSBjdXJyZW50bHkgYm91bmQgZnJh
bWVidWZmZXIgaXMgbm90IG51bGwsIHJlbW92ZSB0aGUgYXR0YWNoZWQgb2JqZWN0LgotICAgIHZv
aWQgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtKTsKLSAgICBX
ZWJHTFNoYXJlZE9iamVjdCogZ2V0QXR0YWNobWVudE9iamVjdChHQzNEZW51bSkgY29uc3Q7Cisg
ICAgdm9pZCByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR0NHTGVudW0pOwor
ICAgIFdlYkdMU2hhcmVkT2JqZWN0KiBnZXRBdHRhY2htZW50T2JqZWN0KEdDR0xlbnVtKSBjb25z
dDsKIAotICAgIEdDM0RlbnVtIGdldENvbG9yQnVmZmVyRm9ybWF0KCkgY29uc3Q7Ci0gICAgR0Mz
RHNpemVpIGdldENvbG9yQnVmZmVyV2lkdGgoKSBjb25zdDsKLSAgICBHQzNEc2l6ZWkgZ2V0Q29s
b3JCdWZmZXJIZWlnaHQoKSBjb25zdDsKKyAgICBHQ0dMZW51bSBnZXRDb2xvckJ1ZmZlckZvcm1h
dCgpIGNvbnN0OworICAgIEdDR0xzaXplaSBnZXRDb2xvckJ1ZmZlcldpZHRoKCkgY29uc3Q7Cisg
ICAgR0NHTHNpemVpIGdldENvbG9yQnVmZmVySGVpZ2h0KCkgY29uc3Q7CiAKICAgICAvLyBUaGlz
IHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBkcmF3QXJyYXksIGRyYXdFbGVtZW50cywg
Y2xlYXIsCiAgICAgLy8gcmVhZFBpeGVscywgY29weVRleEltYWdlMkQsIGNvcHlUZXhTdWJJbWFn
ZTJEIGlmIHRoaXMgZnJhbWVidWZmZXIgaXMKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAg
IC8vIEZSQU1FQlVGRkVSX0NPTVBMRVRFIGlzIHJldHVybmVkLCBpdCBpcyBzdGlsbCBwb3NzaWJs
ZSBmb3IKICAgICAvLyBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoKSB0byByZXR1cm4gRlJBTUVC
VUZGRVJfVU5TVVBQT1JURUQsCiAgICAgLy8gZGVwZW5kaW5nIG9uIGhhcmR3YXJlIGltcGxlbWVu
dGF0aW9uLgotICAgIEdDM0RlbnVtIGNoZWNrU3RhdHVzKGNvbnN0IGNoYXIqKiByZWFzb24pIGNv
bnN0OworICAgIEdDR0xlbnVtIGNoZWNrU3RhdHVzKGNvbnN0IGNoYXIqKiByZWFzb24pIGNvbnN0
OwogCiAgICAgYm9vbCBoYXNFdmVyQmVlbkJvdW5kKCkgY29uc3QgeyByZXR1cm4gb2JqZWN0KCkg
JiYgbV9oYXNFdmVyQmVlbkJvdW5kOyB9CiAKQEAgLTk3LDE3ICs5NywxNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNTdGVuY2lsQnVmZmVyKCkgY29uc3Q7CiAKICAgICAvLyBXcmFwcGVyIGZvciBk
cmF3QnVmZmVyc0VYVC9kcmF3QnVmZmVyc0FSQiB0byB3b3JrIGFyb3VuZCBhIGRyaXZlciBidWcu
Ci0gICAgdm9pZCBkcmF3QnVmZmVycyhjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZzKTsKKyAg
ICB2b2lkIGRyYXdCdWZmZXJzKGNvbnN0IFZlY3RvcjxHQ0dMZW51bT4mIGJ1ZnMpOwogCi0gICAg
R0MzRGVudW0gZ2V0RHJhd0J1ZmZlcihHQzNEZW51bSk7CisgICAgR0NHTGVudW0gZ2V0RHJhd0J1
ZmZlcihHQ0dMZW51bSk7CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZv
aWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtR0xP
YmplY3QpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFdlYkdMQXR0YWNobWVudCogZ2V0QXR0
YWNobWVudChHQzNEZW51bSkgY29uc3Q7CisgICAgV2ViR0xBdHRhY2htZW50KiBnZXRBdHRhY2ht
ZW50KEdDR0xlbnVtKSBjb25zdDsKIAogICAgIC8vIFJldHVybiBmYWxzZSBpZiBmcmFtZWJ1ZmZl
ciBpcyBpbmNvbXBsZXRlLgogICAgIGJvb2wgaW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKiwgY29uc3QgY2hhcioqIHJlYXNvbik7CkBAIC0xMTYsMTkgKzExNiwx
OSBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNCb3VuZCgpIGNvbnN0OwogCiAgICAgLy8gYXR0YWNo
ICdhdHRhY2htZW50JyBhdCAnYXR0YWNobWVudFBvaW50Jy4KLSAgICB2b2lkIGF0dGFjaChHQzNE
ZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBhdHRhY2htZW50UG9pbnQpOworICAgIHZvaWQgYXR0
YWNoKEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIGF0dGFjaG1lbnRQb2ludCk7CiAKICAg
ICAvLyBDaGVjayBpZiBhIG5ldyBkcmF3QnVmZmVycyBjYWxsIHNob3VsZCBiZSBpc3N1ZWQuIFRo
aXMgaXMgY2FsbGVkIHdoZW4gd2UgYWRkIG9yIHJlbW92ZSBhbiBhdHRhY2htZW50LgogICAgIHZv
aWQgZHJhd0J1ZmZlcnNJZk5lY2Vzc2FyeShib29sIGZvcmNlKTsKIAotICAgIHR5cGVkZWYgV1RG
OjpIYXNoTWFwPEdDM0RlbnVtLCBSZWZQdHI8V2ViR0xBdHRhY2htZW50Pj4gQXR0YWNobWVudE1h
cDsKKyAgICB0eXBlZGVmIFdURjo6SGFzaE1hcDxHQ0dMZW51bSwgUmVmUHRyPFdlYkdMQXR0YWNo
bWVudD4+IEF0dGFjaG1lbnRNYXA7CiAKICAgICBBdHRhY2htZW50TWFwIG1fYXR0YWNobWVudHM7
CiAKICAgICBib29sIG1faGFzRXZlckJlZW5Cb3VuZDsKIAotICAgIFZlY3RvcjxHQzNEZW51bT4g
bV9kcmF3QnVmZmVyczsKLSAgICBWZWN0b3I8R0MzRGVudW0+IG1fZmlsdGVyZWREcmF3QnVmZmVy
czsKKyAgICBWZWN0b3I8R0NHTGVudW0+IG1fZHJhd0J1ZmZlcnM7CisgICAgVmVjdG9yPEdDR0xl
bnVtPiBtX2ZpbHRlcmVkRHJhd0J1ZmZlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKaW5kZXggYWYyODQ5
Y2Q4OTgzYWRhNzdiYjljZDM0NWIyMzhkZWExNjFiNmJlZS4uNTRjOTg3YWFhZjZkYTVhZmZmYjgx
MzEwYTNjODI0NzczNzVlNmQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
T2JqZWN0LmNwcApAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgV2ViR0xPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQg
V2ViR0xPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9ybUdMT2JqZWN0IG9iamVjdCkKIHsKICAgICBB
U1NFUlQoIW1fb2JqZWN0KTsKICAgICBBU1NFUlQoIW1fZGVsZXRlZCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaAppbmRleCA0OTI0ZmY4YTE4ZjVkMmNjMjEyM2MwZTlh
Zjg0MThjM2RiYTIzOGRhLi44MzgwODMxYjM1MDVjYmVhMzRiZTc1OWEzOGUwZjllZGMwOTdlZjll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgKQEAgLTI3LDcgKzI3
LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgV2ViR0xP
YmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHTE9iamVjdD4gewogcHVibGljOgogICAgIHZp
cnR1YWwgfldlYkdMT2JqZWN0KCkgPSBkZWZhdWx0OwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCBv
YmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIFBsYXRmb3JtR0xPYmplY3Qg
b2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KIAogICAgIC8vIGRlbGV0ZU9iamVj
dCBtYXkgbm90IGFsd2F5cyBkZWxldGUgdGhlIE9wZW5HTCByZXNvdXJjZS4gIEZvciBwcm9ncmFt
cyBhbmQKICAgICAvLyBzaGFkZXJzLCBkZWxldGlvbiBpcyBkZWxheWVkIHVudGlsIHRoZXkgYXJl
IG5vIGxvbmdlciBhdHRhY2hlZC4KQEAgLTYyLDEwICs2MiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAg
V2ViR0xPYmplY3QoKSA9IGRlZmF1bHQ7CiAKICAgICAvLyBzZXRPYmplY3Qgc2hvdWxkIGJlIG9u
bHkgY2FsbGVkIG9uY2UgcmlnaHQgYWZ0ZXIgY3JlYXRpbmcgYSBXZWJHTE9iamVjdC4KLSAgICB2
b2lkIHNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIHNldE9iamVjdChQbGF0
Zm9ybUdMT2JqZWN0KTsKIAogICAgIC8vIGRlbGV0ZU9iamVjdEltcGwgc2hvdWxkIGJlIG9ubHkg
Y2FsbGVkIG9uY2UgdG8gZGVsZXRlIHRoZSBPcGVuR0wgcmVzb3VyY2UuCi0gICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNE
T2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybUdMT2JqZWN0KSA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaGFzR3JvdXBPckNvbnRleHQoKSBjb25zdCA9IDA7CiAKQEAgLTc0LDEyICs3NCwxMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogZ2V0QUdyYXBo
aWNzQ29udGV4dEdMKCkgY29uc3QgPSAwOwogCiBwcml2YXRlOgotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9vYmplY3QgeyAwIH07CisgICAgUGxhdGZvcm1HTE9iamVjdCBtX29iamVjdCB7IDAgfTsK
ICAgICB1bnNpZ25lZCBtX2F0dGFjaG1lbnRDb3VudCB7IDAgfTsKICAgICBib29sIG1fZGVsZXRl
ZCB7IGZhbHNlIH07CiB9OwogCi1pbmxpbmUgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8o
V2ViR0xPYmplY3QqIG9iamVjdCkKK2lubGluZSBQbGF0Zm9ybUdMT2JqZWN0IG9iamVjdE9yWmVy
byhXZWJHTE9iamVjdCogb2JqZWN0KQogewogICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9i
amVjdCgpIDogMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCmluZGV4IDNlZmVmZmJhMTAzYTdhOWZmMGUyMWEzZTE2ZjZhZGNjZDQ3NzM4ZmMuLjE2ODFk
N2YyMDVhMzAyZGM2MzY1ZGE4OGUxYjM4YTcyMGJiMWQ3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFdlYkdM
UHJvZ3JhbTo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2
ZXI6OmNvbnRleHREZXN0cm95ZWQoKTsKIH0KIAotdm9pZCBXZWJHTFByb2dyYW06OmRlbGV0ZU9i
amVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9i
amVjdCBvYmopCit2b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybUdMT2JqZWN0IG9iaikKIHsKICAgICBj
b250ZXh0M2QtPmRlbGV0ZVByb2dyYW0ob2JqKTsKICAgICBpZiAobV92ZXJ0ZXhTaGFkZXIpIHsK
QEAgLTExMiw3ICsxMTIsNyBAQCB1bnNpZ25lZCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJp
YkxvY2F0aW9ucygpCiAgICAgcmV0dXJuIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zLnNpemUoKTsK
IH0KIAotR0MzRGludCBXZWJHTFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKEdDM0R1
aW50IGluZGV4KQorR0NHTGludCBXZWJHTFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9u
KEdDR0x1aW50IGluZGV4KQogewogICAgIGNhY2hlSW5mb0lmTmVlZGVkKCk7CiAgICAgaWYgKGlu
ZGV4ID49IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpKQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZv
aWQgV2ViR0xQcm9ncmFtOjppbmNyZWFzZUxpbmtDb3VudCgpCiAgICAgbV9pbmZvVmFsaWQgPSBm
YWxzZTsKIH0KIAotV2ViR0xTaGFkZXIqIFdlYkdMUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXIo
R0MzRGVudW0gdHlwZSkKK1dlYkdMU2hhZGVyKiBXZWJHTFByb2dyYW06OmdldEF0dGFjaGVkU2hh
ZGVyKEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VkVSVEVYX1NIQURFUjoKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIFdl
YkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQzZAogewogICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zLmNsZWFyKCk7
CiAKLSAgICBHQzNEaW50IG51bUF0dHJpYnMgPSAwOworICAgIEdDR0xpbnQgbnVtQXR0cmlicyA9
IDA7CiAgICAgY29udGV4dDNkLT5nZXRQcm9ncmFtaXYob2JqZWN0KCksIEdyYXBoaWNzQ29udGV4
dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywgJm51bUF0dHJpYnMpOwogICAgIG1fYWN0aXZlQXR0cmli
TG9jYXRpb25zLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KG51bUF0dHJpYnMpKTsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUF0dHJpYnM7ICsraSkgewpAQCAtMjI1LDcgKzIyNSw3IEBA
IHZvaWQgV2ViR0xQcm9ncmFtOjpjYWNoZUluZm9JZk5lZWRlZCgpCiAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQgPSBnZXRBR3JhcGhpY3NDb250ZXh0R0woKTsKICAgICBpZiAo
IWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSAgICBHQzNEaW50IGxpbmtTdGF0dXMgPSAwOwor
ICAgIEdDR0xpbnQgbGlua1N0YXR1cyA9IDA7CiAgICAgY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9i
amVjdCgpLCBHcmFwaGljc0NvbnRleHRHTDo6TElOS19TVEFUVVMsICZsaW5rU3RhdHVzKTsKICAg
ICBtX2xpbmtTdGF0dXMgPSBsaW5rU3RhdHVzOwogICAgIGlmIChtX2xpbmtTdGF0dXMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCmluZGV4IDg5YjQ2MGMwNjcwZjJl
ZWI1OGE0NDgzNDc1ZmJhMTA2OTQ1NjhjN2EuLjhjOGFkMjgzMTM0MTNiMDgxOTJjNGZlMjRjNWVj
MmUzZDZiMzFkNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5o
CkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKSBm
aW5hbDsKIAogICAgIHVuc2lnbmVkIG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAgIEdD
M0RpbnQgZ2V0QWN0aXZlQXR0cmliTG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpOworICAgIEdDR0xp
bnQgZ2V0QWN0aXZlQXR0cmliTG9jYXRpb24oR0NHTHVpbnQgaW5kZXgpOwogCiAgICAgYm9vbCBp
c1VzaW5nVmVydGV4QXR0cmliMCgpOwogCkBAIC02NiwyMiArNjYsMjIgQEAgcHVibGljOgogICAg
IC8vIEFsc28sIHdlIGludmFsaWRhdGUgdGhlIGNhY2hlZCBwcm9ncmFtIGluZm8uCiAgICAgdm9p
ZCBpbmNyZWFzZUxpbmtDb3VudCgpOwogCi0gICAgV2ViR0xTaGFkZXIqIGdldEF0dGFjaGVkU2hh
ZGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTFNoYWRlciogZ2V0QXR0YWNoZWRTaGFkZXIoR0NHTGVu
dW0pOwogICAgIGJvb2wgYXR0YWNoU2hhZGVyKFdlYkdMU2hhZGVyKik7CiAgICAgYm9vbCBkZXRh
Y2hTaGFkZXIoV2ViR0xTaGFkZXIqKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYkdMUHJvZ3JhbShX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9y
bUdMT2JqZWN0KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGNhY2hlQWN0aXZlQXR0
cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKik7CiAgICAgdm9pZCBjYWNoZUlu
Zm9JZk5lZWRlZCgpOwogCi0gICAgVmVjdG9yPEdDM0RpbnQ+IG1fYWN0aXZlQXR0cmliTG9jYXRp
b25zOworICAgIFZlY3RvcjxHQ0dMaW50PiBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uczsKIAotICAg
IEdDM0RpbnQgbV9saW5rU3RhdHVzIHsgMCB9OworICAgIEdDR0xpbnQgbV9saW5rU3RhdHVzIHsg
MCB9OwogCiAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgYSBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBiZWxvbmdzIHRvIHRoaXMgcHJvZ3JhbSBvciBub3QuCiAgICAgdW5zaWduZWQg
bV9saW5rQ291bnQgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnku
Y3BwCmluZGV4IGNiNjQ0NTIyMjczNDY1MDU3MmNiYjU2MDMzMzdiOWYyZjQ1ZDk2NmIuLjAxZGRl
N2Y3ZjRlYzJlNWE1NjRhMmI2OGQ1OTFiZjY3NDc4OGYwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUXVlcnkuY3BwCkBAIC00OSw3ICs0OSw3IEBAIFdlYkdMUXVlcnk6Oldl
YkdMUXVlcnkoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogICAgIC8vIEZJWE1FOiBD
YWxsIGNyZWF0ZVF1ZXJ5IGZyb20gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiB9CiAKLXZvaWQg
V2ViR0xRdWVyeTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29u
dGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xRdWVyeTo6ZGVsZXRl
T2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybUdM
T2JqZWN0IG9iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dDNkKTsKICAgICBVTlVT
RURfUEFSQU0ob2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuaApp
bmRleCAwODdjMDQxMWY5NjM5YjMyMTJhODg1NjY1MmFiYTFhYjEyYzUxM2NhLi41NTZkMzk5ZGUz
Y2EwZWUwOTQ3MjYwM2MwODk5ODczMGNmNTU3ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFF1ZXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xRdWVyeS5oCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IFdlYkdMUXVlcnkoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwotICAg
IHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3Jt
M0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCosIFBsYXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuY3BwCmluZGV4IDA2ZWUwN2I1NzNmZjU3NmNmY2FjNDQ3MzhhM2Y2Y2M1YzI0
Mzg4NDMuLmE1ZGMxNjQ0M2NlOGE0MzI4MjlmMTU2MTViNzBiMTk0YzRmZDJlMTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKQEAgLTU2
LDcgKzU2LDcgQEAgV2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4
dEdMKCktPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmJ1ZmZl
cjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQ
bGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xSZW5kZXJidWZmZXI6OmRlbGV0ZU9i
amVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm1HTE9i
amVjdCBvYmplY3QpCiB7CiAgICAgY29udGV4dDNkLT5kZWxldGVSZW5kZXJidWZmZXIob2JqZWN0
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
YnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5o
CmluZGV4IGMyODAyN2U2ZmUzNzg3NmMwY2Y5ZDQxN2JkNjRjMmVkY2M5OTM5OTEuLjMxZTkxMDI3
OTIzZTI2ODQxNGY5MmNjYzg3ZTgxZWVkMjRjNDFmY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaApAQCAtMzcsMjAgKzM3LDIwIEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBSZWY8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIHNldEludGVybmFsRm9ybWF0KEdDM0RlbnVt
IGludGVybmFsZm9ybWF0KQorICAgIHZvaWQgc2V0SW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQpCiAgICAgewogICAgICAgICBtX2ludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxm
b3JtYXQ7CiAgICAgICAgIG1faW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICB9Ci0gICAgR0MzRGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsRm9ybWF0OyB9
CisgICAgR0NHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2ludGVy
bmFsRm9ybWF0OyB9CiAKLSAgICB2b2lkIHNldFNpemUoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQorICAgIHZvaWQgc2V0U2l6ZShHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCiAgICAgewogICAgICAgICBtX3dpZHRoID0gd2lkdGg7CiAgICAgICAgIG1faGVpZ2h0
ID0gaGVpZ2h0OwogICAgIH0KLSAgICBHQzNEc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9Ci0gICAgR0MzRHNpemVpIGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGVpZ2h0OyB9CisgICAgR0NHTHNpemVpIGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aDsgfQorICAgIEdDR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsg
fQogCiAgICAgdm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNWYWxpZCkgeyBtX2lzVmFsaWQgPSBpc1Zh
bGlkOyB9CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CkBA
IC02NSwxNCArNjUsMTQgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMUmVuZGVyYnVm
ZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0
SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OworICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBs
YXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNSZW5kZXJi
dWZmZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBHQzNEZW51bSBt
X2ludGVybmFsRm9ybWF0OworICAgIEdDR0xlbnVtIG1faW50ZXJuYWxGb3JtYXQ7CiAgICAgYm9v
bCBtX2luaXRpYWxpemVkOwotICAgIEdDM0RzaXplaSBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBH
Q0dMc2l6ZWkgbV93aWR0aCwgbV9oZWlnaHQ7CiAgICAgYm9vbCBtX2lzVmFsaWQ7IC8vIFRoaXMg
aXMgb25seSBmYWxzZSBpZiBpbnRlcm5hbEZvcm1hdCBpcyBERVBUSF9TVEVOQ0lMIGFuZCBwYWNr
ZWRfZGVwdGhfc3RlbmNpbCBpcyBub3Qgc3VwcG9ydGVkLgogCiAgICAgYm9vbCBtX2hhc0V2ZXJC
ZWVuQm91bmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAppbmRleCAyODQzZDQ2MTZhZjFlMjU0MWJiMWVmMTczNjc5MTM0MWYy
N2YzNmQ1Li43NTg1MGRkMThiZTRlZTA3MjQwYzY5YTgyNWY3YTVjYTY0ZmMzY2NhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKQEAgLTI0NSw3ICsyNDUsNyBAQCBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCkKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1XZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHBuYW1lKQorV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2ht
ZW50LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtMjc0LDcgKzI3NCw3IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdlCiAgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVS
RV9MRVZFTDoKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CiAgICAgICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewotICAgICAgICAg
ICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgICAgICAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAg
ICAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYo
dGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICAgICAgfQpAQCAtMjk1LDcgKzI5NSw3IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRh
cmdlCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QuZ2V0KCkpOwotICAgICAgICAgICAg
R0MzRGVudW0gcmVuZGVyQnVmZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZv
cm1hdCgpOworICAgICAgICAgICAgR0NHTGVudW0gcmVuZGVyQnVmZmVyRm9ybWF0ID0gcmVuZGVy
QnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwogICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJ1
ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zR0w6OlNSR0JfRVhUICYmIHJlbmRlckJ1ZmZlckZvcm1h
dCAhPSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUKTsKICAgICAgICAgICAgIGlmIChyZW5k
ZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uc0dMOjpTUkdCOF9BTFBIQThfRVhUKQogICAgICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRXh0ZW5zaW9uc0dMOjpTUkdC
X0VYVCk7CkBAIC0zMDgsNyArMzA4LDcgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2UKICAgICB9
CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVu
Y1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVG
cmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KQogewogICAgIGlmICh0YXJnZXQgIT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGFyZ2V0Iik7CkBAIC0zMjUsMTQgKzMyNSwxNCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aQog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKICAgICAgICAgICAg
ICYmIGF0dGFjaG1lbnQgPj0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwCi0g
ICAgICAgICAgICAmJiBhdHRhY2htZW50IDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNz
Q29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkp
CisgICAgICAgICAgICAmJiBhdHRhY2htZW50IDwgc3RhdGljX2Nhc3Q8R0NHTGVudW0+KEdyYXBo
aWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGdldE1heENvbG9yQXR0YWNobWVudHMo
KSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBh
dHRhY2htZW50Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAgICAgCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50
ZXJuCiAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzk3
LDcgKzM5Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gbW9kZSkKICAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBtb2RlKTsK
IH0KICAgICAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQg
bWFzaykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQ0dMYml0ZmllbGQgbWFz
aykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47
CkBAIC00MTUsNyArNDE1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyKEdD
M0RiaXRmaWVsZCBtYXNrKQogICAgIG1hcmtDb250ZXh0Q2hhbmdlZEFuZE5vdGlmeUNhbnZhc09i
c2VydmVyKCk7CiB9CiAKLVdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQorV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQ
YXJhbWV0ZXIoR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NDksOCArNjQ5LDggQEAgV2ViR0xB
bnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycwogICAgICAgICAgICAg
JiYgcG5hbWUgPj0gRXh0ZW5zaW9uc0dMOjpEUkFXX0JVRkZFUjBfRVhUCi0gICAgICAgICAgICAm
JiBwbmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zR0w6OkRSQVdfQlVGRkVS
MF9FWFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkgewotICAgICAgICAgICAgR0MzRGludCB2YWx1
ZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOworICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0
aWNfY2FzdDxHQ0dMZW51bT4oRXh0ZW5zaW9uc0dMOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4
RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAgICAgICAgIEdDR0xpbnQgdmFsdWUgPSBHcmFwaGljc0Nv
bnRleHRHTDo6Tk9ORTsKICAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVy
KHBuYW1lKTsKICAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgpAQCAtNjYy
LDcgKzY2Miw3IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVy
KEdDM0RlbnVtIHBuYW1lKQogICAgIH0KIH0KIAotR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldE1heERyYXdCdWZmZXJzKCkKK0dDR0xpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRNYXhEcmF3QnVmZmVycygpCiB7CiAgICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtNjc0LDcgKzY3NCw3IEBAIEdDM0RpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycygpCiAgICAgcmV0dXJuIHN0ZDo6bWluKG1fbWF4
RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7CiB9CiAKLUdDM0RpbnQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKK0dDR0xpbnQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKIHsKICAgICBpZiAoIXN1
cHBvcnRzRHJhd0J1ZmZlcnMoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02ODMsNyArNjgzLDcg
QEAgR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMo
KQogICAgIHJldHVybiBtX21heENvbG9yQXR0YWNobWVudHM7CiB9CiAgICAgCi1ib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVt
IHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQ0dMZW51bSB0eXBlLCB1
bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKIHsKICAgICAvLyBQZXJmb3JtcyBjb25zZXJ2
YXRpdmUgdmFsaWRhdGlvbiBieSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgogICAgIC8vIHRo
ZSBnaXZlbiB0eXBlIHBlciBlbGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3Vu
ZApAQCAtNjk2LDcgKzY5Niw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduCiAgICAgaWYgKCFl
bGVtZW50QXJyYXlCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBHQzNE
c2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsK
KyAgICBHQ0dMc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVM
ZW5ndGgoKTsKICAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBpcyBhbHJlYWR5IGRlYWx0IHdpdGgg
aW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUuCiAg
ICAgaWYgKCFudW1FbGVtZW50cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzA4LDI0ICs3
MDgsMjQgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNv
bnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ24KICAgICAgICAgLy8gQ29tcHV0ZSB0aGUg
bWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5cGUgb2Yg
aW5kZXguCiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9CWVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAg
PSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAg
ICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCisgICAg
ICAgICAgICBjb25zdCBHQ0dMdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQ0dMdWJ5dGUq
PihidWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDR0xzaXplaXB0ciBpID0gMDsg
aSA8IG51bUVsZW1lbnRzOyBpKyspCiAgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBtYXhJbmRl
eCA/IHN0ZDo6bWF4KG1heEluZGV4LnZhbHVlKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwW2ld
KSkgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocFtpXSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDog
ewotICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAg
ICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQq
PihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsg
aSA8IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAgICAgICBudW1FbGVtZW50cyAvPSBzaXplb2Yo
R0NHTHVzaG9ydCk7CisgICAgICAgICAgICBjb25zdCBHQ0dMdXNob3J0KiBwID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0NHTHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAo
R0NHTHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKICAgICAgICAgICAgICAg
ICBtYXhJbmRleCA9IG1heEluZGV4ID8gc3RkOjptYXgobWF4SW5kZXgudmFsdWUoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHBbaV0pKSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwW2ldKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0lOVDogewogICAgICAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVp
bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbnVtRWxlbWVu
dHMgLz0gc2l6ZW9mKEdDM0R1aW50KTsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAg
ICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAg
ICAgICBudW1FbGVtZW50cyAvPSBzaXplb2YoR0NHTHVpbnQpOworICAgICAgICAgICAgY29uc3Qg
R0NHTHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQ0dMdWludCo+KGJ1ZmZlci0+ZGF0YSgp
KTsKKyAgICAgICAgICAgIGZvciAoR0NHTHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7
IGkrKykKICAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heEluZGV4ID8gc3RkOjptYXgobWF4
SW5kZXgudmFsdWUoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBbaV0pKSA6IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihwW2ldKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03NDgs
NyArNzQ4LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJh
eUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ24KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0NHTGVudW0gbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpGVU5DX0FERDoKQEAgLTc2OCw3ICs3NjgsNyBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRAogICAgIH0KIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
Q2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQ0dMZW51bSBjYXApCiB7CiAgICAgc3dpdGNoIChjYXApIHsKICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggZThlMzY4ODgyOGI2ZjUwYmNkYmIw
NTZkOTMwMGExNDMyZjgwMTg0OC4uMzU1MGM0MDIzMDQxZTdjOGRmMjUxZjliNGI2ZmJkOWFmYjZi
MzFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgKQEAgLTQxLDIxICs0MSwyMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1dlYkdM
MSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFdlYkdMRXh0ZW5zaW9uKiBn
ZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJikgZmluYWw7Ci0gICAgV2ViR0xBbnkgZ2V0UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKSBmaW5hbDsKKyAgICBXZWJHTEFueSBnZXRQYXJhbWV0ZXIoR0NH
TGVudW0gcG5hbWUpIGZpbmFsOwogICAgIE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBnZXRTdXBw
b3J0ZWRFeHRlbnNpb25zKCkgZmluYWw7CiAKLSAgICBXZWJHTEFueSBnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBH
QzNEZW51bSBwbmFtZSkgZmluYWw7Ci0gICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkgZmluYWw7Ci0gICAgYm9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1Bh
cmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIGF0dGFjaG1lbnQpIGZpbmFsOwotICAgIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIG1vZGUpIGZpbmFsOwotICAgIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spIGZp
bmFsOworICAgIFdlYkdMQW55IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsK
KyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBmaW5hbDsK
KyAgICBib29sIHZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCkgZmluYWw7
CisgICAgdm9pZCBoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkgZmluYWw7Cisg
ICAgdm9pZCBjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykgZmluYWw7CiAKLSAgICBHQzNEaW50IGdl
dE1heERyYXdCdWZmZXJzKCkgZmluYWw7Ci0gICAgR0MzRGludCBnZXRNYXhDb2xvckF0dGFjaG1l
bnRzKCkgZmluYWw7CisgICAgR0NHTGludCBnZXRNYXhEcmF3QnVmZmVycygpIGZpbmFsOworICAg
IEdDR0xpbnQgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpIGZpbmFsOwogICAgIHZvaWQgaW5pdGlh
bGl6ZVZlcnRleEFycmF5T2JqZWN0cygpIGZpbmFsOwotICAgIGJvb2wgdmFsaWRhdGVJbmRleEFy
cmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVp
cmVkKSBmaW5hbDsKLSAgICBib29sIHZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpIGZpbmFsOwotICAgIGJvb2wgdmFsaWRhdGVDYXBh
YmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gY2FwKSBmaW5hbDsKKyAg
ICBib29sIHZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQ0dMZW51bSB0eXBlLCB1bnNp
Z25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkgZmluYWw7CisgICAgYm9vbCB2YWxpZGF0ZUJsZW5k
RXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSBtb2RlKSBmaW5hbDsK
KyAgICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
R0xlbnVtIGNhcCkgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAppbmRleCAwYzJmYzg0YmZjMDZiZGY0ZDhkYzM2Yzc1ZDliOTliNmRiZmQyM2U1Li4xN2VhYTVk
MTViNzBjZTE4YTBhZjU2ZDFjYmYyYjIyOTZiOTJiNjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAt
MTIyLDcgKzEyMiw3IEBAIHN0YXRpYyBjb25zdCBTZWNvbmRzIGNoZWNrQ29udGV4dExvc3NIYW5k
bGluZ0RlbGF5IHsgM19zIH07CiAKIG5hbWVzcGFjZSB7CiAgICAgCi0gICAgR0MzRGludCBjbGFt
cChHQzNEaW50IHZhbHVlLCBHQzNEaW50IG1pbiwgR0MzRGludCBtYXgpCisgICAgR0NHTGludCBj
bGFtcChHQ0dMaW50IHZhbHVlLCBHQ0dMaW50IG1pbiwgR0NHTGludCBtYXgpCiAgICAgewogICAg
ICAgICBpZiAodmFsdWUgPCBtaW4pCiAgICAgICAgICAgICB2YWx1ZSA9IG1pbjsKQEAgLTMzOSwx
OSArMzM5LDE5IEBAIG5hbWVzcGFjZSB7CiB9IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAogLy8g
UmV0dXJucyBmYWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGkuZS4sIHgsIHksIHdp
ZHRoLCBoZWlnaHQgc3RheSB0aGUgc2FtZS4KLXN0YXRpYyBib29sIGNsaXAyRChHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgIEdDM0Rz
aXplaSBzb3VyY2VXaWR0aCwgR0MzRHNpemVpIHNvdXJjZUhlaWdodCwKLSAgICBHQzNEaW50KiBj
bGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNE
c2l6ZWkqY2xpcHBlZEhlaWdodCkKK3N0YXRpYyBib29sIGNsaXAyRChHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LAorICAgIEdDR0xzaXplaSBz
b3VyY2VXaWR0aCwgR0NHTHNpemVpIHNvdXJjZUhlaWdodCwKKyAgICBHQ0dMaW50KiBjbGlwcGVk
WCwgR0NHTGludCogY2xpcHBlZFksIEdDR0xzaXplaSogY2xpcHBlZFdpZHRoLCBHQ0dMc2l6ZWkq
Y2xpcHBlZEhlaWdodCkKIHsKICAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkgJiYgY2xp
cHBlZFdpZHRoICYmIGNsaXBwZWRIZWlnaHQpOwogCi0gICAgR0MzRGludCBsZWZ0ID0gc3RkOjpt
YXgoeCwgMCk7Ci0gICAgR0MzRGludCB0b3AgPSBzdGQ6Om1heCh5LCAwKTsKLSAgICBHQzNEaW50
IHJpZ2h0ID0gMDsKLSAgICBHQzNEaW50IGJvdHRvbSA9IDA7CisgICAgR0NHTGludCBsZWZ0ID0g
c3RkOjptYXgoeCwgMCk7CisgICAgR0NHTGludCB0b3AgPSBzdGQ6Om1heCh5LCAwKTsKKyAgICBH
Q0dMaW50IHJpZ2h0ID0gMDsKKyAgICBHQ0dMaW50IGJvdHRvbSA9IDA7CiAKLSAgICBDaGVja2Vk
PEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkSW5wdXRSaWdodCA9IENoZWNrZWQ8R0Mz
RGludD4oeCkgKyBDaGVja2VkPEdDM0RzaXplaT4od2lkdGgpOwotICAgIENoZWNrZWQ8R0MzRGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRJbnB1dEJvdHRvbSA9IENoZWNrZWQ8R0MzRGludD4o
eSkgKyBDaGVja2VkPEdDM0RzaXplaT4oaGVpZ2h0KTsKKyAgICBDaGVja2VkPEdDR0xpbnQsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkSW5wdXRSaWdodCA9IENoZWNrZWQ8R0NHTGludD4oeCkgKyBD
aGVja2VkPEdDR0xzaXplaT4od2lkdGgpOworICAgIENoZWNrZWQ8R0NHTGludCwgUmVjb3JkT3Zl
cmZsb3c+IGNoZWNrZWRJbnB1dEJvdHRvbSA9IENoZWNrZWQ8R0NHTGludD4oeSkgKyBDaGVja2Vk
PEdDR0xzaXplaT4oaGVpZ2h0KTsKICAgICBpZiAoIWNoZWNrZWRJbnB1dFJpZ2h0Lmhhc092ZXJm
bG93ZWQoKSAmJiAhY2hlY2tlZElucHV0Qm90dG9tLmhhc092ZXJmbG93ZWQoKSkgewogICAgICAg
ICByaWdodCA9IHN0ZDo6bWluKGNoZWNrZWRJbnB1dFJpZ2h0LnVuc2FmZUdldCgpLCBzb3VyY2VX
aWR0aCk7CiAgICAgICAgIGJvdHRvbSA9IHN0ZDo6bWluKGNoZWNrZWRJbnB1dEJvdHRvbS51bnNh
ZmVHZXQoKSwgc291cmNlSGVpZ2h0KTsKQEAgLTQxNSwxMCArNDE1LDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9EU1RfQUxQSEEs
IG1fc2F2ZWRCbGVuZC5kc3RBbHBoYSk7CiAgICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNz
Q29udGV4dEdMOjpCTEVORCwgbV9zYXZlZEJsZW5kLmVuYWJsZWQpOwogCi0gICAgICAgIHN0YXRp
YyBjb25zdCBHQzNEZmxvYXQgcmVkID0gMTExLjAgLyAyNTUuMDsKLSAgICAgICAgc3RhdGljIGNv
bnN0IEdDM0RmbG9hdCBncmVlbiA9IDE2OC4wIC8gMjU1LjA7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBHQzNEZmxvYXQgYmx1ZSA9IDIyMC4wIC8gMjU1LjA7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBH
QzNEZmxvYXQgYWxwaGEgPSAyLjAgLyAzLjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBHQ0dMZmxv
YXQgcmVkID0gMTExLjAgLyAyNTUuMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEdDR0xmbG9hdCBn
cmVlbiA9IDE2OC4wIC8gMjU1LjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBHQ0dMZmxvYXQgYmx1
ZSA9IDIyMC4wIC8gMjU1LjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBHQ0dMZmxvYXQgYWxwaGEg
PSAyLjAgLyAzLjA7CiAKICAgICAgICAgbV9jb250ZXh0LmVuYWJsZShHcmFwaGljc0NvbnRleHRH
TDo6QkxFTkQpOwogICAgICAgICBtX2NvbnRleHQuYmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7CkBAIC00NDcsMTQgKzQ0NywxNCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2F2ZUJsZW5kVmFsdWUoR0MzRGVudW0gYXR0
YWNobWVudCwgVCYgZGVzdGluYXRpb24pCisgICAgdm9pZCBzYXZlQmxlbmRWYWx1ZShHQ0dMZW51
bSBhdHRhY2htZW50LCBUJiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIFdlYkdMQW55IHBh
cmFtID0gbV9jb250ZXh0LmdldFBhcmFtZXRlcihhdHRhY2htZW50KTsKICAgICAgICAgaWYgKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8VD4ocGFyYW0pKQogICAgICAgICAgICAgZGVzdGluYXRpb24g
PSBXVEY6OmdldDxUPihwYXJhbSk7CiAgICAgfQogCi0gICAgYm9vbCBoYXNCdWZmZXJCaW5kaW5n
KEdDM0RlbnVtIHBuYW1lKQorICAgIGJvb2wgaGFzQnVmZmVyQmluZGluZyhHQ0dMZW51bSBwbmFt
ZSkKICAgICB7CiAgICAgICAgIFdlYkdMQW55IGJpbmRpbmcgPSBtX2NvbnRleHQuZ2V0UGFyYW1l
dGVyKHBuYW1lKTsKICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUl9CSU5ESU5HKQpAQCAtNDY0LDcgKzQ2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIGhhc0ZyYW1lYnVmZmVyUGFyYW1ldGVyQXR0
YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50KQorICAgIGJvb2wgaGFzRnJhbWVidWZmZXJQYXJh
bWV0ZXJBdHRhY2htZW50KEdDR0xlbnVtIGF0dGFjaG1lbnQpCiAgICAgewogICAgICAgICBXZWJH
TEFueSBhdHRhY2htZW50UGFyYW1ldGVyID0gbV9jb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQs
IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKTsK
ICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHVuc2lnbmVkPihhdHRhY2htZW50
UGFyYW1ldGVyKSkKQEAgLTc0NiwxNCArNzQ2LDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAgIG1fY2xlYXJTdGVuY2lsID0gMDsK
ICAgICBtX2NvbG9yTWFza1swXSA9IG1fY29sb3JNYXNrWzFdID0gbV9jb2xvck1hc2tbMl0gPSBt
X2NvbG9yTWFza1szXSA9IHRydWU7CiAKLSAgICBHQzNEaW50IG51bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMgPSAwOworICAgIEdDR0xpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9
IDA7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KTsKICAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOwogICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6
ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBmb3IgKEdDM0RpbnQgaSA9IDA7
IGkgPCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzOyArK2kpCisgICAgZm9yIChHQ0dMaW50
IGkgPSAwOyBpIDwgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0czsgKytpKQogICAgICAgICBt
X3VucmVuZGVyYWJsZVRleHR1cmVVbml0cy5hZGQoaSk7CiAKLSAgICBHQzNEaW50IG51bVZlcnRl
eEF0dHJpYnMgPSAwOworICAgIEdDR0xpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7CiAgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmbnVtVmVydGV4QXR0cmlicyk7CiAgICAgbV9tYXhWZXJ0ZXhBdHRyaWJzID0gbnVtVmVydGV4
QXR0cmliczsKICAgICAKQEAgLTgwNiw3ICs4MDYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnNldHVwRmxhZ3MoKQogICAgIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkID0g
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuaXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIp
OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0NHTGVudW0gZm9ybWF0KQogewogICAgIGlm
ICghbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KSkKICAgICAgICAg
bV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuYXBwZW5kKGZvcm1hdCk7CkBAIC05MzcsNyArOTM3
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXJrQ29udGV4dENoYW5nZWRB
bmROb3RpZnlDYW52YXNPYnNlcnZlcigpCiAgICAgICAgIGNhbnZhcy0+bm90aWZ5T2JzZXJ2ZXJz
Q2FudmFzQ2hhbmdlZChGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgY2xhbXBlZENhbnZhc1Np
emUoKSkpOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFySWZDb21w
b3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpjbGVhcklmQ29tcG9zaXRlZChHQ0dMYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05NjIsNyArOTYy
LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhcklmQ29tcG9zaXRlZChH
QzNEYml0ZmllbGQgbWFzaykKICAgICB9IGVsc2UKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckNv
bG9yKDAsIDAsIDAsIDApOwogICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRy
dWUsIHRydWUpOwotICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHRH
TDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBHQ0dMYml0ZmllbGQgY2xlYXJNYXNrID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQ7CiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVz
LT5kZXB0aCkgewogICAgICAgICBpZiAoIWNvbWJpbmVkQ2xlYXIgfHwgIW1fZGVwdGhNYXNrIHx8
ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CVUZGRVJfQklUKSkKICAgICAgICAg
ICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKQEAgLTEwNjIsOSArMTA2Miw5IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAKICAgICAvLyBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYmVjYXVzZSBhdCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbGV2ZWwgd2UgZG9uJ3QKICAgICAvLyBrbm93IGlmIHRoZSB1bmRlcmx5
aW5nIEZCTyB1c2VzIHRleHR1cmVzIG9yIHJlbmRlcmJ1ZmZlcnMuCi0gICAgR0MzRGludCBtYXhT
aXplID0gc3RkOjptaW4obV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhSZW5kZXJidWZmZXJTaXplKTsK
LSAgICBHQzNEaW50IG1heFdpZHRoID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERp
bXNbMF0pOwotICAgIEdDM0RpbnQgbWF4SGVpZ2h0ID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhW
aWV3cG9ydERpbXNbMV0pOworICAgIEdDR0xpbnQgbWF4U2l6ZSA9IHN0ZDo6bWluKG1fbWF4VGV4
dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7CisgICAgR0NHTGludCBtYXhXaWR0aCA9
IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKKyAgICBHQ0dMaW50IG1h
eEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFdKTsKICAgICB3
aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7CiAgICAgaGVpZ2h0ID0gY2xhbXAoaGVp
Z2h0LCAxLCBtYXhIZWlnaHQpOwogCkBAIC0xMTA4LDI5ICsxMTA4LDI5IEBAIGludCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKICAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOwogfQog
Ci11bnNpZ25lZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzaXplSW5CeXRlcyhHQzNEZW51
bSB0eXBlKQordW5zaWduZWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2l6ZUluQnl0ZXMo
R0NHTGVudW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpCWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihHQ0dMYnl0ZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWJ5dGUpOworICAgICAg
ICByZXR1cm4gc2l6ZW9mKEdDR0x1Ynl0ZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
U0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNob3J0KTsKKyAgICAgICAgcmV0dXJu
IHNpemVvZihHQ0dMc2hvcnQpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X1NIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICByZXR1
cm4gc2l6ZW9mKEdDR0x1c2hvcnQpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEaW50KTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihH
Q0dMaW50KTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQ6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoR0MzRHVpbnQpOworICAgICAgICByZXR1cm4gc2l6ZW9mKEdDR0x1
aW50KTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihHQzNEZmxvYXQpOworICAgICAgICByZXR1cm4gc2l6ZW9mKEdDR0xmbG9hdCk7CiAg
ICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVy
ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51
bSB0ZXh0dXJlKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTExNTQsNyArMTE1NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqCiAg
ICAgc2hhZGVyLT5vbkF0dGFjaGVkKCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0NHTHVpbnQgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmliTG9jYXRpb24iLCBwcm9ncmFt
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE4OCw3ICsxMTg4LDcgQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIFcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcikK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIpCiB7CiAgICAgYm9vbCBkZWxldGVkOwogICAgIGlmICgh
Y2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQpAQCAt
MTI0NCw3ICsxMjQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQnVm
ZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgYnVmZmVy
LT5zZXRUYXJnZXQodGFyZ2V0LCBpc1dlYkdMMigpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1l
YnVmZmVyKiBidWZmZXIpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRGcmFt
ZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlcikKIHsKICAg
ICBib29sIGRlbGV0ZWQ7CiAgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZEZyYW1l
YnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKQEAgLTEyODAsNyArMTI4MCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwg
V2ViR0xGcmFtZWJ1ZmZlCiAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBX
ZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZm
ZXIqIHJlbmRlckJ1ZmZlcikKIHsKICAgICBib29sIGRlbGV0ZWQ7CiAgICAgaWYgKCFjaGVja09i
amVjdFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIsIHJlbmRlckJ1ZmZlciwgZGVsZXRlZCkp
CkBAIC0xMjk3LDcgKzEyOTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJp
bmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZgogICAgICAgICBy
ZW5kZXJCdWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZFRleHR1cmUo
R0NHTGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUpCiB7CiAgICAgYm9vbCBkZWxl
dGVkOwogICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRUZXh0dXJlIiwgdGV4dHVy
ZSwgZGVsZXRlZCkpCkBAIC0xMzA4LDcgKzEzMDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0
dQogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9P
UEVSQVRJT04sICJiaW5kVGV4dHVyZSIsICJ0ZXh0dXJlcyBjYW4gbm90IGJlIHVzZWQgd2l0aCBt
dWx0aXBsZSB0YXJnZXRzIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgR0MzRGludCBt
YXhMZXZlbCA9IDA7CisgICAgR0NHTGludCBtYXhMZXZlbCA9IDA7CiAgICAgYXV0byYgdGV4dHVy
ZVVuaXQgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XTsKICAgICBpZiAodGFy
Z2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKSB7CiAgICAgICAgIHRleHR1cmVV
bml0LnRleHR1cmUyREJpbmRpbmcgPSB0ZXh0dXJlOwpAQCAtMTM0MiwyMSArMTM0MiwyMSBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xUZXh0dXJlKiB0ZXh0dQogICAgIC8vIGJlZW4gcmVtb3ZlZC4KIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0Rm
bG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRDb2xvcihHQ0dMZmxvYXQgcmVkLCBHQ0dMZmxvYXQg
Z3JlZW4sIEdDR0xmbG9hdCBibHVlLCBHQ0dMZmxvYXQgYWxwaGEpCiB7CiAgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Ymxl
bmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiB7CiAgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJi
bGVuZEVxdWF0aW9uIiwgbW9kZSkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJs
ZW5kRXF1YXRpb24obW9kZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBo
YSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRFcXVhdGlvblNlcGFyYXRl
KEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRp
b24iLCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwg
bW9kZUFscGhhKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2NCwxNCArMTM2NCwxNCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51
bSBtb2RlUkdCLCBHQzNEZW51bQogfQogCiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dM
ZW51bSBkZmFjdG9yKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCiAg
ICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9y
KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEZ1bmNTZXBhcmF0
ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdD
M0RlbnVtIGRzdEFscGhhKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEZ1
bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3Jj
QWxwaGEsIEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIC8vIE5vdGU6IEFscGhhIGRvZXMgbm90
IGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIFJHQi4KICAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNy
Y1JHQiwgZHN0UkdCKSkKQEAgLTEzNzksNyArMTM3OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBk
c3RSCiAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3Jj
QWxwaGEsIGRzdEFscGhhKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpi
dWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdDM0RlbnVtIHVzYWdl
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgbG9uZyBsb25nIHNpemUsIEdDR0xlbnVtIHVzYWdlKQogewogICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzOTQsMjAgKzEzOTQsMjAg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgbG9uZyBsb25nIHNpemUsIEdDM0QKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPT0gMCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZm
ZXJEYXRhKHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oc2l6ZSkpKSB7CisgICAgaWYgKCFidWZm
ZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihzaXplKSkp
IHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
VkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXpl
aXB0cj4oc2l6ZSksIHVzYWdlKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBz
dGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHNpemUpLCB1c2FnZSk7CiAgICAgaWYgKG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKICAgICAgICAgLy8gVGhlIGJ1
ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZl
IHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgogICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0
ZUJ1ZmZlckRhdGEoKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIE9wdGlvbmFsPEJ1ZmZlckRhdGFTb3VyY2U+
JiYgZGF0YSwgR0MzRGVudW0gdXNhZ2UpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBPcHRpb25hbDxCdWZmZXJEYXRhU291cmNlPiYm
IGRhdGEsIEdDR0xlbnVtIHVzYWdlKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzQsNyArMTQzNCw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIE9wdGlvbmFsPEJ1
ZmZlckRhdGFTCiAgICAgfSwgZGF0YS52YWx1ZSgpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9m
ZnNldCwgT3B0aW9uYWw8QnVmZmVyRGF0YVNvdXJjZT4mJiBkYXRhKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgbG9uZyBsb25n
IG9mZnNldCwgT3B0aW9uYWw8QnVmZmVyRGF0YVNvdXJjZT4mJiBkYXRhKQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NDksMTMgKzE0
NDksMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwKICAgICAgICAgcmV0dXJuOwogCiAgICAg
V1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2Np
YXRlQnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLmdl
dCgpKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0
aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBkYXRhLmdldCgpKSkgewogICAgICAgICAgICAg
dGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhl
dGljRXJyb3JMaXN0KCk7Ci0gICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQs
IHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0
YS0+ZGF0YSgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3Rh
dGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5k
YXRhKCkpOwogICAgICAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKSkgewogICAgICAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVuY3Rpb24gZmFp
bGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBp
dCBkb2VzLgogICAgICAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CkBA
IC0xNDYzLDcgKzE0NjMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZl
clN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LAogICAgIH0sIGRhdGEu
dmFsdWUoKSk7CiB9CiAKLUdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQorR0NHTGVudW0gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKQEAgLTE0ODMsNyArMTQ4Myw3
IEBAIEdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR0MzRGVudW0gdGFyZ2V0KQogICAgIGlmICghdGFyZ2V0RnJhbWVidWZmZXIgfHwgIXRh
cmdldEZyYW1lYnVmZmVyLT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURTsKICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJh
bWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgR0MzRGVudW0gcmVzdWx0ID0gdGFyZ2V0RnJhbWVi
dWZmZXItPmNoZWNrU3RhdHVzKCZyZWFzb24pOworICAgIEdDR0xlbnVtIHJlc3VsdCA9IHRhcmdl
dEZyYW1lYnVmZmVyLT5jaGVja1N0YXR1cygmcmVhc29uKTsKICAgICBpZiAocmVzdWx0ICE9IEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewogICAgICAgICBTdHJpbmcg
c3RyID0gIldlYkdMOiBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzOiIgKyBTdHJpbmcocmVhc29uKTsK
ICAgICAgICAgcHJpbnRUb0NvbnNvbGUoTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBzdHIpOwpAQCAt
MTQ5Myw3ICsxNDkzLDcgQEAgR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhckNvbG9yKEdDM0RmbG9h
dCByLCBHQzNEZmxvYXQgZywgR0MzRGZsb2F0IGIsIEdDM0RmbG9hdCBhKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhckNvbG9yKEdDR0xmbG9hdCByLCBHQ0dMZmxvYXQgZywg
R0NHTGZsb2F0IGIsIEdDR0xmbG9hdCBhKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MTIsNyArMTUxMiw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJDb2xvcihHQzNEZmxvYXQgciwgR0MzRGZsb2F0IGcs
IEdDM0RmbG9hdCBiCiAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogfQog
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRl
cHRoKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhckRlcHRoKEdDR0xmbG9h
dCBkZXB0aCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNTIwLDcgKzE1MjAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQogICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0
aChkZXB0aCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJTdGVu
Y2lsKEdDM0RpbnQgcykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJTdGVu
Y2lsKEdDR0xpbnQgcykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAg
ICAgICByZXR1cm47CkBAIC0xNTI4LDcgKzE1MjgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCiAgICAgbV9jb250ZXh0LT5jbGVhclN0
ZW5jaWwocyk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29sb3JNYXNr
KEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdD
M0Rib29sZWFuIGFscGhhKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb2xvck1h
c2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwg
R0NHTGJvb2xlYW4gYWxwaGEpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTU0NCw3ICsxNTQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiAgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiY29tcGls
ZVNoYWRlciIsIHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmNvbXBp
bGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIEdDM0RpbnQgdmFsdWU7CisgICAg
R0NHTGludCB2YWx1ZTsKICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhz
aGFkZXIpLCBHcmFwaGljc0NvbnRleHRHTDo6Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7CiAgICAg
c2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7CiAKQEAgLTE1NTgsNyArMTU1OCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVy
KQogICAgIH0KIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21wcmVzc2Vk
VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBBcnJheUJ1ZmZlclZpZXcmIGRhdGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyYgZGF0YSkKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CkBAIC0xNTk2LDcgKzE1OTYs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZQogICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcmIGRhdGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcmIGRhdGEp
CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTYyNSw3ICsxNjI1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICB0ZXgtPnNl
dENvbXByZXNzZWQoKTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZVNldHRhYmxlVGV4SW50ZXJuYWxGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSBpbnRlcm5hbEZvcm1hdCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVTZXR0YWJsZVRleEludGVybmFsRm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1h
dCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKQEAgLTE2
NDMsNyArMTY0Myw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVT
ZXR0YWJsZVRleEludGVybmFsRm9ybWF0KGNvbnN0IGNoYXIqIGZ1CiAgICAgfQogfQogCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTY2Myw3ICsxNjYzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5
VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4
U3ViSW1hZ2UyRCIsICJyZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9y
bWF0KHRhcmdldCwgbGV2ZWwpOworICAgIEdDR0xlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4LT5n
ZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICBpZiAoIXZhbGlkYXRlU2V0dGFi
bGVUZXhJbnRlcm5hbEZvcm1hdCgiY29weVRleFN1YkltYWdlMkQiLCBpbnRlcm5hbEZvcm1hdCkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZl
ckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxGb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xv
ckZvcm1hdCgpKSkgewpAQCAtMTY3NywxMSArMTY3NywxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbAogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwogCi0gICAgR0MzRGludCBjbGlw
cGVkWCwgY2xpcHBlZFk7Ci0gICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdo
dDsKKyAgICBHQ0dMaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICBHQ0dMc2l6ZWkgY2xpcHBl
ZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwogICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQo
KSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkg
ewotICAgICAgICBHQzNEZW51bSBmb3JtYXQ7Ci0gICAgICAgIEdDM0RlbnVtIHR5cGU7CisgICAg
ICAgIEdDR0xlbnVtIGZvcm1hdDsKKyAgICAgICAgR0NHTGVudW0gdHlwZTsKICAgICAgICAgaWYg
KCFHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJu
YWxGb3JtYXQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSwgZm9ybWF0LCB0
eXBlKSkgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfRU5VTSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIlRleHR1cmUgaGFzIHVua25vd24g
aW50ZXJuYWwgZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjg5LDcgKzE2ODks
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvcHlUZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbAogICAgICAgICBVbmlxdWVBcnJheTx1bnNpZ25l
ZCBjaGFyPiB6ZXJvOwogICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBzaXplOwotICAgICAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQt
PmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91
bnBhY2tBbGlnbm1lbnQsICZzaXplLCBudWxscHRyKTsKKyAgICAgICAgICAgIEdDR0xlbnVtIGVy
cm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdp
ZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgbnVsbHB0cik7CiAgICAgICAg
ICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKSB7CiAgICAgICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJi
YWQgZGltZW5zaW9ucyIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3NTYsNyArMTc1
Niw3IEBAIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKICAgICByZXR1cm4gYnVmZmVyOwogfQogCi1SZWZQdHI8
V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVNoYWRlcihHQzNE
ZW51bSB0eXBlKQorUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE3NzAsNyArMTc3MCw3IEBA
IFJlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlU2hh
ZGVyKEdDM0RlbnVtIHR5cGUpCiAgICAgcmV0dXJuIHNoYWRlcjsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4NzEsMTQgKzE4
NzEsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVUZXh0dXJlKFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92
ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJlKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7CiAgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29u
dGV4dC0+ZGVwdGhGdW5jKGZ1bmMpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsKICAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CkBAIC0xODg2LDcgKzE4ODYsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFn
KQogICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKGZsYWcpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZh
cikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVwdGhSYW5nZShHQ0dMZmxvYXQg
ek5lYXIsIEdDR0xmbG9hdCB6RmFyKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE5MDksNyArMTkwOSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2Vi
R0xTaGFkZXIqCiAgICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dEdMKCkpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGUoR0MzRGVudW0gY2Fw
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxp
dHkoImRpc2FibGUiLCBjYXApKQogICAgICAgICByZXR1cm47CkBAIC0xOTIzLDcgKzE5MjMsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGUoR0MzRGVudW0gY2FwKQog
ICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1
aW50IGluZGV4KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE5MzksNyArMTkzOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQogICAgICAgICBt
X2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBsZXZlbCwgY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZU5QT1RU
ZXh0dXJlTGV2ZWwoR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGxl
dmVsLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7CiAgICAgaWYgKCFpc0dMRVMyTlBPVFN0
cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7
CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKQEAgLTE5NDks
NyArMTk0OSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVOUE9U
VGV4dHVyZUxldmVsKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJyYXlT
aXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCiti
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShH
Q0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAg
IFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKICAgICAKQEAgLTE5NjcsNyArMTk2
Nyw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJy
YXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVuCiAgICAgICAgIC8vIE1ha2UgdW9mZnNldCBh
biBlbGVtZW50IG9mZnNldC4KICAgICAgICAgb2Zmc2V0IC89IDQ7CiAKLSAgICAgICAgR0MzRHNp
emVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7CisgICAgICAg
IEdDR0xzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyA0Owog
ICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9TSE9SVCkgewpAQCAtMTk3OCwxOCArMTk3OCwxOCBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291
bnQsIEdDM0RlbgogICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCiAg
ICAgICAgIG9mZnNldCAvPSAyOwogCi0gICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOworICAgICAgICBHQ0dMc2l6ZWlwdHIgbiA9IGVs
ZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gMjsKICAgICAgICAgaWYgKG9mZnNldCA+
IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewot
ICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
OworICAgICAgICBHQ0dMc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpOwogICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0Mz
RHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQm
IG51bUVsZW1lbnRzUmVxdWlyZWQpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpCiB7CiAgICAg
QVNTRVJUKGNvdW50ID49IDAgJiYgb2Zmc2V0ID49IDApOwogICAgIHVuc2lnbmVkIG1heEluZGV4
ID0gMDsKQEAgLTIwMTAsMTMgKzIwMTAsMTMgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGUKIAog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X0lOVDoKLSAgICAgICAgbWF4SW5kZXggPSBnZXRNYXhJbmRleDxHQzNEdWludD4oYnVmZmVyLCBv
ZmZzZXQsIGNvdW50KTsKKyAgICAgICAgbWF4SW5kZXggPSBnZXRNYXhJbmRleDxHQ0dMdWludD4o
YnVmZmVyLCBvZmZzZXQsIGNvdW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIG1heEluZGV4ID0gZ2V0TWF4SW5k
ZXg8R0MzRHVzaG9ydD4oYnVmZmVyLCBvZmZzZXQsIGNvdW50KTsKKyAgICAgICAgbWF4SW5kZXgg
PSBnZXRNYXhJbmRleDxHQ0dMdXNob3J0PihidWZmZXIsIG9mZnNldCwgY291bnQpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgotICAg
ICAgICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdDM0R1Ynl0ZT4oYnVmZmVyLCBvZmZzZXQsIGNv
dW50KTsKKyAgICAgICAgbWF4SW5kZXggPSBnZXRNYXhJbmRleDxHQ0dMdWJ5dGU+KGJ1ZmZlciwg
b2Zmc2V0LCBjb3VudCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjExOSw3ICsyMTE5
LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVdlYkdMT2JqZWN0
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RzaXplaSBwcmltaXRpdmVDb3VudCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NH
TGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJp
bWl0aXZlQ291bnQpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVEcmF3TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yMTQzLDggKzIxNDMsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDMwogICAgIH0KIAog
ICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlLgotICAgIENoZWNr
ZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBDaGVja2VkPEdDM0RpbnQs
IFJlY29yZE92ZXJmbG93PihmaXJzdCkgKyBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93
Pihjb3VudCk7Ci0gICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFBy
aW1pdGl2ZUNvdW50KHByaW1pdGl2ZUNvdW50KTsKKyAgICBDaGVja2VkPEdDR0xpbnQsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkU3VtID0gQ2hlY2tlZDxHQ0dMaW50LCBSZWNvcmRPdmVyZmxvdz4o
Zmlyc3QpICsgQ2hlY2tlZDxHQ0dMaW50LCBSZWNvcmRPdmVyZmxvdz4oY291bnQpOworICAgIENo
ZWNrZWQ8R0NHTGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltaXRpdmVDb3VudChwcmlt
aXRpdmVDb3VudCk7CiAgICAgaWYgKGNoZWNrZWRTdW0uaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNr
ZWRQcmltaXRpdmVDb3VudC5oYXNPdmVyZmxvd2VkKCkgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmli
dXRlcyhjaGVja2VkU3VtLnVuc2FmZUdldCgpLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5zYWZl
R2V0KCkpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9m
IGJvdW5kcyBhcnJheXMiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE2Myw3ICsyMTYz
LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdBcnJheXMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6
ZWkgcHJpbWl0aXZlQ291bnQpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gbW9kZSwg
R0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25l
ZCYgbnVtRWxlbWVudHMsIEdDR0xzaXplaSBwcmltaXRpdmVDb3VudCkKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwg
bW9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIyMDYsMjIgKzIyMDYsMjIgQEAgYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEcKICAgICB9CiAKICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZh
bGlkIHJlbmRlcmluZyBzdGF0ZS4KLSAgICBpZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShj
b3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSkpIHsKKyAgICBpZiAo
IXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0NHTGlu
dHB0cj4ob2Zmc2V0KSkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBi
b3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZENvdW50KGNv
dW50KTsKLSAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0
aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOworICAgIENoZWNrZWQ8R0NHTGludCwgUmVjb3JkT3Zl
cmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgQ2hlY2tlZDxHQ0dMaW50LCBSZWNvcmRP
dmVyZmxvdz4gY2hlY2tlZFByaW1pdGl2ZUNvdW50KHByaW1pdGl2ZUNvdW50KTsKICAgICBpZiAo
Y2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFz
T3ZlcmZsb3dlZCgpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mg
b3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICAKICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVt
ZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFBy
aW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhB
cnJheVByZWNpc2UoY2hlY2tlZENvdW50LnVuc2FmZUdldCgpLCB0eXBlLCBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmli
dXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewor
ICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY2hlY2tlZENvdW50LnVuc2Fm
ZUdldCgpLCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50
cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFByaW1p
dGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRl
bXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CkBAIC0yMjQxLDcgKzIyNDEsNyBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgRwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVp
IGNvdW50KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKEdDR0xl
bnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKIHsKICAgICBpZiAoIXZh
bGlkYXRlRHJhd0FycmF5cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwgMCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIyNzksMjIgKzIyNzksMjIgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXoKIH0KIAogI2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIpCi1zdGF0aWMgR0Mz
RHVpbnQgZ2V0UmVzdGFydEluZGV4KEdDM0RlbnVtIHR5cGUpCitzdGF0aWMgR0NHTHVpbnQgZ2V0
UmVzdGFydEluZGV4KEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8R0MzRHVieXRlPjo6bWF4KCk7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPEdDR0x1Ynl0ZT46Om1heCgpOwogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxHQzNEdXNob3J0Pjo6bWF4KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PEdDR0x1c2hvcnQ+OjptYXgoKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9JTlQ6Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdDM0R1aW50Pjo6bWF4
KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdDR0x1aW50Pjo6bWF4KCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50
LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBH
Q0dMZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0KQogewogICAgIHVuc2lnbmVkIG51bUVsZW1l
bnRzID0gMDsKICAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHMiLCBt
b2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgMCkpCkBAIC0yMzA4LDcgKzIz
MDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50cyhHQzNE
ZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDMwogICAgIGJvb2wgdmVydGV4QXR0cmliMFNp
bXVsYXRlZCA9IGZhbHNlOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAg
IGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNl
KGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50
cyk7CisgICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBz
dGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7CiAgICAgICAgIGF1
dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51
bUVsZW1lbnRzKTsKICAgICAgICAgaWYgKCFzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMpIHsK
ICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIHNpbXVsYXRlIHRoZSBhdHRyaWJ1dGUg
YnVmZmVyLgpAQCAtMjMzMCw3ICsyMzMwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzMKICAg
ICB7CiAgICAgICAgIEluc3BlY3RvclNjb3BlZFNoYWRlclByb2dyYW1IaWdobGlnaHQgc2NvcGVk
SGlnaGxpZ2h0KCp0aGlzLCBtX2N1cnJlbnRQcm9ncmFtLmdldCgpKTsKIAotICAgICAgICBtX2Nv
bnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSk7CisgICAgICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNv
dW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAKICAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQpAQCAt
MjM0MCw3ICsyMzQwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzMKICAgICBtYXJrQ29udGV4
dENoYW5nZWRBbmROb3RpZnlDYW52YXNPYnNlcnZlcigpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmVuYWJsZShHQzNEZW51bSBjYXApCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUiLCBjYXApKQogICAg
ICAgICByZXR1cm47CkBAIC0yMzU0LDcgKzIzNTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmVuYWJsZShHQzNEZW51bSBjYXApCiAgICAgbV9jb250ZXh0LT5lbmFibGUoY2Fw
KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQzNEdWludCBpbmRleCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7CiAgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4Myw3ICsyMzgzLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmbHVzaCgpCiAgICAgbV9jb250ZXh0
LT5mbHVzaCgpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0Mz
RGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyKQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIGJ1ZmZlcikKIHsKICAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjQwOSw3ICsyNDA5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnUKICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAi
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlck9iamVjdCA9IG9i
amVjdE9yWmVybyhidWZmZXIpOworICAgIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyT2JqZWN0ID0g
b2JqZWN0T3JaZXJvKGJ1ZmZlcik7CiAjaWYgIVVTRShBTkdMRSkKICAgICBpZiAoYXR0YWNobWVu
dCA9PSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7CiAgICAg
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmpl
Y3QpOwpAQCAtMjQyMSw3ICsyNDIxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnUKICAgICBh
cHBseVN0ZW5jaWxUZXN0KCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZl
bCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQs
IFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMo
ImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjQ0Myw3ICsyNDQzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGEKICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVPYmplY3QgPSBv
YmplY3RPclplcm8odGV4dHVyZSk7CisgICAgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlT2JqZWN0
ID0gb2JqZWN0T3JaZXJvKHRleHR1cmUpOwogCiAjaWYgIVVTRV9BTkdMRQogICAgIGlmIChhdHRh
Y2htZW50ID09IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHsK
QEAgLTI0NTcsMTQgKzI0NTcsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpm
cmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGEKICAgICBhcHBs
eVN0ZW5jaWxUZXN0KCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJv
bnRGYWNlKEdDM0RlbnVtIG1vZGUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZy
b250RmFjZShHQ0dMZW51bSBtb2RlKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51
bSB0YXJnZXQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdlbmVyYXRlTWlwbWFw
KEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQog
ICAgICAgICByZXR1cm47CkBAIC0yNTAwLDcgKzI1MDAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKICAgICB0ZXgtPmdl
bmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7CiB9CiAKLVJlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4KQorUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
R0NHTHVpbnQgaW5kZXgpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0aXZlQXR0cmliIiwgcHJvZ3JhbSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMjUxMyw3ICsyNTEzLDcgQEAgUmVmUHRyPFdlYkdMQWN0aXZl
SW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJv
Z3JhbSoKICAgICByZXR1cm4gV2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZv
LnR5cGUsIGluZm8uc2l6ZSk7CiB9CiAKLVJlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBHQzNEdWludCBpbmRleCkKK1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQ0dM
dWludCBpbmRleCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVVbmlmb3JtIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjUzNCw3ICsyNTM0LDcgQEAgT3B0aW9uYWw8VmVjdG9yPFJlZlB0
cjxXZWJHTFNoYWRlcj4+PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNo
YWQKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIGNvbnN0IEdDM0RlbnVtIHNoYWRlclR5cGVzW10gPSB7CisgICAgY29u
c3QgR0NHTGVudW0gc2hhZGVyVHlwZXNbXSA9IHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0w6
OlZFUlRFWF9TSEFERVIsCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFE
RVIKICAgICB9OwpAQCAtMjU0Nyw3ICsyNTQ3LDcgQEAgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxX
ZWJHTFNoYWRlcj4+PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNoYWQK
ICAgICByZXR1cm4gc2hhZGVyT2JqZWN0czsKIH0KIAotR0MzRGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgbmFtZSkKK0dDR0xpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0
cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVj
dCgiZ2V0QXR0cmliTG9jYXRpb24iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAt
MjU2NCw3ICsyNTY0LDcgQEAgR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRB
dHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnMKICAgICByZXR1cm4gbV9j
b250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwog
fQogCi1XZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0
ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSkKK1dlYkdMQW55IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZlclBhcmFtZXRlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMjU5NSw3ICsyNTk1LDcgQEAgV2ViR0xBbnkgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgR0MzRGludCB2YWx1
ZSA9IDA7CisgICAgR0NHTGludCB2YWx1ZSA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwogICAgIGlmIChwbmFtZSA9PSBHcmFw
aGljc0NvbnRleHRHTDo6QlVGRkVSX1NJWkUpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKQEAgLTI2
MTksMTkgKzI2MTksMTkgQEAgT3B0aW9uYWw8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMKICAgICByZXR1cm4gYXR0
cmlidXRlczsKIH0KIAotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXJy
b3IoKQorR0NHTGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXJyb3IoKQogewog
ICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCiAgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHRHTDo6Tk9fRVJST1I7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3Io
KTsKIH0KIAotV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBh
cmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lKQorV2ViR0xBbnkg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1QYXJhbWV0ZXIiLCBw
cm9ncmFtKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBHQzNEaW50IHZhbHVlID0g
MDsKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVMRVRFX1NUQVRVUzoKICAgICAgICAgcmV0dXJuIHByb2dy
YW0tPmlzRGVsZXRlZCgpOwpAQCAtMjY2NCw3ICsyNjY0LDcgQEAgU3RyaW5nIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkK
ICAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9i
amVjdE9yWmVybyhwcm9ncmFtKSkpOwogfQogCi1XZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSkKK1dlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
MjcwOSw3ICsyNzA5LDcgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MKICAgICAgICAgcmV0dXJu
IHZhbHVlOwogICAgIH0KIAotICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIEdDR0xpbnQgdmFs
dWUgPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJCVUZGRVJfV0lEVEg6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVS
QlVGRkVSX0hFSUdIVDoKQEAgLTI3MjksMTEgKzI3MjksMTEgQEAgV2ViR0xBbnkgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MKICAgICB9CiB9CiAKLVdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBHQzNEZW51bSBwbmFtZSkKK1dl
YkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclBhcmFtZXRlcihXZWJH
TFNoYWRlciogc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJQYXJhbWV0ZXIi
LCBzaGFkZXIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBHQzNEaW50IHZhbHVlID0g
MDsKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVMRVRFX1NUQVRVUzoKICAgICAgICAgcmV0dXJuIHNoYWRl
ci0+aXNEZWxldGVkKCk7CkBAIC0yNzU2LDcgKzI3NTYsNyBAQCBTdHJpbmcgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciogc2hhZGVyKQogICAg
IHJldHVybiBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhvYmplY3RP
clplcm8oc2hhZGVyKSkpOwogfQogCi1SZWZQdHI8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNE
ZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlKQorUmVmUHRyPFdlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlw
ZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTI3ODEsOCArMjc4MSw4IEBAIFJlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lv
bkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVyUHJlY2lzaW9uCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIEdDM0RpbnQgcmFuZ2VbMl0gPSB7
MCwgMH07Ci0gICAgR0MzRGludCBwcmVjaXNpb24gPSAwOworICAgIEdDR0xpbnQgcmFuZ2VbMl0g
PSB7MCwgMH07CisgICAgR0NHTGludCBwcmVjaXNpb24gPSAwOwogICAgIG1fY29udGV4dC0+Z2V0
U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLCAm
cHJlY2lzaW9uKTsKICAgICByZXR1cm4gV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ6OmNyZWF0
ZShyYW5nZVswXSwgcmFuZ2VbMV0sIHByZWNpc2lvbik7CiB9CkBAIC0yNzk0LDE1ICsyNzk0LDE1
IEBAIFN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJTb3VyY2UoV2Vi
R0xTaGFkZXIqIHNoYWRlcikKICAgICByZXR1cm4gZW5zdXJlTm90TnVsbChzaGFkZXItPmdldFNv
dXJjZSgpKTsKIH0KIAotV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGV4
UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUpCitXZWJHTEFueSBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoImdldFRleFBhcmFtZXRlciIsIHRhcmdldCwgZmFsc2UpOwogICAgIGlmICghdGV4KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBHQzNEZmxv
YXQgZlZhbHVlID0gMDsKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsKKyAgICBHQ0dMZmxvYXQgZlZh
bHVlID0gMDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9NQUdfRklMVEVSOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfTUlOX0ZJTFRFUjoKQEAgLTI4MzEsOSArMjgzMSw5IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBX
ZWJHCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9yIG5vdCB2YWxp
ZCBmb3IgdGhpcyBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAg
ICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOworICAgIEdD
R0xpbnQgbG9jYXRpb24gPSB1bmlmb3JtTG9jYXRpb24tPmxvY2F0aW9uKCk7CiAKLSAgICBHQzNE
ZW51bSBiYXNlVHlwZTsKKyAgICBHQ0dMZW51bSBiYXNlVHlwZTsKICAgICB1bnNpZ25lZCBsZW5n
dGg7CiAgICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUoKSkgewogICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkJPT0w6CkBAIC0yOTA4LDkgKzI5MDgsOSBAQCBXZWJHTEFueSBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
Y29uc3QgV2ViRwogICAgIH0KICAgICBzd2l0Y2ggKGJhc2VUeXBlKSB7CiAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVQ6IHsKLSAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHsw
fTsKKyAgICAgICAgR0NHTGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKICAgICAgICAgaWYgKG1faXNS
b2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCkuZ2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAx
NiAqIHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS5nZXRuVW5pZm9ybWZ2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9j
YXRpb24sIDE2ICogc2l6ZW9mKEdDR0xmbG9hdCksIHZhbHVlKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBs
b2NhdGlvbiwgdmFsdWUpOwogICAgICAgICBpZiAobGVuZ3RoID09IDEpCkBAIC0yOTE4LDkgKzI5
MTgsOSBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViRwogICAgICAgICByZXR1cm4gRmxvYXQzMkFy
cmF5Ojp0cnlDcmVhdGUodmFsdWUsIGxlbmd0aCk7CiAgICAgfQogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OklOVDogewotICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAg
ICBHQ0dMaW50IHZhbHVlWzRdID0gezB9OwogICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRT
dXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5nZXRuVW5p
Zm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0Mz
RGludCksIHZhbHVlKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLmdl
dG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVv
ZihHQ0dMaW50KSwgdmFsdWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2NvbnRleHQt
PmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CiAg
ICAgICAgIGlmIChsZW5ndGggPT0gMSkKQEAgLTI5MjgsOSArMjkyOCw5IEBAIFdlYkdMQW55IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBjb25zdCBXZWJHCiAgICAgICAgIHJldHVybiBJbnQzMkFycmF5Ojp0cnlDcmVhdGUodmFsdWUs
IGxlbmd0aCk7CiAgICAgfQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJPT0w6IHsKLSAg
ICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICAgICAgR0NHTGludCB2YWx1ZVs0XSA9
IHswfTsKICAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuZ2V0blVuaWZvcm1pdkVYVChvYmplY3RPclpl
cm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5nZXRuVW5pZm9ybWl2RVhUKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0NHTGludCksIHZhbHVlKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICBpZiAobGVuZ3RoID4g
MSkgewpAQCAtMjk2NCwxNyArMjk2NCwxNyBAQCBSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTAogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7
CisgICAgR0NHTGludCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwogICAgIGlmICh1bmlmb3JtTG9jYXRp
b24gPT0gLTEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgR0MzRGludCBhY3RpdmVV
bmlmb3JtcyA9IDA7CisgICAgR0NHTGludCBhY3RpdmVVbmlmb3JtcyA9IDA7CiAjaWYgVVNFKEFO
R0xFKQogICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKICNl
bHNlCiAgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmYWN0
aXZlVW5pZm9ybXMpOwogI2VuZGlmCi0gICAgZm9yIChHQzNEaW50IGkgPSAwOyBpIDwgYWN0aXZl
VW5pZm9ybXM7IGkrKykgeworICAgIGZvciAoR0NHTGludCBpID0gMDsgaSA8IGFjdGl2ZVVuaWZv
cm1zOyBpKyspIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZUluZm8gaW5mbzsK
ICAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBpLCBpbmZvKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjk4Miw3
ICsyOTgyLDcgQEAgUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0wKICAgICAgICAgaWYgKGluZm8ubmFt
ZS5lbmRzV2l0aCgiWzBdIikpCiAgICAgICAgICAgICBpbmZvLm5hbWUgPSBpbmZvLm5hbWUubGVm
dChpbmZvLm5hbWUubGVuZ3RoKCkgLSAzKTsKICAgICAgICAgLy8gSWYgaXQncyBhbiBhcnJheSwg
d2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50LCBhcHBlbmRpbmcgIltpbmRl
eF0iIHRvIHRoZSBuYW1lLgotICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGluZm8uc2l6ZTsgKytpbmRleCkgeworICAgICAgICBmb3IgKEdDR0xpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGluZm8uc2l6ZTsgKytpbmRleCkgewogICAgICAgICAgICAgU3RyaW5nIHVuaWZvcm1O
YW1lID0gbWFrZVN0cmluZyhpbmZvLm5hbWUsICdbJywgaW5kZXgsICddJyk7CiAKICAgICAgICAg
ICAgIGlmIChuYW1lID09IHVuaWZvcm1OYW1lIHx8IG5hbWUgPT0gaW5mby5uYW1lKQpAQCAtMjk5
Miw3ICsyOTkyLDcgQEAgUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0wKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0
cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKK1dlYkdMQW55IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFZlcnRleEF0dHJpYihHQ0dMdWludCBpbmRleCwgR0NHTGVudW0g
cG5hbWUpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0zMDMyLDcgKzMwMzIsNyBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBu
YQogICAgIH0KIH0KIAotbG9uZyBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZl
cnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCitsb25nIGxv
bmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1
aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMwNzMsNyArMzA3Myw3IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZXh0ZW5zaW9uSXNFbmFibGVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCitHQ0dMYm9vbGVhbiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQog
ewogICAgIGlmICghYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0zMTEwLDcgKzMxMTAsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmlzQ29udGV4dExvc3RPclBlbmRpbmcoKQogICAgIHJldHVybiBtX2NvbnRleHRMb3N0
IHx8IG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKIH0KIAotR0MzRGJvb2xlYW4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKK0dDR0xib29sZWFu
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJp
c0VuYWJsZWQiLCBjYXApKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMxMTksNyArMzExOSw3IEBA
IEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzRW5hYmxlZChHQzNEZW51
bSBjYXApCiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7CiB9CiAKLUdDM0Ri
b29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFt
ZWJ1ZmZlciogZnJhbWVidWZmZXIpCitHQ0dMYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQogewogICAg
IGlmICghZnJhbWVidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTMxMzAsNyArMzEzMCw3IEBAIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmCiAg
ICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0KCkp
OwogfQogCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1Byb2dyYW0o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtKQorR0NHTGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIHsKICAgICBpZiAoIXByb2dy
YW0gfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMx
MzgsNyArMzEzOCw3IEBAIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omlz
UHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNQ
cm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKIH0KIAotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1
ZmZlcikKK0dDR0xib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzUmVuZGVyYnVm
ZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJi
dWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTMxNDksNyArMzE0OSw3IEBAIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJiCiAgICAgcmV0dXJuIG1f
Y29udGV4dC0+aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7CiB9CiAKLUdD
M0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzU2hhZGVyKFdlYkdMU2hhZGVy
KiBzaGFkZXIpCitHQ0dMYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1NoYWRl
cihXZWJHTFNoYWRlciogc2hhZGVyKQogewogICAgIGlmICghc2hhZGVyIHx8IGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMTU3LDcgKzMxNTcsNyBAQCBH
QzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1NoYWRlcihXZWJHTFNoYWRl
ciogc2hhZGVyKQogICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2JqZWN0
KCkpOwogfQogCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1RleHR1
cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQorR0NHTGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKIHsKICAgICBpZiAoIXRl
eHR1cmUgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTMxNjgsNyArMzE2OCw3IEBAIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCiAgICAgcmV0dXJuIG1fY29udGV4dC0+
aXNUZXh0dXJlKHRleHR1cmUtPm9iamVjdCgpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyMDcsNyArMzIwNyw3
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bGlua1Byb2dyYW1XaXRob3V0SW52
YWxpZGF0aW5nQXR0cmliTG9jYXRpb25zKFdlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQgcGFyYW0pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBpeGVsU3RvcmVp
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyMjAsNyArMzIyMCw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQgcGFyYW0pCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6CiAgICAgICAgIGlmIChwYXJhbSA9
PSBHcmFwaGljc0NvbnRleHRHTDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMIHx8IHBhcmFtID09IEdy
YXBoaWNzQ29udGV4dEdMOjpOT05FKQotICAgICAgICAgICAgbV91bnBhY2tDb2xvcnNwYWNlQ29u
dmVyc2lvbiA9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihwYXJhbSk7CisgICAgICAgICAgICBtX3Vu
cGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gc3RhdGljX2Nhc3Q8R0NHTGVudW0+KHBhcmFtKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVy
IGZvciBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIik7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zMjQ1LDcgKzMyNDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQogICAgIH0KIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9h
dCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzI2
Miw3ICszMjYyLDcgQEAgZW51bSBjbGFzcyBJbnRlcm5hbEZvcm1hdFRoZW1lIHsKICAgICBVbnNp
Z25lZEludGVnZXIKIH07CiAKLXN0YXRpYyBJbnRlcm5hbEZvcm1hdFRoZW1lIGludGVybmFsRm9y
bWF0VGhlbWUoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCitzdGF0aWMgSW50ZXJuYWxGb3JtYXRU
aGVtZSBpbnRlcm5hbEZvcm1hdFRoZW1lKEdDR0xlbnVtIGludGVybmFsRm9ybWF0KQogewogICAg
IHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0I6CkBAIC0zMzMxLDcgKzMzMzEsNyBAQCBzdGF0aWMgSW50ZXJuYWxGb3JtYXRUaGVtZSBpbnRl
cm5hbEZvcm1hdFRoZW1lKEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogICAgIH0KIH0KIAotc3Rh
dGljIGludCBudW1iZXJPZkNvbXBvbmVudHNGb3JGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQorc3Rh
dGljIGludCBudW1iZXJPZkNvbXBvbmVudHNGb3JGb3JtYXQoR0NHTGVudW0gZm9ybWF0KQogewog
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEOgpA
QCAtMzM1MSw3ICszMzUxLDcgQEAgc3RhdGljIGludCBudW1iZXJPZkNvbXBvbmVudHNGb3JGb3Jt
YXQoR0MzRGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAotc3RhdGljIGludCBudW1iZXJPZkNvbXBv
bmVudHNGb3JJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCkKK3N0YXRpYyBp
bnQgbnVtYmVyT2ZDb21wb25lbnRzRm9ySW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50ZXJuYWxG
b3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgewogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkxVTUlOQU5DRToKQEAgLTM0MjMsNyArMzQyMyw3IEBAIHN0YXRpYyBpbnQg
bnVtYmVyT2ZDb21wb25lbnRzRm9ySW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxGb3Jt
YXQpCiAgICAgfQogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlYWRQaXhl
bHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcmIHBpeGVs
cykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyYgcGl4ZWxzKQogewogICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM0MzEsNyAr
MzQzMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoCiAgICAgLy8gdGFpbnQgdGhlIG9yaWdp
biB1c2luZyB0aGUgV2ViR0wgQVBJLgogICAgIEFTU0VSVChjYW52YXNCYXNlKCkub3JpZ2luQ2xl
YW4oKSk7CiAKLSAgICBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCA9IDA7CisgICAgR0NHTGVudW0g
aW50ZXJuYWxGb3JtYXQgPSAwOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykgewogICAg
ICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CiAgICAg
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dEdM
KCksICZyZWFzb24pKSB7CkBAIC0zNTc0LDcgKzM1NzQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aAogICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXNSZXF1aXJlZCA9IDA7CiAgICAgdW5zaWduZWQg
cGFkZGluZyA9IDA7CiAgICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgewotICAg
ICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMo
Zm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVz
UmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAgICAgR0NHTGVudW0gZXJyb3IgPSBtX2NvbnRleHQt
PmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9w
YWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7CiAgICAgICAgIGlm
IChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKICAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMi
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM2MDEsMTQgKzM2MDEsMTQgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogICAgIG1fY29u
dGV4dC0+cmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBp
bnZlcnQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNhbXBsZUNvdmVyYWdlKEdD
R0xmbG9hdCB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewogICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnNhbXBsZUNv
dmVyYWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2Npc3NvcihHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewog
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM2
MzIsNyArMzYzMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2hhZGVyU291
cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYKICAgICBzaGFkZXItPnNldFNv
dXJjZShzdHJpbmcpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5j
aWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dM
aW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQogICAgICAgICByZXR1cm47CkBAIC0zNjQ1LDcgKzM2NDUsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVm
LCBHQzNEdWludAogICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsRnVuY1NlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdD
R0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQog
ewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTM2NzMsNyArMzY3Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jCiAgICAgbV9jb250ZXh0
LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CkBA
IC0zNjgyLDcgKzM2ODIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5j
aWxNYXNrKEdDM0R1aW50IG1hc2spCiAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsTWFza1NlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CkBA
IC0zNzA0LDIxICszNzA0LDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrCiAgICAgbV9jb250
ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFp
bCwgR0MzRGVudW0genBhc3MpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5j
aWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1f
Y29udGV4dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0Mz
RGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7CiAgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+
c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dGV4SW1hZ2UyREJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMpCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMg
cmV0dXJuZWQuCiAgICAgYXV0byB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFn
ZTJEIiwgdGFyZ2V0LCB0cnVlKTsKQEAgLTM3NDIsNyArMzc0Miw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHCiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlIGRvbVNvdXJjZSwgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp0ZXhJbWFnZTJESW1wbChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIElt
YWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wg
ZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0
YTsKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRy
YWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNw
YWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSk7CkBAIC0zNzcxLDcgKzM3
NzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkRJbXBsKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgRwogICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdu
bWVudCk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhG
dW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5
cGUgZnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwg
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rp
b25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCkKIHsKICAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5
cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM4MTYsNyArMzgxNiw3
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4ZWxzKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgUmVm
UHRyPEFycmF5QnVmZmVyVmlldz4mJiBwaXhlbHMpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuZ2V0KCks
IE51bGxBbGxvd2VkKQogICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwg
VGV4SW1hZ2UsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKQEAgLTM4
NDEsNyArMzg0MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiAgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5w
YWNrQWxpZ25tZW50KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhT
dWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIElt
YWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wg
ZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dGV4U3ViSW1hZ2UyREltcGwoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2UgZG9tU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7CiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9y
IGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUpOwpAQCAt
Mzg3Miw3ICszODcyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJ
bWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwKICAgICAgICAgbV9jb250
ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91
bnBhY2tBbGlnbm1lbnQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYg
cGl4ZWxzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlv
ZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmIHBpeGVscykKIHsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CkBAIC0zODgx
LDcgKzM4ODEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQwogICAgIGlmICghdGV4dHVyZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJl
LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICBHQ0dMZW51bSBpbnRlcm5h
bEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAg
IGlmICghaW50ZXJuYWxGb3JtYXQpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4
dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzkxMSw3ICszOTEx
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0
b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1l
bnQpOwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgT3B0
aW9uYWw8VGV4SW1hZ2VTb3VyY2U+JiYgc291cmNlKQorRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIE9wdGlvbmFsPFRleEltYWdlU291cmNlPiYmIHNvdXJjZSkKIHsK
ICAgICBpZiAoIXNvdXJjZSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAic291cmNlIGlzIG51bGwi
KTsKQEAgLTM5MjYsNyArMzkyNiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAg
IGlmICghdGV4dHVyZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgR0MzRGVu
dW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxl
dmVsKTsKKyAgICAgICAgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRl
cm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkg
ewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2
ZWwiKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CkBAIC0zOTQ4LDcgKzM5NDgsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRAogICAgICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+
Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgIEdDR0xlbnVtIGludGVy
bmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAg
ICAgICAgIGlmICghaW50ZXJuYWxGb3JtYXQpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJp
bnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CiAgICAgICAgICAgICByZXR1cm4geyB9
OwpAQCAtMzk5OCw3ICszOTk4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKICAgICAgICAg
aWYgKCF0ZXh0dXJlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBHQzNEZW51
bSBpbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpOworICAgICAgICBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVy
bmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICBpZiAoIWludGVybmFsRm9ybWF0KSB7
CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZl
bCIpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwMjIsNyArNDAyMiw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5n
ZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgR0NHTGVudW0gaW50ZXJu
YWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAg
ICAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImlu
dmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKICAgICAgICAgICAgIHJldHVybiB7IH07
CkBAIC00MDUyLDcgKzQwNTIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogICAgICAgICBp
ZiAoIXRleHR1cmUpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIEdDM0RlbnVt
IGludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7CisgICAgICAgIEdDR0xlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgIGlmICghaW50ZXJuYWxGb3JtYXQpIHsK
ICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVs
Iik7CiAgICAgICAgICAgICByZXR1cm4geyB9OwpAQCAtNDA3Myw3ICs0MDczLDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0QKICAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBzb3VyY2Uu
dmFsdWUoKSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVB
cnJheUJ1ZmZlclR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0eXBlLCBP
cHRpb25hbDxKU0M6OlR5cGVkQXJyYXlUeXBlPiBhcnJheVR5cGUpCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQXJyYXlCdWZmZXJUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0NHTGVudW0gdHlwZSwgT3B0aW9uYWw8SlNDOjpUeXBlZEFycmF5VHlwZT4gYXJy
YXlUeXBlKQogewogI2RlZmluZSBUWVBFX1ZBTElEQVRJT05fQ0FTRShhcnJheVR5cGVNYWNybykg
aWYgKGFycmF5VHlwZSAmJiBhcnJheVR5cGUudmFsdWUoKSAhPSBKU0M6OmFycmF5VHlwZU1hY3Jv
KSB7IFwKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCAiICNh
cnJheVR5cGVNYWNybyk7IFwKQEAgLTQxMTUsNyArNDExNSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVBcnJheUJ1ZmZlclR5cGUoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJW
aWV3KiBwaXhlbHMsIE51bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
QXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIE51bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKIHsK
ICAgICBpZiAoIXBpeGVscykgewogICAgICAgICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93
ZWQpCkBAIC00MTMyLDcgKzQxMzIsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgdW5zaWduZWQgdG90YWxCeXRlc1JlcXVpcmVkOwot
ICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhm
b3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRl
c1JlcXVpcmVkLCBudWxscHRyKTsKKyAgICBHQ0dMZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFj
a0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgbnVsbHB0cik7CiAgICAgaWYgKGVycm9y
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgewogICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihlcnJvciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDE0NiwxMCArNDE0NiwxMCBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQwogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRl
VGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAogICAgIFRleEZ1bmNW
YWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKLSAgICBHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsCi0gICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpCisgICAgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLAorICAgIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LAorICAgIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsCisgICAgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlKQogewogICAgIC8vIFdlIGFic29sdXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0
aGUgZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgogICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVu
dHJ5IHBvaW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwgcHJvZHVjZQpAQCAtNDE2Miw3
ICs0MTYyLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1
bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmEKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICAKLSAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgPSBwb3co
Mi4wLCBtX21heFRleHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7CisgICAgR0NHTGludCBtYXhUZXh0
dXJlU2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2ZWwp
OwogICAgIHN3aXRjaCAodGFyZ2V0KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV8yRDoKICAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8fCBo
ZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CkBAIC00MjAwLDcgKzQyMDAsNyBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQorYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludCBsZXZlbCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgpAQCAtNDQwNSw3ICs0NDA1LDcgQEAgYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNv
bnN0IGNoYXIqIGZ1bmN0aW8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7CiAgICAgQVNTRVJU
KCFpc0NvbnRleHRMb3N0KCkpOwogICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJz
KCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUpKTsKQEAgLTQ0MjQsNyArNDQyNCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREJhc2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsCiAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5
VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsRm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIpCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ1MCw4ICs0NDUwLDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEcKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKIAot
ICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwotICAgIEdDM0RzaXplaSBjbGlwcGVkV2lk
dGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgR0NHTGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAg
R0NHTHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKICAgICBpZiAoY2xpcDJEKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZy
YW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAm
Y2xpcHBlZEhlaWdodCkpIHsKICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VT
YWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
CiAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKQEAgLTQ0NjYsNyArNDQ2Niw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHCiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9C
WVRFKTsKIH0KIAotc3RhdGljIGJvb2wgaXNSR0JGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxGb3Jt
YXQpCitzdGF0aWMgYm9vbCBpc1JHQkZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCkKIHsK
ICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQgogICAg
ICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQQpAQCAtNDQ3
NCw3ICs0NDc0LDcgQEAgc3RhdGljIGJvb2wgaXNSR0JGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxG
b3JtYXQpCiAgICAgICAgIHx8IGludGVybmFsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBODsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIE9wdGlvbmFsPFRleElt
YWdlU291cmNlPiBzb3VyY2UpCitFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgT3B0aW9u
YWw8VGV4SW1hZ2VTb3VyY2U+IHNvdXJjZSkKIHsKICAgICBpZiAoIXNvdXJjZSkgewogICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRl
eEltYWdlMkQiLCAic291cmNlIGlzIG51bGwiKTsKQEAgLTQ2NjgsNyArNDY2OCw3IEBAIFJlZlB0
cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRN
TFZpZGVvRWxlbWVudCogdmlkCiAKICNlbmRpZgogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtZiwgR0NHTGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CkBA
IC00NzA2LDE3ICs0NzA2LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDCiAgICAgfQogfQog
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKIHsKICAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFt
ZSwgcGFyYW0sIDAsIHRydWUpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBw
YXJhbSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4UGFyYW1ldGVyaShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewogICAgIHRleFBh
cmFtZXRlcih0YXJnZXQsIHBuYW1lLCAwLCBwYXJhbSwgZmFsc2UpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RmbG9hdCB4KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQ0dMZmxv
YXQgeCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDcyOSw3ICs0NzI5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4KTsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkKIHsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJu
OwpAQCAtNDc0Miw3ICs0NzQyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLAogICAgIG1fY29u
dGV4dC0+dW5pZm9ybTJmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQog
ICAgICAgICByZXR1cm47CkBAIC00NzU1LDcgKzQ3NTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sCiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2YobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHks
IHopOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00Zihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQg
eSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQ0dM
ZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykKIHsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJu
OwpAQCAtNDc2OCw3ICs0NzY4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLAogICAgIG1fY29u
dGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDR0xpbnQgeCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2Nh
dGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtNDc4Niw3ICs0Nzg2LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB4KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmkoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0NHTGludCB4LCBHQ0dMaW50IHkpCiB7CiAgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsK
QEAgLTQ3OTksNyArNDc5OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5p
Zm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7CiB9CiAKLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeikKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeikKIHsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJu
OwpAQCAtNDgxMiw3ICs0ODEyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLAogICAgIG1fY29u
dGV4dC0+dW5pZm9ybTNpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKIH0KIAotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNE
aW50IHcpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aShjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dM
aW50IHosIEdDR0xpbnQgdykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtNDkwMiwyMSArNDkwMiwyMSBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi5sZW5ndGgoKSAvIDQsIHYuZGF0YSgpKTsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyTGlzdCYmIHYp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEZs
b2F0MzJMaXN0JiYgdikKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYubGVuZ3RoKCkgLyA0LCB0cmFu
c3Bvc2UsIHYuZGF0YSgpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyTGlzdCYmIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJMaXN0JiYgdikKIHsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgOSkp
CiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYubGVuZ3RoKCkgLyA5LCB0cmFuc3Bvc2UsIHYuZGF0YSgpKTsKIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBG
bG9hdDMyTGlzdCYmIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1N
YXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJMaXN0JiYgdikKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0
cml4NGZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgMTYpKQogICAgICAgICByZXR1cm47CkBA
IC00OTUxLDQ3ICs0OTUxLDQ3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKICAgICBtX2NvbnRleHQtPnZhbGlk
YXRlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
djApCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmKEdDR0x1
aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7CiAgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRl
eEF0dHJpYjFmIiwgaW5kZXgsIDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9h
dCB2MSkKIHsKICAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwg
MiwgdjAsIHYxLCAwLjBmLCAxLjBmKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxv
YXQgdjEsIEdDM0RmbG9hdCB2MikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVy
dGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBH
Q0dMZmxvYXQgdjIpCiB7CiAgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjNmIiwg
aW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdD
M0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQg
djAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7CiAgICAgdmVy
dGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjRmIiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYz
KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYo
R0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJMaXN0JiYgdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBGbG9hdDMyTGlzdCYmIHYp
CiB7CiAgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgV1RG
TW92ZSh2KSwgMSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4
QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyTGlzdCYmIHYpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgRmxvYXQz
Mkxpc3QmJiB2KQogewogICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2Iiwg
aW5kZXgsIFdURk1vdmUodiksIDIpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkxpc3QmJiB2KQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5k
ZXgsIEZsb2F0MzJMaXN0JiYgdikKIHsKICAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0
dHJpYjNmdiIsIGluZGV4LCBXVEZNb3ZlKHYpLCAzKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJMaXN0
JiYgdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGZ2KEdD
R0x1aW50IGluZGV4LCBGbG9hdDMyTGlzdCYmIHYpCiB7CiAgICAgdmVydGV4QXR0cmliZnZJbXBs
KCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgV1RGTW92ZSh2KSwgNCk7CiB9CiAKLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRl
eCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBH
QzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNp
emUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJp
ZGUsIGxvbmcgbG9uZyBvZmZzZXQpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTAzMiwxNyArNTAzMiwxNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdD
M0RpbnQgc2l6ZQogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3Rh
dGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSAlIHR5cGVTaXplKSkgeworICAgIGlmICgoc3Ry
aWRlICUgdHlwZVNpemUpIHx8IChzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpICUgdHlw
ZVNpemUpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAic3RyaWRlIG9yIG9mZnNl
dCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBHQzNE
c2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOworICAgIEdDR0xzaXplaSBi
eXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7CiAKLSAgICBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQsIHNp
emUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKTsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgYnl0ZXNQZXJFbGVtZW50LCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCksIG1f
Ym91bmRBcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdD
R0xpbnRwdHI+KG9mZnNldCkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZpZXdwb3J0KEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTE5
NiwyMCArNTE5NiwyMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3VtZSgp
CiAgICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldEJvb2xlYW5QYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvb2xlYW5QYXJhbWV0ZXIoR0NHTGVudW0gcG5hbWUp
CiB7Ci0gICAgR0MzRGJvb2xlYW4gdmFsdWUgPSAwOworICAgIEdDR0xib29sZWFuIHZhbHVlID0g
MDsKICAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCAmdmFsdWUpOwogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotVmVjdG9yPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK1ZlY3Rvcjxib29sPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0NHTGVudW0g
cG5hbWUpCiB7CiAgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9XUklU
RU1BU0spIHsKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9Ci0gICAgR0MzRGJvb2xlYW4gdmFsdWVbNF0gPSB7IDAgfTsKKyAgICBHQ0dMYm9vbGVh
biB2YWx1ZVs0XSA9IHsgMCB9OwogICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZh
bHVlKTsKICAgICBWZWN0b3I8Ym9vbD4gdmVjdG9yKDQpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCA0OyArK2kpCkBAIC01MjE3LDM3ICs1MjE3LDM3IEBAIFZlY3Rvcjxib29sPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0g
cG5hbWUpCiAgICAgcmV0dXJuIHZlY3RvcjsKIH0KIAotZmxvYXQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCitmbG9hdCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRGbG9hdFBhcmFtZXRlcihHQ0dMZW51bSBwbmFtZSkKIHsK
LSAgICBHQzNEZmxvYXQgdmFsdWUgPSAwOworICAgIEdDR0xmbG9hdCB2YWx1ZSA9IDA7CiAgICAg
bV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsICZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCi1pbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0SW50UGFyYW1ldGVyKEdDM0Rl
bnVtIHBuYW1lKQoraW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEludFBhcmFtZXRl
cihHQ0dMZW51bSBwbmFtZSkKIHsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBHQ0dMaW50
IHZhbHVlID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCAmdmFsdWUpOwog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdW5zaWduZWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit1bnNpZ25lZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbnNpZ25lZEludFBhcmFtZXRlcihHQ0dMZW51bSBw
bmFtZSkKIHsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBHQ0dMaW50IHZhbHVlID0gMDsK
ICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCAmdmFsdWUpOwogICAgIHJldHVybiB2
YWx1ZTsKIH0KIAotbG9uZyBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEludDY0
UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQorbG9uZyBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldEludDY0UGFyYW1ldGVyKEdDR0xlbnVtIHBuYW1lKQogewotICAgIEdDM0RpbnQ2
NCB2YWx1ZSA9IDA7CisgICAgR0NHTGludDY0IHZhbHVlID0gMDsKICAgICBtX2NvbnRleHQtPmdl
dEludGVnZXI2NHYocG5hbWUsICZ2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1SZWZQ
dHI8RmxvYXQzMkFycmF5PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCitSZWZQdHI8RmxvYXQzMkFycmF5PiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0NHTGVu
dW0gcG5hbWUpCiB7Ci0gICAgR0MzRGZsb2F0IHZhbHVlWzRdID0gezB9OworICAgIEdDR0xmbG9h
dCB2YWx1ZVs0XSA9IHswfTsKICAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUp
OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgc3dpdGNoIChwbmFtZSkgewpAQCAtNTI2
Niw5ICs1MjY2LDkgQEAgUmVmUHRyPEZsb2F0MzJBcnJheT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0QKICAgICByZXR1cm4gRmxvYXQz
MkFycmF5Ojp0cnlDcmVhdGUodmFsdWUsIGxlbmd0aCk7CiB9CiAKLVJlZlB0cjxJbnQzMkFycmF5
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQorUmVmUHRyPEludDMyQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0NHTGVudW0gcG5hbWUpCiB7Ci0gICAgR0Mz
RGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICBHQ0dMaW50IHZhbHVlWzRdID0gezB9OwogICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKQEAgLTUzNjMsMTQgKzUzNjMsMTQgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEo
KQogICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
Q1VCRV9NQVAsIDApOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4
SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50
ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KQorYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlv
blZhbGlkKEdDR0xlbnVtIHRleEludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBjb2xvckJ1ZmZlckZv
cm1hdCkKIHsKICAgICBhdXRvIG5lZWQgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2hh
bm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZvcm1hdCk7CiAgICAgYXV0byBoYXZlID0gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJG
b3JtYXQpOwogICAgIHJldHVybiAobmVlZCAmIGhhdmUpID09IG5lZWQ7CiB9CiAKLUdDM0RlbnVt
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1h
dCgpCitHQ0dMZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVm
ZmVyQ29sb3JGb3JtYXQoKQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKQEAgLTUzOTMsNyArNTM5Myw3IEBAIGlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkK
ICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdo
dCgpOwogfQogCi1SZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKK1JlZlB0cjxXZWJHTFRleHR1
cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNG
b3JDdWJlTWFwKQogewogICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmU7CiAgICAgc3dp
dGNoICh0YXJnZXQpIHsKQEAgLTU0NDIsNyArNTQ0Miw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNE
aW50IHkpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU2l6ZShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xpbnQgeCwgR0NHTGludCB5KQogewogICAgIGlmICh4
IDwgMCB8fCB5IDwgMCkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8IDAiKTsKQEAgLTU0NjIs
NyArNTQ2Miw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdHJp
bmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwp
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0xldmVsKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsKQog
ewogICAgIGlmIChsZXZlbCA8IDApIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIDwgMCIpOwpA
QCAtNTQ5Miw3ICs1NDkyLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZVRleEZ1bmNMZXZlbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEcKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0NHTGVudW0gZm9ybWF0KQogewog
ICAgIHJldHVybiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpOwog
fQpAQCAtNTUwMywxMiArNTUwMywxMiBAQCBzdHJ1Y3QgQmxvY2tQYXJhbWV0ZXJzIHsKICAgICBj
b25zdCBpbnQgc2l6ZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2FsY3VsYXRlQnl0
ZXNGb3JBU1RDKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgY29uc3QgQmxvY2tQ
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVC
eXRlc0ZvckFTVEMoR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBjb25zdCBCbG9j
a1BhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgcmV0dXJuICgod2lkdGggKyBwYXJhbWV0
ZXJzLndpZHRoIC0gMSkgLyBwYXJhbWV0ZXJzLndpZHRoKSAqICgoaGVpZ2h0ICsgcGFyYW1ldGVy
cy5oZWlnaHQgLSAxKSAvIHBhcmFtZXRlcnMuaGVpZ2h0KSAqIHBhcmFtZXRlcnMuc2l6ZTsKIH0K
IAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
dW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcmIHBpeGVscykKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0Rh
dGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3JiBwaXhlbHMpCiB7CiAgICAg
aWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgPCAwIik7CkBAIC01NTM1LDggKzU1MzUsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1
bmN0aQogICAgICAgICBCbG9ja1BhcmFtZXRlcnMgeyAxMiwgMTAsIGtBU1RDQmxvY2tTaXplIH0s
CiAgICAgICAgIEJsb2NrUGFyYW1ldGVycyB7IDEyLCAxMiwga0FTVENCbG9ja1NpemUgfQogICAg
IH07Ci0gICAgY29uc3QgR0MzRGVudW0gQVNUQ0VudW1TdGFydFJHQkEgPSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7Ci0gICAgY29uc3QgR0MzRGVudW0gQVNUQ0Vu
dW1TdGFydFNSR0I4ID0gRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzR4NF9LSFI7CisgICAgY29uc3QgR0NHTGVudW0gQVNUQ0VudW1TdGFydFJHQkEgPSBFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7CisgICAgY29uc3QgR0NHTGVudW0g
QVNUQ0VudW1TdGFydFNSR0I4ID0gRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzR4NF9LSFI7CiAKICAgICBjb25zdCBpbnQga0VBQ0FuZEVUQzJCbG9ja1NpemUgPSA0
OwogCkBAIC01NjU5LDE3ICs1NjU5LDE3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3RpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0KQogewogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CiAgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgogICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKICAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29u
c3QgR0MzRHNpemVpIGtCbG9ja1dpZHRoID0gNDsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtC
bG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0
YXJnZXQgPyBtX21heFRleHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Ci0gICAg
ICAgIGNvbnN0IEdDM0RzaXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNp
emUgPj4gbGV2ZWw7CisgICAgICAgIGNvbnN0IEdDR0xzaXplaSBrQmxvY2tXaWR0aCA9IDQ7Cisg
ICAgICAgIGNvbnN0IEdDR0xzaXplaSBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICBjb25zdCBH
Q0dMaW50IG1heFRleHR1cmVTaXplID0gdGFyZ2V0ID8gbV9tYXhUZXh0dXJlU2l6ZSA6IG1fbWF4
Q3ViZU1hcFRleHR1cmVTaXplOworICAgICAgICBjb25zdCBHQ0dMc2l6ZWkgbWF4Q29tcHJlc3Nl
ZERpbWVuc2lvbiA9IG1heFRleHR1cmVTaXplID4+IGxldmVsOwogICAgICAgICBib29sIHdpZHRo
VmFsaWQgPSAobGV2ZWwgJiYgd2lkdGggPT0gMSkgfHwgKGxldmVsICYmIHdpZHRoID09IDIpIHx8
ICghKHdpZHRoICUga0Jsb2NrV2lkdGgpICYmIHdpZHRoIDw9IG1heENvbXByZXNzZWREaW1lbnNp
b24pOwogICAgICAgICBib29sIGhlaWdodFZhbGlkID0gKGxldmVsICYmIGhlaWdodCA9PSAxKSB8
fCAobGV2ZWwgJiYgaGVpZ2h0ID09IDIpIHx8ICghKGhlaWdodCAlIGtCbG9ja0hlaWdodCkgJiYg
aGVpZ2h0IDw9IG1heENvbXByZXNzZWREaW1lbnNpb24pOwogICAgICAgICBpZiAoIXdpZHRoVmFs
aWQgfHwgIWhlaWdodFZhbGlkKSB7CkBAIC01NzM0LDggKzU3MzQsNyBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoY29uc3Qg
Y2hhciogZnVuYwogICAgIH0KIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKIHsKICAgICBpZiAoeG9mZnNldCA8
IDAgfHwgeW9mZnNldCA8IDApIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNl
dCA8IDAiKTsKQEAgLTU4MDgsNyArNTgwNyw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmCiAg
ICAgfQogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01v
ZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQorYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0NHTGVudW0gbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpQT0lOVFM6CkBAIC01ODM0LDcgKzU4MzMsNyBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBmdW5jKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gZnVuYykKIHsK
ICAgICBzd2l0Y2ggKGZ1bmMpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpORVZFUjoK
QEAgLTU4NzUsNyArNTg3NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cHJp
bnRUb0NvbnNvbGUoTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHBy
aW50VG9Db25zb2xlKE1lc3NhZ2VMZXZlbDo6V2FybmluZywgIldlYkdMOiB0b28gbWFueSBlcnJv
cnMsIG5vIG1vcmUgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWQgdG8gdGhlIGNvbnNvbGUgZm9yIHRo
aXMgY29udGV4dC4iKTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBz
cmMsIEdDM0RlbnVtIGRzdCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gc3Jj
LCBHQ0dMZW51bSBkc3QpCiB7CiAgICAgaWYgKCgoc3JjID09IEdyYXBoaWNzQ29udGV4dEdMOjpD
T05TVEFOVF9DT0xPUiB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok9ORV9NSU5VU19DT05T
VEFOVF9DT0xPUikKICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6Q09OU1RB
TlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpPTkVfTUlOVVNfQ09OU1RBTlRf
QUxQSEEpKQpAQCAtNTg4NywyNyArNTg4NiwyNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGNvbnN0IEZsb2F0MzJMaXN0JiB2LCBHQzNE
c2l6ZWkgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBjb25zdCBGbG9hdDMyTGlzdCYgdiwgR0NH
THNpemVpIHJlcXVpcmVkTWluU2l6ZSkKIHsKICAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi5kYXRhKCksIHYu
bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgY29uc3QgSW50MzJMaXN0
JiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBjb25zdCBJbnQzMkxpc3Qm
IHYsIEdDR0xzaXplaSByZXF1aXJlZE1pblNpemUpCiB7CiAgICAgcmV0dXJuIHZhbGlkYXRlVW5p
Zm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYuZGF0
YSgpLCB2Lmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwogfQogCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIHZvaWQqIHYs
IEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2b2lk
KiB2LCBHQ0dMc2l6ZWkgc2l6ZSwgR0NHTHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKIHsKICAgICBy
ZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0
aW9uLCBmYWxzZSwgdiwgc2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKIH0KIAotYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEZsb2F0MzJMaXN0JiB2LCBHQzNEc2l6ZWkg
cmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNv
bnN0IEZsb2F0MzJMaXN0JiB2LCBHQ0dMc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQogewogICAgIHJl
dHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRp
b24sIHRyYW5zcG9zZSwgdi5kYXRhKCksIHYubGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7CiB9
CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCB2b2lkKiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCB2b2lkKiB2LCBHQ0dMc2l6ZWkgc2l6ZSwgR0NH
THNpemVpIHJlcXVpcmVkTWluU2l6ZSkKIHsKICAgICBpZiAoIWxvY2F0aW9uKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC01OTMwLDcgKzU5MjksNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
YwogICAgIHJldHVybiB0cnVlOwogfQogCi1XZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpCitXZWJHTEJ1ZmZlciogV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gdXNhZ2UpCiB7
CiAgICAgT3B0aW9uYWw8V2ViR0xCdWZmZXIqPiBidWZmZXI7CiAgICAgc3dpdGNoICh0YXJnZXQp
IHsKQEAgLTYwMjYsNyArNjAyNSw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyCiAKICNlbmRp
ZgogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZJbXBsKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3Rl
ZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9h
dCB2MykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZkltcGwo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGV4cGVj
dGVkU2l6ZSwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZs
b2F0IHYzKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTYwNTgsNyArNjA1Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNECiAgICAg
YXR0cmliVmFsdWUudmFsdWVbM10gPSB2MzsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgRmxvYXQzMkxpc3QmJiBsaXN0LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMdWludCBpbmRleCwgRmxvYXQzMkxpc3QmJiBsaXN0LCBH
Q0dMc2l6ZWkgZXhwZWN0ZWRTaXplKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYxMjEsNyArNjEyMCw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6aW5pdFZlcnRleEF0dHJpYjAoKQogICAgIG1fdmVydGV4QXR0cmli
MFVzZWRCZWZvcmUgPSBmYWxzZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZVNpbXVsYXRlZFZlcnRleEF0dHJpYjAoR0MzRHVpbnQgbnVtVmVydGV4KQorYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVNpbXVsYXRlZFZlcnRleEF0dHJp
YjAoR0NHTHVpbnQgbnVtVmVydGV4KQogewogICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC02MTM0LDE2ICs2MTMzLDE2IEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTaW11bGF0ZWRWZXJ0ZXhBdHRyaWIwKEdDM0R1aW50
IG51bVZlcnRlCiAgICAgaWYgKHN0YXRlLmVuYWJsZWQpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgYXV0byBidWZmZXJTaXplID0gY2hlY2tlZEFkZEFuZE11bHRpcGx5PEdDM0R1aW50Pihu
dW1WZXJ0ZXgsIDEsIDQpOworICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGNoZWNrZWRBZGRBbmRNdWx0
aXBseTxHQ0dMdWludD4obnVtVmVydGV4LCAxLCA0KTsKICAgICBpZiAoIWJ1ZmZlclNpemUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENoZWNrZWQ8R0MzRHNpemVpcHRyLCBSZWNvcmRP
dmVyZmxvdz4gYnVmZmVyRGF0YVNpemUoYnVmZmVyU2l6ZS52YWx1ZSgpKTsKLSAgICBidWZmZXJE
YXRhU2l6ZSAqPSBDaGVja2VkPEdDM0RzaXplaXB0cj4oc2l6ZW9mKEdDM0RmbG9hdCkpOworICAg
IENoZWNrZWQ8R0NHTHNpemVpcHRyLCBSZWNvcmRPdmVyZmxvdz4gYnVmZmVyRGF0YVNpemUoYnVm
ZmVyU2l6ZS52YWx1ZSgpKTsKKyAgICBidWZmZXJEYXRhU2l6ZSAqPSBDaGVja2VkPEdDR0xzaXpl
aXB0cj4oc2l6ZW9mKEdDR0xmbG9hdCkpOwogICAgIHJldHVybiAhYnVmZmVyRGF0YVNpemUuaGFz
T3ZlcmZsb3dlZCgpICYmIGJ1ZmZlckRhdGFTaXplLnVuc2FmZUdldCgpID4gMDsKIH0KIAotT3B0
aW9uYWw8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2ltdWxhdGVWZXJ0ZXhBdHRy
aWIwKEdDM0R1aW50IG51bVZlcnRleCkKK09wdGlvbmFsPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnNpbXVsYXRlVmVydGV4QXR0cmliMChHQ0dMdWludCBudW1WZXJ0ZXgpCiB7CiAg
ICAgaWYgKCFtX2N1cnJlbnRQcm9ncmFtKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MTYw
LDggKzYxNTksOCBAQCBPcHRpb25hbDxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpz
aW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHVpbnQgbnVtVmVydAogICAgIG1fY29udGV4dC0+Ymlu
ZEJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBC
dWZmZXItPm9iamVjdCgpKTsKIAogICAgIC8vIFdlIGtub3cgYnVmZmVyU2l6ZSBhbmQgYnVmZmVy
RGF0YVNpemUgd29uJ3Qgb3ZlcmZsb3cgb3IgZ28gbmVnYXRpdmUsIHRoYW5rcyB0byB2YWxpZGF0
ZVNpbXVsYXRlZFZlcnRleEF0dHJpYjAKLSAgICBHQzNEdWludCBidWZmZXJTaXplID0gKG51bVZl
cnRleCArIDEpICogNDsKLSAgICBHQzNEc2l6ZWlwdHIgYnVmZmVyRGF0YVNpemUgPSBidWZmZXJT
aXplICogc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgR0NHTHVpbnQgYnVmZmVyU2l6ZSA9IChudW1W
ZXJ0ZXggKyAxKSAqIDQ7CisgICAgR0NHTHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gYnVmZmVy
U2l6ZSAqIHNpemVvZihHQ0dMZmxvYXQpOwogCiAgICAgaWYgKGJ1ZmZlckRhdGFTaXplID4gbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSkgewogICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpOwpAQCAtNjE4Niw4ICs2MTg1LDggQEAgT3B0aW9uYWw8Ym9v
bD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0R1
aW50IG51bVZlcnQKICAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdCiAgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKIAotICAgICAgICBhdXRv
IGJ1ZmZlckRhdGEgPSBtYWtlVW5pcXVlQXJyYXk8R0MzRGZsb2F0PihidWZmZXJTaXplKTsKLSAg
ICAgICAgZm9yIChHQzNEdWludCBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkgewor
ICAgICAgICBhdXRvIGJ1ZmZlckRhdGEgPSBtYWtlVW5pcXVlQXJyYXk8R0NHTGZsb2F0PihidWZm
ZXJTaXplKTsKKyAgICAgICAgZm9yIChHQ0dMdWludCBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsg
MTsgKytpaSkgewogICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDRdID0gYXR0cmliVmFsdWUu
dmFsdWVbMF07CiAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNCArIDFdID0gYXR0cmliVmFs
dWUudmFsdWVbMV07CiAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNCArIDJdID0gYXR0cmli
VmFsdWUudmFsdWVbMl07CkBAIC02MzY0LDcgKzYzNjMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmJ1YmJsZVRvRnJvbnQoc2l6ZV90IGlk
eCkKIAogbmFtZXNwYWNlIHsKIAotICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBl
cnJvcikKKyAgICBTdHJpbmcgR2V0RXJyb3JTdHJpbmcoR0NHTGVudW0gZXJyb3IpCiAgICAgewog
ICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfRU5VTToKQEAgLTYzODYsNyArNjM4NSw3IEBAIG5hbWVzcGFjZSB7CiAKIH0gLy8g
bmFtZXNwYWNlIGFub255bW91cwogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN5
bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgZGlzcGxh
eSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3ludGhlc2l6ZUdMRXJyb3IoR0NH
TGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3Jp
cHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5KQogewogICAgIGlmIChtX3N5
bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkgPT0gRGlzcGxheUluQ29uc29sZSkg
ewogICAgICAgICBTdHJpbmcgc3RyID0gIldlYkdMOiAiICsgR2V0RXJyb3JTdHJpbmcoZXJyb3Ip
ICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1lKSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRp
b24pOwpAQCAtNjQwOSw3ICs2NDA4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjphcHBseVN0ZW5jaWxUZXN0KCkKICAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0
R0w6OlNURU5DSUxfVEVTVCwgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNpbEJ1ZmZlcik7
CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlT3JEaXNhYmxlKEdD
M0RlbnVtIGNhcGFiaWxpdHksIGJvb2wgZW5hYmxlKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjplbmFibGVPckRpc2FibGUoR0NHTGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUp
CiB7CiAgICAgaWYgKGVuYWJsZSkKICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0
eSk7CkBAIC02NDIzLDcgKzY0MjIsNyBAQCBJbnRTaXplIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNsYW1wZWRDYW52YXNTaXplKCkKICAgICAgICAgY2xhbXAoY2FudmFzQmFzZSgpLmhlaWdo
dCgpLCAxLCBtX21heFZpZXdwb3J0RGltc1sxXSkpOwogfQogCi1HQzNEaW50IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldE1heERyYXdCdWZmZXJzKCkKK0dDR0xpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0TWF4RHJhd0J1ZmZlcnMoKQogewogICAgIGlmICghc3VwcG9ydHNE
cmF3QnVmZmVycygpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTY0MzUsNyArNjQzNCw3IEBAIEdD
M0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0TWF4RHJhd0J1ZmZlcnMoKQogICAg
IHJldHVybiBzdGQ6Om1pbihtX21heERyYXdCdWZmZXJzLCBtX21heENvbG9yQXR0YWNobWVudHMp
OwogfQogCi1HQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heENvbG9yQXR0
YWNobWVudHMoKQorR0NHTGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhDb2xv
ckF0dGFjaG1lbnRzKCkKIHsKICAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC02NDQ0LDcgKzY0NDMsNyBAQCBHQzNEaW50IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldE1heENvbG9yQXR0YWNobWVudHMoKQogICAgIHJldHVybiBtX21heENv
bG9yQXR0YWNobWVudHM7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2V0
QmFja0RyYXdCdWZmZXIoR0MzRGVudW0gYnVmKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpzZXRCYWNrRHJhd0J1ZmZlcihHQ0dMZW51bSBidWYpCiB7CiAgICAgbV9iYWNrRHJhd0J1
ZmZlciA9IGJ1ZjsKIH0KQEAgLTY0NzEsNyArNjQ3MCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c3VwcG9ydHNEcmF3QnVmZmVycygpCiAgICAgcmV0dXJuIG1fZHJhd0J1ZmZl
cnNTdXBwb3J0ZWQ7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0Fy
cmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNp
emVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewogICAgIGlmICghcHJpbWNvdW50KSB7
CiAgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwpAQCAtNjUwNSw3ICs2NTA0LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RpbnQgZmlyc3QKICAgICBtYXJrQ29udGV4dENoYW5nZWRBbmROb3RpZnlDYW52
YXNPYnNlcnZlcigpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdF
bGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2Rl
LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xz
aXplaSBwcmltY291bnQpCiB7CiAgICAgaWYgKCFwcmltY291bnQpIHsKICAgICAgICAgbWFya0Nv
bnRleHRDaGFuZ2VkKCk7CkBAIC02NTIxLDcgKzY1MjAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6
ZWkgYwogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwogICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAg
ICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgICAgICB2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZz
ZXQpLCBudW1FbGVtZW50cyk7CiAgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3Rh
dHVzID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKICAgICAgICAgaWYgKCFz
aW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5h
YmxlIHRvIHNpbXVsYXRlIHRoZSBhdHRyaWJ1dGUgYnVmZmVyLgpAQCAtNjUzOCw3ICs2NTM3LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGMKICAgICAgICAgbV9jb250ZXh0LT5wcmltaXRpdmVS
ZXN0YXJ0SW5kZXgoZ2V0UmVzdGFydEluZGV4KHR5cGUpKTsKICNlbmRpZgogCi0gICAgbV9jb250
ZXh0LT5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0
PEdDM0RpbnRwdHI+KG9mZnNldCksIHByaW1jb3VudCk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxl
bWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+
KG9mZnNldCksIHByaW1jb3VudCk7CiAKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQogICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhB
dHRyaWIwU2ltdWxhdGlvbigpOwpAQCAtNjU0Nyw3ICs2NTQ2LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0Mz
RHNpemVpIGMKICAgICBtYXJrQ29udGV4dENoYW5nZWRBbmROb3RpZnlDYW52YXNPYnNlcnZlcigp
OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYkRpdmlz
b3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50
IGRpdmlzb3IpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCmluZGV4IDBjNDQ1MmJiNjBjNDJiNzBkN2RlNTc5OTk2OTQxNWFm
NDI3MTQzNDguLjZhY2MxMTJjZjM2YWIyMzg3OWUxZjA0ODIwN2FiNWEyYzQ4YzFiOGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgKQEAgLTExNCw0NiArMTE0LDQ2IEBAIHB1YmxpYzoKICAgICBpbnQgZHJhd2luZ0J1
ZmZlcldpZHRoKCkgY29uc3Q7CiAgICAgaW50IGRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdDsK
IAotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKTsKKyAgICB2b2lkIGFj
dGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSk7CiAgICAgdm9pZCBhdHRhY2hTaGFkZXIoV2Vi
R0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihX
ZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2
b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciopOwotICAgIHZvaWQg
YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciopOwotICAg
IHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVy
Kik7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSop
OwotICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdD
M0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvbihH
QzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBt
b2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOwotICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVt
IHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwotICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUo
R0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNE
ZW51bSBkc3RBbHBoYSk7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdm9pZCBiaW5kQnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqKTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1
ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqKTsKKyAgICB2b2lkIGJpbmRS
ZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciopOworICAgIHZv
aWQgYmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqKTsKKyAgICB2b2lk
IGJsZW5kQ29sb3IoR0NHTGZsb2F0IHJlZCwgR0NHTGZsb2F0IGdyZWVuLCBHQ0dMZmxvYXQgYmx1
ZSwgR0NHTGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9k
ZSk7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NH
TGVudW0gbW9kZUFscGhhKTsKKyAgICB2b2lkIGJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBH
Q0dMZW51bSBkZmFjdG9yKTsKKyAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNy
Y1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxw
aGEpOwogCiAgICAgdXNpbmcgQnVmZmVyRGF0YVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8
QXJyYXlCdWZmZXI+LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj47Ci0gICAgdm9pZCBidWZmZXJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdDM0RlbnVtIHVzYWdlKTsKLSAg
ICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBPcHRpb25hbDxCdWZmZXJEYXRhU291
cmNlPiYmLCBHQzNEZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgT3B0aW9uYWw8QnVmZmVyRGF0YVNvdXJjZT4mJik7
Ci0KLSAgICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKSA9IDA7Ci0gICAgdm9p
ZCBjbGVhckNvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJs
dWUsIEdDM0RmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBjbGVhckRlcHRoKEdDM0RmbG9hdCk7Ci0g
ICAgdm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCk7Ci0gICAgdm9pZCBjb2xvck1hc2soR0MzRGJv
b2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xl
YW4gYWxwaGEpOworICAgIHZvaWQgYnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIGxvbmcgbG9u
ZyBzaXplLCBHQ0dMZW51bSB1c2FnZSk7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRh
cmdldCwgT3B0aW9uYWw8QnVmZmVyRGF0YVNvdXJjZT4mJiwgR0NHTGVudW0gdXNhZ2UpOworICAg
IHZvaWQgYnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIE9w
dGlvbmFsPEJ1ZmZlckRhdGFTb3VyY2U+JiYpOworCisgICAgR0NHTGVudW0gY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihHQ0dM
Yml0ZmllbGQgbWFzaykgPSAwOworICAgIHZvaWQgY2xlYXJDb2xvcihHQ0dMZmxvYXQgcmVkLCBH
Q0dMZmxvYXQgZ3JlZW4sIEdDR0xmbG9hdCBibHVlLCBHQ0dMZmxvYXQgYWxwaGEpOworICAgIHZv
aWQgY2xlYXJEZXB0aChHQ0dMZmxvYXQpOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDR0xpbnQp
OworICAgIHZvaWQgY29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4s
IEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29sZWFuIGFscGhhKTsKICAgICB2b2lkIGNvbXBpbGVT
aGFkZXIoV2ViR0xTaGFkZXIqKTsKIAotICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZm
ZXJWaWV3JiBkYXRhKTsKLSAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBBcnJh
eUJ1ZmZlclZpZXcmIGRhdGEpOworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgQXJyYXlCdWZmZXJW
aWV3JiBkYXRhKTsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBBcnJheUJ1
ZmZlclZpZXcmIGRhdGEpOwogCi0gICAgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
cik7Ci0gICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIGNvcHlU
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKTsKKyAgICB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlv
ZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpOwogCiAgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVhdGVCdWZmZXIoKTsKICAgICBS
ZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJhbWVidWZmZXIoKTsKICAgICBSZWZQdHI8
V2ViR0xQcm9ncmFtPiBjcmVhdGVQcm9ncmFtKCk7CiAgICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVm
ZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0
ZVNoYWRlcihHQzNEZW51bSB0eXBlKTsKKyAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0ZVNo
YWRlcihHQ0dMZW51bSB0eXBlKTsKICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKCk7CiAKLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOworICAgIHZvaWQgY3Vs
bEZhY2UoR0NHTGVudW0gbW9kZSk7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZl
ciopOwogICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwpAQCAt
MTYyLDQ3ICsxNjIsNDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlU2hhZGVyKFdlYkdMU2hh
ZGVyKik7CiAgICAgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwogCi0gICAgdm9p
ZCBkZXB0aEZ1bmMoR0MzRGVudW0pOwotICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuKTsK
LSAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcik7Cisg
ICAgdm9pZCBkZXB0aEZ1bmMoR0NHTGVudW0pOworICAgIHZvaWQgZGVwdGhNYXNrKEdDR0xib29s
ZWFuKTsKKyAgICB2b2lkIGRlcHRoUmFuZ2UoR0NHTGZsb2F0IHpOZWFyLCBHQ0dMZmxvYXQgekZh
cik7CiAgICAgdm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKTsK
LSAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCk7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVt
IG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCk7Ci0gICAgdm9pZCBkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25n
IGxvbmcgb2Zmc2V0KTsKKyAgICB2b2lkIGRpc2FibGUoR0NHTGVudW0gY2FwKTsKKyAgICB2b2lk
IGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCk7CisgICAgdm9pZCBkcmF3
QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCk7Cisg
ICAgdm9pZCBkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dM
ZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0KTsKIAotICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVt
IGNhcCk7Ci0gICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCk7
CisgICAgdm9pZCBlbmFibGUoR0NHTGVudW0gY2FwKTsKKyAgICB2b2lkIGVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KTsKICAgICB2b2lkIGZpbmlzaCgpOwogICAgIHZvaWQg
Zmx1c2goKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJH
TFJlbmRlcmJ1ZmZlciopOwotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4
dHVyZSosIEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUp
OwotICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKKyAgICB2b2lkIGZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVu
dCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciopOworICAg
IHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEdDR0xpbnQgbGV2ZWwp
OworICAgIHZvaWQgZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUpOworICAgIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KTsKIAotICAgIFJlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdl
dEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCk7Ci0gICAgUmVmUHRy
PFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qLCBHQzNEdWlu
dCBpbmRleCk7CisgICAgUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlQXR0cmliKFdl
YkdMUHJvZ3JhbSosIEdDR0x1aW50IGluZGV4KTsKKyAgICBSZWZQdHI8V2ViR0xBY3RpdmVJbmZv
PiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIEdDR0x1aW50IGluZGV4KTsKICAgICBP
cHRpb25hbDxWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4+IGdldEF0dGFjaGVkU2hhZGVycyhX
ZWJHTFByb2dyYW0qKTsKLSAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xBbnkgZ2V0QnVmZmVyUGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUpOworICAgIEdDR0xpbnQgZ2V0QXR0cmli
TG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBXZWJHTEFu
eSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSk7CiAg
ICAgT3B0aW9uYWw8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gZ2V0Q29udGV4dEF0dHJpYnV0ZXMo
KTsKLSAgICBHQzNEZW51bSBnZXRFcnJvcigpOworICAgIEdDR0xlbnVtIGdldEVycm9yKCk7CiAg
ICAgdmlydHVhbCBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFt
ZSkgPSAwOwotICAgIHZpcnR1YWwgV2ViR0xBbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5h
bWUpID0gMDsKLSAgICB2aXJ0dWFsIFdlYkdMQW55IGdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSkgPSAwOwotICAgIFdlYkdMQW55IGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiwg
R0MzRGVudW0gcG5hbWUpOworICAgIHZpcnR1YWwgV2ViR0xBbnkgZ2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NH
TGVudW0gcG5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkdMQW55IGdldFBhcmFtZXRlcihHQ0dM
ZW51bSBwbmFtZSkgPSAwOworICAgIFdlYkdMQW55IGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQ
cm9ncmFtKiwgR0NHTGVudW0gcG5hbWUpOwogICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhX
ZWJHTFByb2dyYW0qKTsKLSAgICBXZWJHTEFueSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSk7Ci0gICAgV2ViR0xBbnkgZ2V0U2hhZGVyUGFy
YW1ldGVyKFdlYkdMU2hhZGVyKiwgR0MzRGVudW0gcG5hbWUpOworICAgIFdlYkdMQW55IGdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKTsKKyAg
ICBXZWJHTEFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqLCBHQ0dMZW51bSBwbmFt
ZSk7CiAgICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqKTsKLSAgICBSZWZQ
dHI8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChH
QzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlKTsKKyAgICBSZWZQdHI8
V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dM
ZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlKTsKICAgICBTdHJpbmcgZ2V0
U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKik7CiAgICAgdmlydHVhbCBPcHRpb25hbDxWZWN0b3I8
U3RyaW5nPj4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpID0gMDsKLSAgICBXZWJHTEFueSBnZXRU
ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSk7CisgICAgV2ViR0xB
bnkgZ2V0VGV4UGFyYW1ldGVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpOwogICAg
IFdlYkdMQW55IGdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qKTsKICAgICBSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IGdldFVuaWZvcm1Mb2Nh
dGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmKTsKLSAgICBXZWJHTEFueSBnZXRWZXJ0
ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKTsKLSAgICBsb25nIGxvbmcg
Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7Cisg
ICAgV2ViR0xBbnkgZ2V0VmVydGV4QXR0cmliKEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFt
ZSk7CisgICAgbG9uZyBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwg
R0NHTGVudW0gcG5hbWUpOwogCiAgICAgYm9vbCBleHRlbnNpb25Jc0VuYWJsZWQoY29uc3QgU3Ry
aW5nJik7CiAKQEAgLTIxMiwzNSArMjEyLDM1IEBAIHB1YmxpYzoKICAgICBib29sIHByZXZlbnRC
dWZmZXJDbGVhckZvckluc3BlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmVudEJ1ZmZlckNs
ZWFyRm9ySW5zcGVjdG9yOyB9CiAgICAgdm9pZCBzZXRQcmV2ZW50QnVmZmVyQ2xlYXJGb3JJbnNw
ZWN0b3IoYm9vbCB2YWx1ZSkgeyBtX3ByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3RvciA9IHZh
bHVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IG1vZGUpID0gMDsKLSAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOworICAg
IHZpcnR1YWwgdm9pZCBoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkgPSAwOwor
ICAgIEdDR0xib29sZWFuIGlzQnVmZmVyKFdlYkdMQnVmZmVyKik7CiAgICAgYm9vbCBpc0NvbnRl
eHRMb3N0KCkgY29uc3Q7Ci0gICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCk7
Ci0gICAgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7Ci0gICAg
R0MzRGJvb2xlYW4gaXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwotICAgIEdDM0Rib29sZWFuIGlz
UmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7Ci0gICAgR0MzRGJvb2xlYW4gaXNTaGFk
ZXIoV2ViR0xTaGFkZXIqKTsKLSAgICBHQzNEYm9vbGVhbiBpc1RleHR1cmUoV2ViR0xUZXh0dXJl
Kik7Ci0KLSAgICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOworICAgIEdDR0xib29sZWFuIGlz
RW5hYmxlZChHQ0dMZW51bSBjYXApOworICAgIEdDR0xib29sZWFuIGlzRnJhbWVidWZmZXIoV2Vi
R0xGcmFtZWJ1ZmZlciopOworICAgIEdDR0xib29sZWFuIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0q
KTsKKyAgICBHQ0dMYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOwor
ICAgIEdDR0xib29sZWFuIGlzU2hhZGVyKFdlYkdMU2hhZGVyKik7CisgICAgR0NHTGJvb2xlYW4g
aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSopOworCisgICAgdm9pZCBsaW5lV2lkdGgoR0NHTGZsb2F0
KTsKICAgICB2b2lkIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwogICAgIGJvb2wgbGlua1By
b2dyYW1XaXRob3V0SW52YWxpZGF0aW5nQXR0cmliTG9jYXRpb25zKFdlYkdMUHJvZ3JhbSopOwot
ICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwotICAg
IHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpOwot
ICAgIHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5
QnVmZmVyVmlldyYgcGl4ZWxzKTsKKyAgICB2b2lkIHBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50IHBhcmFtKTsKKyAgICB2b2lkIHBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3Rv
ciwgR0NHTGZsb2F0IHVuaXRzKTsKKyAgICB2b2lkIHJlYWRQaXhlbHMoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcmIHBpeGVscyk7CiAgICAgdm9pZCByZWxl
YXNlU2hhZGVyQ29tcGlsZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFn
ZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKLSAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0Rm
bG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsKLSAgICB2b2lkIHNjaXNzb3IoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAg
dmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSA9IDA7
CisgICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShHQ0dMZmxvYXQgdmFsdWUsIEdDR0xib29sZWFuIGlu
dmVydCk7CisgICAgdm9pZCBzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpOwogICAgIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5j
LCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBt
YXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50KTsKLSAgICB2b2lkIHN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVu
Y2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKLSAg
ICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdD
M0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7CisgICAgdm9pZCBzdGVuY2lsRnVuYyhHQ0dM
ZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2ls
RnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBH
Q0dMdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrKEdDR0x1aW50KTsKKyAgICB2b2lk
IHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzayk7CisgICAg
dm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpw
YXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVt
IGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcyk7CiAKLSAgICB2b2lkIHRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYm
KTsKKyAgICB2b2lkIHRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBSZWZQdHI8
QXJyYXlCdWZmZXJWaWV3PiYmKTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB1c2luZyBUZXhJ
bWFnZVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8SW1hZ2VCaXRtYXA+LCBSZWZQdHI8SW1h
Z2VEYXRhPiwgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1l
bnQ+LCBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4+OwpAQCAtMjQ4LDEzICsyNDgsMTMgQEAgcHVi
bGljOgogICAgIHVzaW5nIFRleEltYWdlU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxJbWFn
ZUJpdG1hcD4sIFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJl
ZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+OwogI2VuZGlmCiAKLSAgICBFeGNlcHRpb25Pcjx2b2lk
PiB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgT3B0aW9uYWw8VGV4
SW1hZ2VTb3VyY2U+KTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiB0ZXhJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgT3B0aW9uYWw8VGV4SW1hZ2VTb3VyY2U+KTsKIAotICAg
IHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQgcGFyYW0pOwotICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKTsKKyAgICB2b2lk
IHRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBw
YXJhbSk7CiAKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+JiYpOwotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBPcHRpb25hbDxUZXhJ
bWFnZVNvdXJjZT4mJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiB0ZXhT
dWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0
LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgT3B0aW9u
YWw8VGV4SW1hZ2VTb3VyY2U+JiYpOwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFR5cGVkQXJyYXks
IGNsYXNzIERhdGFUeXBlPgogICAgIGNsYXNzIFR5cGVkTGlzdCB7CkBAIC0yNzQsMTEgKzI3NCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgICAgICApOwogICAgICAgICB9CiAKLSAgICAgICAgR0MzRHNp
emVpIGxlbmd0aCgpIGNvbnN0CisgICAgICAgIEdDR0xzaXplaSBsZW5ndGgoKSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhcmlhbnQsCi0gICAg
ICAgICAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxUeXBlZEFycmF5PiYgdHlwZWRBcnJheSkgLT4g
R0MzRHNpemVpIHsgcmV0dXJuIHR5cGVkQXJyYXktPmxlbmd0aCgpOyB9LAotICAgICAgICAgICAg
ICAgIFtdIChjb25zdCBWZWN0b3I8RGF0YVR5cGU+JiB2ZWN0b3IpIC0+IEdDM0RzaXplaSB7IHJl
dHVybiB2ZWN0b3Iuc2l6ZSgpOyB9CisgICAgICAgICAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxU
eXBlZEFycmF5PiYgdHlwZWRBcnJheSkgLT4gR0NHTHNpemVpIHsgcmV0dXJuIHR5cGVkQXJyYXkt
Pmxlbmd0aCgpOyB9LAorICAgICAgICAgICAgICAgIFtdIChjb25zdCBWZWN0b3I8RGF0YVR5cGU+
JiB2ZWN0b3IpIC0+IEdDR0xzaXplaSB7IHJldHVybiB2ZWN0b3Iuc2l6ZSgpOyB9CiAgICAgICAg
ICAgICApOwogICAgICAgICB9CiAKQEAgLTI4OSwxNSArMjg5LDE1IEBAIHB1YmxpYzoKICAgICB1
c2luZyBGbG9hdDMyTGlzdCA9IFR5cGVkTGlzdDxGbG9hdDMyQXJyYXksIGZsb2F0PjsKICAgICB1
c2luZyBJbnQzMkxpc3QgPSBUeXBlZExpc3Q8SW50MzJBcnJheSwgaW50PjsKIAotICAgIHZvaWQg
dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGZsb2F0IHgpOwotICAg
IHZvaWQgdW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5KTsKLSAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiosIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopOwotICAgIHZvaWQg
dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOworICAgIHZvaWQgdW5pZm9ybTFmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTGZsb2F0IHgpOworICAgIHZvaWQgdW5pZm9y
bTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5
KTsKKyAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDR0xm
bG9hdCB4LCBHQ0dMZmxvYXQgeSwgR0NHTGZsb2F0IHopOworICAgIHZvaWQgdW5pZm9ybTRmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dM
ZmxvYXQgeiwgR0NHTGZsb2F0IHcpOwogCi0gICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBHQzNEaW50IHgpOwotICAgIHZvaWQgdW5pZm9ybTJpKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGludCB4LCBHQzNEaW50IHkpOwotICAgIHZvaWQgdW5p
Zm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RpbnQgeik7Ci0gICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcpOworICAgIHZv
aWQgdW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTGludCB4KTsKKyAg
ICB2b2lkIHVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDR0xpbnQgeCwg
R0NHTGludCB5KTsKKyAgICB2b2lkIHVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biosIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHopOworICAgIHZvaWQgdW5pZm9ybTRp
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xp
bnQgeiwgR0NHTGludCB3KTsKIAogICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiosIEZsb2F0MzJMaXN0JiYpOwogICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJMaXN0JiYpOwpAQCAtMzA5LDI3ICszMDksMjcg
QEAgcHVibGljOgogICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biosIEludDMyTGlzdCYmKTsKICAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCBJbnQzMkxpc3QmJik7CiAKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJM
aXN0JiYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkxpc3QmJik7Ci0gICAgdm9pZCB1
bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyTGlzdCYmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJM
aXN0JiYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiosIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkxpc3QmJik7CisgICAgdm9pZCB1
bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyTGlzdCYmKTsKIAogICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFBy
b2dyYW0qKTsKICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKIAotICAg
IHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHkpOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0Rm
bG9hdCB3KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxv
YXQgeCk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0
IHgsIEdDR0xmbG9hdCB5KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4
LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6KTsKKyAgICB2b2lkIHZlcnRl
eEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xm
bG9hdCB6LCBHQ0dMZmxvYXQgdyk7CiAKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkxpc3QmJik7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVp
bnQgaW5kZXgsIEZsb2F0MzJMaXN0JiYpOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1
aW50IGluZGV4LCBGbG9hdDMyTGlzdCYmKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkxpc3QmJik7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0NH
THVpbnQgaW5kZXgsIEZsb2F0MzJMaXN0JiYpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdD
R0x1aW50IGluZGV4LCBGbG9hdDMyTGlzdCYmKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihH
Q0dMdWludCBpbmRleCwgRmxvYXQzMkxpc3QmJik7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYo
R0NHTHVpbnQgaW5kZXgsIEZsb2F0MzJMaXN0JiYpOwogCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Ri
b29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcgbG9uZyBv
ZmZzZXQpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NH
TGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLAorICAgICAg
ICBHQ0dMc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0KTsKIAotICAgIHZvaWQgdmlld3Bv
cnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCk7CisgICAgdm9pZCB2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIC8vIFdFQktJVF9sb3NlX2NvbnRleHQgc3Vw
cG9ydAogICAgIGVudW0gTG9zdENvbnRleHRNb2RlIHsKQEAgLTM2MCw5ICszNjAsOSBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4VmVydGV4QXR0cmliczsgfQogCiAgICAgLy8gSW5zdGFuY2VkIEFycmF5IGhlbHBlciBmdW5j
dGlvbnMuCi0gICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0Rp
bnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgdm9p
ZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBH
QzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKLSAg
ICB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlz
b3IpOworICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50
IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpOworICAgIHZvaWQg
ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NH
TGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCk7CisgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29y
KTsKIAogICAgIC8vIFVzZWQgZm9yIHRlc3Rpbmcgb25seSwgZnJvbSBJbnRlcm5hbHMuCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCk7CkBAIC00MjYs
MjYgKzQyNiwyNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBz
aXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCiAgICAgLy8gbGlrZSBHTF9GTE9BVCwg
R0xfSU5ULCBldGMuCi0gICAgdW5zaWduZWQgaW50IHNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUp
OworICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKEdDR0xlbnVtIHR5cGUpOwogCiAgICAgLy8gQmFz
aWMgdmFsaWRhdGlvbiBvZiBjb3VudCBhbmQgb2Zmc2V0IGFnYWluc3QgbnVtYmVyIG9mIGVsZW1l
bnRzIGluIGVsZW1lbnQgYXJyYXkgYnVmZmVyCi0gICAgYm9vbCB2YWxpZGF0ZUVsZW1lbnRBcnJh
eVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCk7
CisgICAgYm9vbCB2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0NHTHNpemVpIGNvdW50LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCk7CiAKICAgICAvLyBDb25zZXJ2YXRpdmUgYnV0
IHF1aWNrIGluZGV4IHZhbGlkYXRpb24KLSAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVJbmRleEFy
cmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVp
cmVkKSA9IDA7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2
ZShHQ0dMZW51bSB0eXBlLCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkgPSAwOwogCiAg
ICAgLy8gUHJlY2lzZSBidXQgc2xvdyBpbmRleCB2YWxpZGF0aW9uIC0tIG9ubHkgZG9uZSBpZiBj
b25zZXJ2YXRpdmUgY2hlY2tzIGZhaWwKLSAgICBib29sIHZhbGlkYXRlSW5kZXhBcnJheVByZWNp
c2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5z
aWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpOworICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZShHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0
LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7CiAgICAgYm9vbCB2YWxpZGF0ZVZlcnRl
eEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmltaXRpdmVDb3Vu
dCA9IDApOwogCiAgICAgYm9vbCB2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNoYXIqLCBXZWJH
TE9iamVjdCopOwogCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RzaXplaSBwcmltY291bnQpOwotICAgIGJvb2wgdmFsaWRhdGVEcmF3RWxlbWVudHMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50cywgR0Mz
RHNpemVpIHByaW1jb3VudCk7Ci0gICAgYm9vbCB2YWxpZGF0ZU5QT1RUZXh0dXJlTGV2ZWwoR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGxldmVsLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpOworICAgIGJvb2wgdmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNv
dW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KTsKKyAgICBib29sIHZhbGlkYXRlRHJhd0VsZW1lbnRz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50
LCBHQ0dMZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMs
IEdDR0xzaXplaSBwcmltY291bnQpOworICAgIGJvb2wgdmFsaWRhdGVOUE9UVGV4dHVyZUxldmVs
KEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBsZXZlbCwgY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lKTsKIAogICAgIC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUg
Zm9ybWF0LgotICAgIHZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwor
ICAgIHZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0NHTGVudW0pOwogCiAgICAgUmVm
UHRyPEltYWdlPiBkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpOwogCkBAIC01MDYsMTMgKzUwNiwxMyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIEdDM0RmbG9hdCB2YWx1ZVs0XTsKKyAgICAgICAgR0NHTGZsb2F0IHZhbHVlWzRd
OwogICAgIH07CiAgICAgVmVjdG9yPFZlcnRleEF0dHJpYlZhbHVlPiBtX3ZlcnRleEF0dHJpYlZh
bHVlOwogICAgIHVuc2lnbmVkIG1fbWF4VmVydGV4QXR0cmliczsKICAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKICAgICBsb25nIG1fdmVydGV4QXR0cmliMEJ1
ZmZlclNpemUgeyAwIH07Ci0gICAgR0MzRGZsb2F0IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVl
WzRdOworICAgIEdDR0xmbG9hdCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKICAgICBi
b29sIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsIHsgdHJ1ZSB9OwogICAgIGJvb2wgbV92ZXJ0
ZXhBdHRyaWIwVXNlZEJlZm9yZSB7IGZhbHNlIH07CiAKQEAgLTUzMiw3ICs1MzIsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmUyRDsKICAgICBS
ZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZUN1YmVNYXA7CiAKLSAgICBWZWN0b3I8
R0MzRGVudW0+IG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOworICAgIFZlY3RvcjxHQ0dMZW51
bT4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAKICAgICAvLyBGaXhlZC1zaXplIGNhY2hl
IG9mIHJldXNhYmxlIGltYWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCiAg
ICAgY2xhc3MgTFJVSW1hZ2VCdWZmZXJDYWNoZSB7CkBAIC01NDYsNDAgKzU0Niw0MCBAQCBwcm90
ZWN0ZWQ6CiAgICAgfTsKICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hlIG1fZ2VuZXJhdGVkSW1hZ2VD
YWNoZSB7IDAgfTsKIAotICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKLSAgICBHQzNEaW50
IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwotICAgIEdDM0RpbnQgbV9tYXhSZW5kZXJidWZmZXJT
aXplOwotICAgIEdDM0RpbnQgbV9tYXhWaWV3cG9ydERpbXNbMl0geyAwLCAwIH07Ci0gICAgR0Mz
RGludCBtX21heFRleHR1cmVMZXZlbDsKLSAgICBHQzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVM
ZXZlbDsKKyAgICBHQ0dMaW50IG1fbWF4VGV4dHVyZVNpemU7CisgICAgR0NHTGludCBtX21heEN1
YmVNYXBUZXh0dXJlU2l6ZTsKKyAgICBHQ0dMaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKKyAg
ICBHQ0dMaW50IG1fbWF4Vmlld3BvcnREaW1zWzJdIHsgMCwgMCB9OworICAgIEdDR0xpbnQgbV9t
YXhUZXh0dXJlTGV2ZWw7CisgICAgR0NHTGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CiAK
LSAgICBHQzNEaW50IG1fbWF4RHJhd0J1ZmZlcnM7Ci0gICAgR0MzRGludCBtX21heENvbG9yQXR0
YWNobWVudHM7Ci0gICAgR0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICBHQ0dMaW50IG1f
bWF4RHJhd0J1ZmZlcnM7CisgICAgR0NHTGludCBtX21heENvbG9yQXR0YWNobWVudHM7CisgICAg
R0NHTGVudW0gbV9iYWNrRHJhd0J1ZmZlcjsKICAgICBib29sIG1fZHJhd0J1ZmZlcnNXZWJHTFJl
cXVpcmVtZW50c0NoZWNrZWQ7CiAgICAgYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOwogCi0g
ICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7Ci0gICAgR0MzRGludCBtX3VucGFja0FsaWdubWVu
dDsKKyAgICBHQ0dMaW50IG1fcGFja0FsaWdubWVudDsKKyAgICBHQ0dMaW50IG1fdW5wYWNrQWxp
Z25tZW50OwogICAgIGJvb2wgbV91bnBhY2tGbGlwWTsKICAgICBib29sIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYTsKLSAgICBHQzNEZW51bSBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uOwor
ICAgIEdDR0xlbnVtIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb247CiAgICAgYm9vbCBtX2Nv
bnRleHRMb3N0IHsgZmFsc2UgfTsKICAgICBMb3N0Q29udGV4dE1vZGUgbV9jb250ZXh0TG9zdE1v
ZGUgeyBTeW50aGV0aWNMb3N0Q29udGV4dCB9OwogICAgIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMg
bV9hdHRyaWJ1dGVzOwogCiAgICAgYm9vbCBtX2xheWVyQ2xlYXJlZDsKLSAgICBHQzNEZmxvYXQg
bV9jbGVhckNvbG9yWzRdOworICAgIEdDR0xmbG9hdCBtX2NsZWFyQ29sb3JbNF07CiAgICAgYm9v
bCBtX3NjaXNzb3JFbmFibGVkOwotICAgIEdDM0RmbG9hdCBtX2NsZWFyRGVwdGg7Ci0gICAgR0Mz
RGludCBtX2NsZWFyU3RlbmNpbDsKLSAgICBHQzNEYm9vbGVhbiBtX2NvbG9yTWFza1s0XTsKLSAg
ICBHQzNEYm9vbGVhbiBtX2RlcHRoTWFzazsKKyAgICBHQ0dMZmxvYXQgbV9jbGVhckRlcHRoOwor
ICAgIEdDR0xpbnQgbV9jbGVhclN0ZW5jaWw7CisgICAgR0NHTGJvb2xlYW4gbV9jb2xvck1hc2tb
NF07CisgICAgR0NHTGJvb2xlYW4gbV9kZXB0aE1hc2s7CiAKICAgICBib29sIG1fc3RlbmNpbEVu
YWJsZWQ7Ci0gICAgR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9zdGVuY2lsTWFza0JhY2s7Ci0g
ICAgR0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxGdW5jUmVmQmFjazsgLy8gTm90
ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFsdWVzLCBub3QgdGhlIGludGVy
bmFsIGNsYW1wZWQgdmFsdWUuCi0gICAgR0MzRHVpbnQgbV9zdGVuY2lsRnVuY01hc2ssIG1fc3Rl
bmNpbEZ1bmNNYXNrQmFjazsKKyAgICBHQ0dMdWludCBtX3N0ZW5jaWxNYXNrLCBtX3N0ZW5jaWxN
YXNrQmFjazsKKyAgICBHQ0dMaW50IG1fc3RlbmNpbEZ1bmNSZWYsIG1fc3RlbmNpbEZ1bmNSZWZC
YWNrOyAvLyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRoZSB1c2VyIHNwZWNpZmllZCB2YWx1ZXMsIG5v
dCB0aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4KKyAgICBHQ0dMdWludCBtX3N0ZW5jaWxGdW5j
TWFzaywgbV9zdGVuY2lsRnVuY01hc2tCYWNrOwogCiAgICAgYm9vbCBtX2lzR0xFUzJDb21wbGlh
bnQ7CiAgICAgYm9vbCBtX2lzR0xFUzJOUE9UU3RyaWN0OwpAQCAtNjI2LDI3ICs2MjYsMjcgQEAg
cHJvdGVjdGVkOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFycmF5cz4gbV9h
bmdsZUluc3RhbmNlZEFycmF5czsKIAogICAgIC8vIEhlbHBlcnMgZm9yIGdldFBhcmFtZXRlciBh
bmQgb3RoZXIgc2ltaWxhciBmdW5jdGlvbnMuCi0gICAgYm9vbCBnZXRCb29sZWFuUGFyYW1ldGVy
KEdDM0RlbnVtKTsKLSAgICBWZWN0b3I8Ym9vbD4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKEdD
M0RlbnVtKTsKLSAgICBmbG9hdCBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgaW50
IGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgdW5zaWduZWQgZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIoR0MzRGVudW0pOwotICAgIGxvbmcgbG9uZyBnZXRJbnQ2NFBhcmFtZXRlcihHQzNE
ZW51bSk7Ci0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1l
dGVyKEdDM0RlbnVtKTsKLSAgICBSZWZQdHI8SW50MzJBcnJheT4gZ2V0V2ViR0xJbnRBcnJheVBh
cmFtZXRlcihHQzNEZW51bSk7CisgICAgYm9vbCBnZXRCb29sZWFuUGFyYW1ldGVyKEdDR0xlbnVt
KTsKKyAgICBWZWN0b3I8Ym9vbD4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKEdDR0xlbnVtKTsK
KyAgICBmbG9hdCBnZXRGbG9hdFBhcmFtZXRlcihHQ0dMZW51bSk7CisgICAgaW50IGdldEludFBh
cmFtZXRlcihHQ0dMZW51bSk7CisgICAgdW5zaWduZWQgZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIo
R0NHTGVudW0pOworICAgIGxvbmcgbG9uZyBnZXRJbnQ2NFBhcmFtZXRlcihHQ0dMZW51bSk7Cisg
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDR0xl
bnVtKTsKKyAgICBSZWZQdHI8SW50MzJBcnJheT4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihH
Q0dMZW51bSk7CiAKICAgICAvLyBDbGVhciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9z
aXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24uCiAgICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0
byB0aGUgYml0ZmllbGQgb2YgYW55IGNsZWFyIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0
aGlzIHRpbWUKICAgICAvLyBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNs
ZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4KLSAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0Ri
aXRmaWVsZCBjbGVhck1hc2sgPSAwKTsKKyAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdDR0xi
aXRmaWVsZCBjbGVhck1hc2sgPSAwKTsKIAogICAgIC8vIEhlbHBlciB0byByZXN0b3JlIHN0YXRl
IHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVyIG1heSBkZXN0cm95LgogICAgIHZvaWQgcmVz
dG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwogCi0gICAgdm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0gICAgdm9pZCB0ZXhJbWFn
ZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3ND
b250ZXh0R0w6OkRPTVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsK
LSAgICB2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKLSAgICB2b2lkIHRleFN1YkltYWdl
MkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBH
cmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5
QWxwaGEpOworICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMpOworICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3Vy
Y2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgdm9pZCB0ZXhTdWJJ
bWFnZTJEQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNl
dCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscyk7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0R0w6
OkRPTVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKIAogICAgIGJv
b2wgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqLCBib29sKTsKIApAQCAtNjU1
LDExICs2NTUsMTAgQEAgcHJvdGVjdGVkOgogICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29w
eVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0CiAgICAgLy8g
YW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVm
ZmVyIGNvbWJpbmF0aW9uCiAgICAgLy8gaXMgdmFsaWQuCi0gICAgYm9vbCBpc1RleEludGVybmFs
Rm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7CisgICAgYm9vbCBpc1RleEludGVybmFs
Rm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDR0xlbnVtIHRleEludGVybmFsRm9y
bWF0LCBHQ0dMZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3JtYXQuCi0g
ICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CisgICAgR0NHTGVu
dW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CiAKICAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgogICAgIGludCBnZXRC
b3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKQEAgLTY3Miw3ICs2NzEsNyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgc2l6ZSBpcyBub24tbmVnYXRpdmUu
CiAgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBmYWxzZSBmb3IgbmVnYXRpdmUg
aW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgotICAgIGJvb2wgdmFsaWRhdGVTaXplKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpOworICAgIGJvb2wg
dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGludCB4LCBHQ0dMaW50
IHkpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFsbCBjaGFyYWN0ZXJz
IGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQogICAgIC8vIEFTQ0lJIHN1YnNldCBhcyBkZWZp
bmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCkBAIC02ODEsMTUgKzY4MCwxNSBA
QCBwcm90ZWN0ZWQ6CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQg
dGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgogICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBh
bmQgcmV0dXJuIDAgaWYgdGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcwogICAg
IC8vIG51bGwuICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFy
Z2V0LgotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNG
b3JDdWJlTWFwKTsKKyAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB2YWxpZGF0ZVRleHR1cmVCaW5k
aW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0gdGFyZ2V0LCBib29sIHVzZVNp
eEVudW1zRm9yQ3ViZU1hcCk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5w
dXQgZm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgogICAgIC8v
IEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBp
bnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOworICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5j
Rm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgbGV2ZWwpOwog
CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlv
bnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJl
dHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVu
Y0xldmVsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsKTsKKyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsKTsKIAogICAgIGVudW0gVGV4
RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgewogICAgICAgICBUZXhJbWFnZSwKQEAgLTcxMCwx
NyArNzA5LDE3IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4
e1N1Yn1JbWFnZTJEIHRvIGNoZWNrIGlmIHRoZSBpbnB1dCBmb3JtYXQvdHlwZS9sZXZlbC90YXJn
ZXQvd2lkdGgvaGVpZ2h0L2JvcmRlci94b2Zmc2V0L3lvZmZzZXQgYXJlIHZhbGlkLgogICAgIC8v
IE90aGVyd2lzZSwgaXQgd291bGQgcmV0dXJuIHF1aWNrbHkgd2l0aG91dCBkb2luZyBvdGhlciB3
b3JrLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlw
ZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLAotICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCk7CisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRp
b25Tb3VyY2VUeXBlLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsCisgICAgICAgIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQg
eG9mZnNldCwgR0NHTGludCB5b2Zmc2V0KTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBj
aGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4K
ICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVy
cyBhcmUgaW52YWxpZC4KICAgICBib29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLAogICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlw
ZSwKLSAgICAgICAgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKTsKKyAgICAgICAgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLAorICAgICAg
ICBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwKKyAgICAgICAgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlKTsKIAogICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKICAgICAgICAgTnVs
bEFsbG93ZWQsCkBAIC03MzAsOSArNzI5LDkgQEAgcHJvdGVjdGVkOgogICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKICAgICAv
LyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhl
IHRleEltYWdlIGNhbGwuCiAgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZh
bHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNE
YXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAorICAgIGJvb2wgdmFsaWRh
dGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xpbnQgbGV2ZWwsCisg
ICAgICAgIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwKKyAgICAgICAgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwKICAgICAg
ICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCiAgICAgICAgIE51bGxEaXNwb3NpdGlvbik7CiAK
QEAgLTc0MCw2MiArNzM5LDYyIEBAIHByb3RlY3RlZDoKICAgICAvLyB5b3UgY2FuIHN1cHBseSBk
YXRhIHRvIHRleEltYWdlMkQsIG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5k
CiAgICAgLy8gY29weVRleFN1YkltYWdlMkQuCiAgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFu
ZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBmb3JtYXQgaXMgbm90IHNldHRhYmxlLgotICAgIGJvb2wg
dmFsaWRhdGVTZXR0YWJsZVRleEludGVybmFsRm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0gZm9ybWF0KTsKKyAgICBib29sIHZhbGlkYXRlU2V0dGFibGVUZXhJbnRlcm5h
bEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xlbnVtIGZvcm1hdCk7CiAKICAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEg
aXMgY29ycmVjdCBzaXplCiAgICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lv
bnMuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcmIHBpeGVscyk7CisgICAgYm9vbCB2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcmIHBp
eGVscyk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgY29tcHJlc3Nl
ZCB0ZXh0dXJlIGZvcm1hdHMuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQo
R0MzRGVudW0gZm9ybWF0KTsKKyAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChH
Q0dMZW51bSBmb3JtYXQpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNv
bXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKICAgICAvLyB0aGUgZ2l2
ZW4gZm9ybWF0LgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOworICAgIGJv
b2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IK
ICAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4
U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqKTsKKyAgICBib29s
IHZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NH
TGludCB5b2Zmc2V0LAorICAgICAgICBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgV2ViR0xUZXh0dXJlKik7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgbW9kZSBmb3IgZHJhd3tBcnJheXMvRWxlbWVudHN9LgotICAgIGJvb2wg
dmFsaWRhdGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKyAg
ICBib29sIHZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51
bSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBz
dGVuY2lsTWFzayBhbmQgc3RlbmNpbEZ1bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgogICAgIGJv
b2wgdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKIAog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBzdGVuY2lsIGZ1bmMuCi0gICAgYm9v
bCB2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0p
OworICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDR0xlbnVtKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBh
bmQgdGV4UGFyYW1ldGVyaS4KLSAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFtZiwgYm9vbCBp
c0Zsb2F0KTsKKyAgICB2b2lkIHRleFBhcmFtZXRlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMZmxvYXQgcGFyYW1pLCBHQ0dMaW50IHBhcmFtZiwgYm9vbCBpc0Zsb2F0KTsK
IAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBlcnJvcnMgYW5kIHdhcm5pbmdzIHRv
IGNvbnNvbGUuCiAgICAgdm9pZCBwcmludFRvQ29uc29sZShNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFt
ZXRlcnMgZm9yIGZyYW1lYnVmZmVyIGZ1bmN0aW9ucy4KICAgICAvLyBHZW5lcmF0ZSBHTCBlcnJv
ciBpZiBwYXJhbWV0ZXJzIGFyZSBpbGxlZ2FsLgotICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZUZy
YW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdmFs
aWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50KSA9IDA7CiAKICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZXF1YXRpb24gbW9kZS4KLSAgICB2aXJ0dWFs
IGJvb2wgdmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NHTGVudW0pID0gMDsKIAogICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSBibGVuZCBmdW5jIGZhY3RvcnMuCi0gICAgYm9vbCB2YWxpZGF0ZUJs
ZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdD
M0RlbnVtIGRzdCk7CisgICAgYm9vbCB2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSBzcmMsIEdDR0xlbnVtIGRzdCk7CiAKICAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5LgotICAgIHZpcnR1YWwg
Ym9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSkgPSAwOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIHVuaWZvcm0gZnVuY3Rpb25zLgotICAgIGJv
b2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgY29uc3QgRmxvYXQzMkxpc3QmLCBHQzNEc2l6ZWkg
bW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIGNvbnN0IEludDMyTGlzdCYs
IEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCos
IEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEZsb2F0MzJMaXN0JiwgR0Mz
RHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2Qp
OworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgY29uc3QgRmxvYXQzMkxpc3QmLCBH
Q0dMc2l6ZWkgbW9kKTsKKyAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIGNvbnN0IElu
dDMyTGlzdCYsIEdDR0xzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
Kiwgdm9pZCosIEdDR0xzaXplaSwgR0NHTHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEZsb2F0MzJM
aXN0JiwgR0NHTHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IHZvaWQqLCBHQ0dMc2l6ZWksIEdDR0xz
aXplaSBtb2QpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHBhcmFtZXRl
cnMgZm9yIGJ1ZmZlckRhdGEuCiAgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGJvdW5kIGJ1ZmZl
ciB0byB0YXJnZXQsIG9yIDAgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBXZWJHTEJ1
ZmZlciogdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOworICAgIFdlYkdMQnVmZmVyKiB2
YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSB1c2FnZSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkuCiAgICAgRXhj
ZXB0aW9uT3I8Ym9vbD4gdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCopOwpAQCAtODA1LDggKzgwNCw4IEBAIHByb3RlY3Rl
ZDoKICNlbmRpZgogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7
dn0uCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0Rm
bG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJMaXN0JiYs
IEdDM0RzaXplaSBleHBlY3RlZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGV4cGVjdGVk
U2l6ZSwgR0NHTGZsb2F0LCBHQ0dMZmxvYXQsIEdDR0xmbG9hdCwgR0NHTGZsb2F0KTsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDR0x1aW50
IGluZGV4LCBGbG9hdDMyTGlzdCYmLCBHQ0dMc2l6ZWkgZXhwZWN0ZWRTaXplKTsKIAogICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgZGVsZXRlKiAoZGVsZXRlQnVmZmVyLCBkZWxldGVQcm9ncmFt
LCBldGMpIGZ1bmN0aW9ucy4KICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCBy
ZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCkBAIC04MTksMTMgKzgxOCwxMyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICAvLyBIZWxwZXJzIGZvciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAu
CiAgICAgdm9pZCBpbml0VmVydGV4QXR0cmliMCgpOwotICAgIE9wdGlvbmFsPGJvb2w+IHNpbXVs
YXRlVmVydGV4QXR0cmliMChHQzNEdWludCBudW1WZXJ0ZXgpOwotICAgIGJvb2wgdmFsaWRhdGVT
aW11bGF0ZWRWZXJ0ZXhBdHRyaWIwKEdDM0R1aW50IG51bVZlcnRleCk7CisgICAgT3B0aW9uYWw8
Ym9vbD4gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDR0x1aW50IG51bVZlcnRleCk7CisgICAgYm9v
bCB2YWxpZGF0ZVNpbXVsYXRlZFZlcnRleEF0dHJpYjAoR0NHTHVpbnQgbnVtVmVydGV4KTsKICAg
ICB2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CiAKICAg
ICAvLyBXcmFwcGVyIGZvciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJy
b3IgdGhhdCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4KICAgICBl
bnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7IERpc3BsYXlJbkNvbnNvbGUsIERvbnREaXNw
bGF5SW5Db25zb2xlIH07Ci0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURp
c3BsYXlQcmVmZXJlbmNlID0gRGlzcGxheUluQ29uc29sZSk7CisgICAgdm9pZCBzeW50aGVzaXpl
R0xFcnJvcihHQ0dMZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBk
ZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxheUluQ29uc29sZSk7
CiAKICAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25zdDsKIApAQCAt
ODMzLDE1ICs4MzIsMTUgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYXBwbHlTdGVuY2lsVGVzdCgp
OwogCiAgICAgLy8gSGVscGVyIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBjYXBhYmlsaXR5
LgotICAgIHZvaWQgZW5hYmxlT3JEaXNhYmxlKEdDM0RlbnVtIGNhcGFiaWxpdHksIGJvb2wgZW5h
YmxlKTsKKyAgICB2b2lkIGVuYWJsZU9yRGlzYWJsZShHQ0dMZW51bSBjYXBhYmlsaXR5LCBib29s
IGVuYWJsZSk7CiAKICAgICAvLyBDbGFtcCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byBHTF9NQVhf
VklFV1BPUlRfRElNUy4KICAgICBJbnRTaXplIGNsYW1wZWRDYW52YXNTaXplKCk7CiAKLSAgICB2
aXJ0dWFsIEdDM0RpbnQgZ2V0TWF4RHJhd0J1ZmZlcnMoKSA9IDA7Ci0gICAgdmlydHVhbCBHQzNE
aW50IGdldE1heENvbG9yQXR0YWNobWVudHMoKSA9IDA7CisgICAgdmlydHVhbCBHQ0dMaW50IGdl
dE1heERyYXdCdWZmZXJzKCkgPSAwOworICAgIHZpcnR1YWwgR0NHTGludCBnZXRNYXhDb2xvckF0
dGFjaG1lbnRzKCkgPSAwOwogCi0gICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7
CisgICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQ0dMZW51bSk7CiAKICAgICB2b2lkIHJlc3Rv
cmVDdXJyZW50RnJhbWVidWZmZXIoKTsKICAgICB2b2lkIHJlc3RvcmVDdXJyZW50VGV4dHVyZTJE
KCk7CkBAIC04NTQsNyArODUzLDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIE9wdGlvbmFsPFQ+IGNoZWNrZWRBZGRBbmRNdWx0aXBseShU
IHZhbHVlLCBUIGFkZCwgVCBtdWx0aXBseSk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHVu
c2lnbmVkIGdldE1heEluZGV4KGNvbnN0IFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiBlbGVtZW50
QXJyYXlCdWZmZXIsIEdDM0RpbnRwdHIgdW9mZnNldCwgR0MzRHNpemVpIG4pOworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiB1bnNpZ25lZCBnZXRNYXhJbmRleChjb25zdCBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyLCBHQ0dMaW50cHRyIHVvZmZzZXQsIEdDR0xz
aXplaSBuKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dExvc3RFdmVudCgp
OwpAQCAtODYyLDcgKzg2MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gSGVscGVyIGZvciByZXN0b3Jh
dGlvbiBhZnRlciBjb250ZXh0IGxvc3QuCiAgICAgdm9pZCBtYXliZVJlc3RvcmVDb250ZXh0KCk7
CiAKLSAgICBib29sIHZhbGlkYXRlQXJyYXlCdWZmZXJUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gdHlwZSwgT3B0aW9uYWw8SlNDOjpUeXBlZEFycmF5VHlwZT4pOworICAg
IGJvb2wgdmFsaWRhdGVBcnJheUJ1ZmZlclR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
Q0dMZW51bSB0eXBlLCBPcHRpb25hbDxKU0M6OlR5cGVkQXJyYXlUeXBlPik7CiAgICAgdm9pZCBy
ZWdpc3RlcldpdGhXZWJHTFN0YXRlVHJhY2tlcigpOwogICAgIHZvaWQgY2hlY2tGb3JDb250ZXh0
TG9zc0hhbmRsaW5nKCk7CiAKQEAgLTg4Niw3ICs4ODUsNyBAQCBpbmxpbmUgT3B0aW9uYWw8VD4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hlY2tlZEFkZEFuZE11bHRpcGx5KFQgdmFsdWUs
IFQgYQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHVuc2lnbmVkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heEluZGV4KGNvbnN0IFJlZlB0cjxKU0M6OkFycmF5QnVm
ZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIsIEdDM0RpbnRwdHIgdW9mZnNldCwgR0MzRHNpemVpIG4p
CitpbmxpbmUgdW5zaWduZWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0TWF4SW5kZXgo
Y29uc3QgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciwgR0NHTGlu
dHB0ciB1b2Zmc2V0LCBHQ0dMc2l6ZWkgbikKIHsKICAgICB1bnNpZ25lZCBtYXhJbmRleCA9IDA7
CiAgICAgVCByZXN0YXJ0SW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xTYW1wbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMU2FtcGxlci5jcHAKaW5kZXggZjI0ZmM0ZDczZTYyZTdiMmQzYzQzMDQwMmQxNzFkYmYyZGRh
YThiNC4uZWU0NTBhMDk1N2U4Y2RkYzkwOWEwNDgwNTkxMWUxNjQ3MmFjNGI3NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNhbXBsZXIuY3BwCkBAIC00OSw3ICs0OSw3IEBA
IFdlYkdMU2FtcGxlcjo6V2ViR0xTYW1wbGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0
eCkKICAgICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVTYW1wbGVyIGZyb20gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuCiB9CiAKLXZvaWQgV2ViR0xTYW1wbGVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQor
dm9pZCBXZWJHTFNhbXBsZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQzZCwgUGxhdGZvcm1HTE9iamVjdCBvYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGNvbnRleHQzZCk7CiAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNhbXBsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5oCmluZGV4IDkxMmJiOGMwMjNiMWIwYmRlMjIxNmMz
ZWRmNTMyNDE4NmZmYmIyMTguLjFmMGY3N2QzMTNkMmJlNTA4OTllNThkN2YxODlmMmFkYWQ5MzRm
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5oCkBAIC0zOCw3
ICszOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFdlYkdMU2FtcGxl
cihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBs
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkgZmluYWw7CisgICAg
dm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm1H
TE9iamVjdCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKaW5kZXggZjc5NTc3Y2YxY2RlMjI4YTgw
NzQwMTM4NjE1ODJhZWNjMmY1NjMzMy4uNjQ3ODIwMzUwOWFhODY3YTJjMGVkMGRmMjZkZTViYTA4
YWI4ZDVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcApA
QCAtMzQsMTIgKzM0LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFdlYkdMU2hh
ZGVyPiBXZWJHTFNoYWRlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCwg
R0MzRGVudW0gdHlwZSkKK1JlZjxXZWJHTFNoYWRlcj4gV2ViR0xTaGFkZXI6OmNyZWF0ZShXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgsIEdDR0xlbnVtIHR5cGUpCiB7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViR0xTaGFkZXIoY3R4LCB0eXBlKSk7CiB9CiAKLVdlYkdMU2hhZGVy
OjpXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgsIEdDM0RlbnVtIHR5
cGUpCitXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYg
Y3R4LCBHQ0dMZW51bSB0eXBlKQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwg
bV90eXBlKHR5cGUpCiAgICAgLCBtX3NvdXJjZShlbXB0eVN0cmluZygpKQpAQCAtNTMsNyArNTMs
NyBAQCBXZWJHTFNoYWRlcjo6fldlYkdMU2hhZGVyKCkKICAgICBkZWxldGVPYmplY3QoMCk7CiB9
CiAKLXZvaWQgV2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMU2hh
ZGVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2Qs
IFBsYXRmb3JtR0xPYmplY3Qgb2JqZWN0KQogewogICAgIGNvbnRleHQzZC0+ZGVsZXRlU2hhZGVy
KG9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFNoYWRlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAppbmRl
eCA4ZWRmMGUyY2JiMTg2YzNlMjUxNWM3NGFkYzc3MDg1MjkxZmJlOTg3Li5kM2QzYTU1MjFmMDFj
MTBiMzQ3YWNkMjZlMjYzNjE2M2Q3ZTIyN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhZGVyLmgKQEAgLTM0LDEwICszNCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFdlYkdMU2hhZGVyIGZpbmFsIDogcHVibGljIFdlYkdMU2hhcmVkT2JqZWN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSYsIEdDM0RlbnVtKTsKKyAgICBzdGF0aWMgUmVmPFdlYkdMU2hhZGVyPiBjcmVh
dGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIEdDR0xlbnVtKTsKICAgICB2aXJ0dWFsIH5X
ZWJHTFNoYWRlcigpOwogCi0gICAgR0MzRGVudW0gZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQorICAgIEdDR0xlbnVtIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
ICAgICBjb25zdCBTdHJpbmcmIGdldFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9
CiAKICAgICB2b2lkIHNldFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSkgeyBtX3NvdXJjZSA9
IHNvdXJjZTsgfQpAQCAtNDYsMTEgKzQ2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZhbGlk
KGJvb2wgdmFsaWQpIHsgbV9pc1ZhbGlkID0gdmFsaWQ7IH0KIAogcHJpdmF0ZToKLSAgICBXZWJH
TFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgR0MzRGVudW0pOworICAgIFdlYkdM
U2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBHQ0dMZW51bSk7CiAKLSAgICB2b2lk
IGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2Jq
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqLCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKIAotICAgIEdDM0RlbnVtIG1fdHlwZTsK
KyAgICBHQ0dMZW51bSBtX3R5cGU7CiAgICAgU3RyaW5nIG1fc291cmNlOwogICAgIGJvb2wgbV9p
c1ZhbGlkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcAppbmRleCBlZDYzYTUxY2Y5N2I4MWE0YTdjZTE0
Njg0N2M5ZDI4YTkzMTBiYjY4Li5mZDVmYjVkOGQ5MTM1NTJhYTZhOGUzNzJmMGEyYmU3MjMwNGU4
N2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlclBy
ZWNpc2lvbkZvcm1hdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
aGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwCkBAIC0zMywyNyArMzMsMjcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gc3RhdGljCi1SZWY8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IFdl
YkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpjcmVhdGUoR0MzRGludCByYW5nZU1pbiwgR0MzRGlu
dCByYW5nZU1heCwgR0MzRGludCBwcmVjaXNpb24pCitSZWY8V2ViR0xTaGFkZXJQcmVjaXNpb25G
b3JtYXQ+IFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpjcmVhdGUoR0NHTGludCByYW5nZU1p
biwgR0NHTGludCByYW5nZU1heCwgR0NHTGludCBwcmVjaXNpb24pCiB7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQocmFuZ2VNaW4sIHJhbmdlTWF4
LCBwcmVjaXNpb24pKTsKIH0KIAotR0MzRGludCBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6
cmFuZ2VNaW4oKSBjb25zdAorR0NHTGludCBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6cmFu
Z2VNaW4oKSBjb25zdAogewogICAgIHJldHVybiBtX3JhbmdlTWluOwogfQogCi1HQzNEaW50IFdl
YkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpyYW5nZU1heCgpIGNvbnN0CitHQ0dMaW50IFdlYkdM
U2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpyYW5nZU1heCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
cmFuZ2VNYXg7CiB9CiAKLUdDM0RpbnQgV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ6OnByZWNp
c2lvbigpIGNvbnN0CitHQ0dMaW50IFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpwcmVjaXNp
b24oKSBjb25zdAogewogICAgIHJldHVybiBtX3ByZWNpc2lvbjsKIH0KIAotV2ViR0xTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQ6OldlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RpbnQgcmFuZ2VN
aW4sIEdDM0RpbnQgcmFuZ2VNYXgsIEdDM0RpbnQgcHJlY2lzaW9uKQorV2ViR0xTaGFkZXJQcmVj
aXNpb25Gb3JtYXQ6OldlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xpbnQgcmFuZ2VNaW4s
IEdDR0xpbnQgcmFuZ2VNYXgsIEdDR0xpbnQgcHJlY2lzaW9uKQogICAgIDogbV9yYW5nZU1pbihy
YW5nZU1pbikKICAgICAsIG1fcmFuZ2VNYXgocmFuZ2VNYXgpCiAgICAgLCBtX3ByZWNpc2lvbihw
cmVjaXNpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlclByZWNpc2lvbkZvcm1hdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
aGFkZXJQcmVjaXNpb25Gb3JtYXQuaAppbmRleCA4YzRlNjIxN2U2MDVkZTgwMTA1NGM2ZDIyYTZk
MDQwMDMxZjZjYmUzLi43YWI0MjIwYWUxMGQxNzdkNTE4ZTI4MTFhOGYxYWQzMDc4N2RiZTM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lv
bkZvcm1hdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJl
Y2lzaW9uRm9ybWF0LmgKQEAgLTM1LDE4ICszNSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IDogcHVibGljIFJlZkNvdW50ZWQ8V2Vi
R0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkdM
U2hhZGVyUHJlY2lzaW9uRm9ybWF0PiBjcmVhdGUoR0MzRGludCByYW5nZU1pbiwgR0MzRGludCBy
YW5nZU1heCwgR0MzRGludCBwcmVjaXNpb24pOworICAgIHN0YXRpYyBSZWY8V2ViR0xTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQ+IGNyZWF0ZShHQ0dMaW50IHJhbmdlTWluLCBHQ0dMaW50IHJhbmdlTWF4
LCBHQ0dMaW50IHByZWNpc2lvbik7CiAKLSAgICBHQzNEaW50IHJhbmdlTWluKCkgY29uc3Q7Ci0g
ICAgR0MzRGludCByYW5nZU1heCgpIGNvbnN0OwotICAgIEdDM0RpbnQgcHJlY2lzaW9uKCkgY29u
c3Q7CisgICAgR0NHTGludCByYW5nZU1pbigpIGNvbnN0OworICAgIEdDR0xpbnQgcmFuZ2VNYXgo
KSBjb25zdDsKKyAgICBHQ0dMaW50IHByZWNpc2lvbigpIGNvbnN0OwogCiBwcml2YXRlOgotICAg
IFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RpbnQgcmFuZ2VNaW4sIEdDM0RpbnQgcmFu
Z2VNYXgsIEdDM0RpbnQgcHJlY2lzaW9uKTsKKyAgICBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1h
dChHQ0dMaW50IHJhbmdlTWluLCBHQ0dMaW50IHJhbmdlTWF4LCBHQ0dMaW50IHByZWNpc2lvbik7
CiAKLSAgICBHQzNEaW50IG1fcmFuZ2VNaW47Ci0gICAgR0MzRGludCBtX3JhbmdlTWF4OwotICAg
IEdDM0RpbnQgbV9wcmVjaXNpb247CisgICAgR0NHTGludCBtX3JhbmdlTWluOworICAgIEdDR0xp
bnQgbV9yYW5nZU1heDsKKyAgICBHQ0dMaW50IG1fcHJlY2lzaW9uOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xTeW5jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU3luYy5jcHAKaW5k
ZXggYjY1ZTI4YmY1YmEwNjM1MTBmZjZiYTc4N2IyZWQwNzA1OTFhMzM2Ny4uZjcwZTM3MjhmZTI3
NDFkNmUyNjNiYjllMzUxYWEwZDkxOWNhOGEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFN5bmMuY3BwCkBAIC00OSw3ICs0OSw3IEBAIFdlYkdMU3luYzo6V2ViR0xTeW5jKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICAvLyBGSVhNRTogQ2FsbCBmZW5jZVN5
bmMgZnJvbSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KIH0KIAotdm9pZCBXZWJHTFN5bmM6OmRl
bGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZv
cm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMU3luYzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybUdMT2JqZWN0IG9iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dDNkKTsKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU3luYy5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTeW5jLmgKaW5kZXggMGQxMmE4MDBiODdm
YWZlY2NmMTRjMjgzYjhjODcwZmQ0YmRhZTgwYy4uZjkxN2M3YWI1NTI4ZDY2ODBiMTliZWJmZGE3
MzA5NWM4MmYyODg4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xTeW5jLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTeW5jLmgKQEAg
LTQwLDcgKzQwLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMU3luYyhXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lk
IGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybUdMT2Jq
ZWN0KSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCmluZGV4IDdlYTIxZDk5Yzc2NGEzY2Q0
ZDBkMTc5MDg1ZGY0NzJhZDM5MGI3ZDMuLmE3ZDg2OTBlOGUwMDdlMmY3YzU2OGQ3NjdhMGU0MTUx
ZTA1NGFiOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4
dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNw
cApAQCAtNjMsNyArNjMsNyBAQCBXZWJHTFRleHR1cmU6On5XZWJHTFRleHR1cmUoKQogICAgIGRl
bGV0ZU9iamVjdCgwKTsKIH0KIAotdm9pZCBXZWJHTFRleHR1cmU6OnNldFRhcmdldChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbWF4TGV2ZWwpCit2b2lkIFdlYkdMVGV4dHVyZTo6c2V0VGFyZ2V0
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBtYXhMZXZlbCkKIHsKICAgICBpZiAoIW9iamVjdCgp
KQogICAgICAgICByZXR1cm47CkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgV2ViR0xUZXh0dXJlOjpz
ZXRUYXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExldmVsKQogICAgIH0KIH0KIAot
dm9pZCBXZWJHTFRleHR1cmU6OnNldFBhcmFtZXRlcmkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQg
cGFyYW0pCit2b2lkIFdlYkdMVGV4dHVyZTo6c2V0UGFyYW1ldGVyaShHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCBwYXJhbSkKIHsKICAgICBpZiAoIW9iamVjdCgpIHx8ICFtX3RhcmdldCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTM0LDE1ICsxMzQsMTUgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnNldFBh
cmFtZXRlcmkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCiAgICAgdXBkYXRlKCk7CiB9
CiAKLXZvaWQgV2ViR0xUZXh0dXJlOjpzZXRQYXJhbWV0ZXJmKEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQgcGFyYW0pCit2b2lkIFdlYkdMVGV4dHVyZTo6c2V0UGFyYW1ldGVyZihHQ0dMZW51bSBw
bmFtZSwgR0NHTGZsb2F0IHBhcmFtKQogewogICAgIGlmICghb2JqZWN0KCkgfHwgIW1fdGFyZ2V0
KQogICAgICAgICByZXR1cm47Ci0gICAgR0MzRGludCBpcGFyYW0gPSBzdGF0aWNfY2FzdDxHQzNE
aW50PihwYXJhbSk7CisgICAgR0NHTGludCBpcGFyYW0gPSBzdGF0aWNfY2FzdDxHQ0dMaW50Pihw
YXJhbSk7CiAgICAgc2V0UGFyYW1ldGVyaShwbmFtZSwgaXBhcmFtKTsKIH0KIAotdm9pZCBXZWJH
TFRleHR1cmU6OnNldExldmVsSW5mbyhHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIHR5cGUpCit2b2lkIFdlYkdMVGV4dHVyZTo6c2V0TGV2ZWxJbmZvKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gdHlwZSkKIHsKICAgICBpZiAoIW9i
amVjdCgpIHx8ICFtX3RhcmdldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY0LDEwICsxNjQsMTAg
QEAgdm9pZCBXZWJHTFRleHR1cmU6OmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCkKICAgICBpZiAo
IW1faXNDb21wbGV0ZSkgewogICAgICAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgbV9pbmZv
LnNpemUoKTsgKytpaSkgewogICAgICAgICAgICAgY29uc3QgTGV2ZWxJbmZvJiBpbmZvMCA9IG1f
aW5mb1tpaV1bMF07Ci0gICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGggPSBpbmZvMC53aWR0aDsK
LSAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQgPSBpbmZvMC5oZWlnaHQ7Ci0gICAgICAgICAg
ICBHQzNEaW50IGxldmVsQ291bnQgPSBjb21wdXRlTGV2ZWxDb3VudCh3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgICAgIGZvciAoR0MzRGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsg
KytsZXZlbCkgeworICAgICAgICAgICAgR0NHTHNpemVpIHdpZHRoID0gaW5mbzAud2lkdGg7Cisg
ICAgICAgICAgICBHQ0dMc2l6ZWkgaGVpZ2h0ID0gaW5mbzAuaGVpZ2h0OworICAgICAgICAgICAg
R0NHTGludCBsZXZlbENvdW50ID0gY29tcHV0ZUxldmVsQ291bnQod2lkdGgsIGhlaWdodCk7Cisg
ICAgICAgICAgICBmb3IgKEdDR0xpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7ICsr
bGV2ZWwpIHsKICAgICAgICAgICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEp
OwogICAgICAgICAgICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsKICAg
ICAgICAgICAgICAgICBMZXZlbEluZm8mIGluZm8gPSBtX2luZm9baWldW2xldmVsXTsKQEAgLTE3
OSw3ICsxNzksNyBAQCB2b2lkIFdlYkdMVGV4dHVyZTo6Z2VuZXJhdGVNaXBtYXBMZXZlbEluZm8o
KQogICAgIG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlID0gZmFsc2U7CiB9CiAKLUdDM0RlbnVtIFdl
YkdMVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsKSBjb25zdAorR0NHTGVudW0gV2ViR0xUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgY29uc3QgTGV2ZWxJbmZv
KiBpbmZvID0gZ2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwpOwogICAgIGlmICghaW5mbykKQEAg
LTE4Nyw3ICsxODcsNyBAQCBHQzNEZW51bSBXZWJHTFRleHR1cmU6OmdldEludGVybmFsRm9ybWF0
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkgY29uc3QKICAgICByZXR1cm4gaW5mby0+
aW50ZXJuYWxGb3JtYXQ7CiB9CiAKLUdDM0RlbnVtIFdlYkdMVGV4dHVyZTo6Z2V0VHlwZShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpIGNvbnN0CitHQ0dMZW51bSBXZWJHTFRleHR1cmU6
OmdldFR5cGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsKSBjb25zdAogewogICAgIEFT
U0VSVChtX2lzRm9yV2ViR0wxKTsKICAgICBjb25zdCBMZXZlbEluZm8qIGluZm8gPSBnZXRMZXZl
bEluZm8odGFyZ2V0LCBsZXZlbCk7CkBAIC0xOTYsNyArMTk2LDcgQEAgR0MzRGVudW0gV2ViR0xU
ZXh0dXJlOjpnZXRUeXBlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkgY29uc3QKICAg
ICByZXR1cm4gaW5mby0+dHlwZTsKIH0KIAotR0MzRHNpemVpIFdlYkdMVGV4dHVyZTo6Z2V0V2lk
dGgoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKSBjb25zdAorR0NHTHNpemVpIFdlYkdM
VGV4dHVyZTo6Z2V0V2lkdGgoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsKSBjb25zdAog
ewogICAgIGNvbnN0IExldmVsSW5mbyogaW5mbyA9IGdldExldmVsSW5mbyh0YXJnZXQsIGxldmVs
KTsKICAgICBpZiAoIWluZm8pCkBAIC0yMDQsNyArMjA0LDcgQEAgR0MzRHNpemVpIFdlYkdMVGV4
dHVyZTo6Z2V0V2lkdGgoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKSBjb25zdAogICAg
IHJldHVybiBpbmZvLT53aWR0aDsKIH0KIAotR0MzRHNpemVpIFdlYkdMVGV4dHVyZTo6Z2V0SGVp
Z2h0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkgY29uc3QKK0dDR0xzaXplaSBXZWJH
TFRleHR1cmU6OmdldEhlaWdodChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwpIGNvbnN0
CiB7CiAgICAgY29uc3QgTGV2ZWxJbmZvKiBpbmZvID0gZ2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2
ZWwpOwogICAgIGlmICghaW5mbykKQEAgLTIxMiw3ICsyMTIsNyBAQCBHQzNEc2l6ZWkgV2ViR0xU
ZXh0dXJlOjpnZXRIZWlnaHQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKSBjb25zdAog
ICAgIHJldHVybiBpbmZvLT5oZWlnaHQ7CiB9CiAKLWJvb2wgV2ViR0xUZXh0dXJlOjppc1ZhbGlk
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkgY29uc3QKK2Jvb2wgV2ViR0xUZXh0dXJl
Ojppc1ZhbGlkKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBj
b25zdCBMZXZlbEluZm8qIGluZm8gPSBnZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCk7CiAgICAg
aWYgKCFpbmZvKQpAQCAtMjIwLDcgKzIyMCw3IEBAIGJvb2wgV2ViR0xUZXh0dXJlOjppc1ZhbGlk
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkgY29uc3QKICAgICByZXR1cm4gaW5mby0+
dmFsaWQ7CiB9CiAKLXZvaWQgV2ViR0xUZXh0dXJlOjptYXJrSW52YWxpZChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwpCit2b2lkIFdlYkdMVGV4dHVyZTo6bWFya0ludmFsaWQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsKQogewogICAgIGludCBpbmRleCA9IG1hcFRhcmdldFRv
SW5kZXgodGFyZ2V0KTsKICAgICBpZiAoaW5kZXggPCAwKQpAQCAtMjI5LDcgKzIyOSw3IEBAIHZv
aWQgV2ViR0xUZXh0dXJlOjptYXJrSW52YWxpZChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwpCiAgICAgdXBkYXRlKCk7CiB9CiAKLWJvb2wgV2ViR0xUZXh0dXJlOjppc05QT1QoR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQorYm9vbCBXZWJHTFRleHR1cmU6OmlzTlBPVChH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgQVNTRVJUKHdpZHRoID49
IDAgJiYgaGVpZ2h0ID49IDApOwogICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKQEAgLTI3NCwx
MiArMjc0LDEyIEBAIHZvaWQgV2ViR0xUZXh0dXJlOjpzZXRDb21wcmVzc2VkKCkKICAgICBtX2lz
Q29tcHJlc3NlZCA9IHRydWU7CiB9CiAKLXZvaWQgV2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJ
bXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qg
b2JqZWN0KQordm9pZCBXZWJHTFRleHR1cmU6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm1HTE9iamVjdCBvYmplY3QpCiB7CiAgICAg
Y29udGV4dDNkLT5kZWxldGVUZXh0dXJlKG9iamVjdCk7CiB9CiAKLWludCBXZWJHTFRleHR1cmU6
Om1hcFRhcmdldFRvSW5kZXgoR0MzRGVudW0gdGFyZ2V0KSBjb25zdAoraW50IFdlYkdMVGV4dHVy
ZTo6bWFwVGFyZ2V0VG9JbmRleChHQ0dMZW51bSB0YXJnZXQpIGNvbnN0CiB7CiAgICAgaWYgKG1f
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKSB7CiAgICAgICAgIGlmICh0
YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQpCkBAIC0zMTgsMTcgKzMxOCwx
NyBAQCBib29sIFdlYkdMVGV4dHVyZTo6Y2FuR2VuZXJhdGVNaXBtYXBzKCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotR0MzRGludCBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK0dDR0xpbnQgV2ViR0xUZXh0dXJlOjpjb21w
dXRlTGV2ZWxDb3VudChHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAg
Ly8gcmV0dXJuIDEgKyBsb2cyRmxvb3Ioc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotICAgIEdD
M0RzaXplaSBuID0gc3RkOjptYXgod2lkdGgsIGhlaWdodCk7CisgICAgR0NHTHNpemVpIG4gPSBz
dGQ6Om1heCh3aWR0aCwgaGVpZ2h0KTsKICAgICBpZiAobiA8PSAwKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBHQzNEaW50IGxvZyA9IDA7Ci0gICAgR0MzRHNpemVpIHZhbHVlID0gbjsKKyAgICBH
Q0dMaW50IGxvZyA9IDA7CisgICAgR0NHTHNpemVpIHZhbHVlID0gbjsKICAgICBmb3IgKGludCBp
aSA9IDQ7IGlpID49IDA7IC0taWkpIHsKICAgICAgICAgaW50IHNoaWZ0ID0gKDEgPDwgaWkpOwot
ICAgICAgICBHQzNEc2l6ZWkgeCA9ICh2YWx1ZSA+PiBzaGlmdCk7CisgICAgICAgIEdDR0xzaXpl
aSB4ID0gKHZhbHVlID4+IHNoaWZ0KTsKICAgICAgICAgaWYgKHgpIHsKICAgICAgICAgICAgIHZh
bHVlID0geDsKICAgICAgICAgICAgIGxvZyArPSBzaGlmdDsKQEAgLTMzOCw3ICszMzgsNyBAQCBH
QzNEaW50IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVsQ291bnQoR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQogICAgIHJldHVybiBsb2cgKyAxOwogfQogCi1zdGF0aWMgYm9vbCBp
bnRlcm5hbEZvcm1hdElzRmxvYXRUeXBlKEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQorc3RhdGlj
IGJvb2wgaW50ZXJuYWxGb3JtYXRJc0Zsb2F0VHlwZShHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCkK
IHsKICAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UjMyRjoKQEAgLTM1Myw3ICszNTMsNyBAQCBzdGF0aWMgYm9vbCBpbnRlcm5hbEZvcm1h
dElzRmxvYXRUeXBlKEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogICAgIH0KIH0KIAotc3RhdGlj
IGJvb2wgaW50ZXJuYWxGb3JtYXRJc0hhbGZGbG9hdFR5cGUoR0MzRGVudW0gaW50ZXJuYWxGb3Jt
YXQpCitzdGF0aWMgYm9vbCBpbnRlcm5hbEZvcm1hdElzSGFsZkZsb2F0VHlwZShHQ0dMZW51bSBp
bnRlcm5hbEZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2RjoKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIFdlYkdM
VGV4dHVyZTo6dXBkYXRlKCkKICAgICB9CiAgICAgbV9pc0NvbXBsZXRlID0gdHJ1ZTsKICAgICBj
b25zdCBMZXZlbEluZm8mIGZpcnN0ID0gbV9pbmZvWzBdWzBdOwotICAgIEdDM0RpbnQgbGV2ZWxD
b3VudCA9IGNvbXB1dGVMZXZlbENvdW50KGZpcnN0LndpZHRoLCBmaXJzdC5oZWlnaHQpOworICAg
IEdDR0xpbnQgbGV2ZWxDb3VudCA9IGNvbXB1dGVMZXZlbENvdW50KGZpcnN0LndpZHRoLCBmaXJz
dC5oZWlnaHQpOwogICAgIGlmIChsZXZlbENvdW50IDwgMSkKICAgICAgICAgbV9pc0NvbXBsZXRl
ID0gZmFsc2U7CiAgICAgZWxzZSB7CkBAIC0zOTEsOSArMzkxLDkgQEAgdm9pZCBXZWJHTFRleHR1
cmU6OnVwZGF0ZSgpCiAgICAgICAgICAgICAgICAgbV9pc0NvbXBsZXRlID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGggPSBpbmZvMC53aWR0aDsKLSAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQgPSBpbmZv
MC5oZWlnaHQ7Ci0gICAgICAgICAgICBmb3IgKEdDM0RpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxl
dmVsQ291bnQ7ICsrbGV2ZWwpIHsKKyAgICAgICAgICAgIEdDR0xzaXplaSB3aWR0aCA9IGluZm8w
LndpZHRoOworICAgICAgICAgICAgR0NHTHNpemVpIGhlaWdodCA9IGluZm8wLmhlaWdodDsKKyAg
ICAgICAgICAgIGZvciAoR0NHTGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgKyts
ZXZlbCkgewogICAgICAgICAgICAgICAgIHdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gMSk7
CiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IDEpOwogICAg
ICAgICAgICAgICAgIGNvbnN0IExldmVsSW5mbyYgaW5mbyA9IG1faW5mb1tpaV1bbGV2ZWxdOwpA
QCAtNDU0LDE0ICs0NTQsMTQgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnVwZGF0ZSgpCiAgICAgICAg
IG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlID0gdHJ1ZTsKIH0KIAotY29uc3QgV2ViR0xUZXh0dXJl
OjpMZXZlbEluZm8qIFdlYkdMVGV4dHVyZTo6Z2V0TGV2ZWxJbmZvKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCkgY29uc3QKK2NvbnN0IFdlYkdMVGV4dHVyZTo6TGV2ZWxJbmZvKiBXZWJH
TFRleHR1cmU6OmdldExldmVsSW5mbyhHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwpIGNv
bnN0CiB7CiAgICAgaWYgKCFvYmplY3QoKSB8fCAhbV90YXJnZXQpCiAgICAgICAgIHJldHVybiAw
OwogICAgIGludCB0YXJnZXRJbmRleCA9IG1hcFRhcmdldFRvSW5kZXgodGFyZ2V0KTsKICAgICBp
ZiAodGFyZ2V0SW5kZXggPCAwIHx8IHRhcmdldEluZGV4ID49IHN0YXRpY19jYXN0PGludD4obV9p
bmZvLnNpemUoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2
ZWwgPj0gc3RhdGljX2Nhc3Q8R0MzRGludD4obV9pbmZvW3RhcmdldEluZGV4XS5zaXplKCkpKQor
ICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPj0gc3RhdGljX2Nhc3Q8R0NHTGludD4obV9pbmZv
W3RhcmdldEluZGV4XS5zaXplKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gJiht
X2luZm9bdGFyZ2V0SW5kZXhdW2xldmVsXSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVGV4dHVyZS5oCmluZGV4IGNmZDgyMzM2NWU0NTU3NzJlYjJjYmVkMzA0MzExZWM3ZDVl
ODY2NTIuLjA4NmMzM2M2ZTE3OGYzYTI4OWRkNjRhYjhhMzY5NDMwODZmNDY0NjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCkBAIC00NSwyOSArNDUsMjkgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIFJlZjxXZWJHTFRleHR1cmU+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIHNldFRhcmdldChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbWF4TGV2ZWwpOwotICAgIHZvaWQgc2V0UGFyYW1ldGVyaShHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCBzZXRQYXJhbWV0ZXJmKEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgcGFyYW0pOworICAgIHZvaWQgc2V0VGFyZ2V0KEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBtYXhMZXZlbCk7CisgICAgdm9pZCBzZXRQYXJhbWV0ZXJpKEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50IHBhcmFtKTsKKyAgICB2b2lkIHNldFBhcmFtZXRlcmYoR0NHTGVudW0gcG5hbWUs
IEdDR0xmbG9hdCBwYXJhbSk7CiAKLSAgICBHQzNEZW51bSBnZXRUYXJnZXQoKSBjb25zdCB7IHJl
dHVybiBtX3RhcmdldDsgfQorICAgIEdDR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0OyB9CiAKICAgICBpbnQgZ2V0TWluRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9t
aW5GaWx0ZXI7IH0KIAotICAgIHZvaWQgc2V0TGV2ZWxJbmZvKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gdHlwZSk7CisgICAgdm9pZCBzZXRMZXZlbEluZm8oR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlKTsKIAogICAgIGJv
b2wgY2FuR2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgLy8gR2VuZXJhdGUgYWxsIGxldmVsIGluZm9y
bWF0aW9uLgogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXBMZXZlbEluZm8oKTsKIAotICAgIEdDM0Rl
bnVtIGdldEludGVybmFsRm9ybWF0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkgY29u
c3Q7Ci0gICAgR0MzRGVudW0gZ2V0VHlwZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwp
IGNvbnN0OwotICAgIEdDM0RzaXplaSBnZXRXaWR0aChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwpIGNvbnN0OwotICAgIEdDM0RzaXplaSBnZXRIZWlnaHQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsKSBjb25zdDsKLSAgICBib29sIGlzVmFsaWQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsKSBjb25zdDsKLSAgICB2b2lkIG1hcmtJbnZhbGlkKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCk7CisgICAgR0NHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsKSBjb25zdDsKKyAgICBHQ0dMZW51bSBnZXRUeXBlKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0NHTHNpemVpIGdldFdp
ZHRoKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0NHTHNpemVp
IGdldEhlaWdodChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJv
b2wgaXNWYWxpZChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZv
aWQgbWFya0ludmFsaWQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsKTsKIAogICAgIC8v
IFdoZXRoZXIgd2lkdGgvaGVpZ2h0IGlzIE5vdFBvd2VyT2ZUd28uCi0gICAgc3RhdGljIGJvb2wg
aXNOUE9UKEdDM0RzaXplaSwgR0MzRHNpemVpKTsKKyAgICBzdGF0aWMgYm9vbCBpc05QT1QoR0NH
THNpemVpLCBHQ0dMc2l6ZWkpOwogCiAgICAgYm9vbCBpc05QT1QoKSBjb25zdDsKICAgICAvLyBE
ZXRlcm1pbmUgaWYgdGV4dHVyZSBzYW1wbGluZyBzaG91bGQgYWx3YXlzIHJldHVybiBbMCwgMCwg
MCwgMV0gKE9wZW5HTCBFUyAyLjAgU2VjIDMuOC4yKS4KQEAgLTc4LDcgKzc4LDcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBoYXNFdmVyQmVlbkJvdW5kKCkgY29uc3QgeyByZXR1cm4gb2JqZWN0KCkg
JiYgbV90YXJnZXQ7IH0KIAotICAgIHN0YXRpYyBHQzNEaW50IGNvbXB1dGVMZXZlbENvdW50KEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgc3RhdGljIEdDR0xpbnQgY29t
cHV0ZUxldmVsQ291bnQoR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KTsKIAogICAg
IGJvb2wgaW1tdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pbW11dGFibGU7IH0KICAgICB2b2lk
IHNldEltbXV0YWJsZSgpIHsgbV9pbW11dGFibGUgPSB0cnVlOyB9CkBAIC04Niw3ICs4Niw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UmKTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlT2JqZWN0
SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtR0xPYmplY3QpIG92ZXJyaWRl
OwogCiAgICAgY2xhc3MgTGV2ZWxJbmZvIHsKICAgICBwdWJsaWM6CkBAIC05OSw3ICs5OSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SW5mbyhH
QzNEZW51bSBpbnRlcm5hbEZtdCwgR0MzRHNpemVpIHcsIEdDM0RzaXplaSBoLCBHQzNEZW51bSB0
cCkKKyAgICAgICAgdm9pZCBzZXRJbmZvKEdDR0xlbnVtIGludGVybmFsRm10LCBHQ0dMc2l6ZWkg
dywgR0NHTHNpemVpIGgsIEdDR0xlbnVtIHRwKQogICAgICAgICB7CiAgICAgICAgICAgICB2YWxp
ZCA9IHRydWU7CiAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IGludGVybmFsRm10OwpAQCAt
MTA5LDI2ICsxMDksMjYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgdmFs
aWQ7Ci0gICAgICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0OwotICAgICAgICBHQzNEc2l6ZWkg
d2lkdGg7Ci0gICAgICAgIEdDM0RzaXplaSBoZWlnaHQ7Ci0gICAgICAgIEdDM0RlbnVtIHR5cGU7
CisgICAgICAgIEdDR0xlbnVtIGludGVybmFsRm9ybWF0OworICAgICAgICBHQ0dMc2l6ZWkgd2lk
dGg7CisgICAgICAgIEdDR0xzaXplaSBoZWlnaHQ7CisgICAgICAgIEdDR0xlbnVtIHR5cGU7CiAg
ICAgfTsKIAogICAgIGJvb2wgaXNUZXh0dXJlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQogCiAgICAgdm9pZCB1cGRhdGUoKTsKIAotICAgIGludCBtYXBUYXJnZXRUb0luZGV4KEdD
M0RlbnVtKSBjb25zdDsKKyAgICBpbnQgbWFwVGFyZ2V0VG9JbmRleChHQ0dMZW51bSkgY29uc3Q7
CiAKLSAgICBjb25zdCBMZXZlbEluZm8qIGdldExldmVsSW5mbyhHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwpIGNvbnN0OworICAgIGNvbnN0IExldmVsSW5mbyogZ2V0TGV2ZWxJbmZvKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCkgY29uc3Q7CiAKLSAgICBHQzNEZW51bSBtX3Rh
cmdldDsKKyAgICBHQ0dMZW51bSBtX3RhcmdldDsKIAotICAgIEdDM0RlbnVtIG1fbWluRmlsdGVy
OwotICAgIEdDM0RlbnVtIG1fbWFnRmlsdGVyOwotICAgIEdDM0RlbnVtIG1fd3JhcFM7Ci0gICAg
R0MzRGVudW0gbV93cmFwVDsKKyAgICBHQ0dMZW51bSBtX21pbkZpbHRlcjsKKyAgICBHQ0dMZW51
bSBtX21hZ0ZpbHRlcjsKKyAgICBHQ0dMZW51bSBtX3dyYXBTOworICAgIEdDR0xlbnVtIG1fd3Jh
cFQ7CiAKICAgICBWZWN0b3I8VmVjdG9yPExldmVsSW5mbz4+IG1faW5mbzsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcApp
bmRleCAxNzQ1OTQ1YjY5NjQ2ZGZlZWExMjE3NmQ0MDViZmY1OTZlMGI0NGRjLi4yZDI4YzU5OWFh
MzJiZGYwMTJlM2ViZDkzZTdjMGQ1NjNjNjg1ZThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcApAQCAtNDksNyArNDks
NyBAQCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVUcmFu
c2Zvcm1GZWVkYmFjayBmcm9tIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgogfQogCi12b2lkIFdl
YkdMVHJhbnNmb3JtRmVlZGJhY2s6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMVHJh
bnNmb3JtRmVlZGJhY2s6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IGNvbnRleHQzZCwgUGxhdGZvcm1HTE9iamVjdCBvYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGNvbnRleHQzZCk7CiAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgKaW5kZXggMTE0M2Rm
NGZjODBhY2YzYTM0MTgxYzdjNWM2MDJhM2U1ZmUzMTNlNy4uODE5YjNkYmE0MWM2NjA0ODAzZjYz
ZTY5MWVlMjRhYTE0ZTAxMDNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiBw
cm90ZWN0ZWQ6CiAgICAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZU9iamVj
dEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlk
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcAppbmRleCBmMTZjYWUzYzE3MjBl
MTE0NWIyOTA3NWRhNjk2ZWQ1MmQ4MjRlOGVjLi5mZjM2Y2VkMTE3NGEyYzQwODE2ZDMwOTFhMzJk
MTdiMmQ0ZDVhYTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFVuaWZvcm1Mb2NhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xVbmlmb3JtTG9jYXRpb24uY3BwCkBAIC0zMiwxMiArMzIsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1SZWY8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMVW5pZm9ybUxvY2F0aW9u
OjpjcmVhdGUoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZW51
bSB0eXBlKQorUmVmPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6
Y3JlYXRlKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTGVudW0g
dHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJHTFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLCBsb2NhdGlvbiwgdHlwZSkpOwogfQogCi1XZWJHTFVuaWZvcm1Mb2NhdGlvbjo6V2Vi
R0xVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZW51bSB0eXBlKQorV2ViR0xVbmlmb3JtTG9jYXRpb246OldlYkdMVW5pZm9ybUxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTGVudW0gdHlw
ZSkKICAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQogICAgICwgbV9sb2NhdGlvbihsb2NhdGlvbikK
ICAgICAsIG1fdHlwZSh0eXBlKQpAQCAtNTUsNyArNTUsNyBAQCBXZWJHTFByb2dyYW0qIFdlYkdM
VW5pZm9ybUxvY2F0aW9uOjpwcm9ncmFtKCkgY29uc3QKICAgICByZXR1cm4gbV9wcm9ncmFtLmdl
dCgpOwogfQogCi1HQzNEaW50IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpsb2NhdGlvbigpIGNvbnN0
CitHQ0dMaW50IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpsb2NhdGlvbigpIGNvbnN0CiB7CiAgICAg
Ly8gSWYgdGhlIHByb2dyYW0gaGFzIGJlZW4gbGlua2VkIGFnYWluLCB0aGVuIHRoaXMgVW5pZm9y
bUxvY2F0aW9uIGlzIG5vCiAgICAgLy8gbG9uZ2VyIHZhbGlkLgpAQCAtNjMsNyArNjMsNyBAQCBH
QzNEaW50IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpsb2NhdGlvbigpIGNvbnN0CiAgICAgcmV0dXJu
IG1fbG9jYXRpb247CiB9CiAgICAgCi1HQzNEZW51bSBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dHlw
ZSgpIGNvbnN0CitHQ0dMZW51bSBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dHlwZSgpIGNvbnN0CiB7
CiAgICAgLy8gSWYgdGhlIHByb2dyYW0gaGFzIGJlZW4gbGlua2VkIGFnYWluLCB0aGVuIHRoaXMg
VW5pZm9ybUxvY2F0aW9uIGlzIG5vCiAgICAgLy8gbG9uZ2VyIHZhbGlkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgKaW5kZXggYzQwNWE4
OWUyNDEwNGRmNjU5ZTFjYjYwMjA3MDNmN2EzZmJiMjRkZC4uOTMyNWYxYWM0ODc5ZTQxNmE2ZjEy
ZDFjYTcyZDdmNTRhZGMzMjU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5oCkBAIC0zNywyMiArMzcsMjIgQEAgY2xhc3MgV2ViR0xV
bmlmb3JtTG9jYXRpb24gZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHTFVuaWZvcm1Mb2Nh
dGlvbj4gewogcHVibGljOgogICAgIH5XZWJHTFVuaWZvcm1Mb2NhdGlvbigpID0gZGVmYXVsdDsK
IAotICAgIHN0YXRpYyBSZWY8V2ViR0xVbmlmb3JtTG9jYXRpb24+IGNyZWF0ZShXZWJHTFByb2dy
YW0qLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZW51bSB0eXBlKTsKKyAgICBzdGF0aWMgUmVmPFdl
YkdMVW5pZm9ybUxvY2F0aW9uPiBjcmVhdGUoV2ViR0xQcm9ncmFtKiwgR0NHTGludCBsb2NhdGlv
biwgR0NHTGVudW0gdHlwZSk7CiAKICAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0oKSBjb25zdDsK
IAotICAgIEdDM0RpbnQgbG9jYXRpb24oKSBjb25zdDsKKyAgICBHQ0dMaW50IGxvY2F0aW9uKCkg
Y29uc3Q7CiAgICAgCi0gICAgR0MzRGVudW0gdHlwZSgpIGNvbnN0OworICAgIEdDR0xlbnVtIHR5
cGUoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKFdlYkdM
UHJvZ3JhbSosIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RlbnVtIHR5cGUpOworICAgIFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xlbnVtIHR5
cGUpOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG1fcHJvZ3JhbTsKLSAg
ICBHQzNEaW50IG1fbG9jYXRpb247CisgICAgR0NHTGludCBtX2xvY2F0aW9uOwogICAgIHVuc2ln
bmVkIG1fbGlua0NvdW50OwotICAgIEdDM0RlbnVtIG1fdHlwZTsKKyAgICBHQ0dMZW51bSBtX3R5
cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuY3BwCmluZGV4IDVkYmIxYTA1
NTNiNmVjZDNlNGQ3M2VlMjNjNTJiZDQ2NzNhODU1OGEuLmRmZGE4ZDgxMmNjN2FiZWY2MTRiN2E4
M2EwNWQzNzUyNTEzM2M3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuY3BwCkBAIC01NSw3ICs1NSw3IEBAIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3Q6OldlYkdMVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY29udGV4CiAgICAgc2V0T2JqZWN0KHRoaXMtPmNvbnRleHQoKS0+Z3JhcGhpY3ND
b250ZXh0R0woKS0+Y3JlYXRlVmVydGV4QXJyYXkoKSk7CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdDo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29u
dGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdDo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNk
LCBQbGF0Zm9ybUdMT2JqZWN0IG9iamVjdCkKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAg
IGNhc2UgVHlwZTo6RGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaAppbmRleCA3YTMwYjQ5MzgzNjQyOWQzMzg2NjBlNmQx
MDRjYWZjMWQ4ODk0ODg4Li5iNGZmN2U2ZTA1YWE0OTU4MjE3N2I4NjNmODU2ZmU2NTU0MmJkZTEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTFZl
cnRleEFycmF5T2JqZWN0KCk7CiBwcml2YXRlOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3Qo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIFR5cGUpOwotICAgIHZvaWQgZGVsZXRlT2JqZWN0
SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRm
b3JtR0xPYmplY3QpIGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dEJhc2UuY3BwCmluZGV4IDA3ZTE4NDQ1Yzc4ZWY3YmM5Y2RlZjE5NTBlZjUxODkwNmFhOTNmNzMu
LmIzYzQ2NDM0OTI3ZjBkYjJiNzFlYjM4YzU2NzE3NWQyMmIxYmMzMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZS5jcHAKQEAgLTQ5LDkgKzQ5LDkgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6
c2V0RWxlbWVudEFycmF5QnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCiAgICAgCiB9CiAKLXZv
aWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnRleEF0dHJpYlN0YXRlKEdDM0R1
aW50IGluZGV4LCBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50LCBHQzNEaW50IHNpemUsIEdDM0Rl
bnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0Rp
bnRwdHIgb2Zmc2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQordm9pZCBXZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZTo6c2V0VmVydGV4QXR0cmliU3RhdGUoR0NHTHVpbnQgaW5kZXgsIEdDR0xzaXpl
aSBieXRlc1BlckVsZW1lbnQsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xl
YW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQsIFdlYkdM
QnVmZmVyKiBidWZmZXIpCiB7Ci0gICAgR0MzRHNpemVpIHZhbGlkYXRlZFN0cmlkZSA9IHN0cmlk
ZSA/IHN0cmlkZSA6IGJ5dGVzUGVyRWxlbWVudDsKKyAgICBHQ0dMc2l6ZWkgdmFsaWRhdGVkU3Ry
aWRlID0gc3RyaWRlID8gc3RyaWRlIDogYnl0ZXNQZXJFbGVtZW50OwogICAgIAogICAgIGF1dG8m
IHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF07CiAgICAgCkBAIC05OCw3ICs5OCw3
IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnVuYmluZEJ1ZmZlcihXZWJHTEJ1
ZmZlciYgYnVmZmVyKQogICAgIH0KIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZTo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNv
cikKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnRleEF0dHJpYkRpdmlz
b3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7CiAgICAgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZVtpbmRleF0uZGl2aXNvciA9IGRpdmlzb3I7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAppbmRleCBl
N2FjNDgxZGU4YjBmZmEzYjY3NDc1ODYxNzYwYzQ5ZWVhZGZmODA1Li40YmQ5MTM1MTBmNjJiZWJj
OTg1YzU3M2RkNjg4YjlkZTcxZmYzYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgKQEAgLTQ0LDE0ICs0NCwx
NCBAQCBwdWJsaWM6CiAKICAgICAgICAgYm9vbCBlbmFibGVkIHsgZmFsc2UgfTsKICAgICAgICAg
UmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXJCaW5kaW5nOwotICAgICAgICBHQzNEc2l6ZWkgYnl0
ZXNQZXJFbGVtZW50IHsgMCB9OwotICAgICAgICBHQzNEaW50IHNpemUgeyA0IH07Ci0gICAgICAg
IEdDM0RlbnVtIHR5cGUgeyBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgfTsKKyAgICAgICAgR0NH
THNpemVpIGJ5dGVzUGVyRWxlbWVudCB7IDAgfTsKKyAgICAgICAgR0NHTGludCBzaXplIHsgNCB9
OworICAgICAgICBHQ0dMZW51bSB0eXBlIHsgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUIH07CiAg
ICAgICAgIGJvb2wgbm9ybWFsaXplZCB7IGZhbHNlIH07Ci0gICAgICAgIEdDM0RzaXplaSBzdHJp
ZGUgeyAxNiB9OwotICAgICAgICBHQzNEc2l6ZWkgb3JpZ2luYWxTdHJpZGUgeyAwIH07Ci0gICAg
ICAgIEdDM0RpbnRwdHIgb2Zmc2V0IHsgMCB9OwotICAgICAgICBHQzNEdWludCBkaXZpc29yIHsg
MCB9OworICAgICAgICBHQ0dMc2l6ZWkgc3RyaWRlIHsgMTYgfTsKKyAgICAgICAgR0NHTHNpemVp
IG9yaWdpbmFsU3RyaWRlIHsgMCB9OworICAgICAgICBHQ0dMaW50cHRyIG9mZnNldCB7IDAgfTsK
KyAgICAgICAgR0NHTHVpbnQgZGl2aXNvciB7IDAgfTsKICAgICB9OwogCiAgICAgYm9vbCBpc0Rl
ZmF1bHRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6RGVmYXVsdDsgfQpA
QCAtNjMsMTQgKzYzLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVsZW1lbnRBcnJheUJ1ZmZl
cihXZWJHTEJ1ZmZlciopOwogCiAgICAgVmVydGV4QXR0cmliU3RhdGUmIGdldFZlcnRleEF0dHJp
YlN0YXRlKGludCBpbmRleCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF07IH0K
LSAgICB2b2lkIHNldFZlcnRleEF0dHJpYlN0YXRlKEdDM0R1aW50LCBHQzNEc2l6ZWksIEdDM0Rp
bnQsIEdDM0RlbnVtLCBHQzNEYm9vbGVhbiwgR0MzRHNpemVpLCBHQzNEaW50cHRyLCBXZWJHTEJ1
ZmZlciopOworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUoR0NHTHVpbnQsIEdDR0xzaXpl
aSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xib29sZWFuLCBHQ0dMc2l6ZWksIEdDR0xpbnRwdHIs
IFdlYkdMQnVmZmVyKik7CiAgICAgdm9pZCB1bmJpbmRCdWZmZXIoV2ViR0xCdWZmZXImKTsKIAot
ICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQg
ZGl2aXNvcik7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4
LCBHQ0dMdWludCBkaXZpc29yKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBUeXBlKTsKLSAgICB2b2lkIGRl
bGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0
KSBvdmVycmlkZSA9IDA7CisgICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiwgUGxhdGZvcm1HTE9iamVjdCkgb3ZlcnJpZGUgPSAwOwogCiAgICAgVHlwZSBt
X3R5cGU7CiAgICAgYm9vbCBtX2hhc0V2ZXJCZWVuQm91bmQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
LmNwcAppbmRleCBhMGNlNWI4MDA4YjZiMzA1NzYyMmEzYmVmMzViZTkxNjEwMmY2NDIyLi4wNmZk
YjczODMzODZiNmIxYjYwZmI4MzQ0MWViZjU5OTU0Njg1ZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcApA
QCAtNTYsNyArNTYsNyBAQCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjp+V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUygpCiAgICAgZGVsZXRlT2JqZWN0KG51bGxwdHIpOwogfQogCi12b2lkIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm1HTE9iamVjdCBvYmplY3QpCiB7CiAgICAgc3dpdGNo
IChtX3R5cGUpIHsKICAgICBjYXNlIFR5cGU6OkRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKaW5kZXggMDgz
Mzk2MmQ2NjVlZjEyZjRjY2RmNWQ4ZjEyYjVjYWYwMGFjNmQwYS4uYzAyN2Y5NzM0YjQ1NjZhYzgw
MTE5Yjc3MmRlZjk5MGZmZGNlZDdjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaApAQCAtMzcsNyArMzcsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpOwogcHJpdmF0
ZToKICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmLCBUeXBlKTsKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdElt
cGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybUdMT2JqZWN0KSBmaW5hbDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnNHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5zaW9uc0dMLmgKaW5kZXggN2I0ZmVmMjUyMmFiNGZmNTdmMTc2NDBkZTgx
ODNhODBmY2QwYmU2My4uNmU4OGJjYTdkOTZmNjU1MWZlZWU2MzJhNWY1ZmMyNzQ5OWEwODQ4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uc0dM
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uc0dMLmgK
QEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJHcmFwaGljc1R5
cGVzM0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKIAogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCkBAIC0yNjgsMTggKzI2OCwxOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgPSAwOwogCiAgICAg
Ly8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmpl
Y3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZl
cnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Rib29s
ZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1
YWwgUGxhdGZvcm1HTE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCkgPSAwOworICAg
IHZpcnR1YWwgR0NHTGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0
KSA9IDA7CiAKICAgICAvLyBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UKLSAgICB2
aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9i
amVjdCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VB
TkdMRShQbGF0Zm9ybUdMT2JqZWN0KSA9IDA7CiAKICAgICAvLyBFWFQgUm9idXN0bmVzcyAtIHVz
ZXMgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQgotICAgIHZpcnR1YWwgdm9pZCByZWFkblBpeGVs
c0VYVChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0
YSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dy
YW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgdm9pZCAqZGF0YSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRuVW5pZm9ybWZ2
RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIGZs
b2F0ICpwYXJhbXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQ0dM
dWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBpbnQgKnBhcmFt
cykgPSAwOwogCiAgICAgLy8gR0xfRVhUX2RlYnVnX21hcmtlcgogICAgIHZpcnR1YWwgdm9pZCBp
bnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSA9IDA7CkBAIC0yODcsMTIgKzI4Nywx
MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBvcEdyb3VwTWFya2VyRVhUKHZvaWQpID0g
MDsKIAogICAgIC8vIEdMX0FSQl9kcmF3X2J1ZmZlcnMgLyBHTF9FWFRfZHJhd19idWZmZXJzCi0g
ICAgdmlydHVhbCB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51
bSogYnVmcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkg
biwgY29uc3QgR0NHTGVudW0qIGJ1ZnMpID0gMDsKIAogICAgIC8vIEdMX0FOR0xFX2luc3RhbmNl
ZF9hcnJheXMKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBt
b2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1v
ZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0Mz
RHNpemVpIHByaW1jb3VudCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZp
c29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdD
R0xlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NH
THVpbnQgZGl2aXNvcikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGlzTlZJRElBKCkgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBpc0FNRCgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAppbmRleCA3ZmI5ZWQwZjQz
NDk0ZmM2MzkwYjM5M2NhZDUwMjI2MTU5ZTEwZjg3Li45YTc0MjY5ZTY1ZjdiZTMyNDkxNTcwM2Iz
NWQ0OWVhNzM0ZWRiYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC00MCw3ICs0MCw3IEBAIEdyYXBoaWNz
Q29udGV4dEdMOjpHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMg
YXR0cnMsIERlc3RpbmF0CiB7CiB9CiAKLXVuc2lnbmVkIEdyYXBoaWNzQ29udGV4dEdMOjpnZXRD
bGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKEdDM0RlbnVtIGF0dGFjaG1lbnQpCit1bnNpZ25lZCBH
cmFwaGljc0NvbnRleHRHTDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShHQ0dMZW51bSBh
dHRhY2htZW50KQogewogICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwOgpAQCAtNzEsNyArNzEsNyBAQCB1bnNpZ25l
ZCBHcmFwaGljc0NvbnRleHRHTDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShHQzNEZW51
bSBhdHRhY2htZW50KQogICAgIH0KIH0KIAotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0R0w6Omdl
dENsZWFyQml0c0J5Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3Vuc2lnbmVkIEdyYXBoaWNzQ29u
dGV4dEdMOjpnZXRDbGVhckJpdHNCeUZvcm1hdChHQ0dMZW51bSBmb3JtYXQpCiB7CiAgICAgc3dp
dGNoIChmb3JtYXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CkBAIC0xNDcs
NyArMTQ3LDcgQEAgdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0R0w6OmdldENsZWFyQml0c0J5Rm9y
bWF0KEdDM0RlbnVtIGZvcm1hdCkKICAgICB9CiB9CiAKLXVpbnQ4X3QgR3JhcGhpY3NDb250ZXh0
R0w6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQordWludDhfdCBHcmFw
aGljc0NvbnRleHRHTDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQ0dMZW51bSBmb3JtYXQpCiB7
CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBI
QToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTC5oCmluZGV4IDkxNWM0MDQ0NzgyYWQyZGE2MDAyOGRhNjU5NTFiN2JmZGY1MzA2NTAu
LjEyMzg1OTExM2IyZDA5MjhhZWJkZTJmOWVlODQzYTEzNDIyZjE4ZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaApAQCAt
MjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBl
czNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNzU3LDcgKzc1
Nyw3IEBAIHB1YmxpYzoKICNlbmRpZiAvLyBVU0UoQU5HTEUpCiAKICAgICB2aXJ0dWFsIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm1HTE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
PSAwOwogCiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBoYXNBbHBoYShEYXRhRm9ybWF0
IGZvcm1hdCkKQEAgLTgzNyw4ICs4MzcsOCBAQCBwdWJsaWM6CiAKICAgICBzdHJ1Y3QgQWN0aXZl
SW5mbyB7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBHQzNEZW51bSB0eXBlOwotICAg
ICAgICBHQzNEaW50IHNpemU7CisgICAgICAgIEdDR0xlbnVtIHR5cGU7CisgICAgICAgIEdDR0xp
bnQgc2l6ZTsKICAgICB9OwogCiAgICAgR3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzLCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4sIEdyYXBo
aWNzQ29udGV4dEdMKiBzaGFyZWRDb250ZXh0ID0gbnVsbHB0cik7CkBAIC04NDYsMjA4ICs4NDYs
MjA4IEBAIHB1YmxpYzoKIAogICAgIC8vID09PT09PT09PT0gV2ViR0wgMSBlbnRyeSBwb2ludHMu
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRBdHRy
aWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5n
JiBuYW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9y
bTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kQ29sb3IoR0MzRGNsYW1wZiBy
ZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0Is
IEdDM0RlbnVtIG1vZGVBbHBoYSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmMoR0Mz
RGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBi
bGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVu
dW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdDM0Rl
bnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGNsZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYg
Ymx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckRlcHRo
KEdDM0RjbGFtcGYgZGVwdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGVuY2lsKEdD
M0RpbnQgcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVk
LCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOwotCi0g
ICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUJ1ZmZlcigpID0gMDsKLSAgICB2aXJ0
dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKSA9IDA7Ci0gICAgdmlydHVh
bCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVByb2dyYW0oKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0
Zm9ybTNET2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlU2hhZGVyKEdDM0RlbnVtKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0
Zm9ybTNET2JqZWN0IGNyZWF0ZVRleHR1cmUoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3Vs
bEZhY2UoR0MzRGVudW0gbW9kZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJ1ZmZl
cihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZyYW1lYnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3Jh
bShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlbmRlcmJ1
ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVNoYWRl
cihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUo
UGxhdGZvcm0zRE9iamVjdCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGRlcHRoRnVuYyhHQzNE
ZW51bSBmdW5jKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBm
bGFnKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwg
R0MzRGNsYW1wZiB6RmFyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFNoYWRlcihQbGF0
Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c2FibGUoR0MzRGVudW0gY2FwKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJy
YXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNv
dW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGF0
dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hh
ZGVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0LCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4s
IEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxl
bmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVu
dW0gZGZhY3RvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQ0dM
ZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVt
IGRzdEFscGhhKSA9IDA7CisKKyAgICB2aXJ0dWFsIEdDR0xlbnVtIGNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR0NHTGVudW0gdGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKEdDR0xi
aXRmaWVsZCBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29sb3IoR0NHTGNsYW1w
ZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBo
YSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGVuY2lsKEdDR0xpbnQgcykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwg
R0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgPSAwOworCisgICAgdmlydHVhbCBQbGF0Zm9ybUdM
T2JqZWN0IGNyZWF0ZUJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR0xPYmplY3Qg
Y3JlYXRlRnJhbWVidWZmZXIoKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZVByb2dyYW0oKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVJl
bmRlcmJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlU2hh
ZGVyKEdDR0xlbnVtKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVRl
eHR1cmUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UoR0NHTGVudW0gbW9kZSkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGRlcHRoRnVuYyhHQ0dMZW51bSBmdW5jKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0LCBQbGF0Zm9y
bUdMT2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoR0NHTGVudW0gY2FwKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBp
bmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMaW50cHRyIG9mZnNldCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGVuYWJsZShHQ0dMZW51
bSBjYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NH
THVpbnQgaW5kZXgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBy
ZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QsIEdDR0xpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnJv
bnRGYWNlKEdDR0xlbnVtIG1vZGUpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1p
cG1hcChHQzNEZW51bSB0YXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoR0NHTGVudW0gdGFyZ2V0KSA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlQXR0
cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNp
emVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJz
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEF0dGFjaGVkU2hh
ZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNp
emVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCogc2hhZGVycykgPSAwOwogCi0gICAgdmlydHVh
bCBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkgPSAwOworICAgIHZpcnR1YWwgR0NHTGludCBnZXRBdHRyaWJMb2NhdGlvbihQbGF0
Zm9ybUdMT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkgPSAwOwog
CiAgICAgLy8gZ2V0UGFyYW1ldGVyCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0U3RyaW5nKEdDM0Rl
bnVtIG5hbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEludGVnZXJ2KEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJ
bnRlZ2VyNjR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50NjQqIHZhbHVlKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVt
IHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFu
dihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGdldEludGVnZXJ2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2VyNjR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50NjQq
IHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTGJvb2xlYW4qIHZhbHVl
KSA9IDA7CiAKLSAgICB2aXJ0dWFsIEdDM0RlbnVtIGdldEVycm9yKCkgPSAwOworICAgIHZpcnR1
YWwgR0NHTGVudW0gZ2V0RXJyb3IoKSA9IDA7CiAKICAgICAvLyBnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpID0gMDsKIAogICAgIC8vIGdl
dFByb2dyYW1QYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQ
bGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9M
b2coUGxhdGZvcm1HTE9iamVjdCkgPSAwOwogCiAgICAgLy8gZ2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyCi0gICAgdmlydHVhbCB2b2lkIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKSA9IDA7CiAKICAgICAvLyBnZXRTaGFkZXJQYXJhbWV0
ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFNoYWRl
cml2KFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkgPSAw
OwogCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51
bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0Mz
RGludCogcHJlY2lzaW9uKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0U2hhZGVySW5mb0xv
ZyhQbGF0Zm9ybUdMT2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlLCBH
Q0dMaW50KiByYW5nZSwgR0NHTGludCogcHJlY2lzaW9uKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFN0
cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwg
U3RyaW5nIGdldFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0KSA9IDA7CiAKICAgICAvLyBn
ZXRUZXhQYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0
ZXJmdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKSA9IDA7CiAKICAgICAvLyBnZXRVbmlmb3Jt
Ci0gICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9ybWZ2KFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0KiB2YWx1
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50KiB2YWx1ZSkgPSAwOwogCi0gICAgdmly
dHVhbCBHQzNEaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIEdDR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAgLy8gZ2V0
VmVydGV4QXR0cmliCi0gICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdDM0RzaXplaXB0ciBnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpID0gMDsK
LSAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
LSAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXApID0gMDsKLSAg
ICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAw
OwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpID0g
MDsKLSAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0Rm
bG9hdCB1bml0cykgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNhbXBsZUNvdmVyYWdl
KEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzaGFkZXJTb3VyY2UoUGxhdGZv
cm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFp
bCwgR0MzRGVudW0genBhc3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wU2VwYXJh
dGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVt
IHpwYXNzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50IHBhcmFtKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCB4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgdW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwg
Y29uc3QgR0MzRGludCogdikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxv
YXQqIHYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQgeCwgR0MzRGludCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHksIEdDM0RmbG9hdCB6KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEaW50IHopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNpdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgdW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxv
YXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVu
aWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGlu
dCogdikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQq
IHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9h
dCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZs
b2F0KiB2YWx1ZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm0z
RE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0z
RE9iamVjdCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgeCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIx
ZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50
IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVp
bnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0Mz
RGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6
ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHZp
ZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYnVmZmVy
U3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIg
c2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbXByZXNz
ZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQqIGRhdGEpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxz
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkgPSAwOwotCi0gICAg
dmlydHVhbCBib29sIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2
b2lkKiBwaXhlbHMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJh
d0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVp
bnQgZGl2aXNvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdihHQ0dM
dWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliaXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMaW50KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCBHQ0dMc2l6ZWlwdHIgZ2V0
VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKSA9
IDA7CisgICAgdmlydHVhbCBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSA9
IDA7CisgICAgdmlydHVhbCBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSA9IDA7
CisgICAgdmlydHVhbCBHQ0dMYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qp
ID0gMDsKKyAgICB2aXJ0dWFsIEdDR0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0
KSA9IDA7CisgICAgdmlydHVhbCBHQ0dMYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCBHQ0dMYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCBHQ0dMYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm1H
TE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsaW5lV2lkdGgoR0NHTGZsb2F0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBH
Q0dMZmxvYXQgdW5pdHMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9y
YWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVDb3Zl
cmFnZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Npc3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hhZGVyU291cmNlKFBs
YXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmluZyYgc3RyaW5nKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1h
c2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0g
emZhaWwsIEdDR0xlbnVtIHpwYXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcFNl
cGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dM
ZW51bSB6cGFzcykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmYoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCBwYXJhbSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSwgY29uc3QgR0NHTGZsb2F0KiB2KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6
ZWksIGNvbnN0IEdDR0xpbnQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSwgY29uc3QgR0NH
TGZsb2F0KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3Jt
Mml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSwgY29uc3QgR0NHTGludCogdikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgs
IEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3Jt
M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSwgY29uc3QgR0NHTGZsb2F0KiB2KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTGludCB6KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zaXYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpLCBjb25zdCBHQ0dMaW50KiB2KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHksIEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSwgY29uc3QgR0NHTGZsb2F0
KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWksIGNvbnN0IEdD
R0xpbnQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWksIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZs
b2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xzaXplaSwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dM
ZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHNpemVpLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdD
R0xmbG9hdCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB1c2VQcm9ncmFtKFBsYXRm
b3JtR0xPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBsYXRm
b3JtR0xPYmplY3QpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQ0dM
dWludCBpbmRleCwgR0NHTGZsb2F0IHgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0
cmliMWZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIHZhbHVlcykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgs
IEdDR0xmbG9hdCB5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmdihHQ0dM
dWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiB2YWx1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgdmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQg
eSwgR0NHTGZsb2F0IHopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdD
R0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB2ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9h
dCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVy
dGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIHZhbHVlcykgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgs
IEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NH
THNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCB2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIGNv
bnN0IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJ1
ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVp
cHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb21w
cmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVhZFBp
eGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHZvaWQqIGRhdGEpID0gMDsKKwor
ICAgIHZpcnR1YWwgYm9vbCB0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9m
ZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdD
R0x1aW50IGRpdmlzb3IpID0gMDsKIAogICAgIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBj
b250ZXh0QXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cnM7IH0KICAgICB2b2lkIHNl
dENvbnRleHRBdHRyaWJ1dGVzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0
cnMpIHsgbV9hdHRycyA9IGF0dHJzOyB9CiAKICAgICAvLyBWZXJ0ZXhBcnJheU9qZWN0IGNhbGxz
Ci0gICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7
Ci0gICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3Qp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3Qp
ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR0xPYmplY3QgY3JlYXRlVmVydGV4QXJyYXkoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qp
ID0gMDsKKyAgICB2aXJ0dWFsIEdDR0xib29sZWFuIGlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9i
amVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9i
amVjdCkgPSAwOwogCiAjaWYgVVNFKE9QRU5HTCkgJiYgRU5BQkxFKFdFQkdMMikKLSAgICB2aXJ0
dWFsIHZvaWQgcHJpbWl0aXZlUmVzdGFydEluZGV4KEdDM0R1aW50KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCkgPSAwOwogI2VuZGlmCiAKICAg
ICAvLyBTdXBwb3J0IGZvciBleHRlbnNpb25zLiBSZXR1cm5zIGEgbm9uLW51bGwgb2JqZWN0LCB0
aG91Z2ggbm90CkBAIC0xMDU4LDI2ICsxMDU4LDI2IEBAIHB1YmxpYzoKIAogICAgIC8vID09PT09
PT09PT0gV2ViR0wgMiBlbnRyeSBwb2ludHMuCiAKLSAgICB2aXJ0dWFsIHZvaWQqIG1hcEJ1ZmZl
clJhbmdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBs
ZW5ndGgsIEdDM0RiaXRmaWVsZCBhY2Nlc3MpID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Rib29sZWFu
IHVubWFwQnVmZmVyKEdDM0RlbnVtIHRhcmdldCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5
QnVmZmVyU3ViRGF0YShHQzNEZW51bSByZWFkVGFyZ2V0LCBHQzNEZW51bSB3cml0ZVRhcmdldCwg
R0MzRGludHB0ciByZWFkT2Zmc2V0LCBHQzNEaW50cHRyIHdyaXRlT2Zmc2V0LCBHQzNEc2l6ZWlw
dHIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQqIG1hcEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBsZW5ndGgsIEdDR0xiaXRmaWVsZCBh
Y2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFsIEdDR0xib29sZWFuIHVubWFwQnVmZmVyKEdDR0xlbnVt
IHRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51
bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0
LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIpID0gMDsKIAogICAgIC8vIGdl
dEludGVybmFsRm9ybWF0UGFyYW1ldGVyCi0gICAgdmlydHVhbCB2b2lkIGdldEludGVybmFsZm9y
bWF0aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RzaXplaSBidWZTaXplLCBHQzNEaW50KiBwYXJhbXMpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xpbnQq
IHBhcmFtcykgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdGV4U3Rv
cmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB0ZXhTdG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxz
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEc2l6ZWkgZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3RvcmFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMc2l6ZWkgZGVwdGgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXRBY3RpdmVVbmlmb3Jt
cyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQzNEdWludD4mIHVuaWZv
cm1JbmRpY2VzLCBHQzNEZW51bSBwbmFtZSwgVmVjdG9yPEdDM0RpbnQ+JiBwYXJhbXMpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5h
bWUsIFZlY3RvcjxHQ0dMaW50PiYgcGFyYW1zKSA9IDA7CiAKICAgICAvLyA9PT09PT09PT09IE5v
bi1XZWJHTCBiYXNlZCBlbnRyeSBwb2ludHMuCiAKLSAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2xl
YXJCaXRzQnlBdHRhY2htZW50VHlwZShHQzNEZW51bSk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGdl
dENsZWFyQml0c0J5Rm9ybWF0KEdDM0RlbnVtKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2xl
YXJCaXRzQnlBdHRhY2htZW50VHlwZShHQ0dMZW51bSk7CisgICAgc3RhdGljIHVuc2lnbmVkIGdl
dENsZWFyQml0c0J5Rm9ybWF0KEdDR0xlbnVtKTsKIAotICAgIHN0YXRpYyB1aW50OF90IGdldENo
YW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0pOworICAgIHN0YXRpYyB1aW50OF90IGdldENoYW5u
ZWxCaXRzQnlGb3JtYXQoR0NHTGVudW0pOwogCiAgICAgRGVzdGluYXRpb24gZGVzdGluYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMzRC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlczNELmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDVlYzI3MTQ1YzAzMGY5ZGJiZGRmZjI1NGYzYTE0ZGIxNWFiYzNjYTAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlczNELmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBHcmFwaGljc1R5cGVzM0RfaAotI2RlZmluZSBHcmFwaGljc1R5cGVzM0Rf
aAotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotLy8gR0MzRCB0eXBlcyBtYXRjaCB0aGUg
Y29ycmVzcG9uZGluZyBHTCB0eXBlcyBhcyBkZWZpbmVkIGluIE9wZW5HTCBFUyAyLjAKLS8vIGhl
YWRlciBmaWxlIGdsMi5oIGZyb20ga2hyb25vcy5vcmcuCi10eXBlZGVmIHVuc2lnbmVkIGludCBH
QzNEZW51bTsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBHQzNEYm9vbGVhbjsKLXR5cGVkZWYgdW5z
aWduZWQgaW50IEdDM0RiaXRmaWVsZDsKLXR5cGVkZWYgc2lnbmVkIGNoYXIgR0MzRGJ5dGU7Ci10
eXBlZGVmIHVuc2lnbmVkIGNoYXIgR0MzRHVieXRlOwotdHlwZWRlZiBzaG9ydCBHQzNEc2hvcnQ7
Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IEdDM0R1c2hvcnQ7Ci10eXBlZGVmIGludCBHQzNEaW50
OwotdHlwZWRlZiBpbnQgR0MzRHNpemVpOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0MzRHVpbnQ7
Ci10eXBlZGVmIGZsb2F0IEdDM0RmbG9hdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0MzRGhh
bGZmbG9hdDsKLXR5cGVkZWYgZmxvYXQgR0MzRGNsYW1wZjsKLXR5cGVkZWYgaW50cHRyX3QgR0Mz
RGludHB0cjsKLXR5cGVkZWYgaW50cHRyX3QgR0MzRHNpemVpcHRyOwotdHlwZWRlZiBjaGFyIEdD
M0RjaGFyOwotdHlwZWRlZiBsb25nIGxvbmcgR0MzRGludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgR0MzRHVpbnQ2NDsKLQotdHlwZWRlZiBHQzNEdWludCBQbGF0Zm9ybTNET2JqZWN0
OwotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotdHlwZWRlZiB1bnNpZ25lZCBHTHVpbnQ7Ci0jZW5k
aWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXNHTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMzA1ZTM3Nzg1NzEzNjVlOGE2ODBmOWQyYmY4
ZWRhMzRhODBmODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzR0wuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCisvLyBHQ0dMIHR5cGVzIG1hdGNoIHRoZSBjb3JyZXNwb25k
aW5nIEdMIHR5cGVzIGFzIGRlZmluZWQgaW4gT3BlbkdMIEVTIDIuMAorLy8gaGVhZGVyIGZpbGUg
Z2wyLmggZnJvbSBraHJvbm9zLm9yZy4KK3R5cGVkZWYgdW5zaWduZWQgR0NHTGVudW07Cit0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgR0NHTGJvb2xlYW47Cit0eXBlZGVmIHVuc2lnbmVkIEdDR0xiaXRm
aWVsZDsKK3R5cGVkZWYgc2lnbmVkIGNoYXIgR0NHTGJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgR0NHTHVieXRlOwordHlwZWRlZiBzaG9ydCBHQ0dMc2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IEdDR0x1c2hvcnQ7Cit0eXBlZGVmIGludCBHQ0dMaW50OwordHlwZWRlZiBpbnQgR0NH
THNpemVpOwordHlwZWRlZiB1bnNpZ25lZCBHQ0dMdWludDsKK3R5cGVkZWYgZmxvYXQgR0NHTGZs
b2F0OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBHQ0dMaGFsZmZsb2F0OwordHlwZWRlZiBmbG9h
dCBHQ0dMY2xhbXBmOwordHlwZWRlZiBpbnRwdHJfdCBHQ0dMaW50cHRyOwordHlwZWRlZiBpbnRw
dHJfdCBHQ0dMc2l6ZWlwdHI7Cit0eXBlZGVmIGNoYXIgR0NHTGNoYXI7Cit0eXBlZGVmIGxvbmcg
bG9uZyBHQ0dMaW50NjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBHQ0dMdWludDY0Owor
Cit0eXBlZGVmIEdDR0x1aW50IFBsYXRmb3JtR0xPYmplY3Q7CisKKyNpZiAhUExBVEZPUk0oQ09D
T0EpCit0eXBlZGVmIHVuc2lnbmVkIEdMdWludDsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDFhMGY4MTZmZGE4MDMw
Mjc5NmFhM2EzZTU5YjZkZjkxOTk1ZDAzYzcuLmMwMTI2MzcwY2I4NjU5MjdhMzJiZjExZjYxNDg2
ZDcxYWY3YjQ3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1
ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgSW1h
Z2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYs
IEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCkKK2Jvb2wg
SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKIHsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAppbmRleCA1MzMzY2Y0ZWMyMjhmOWRiMzczZjI1OGU2YjljN2I5ZWU0
ZmM4YWMwLi4zYmRlZTRlZTAwZWQxN2FlMzQzYjJmNmE4ZGRkMDA5Mzg5YzJlNmJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTMwLDcg
KzMwLDcgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvclNw
YWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgpAQCAtMTM0LDcgKzEzNCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBj
dXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlv
biB0aGF0IHRoZXkgb25seSB3b3JrCiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Ig
b3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9Q
bGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQzNEZW51bSwgUGxhdGZv
cm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpOworICAgIGJvb2wgY29weVRvUGxhdGZv
cm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xP
YmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKTsKIAogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZv
ciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgogICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0Ns
YW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDBhMzUzY2JjMjE5OGE3YWVjZTI5ZTI5MzQz
N2ZkN2FhNjQ3ZjlmYTIuLjgwMjkwZjZiZjZkYmNmNmYwNzZiMjBjMjE1NjVkMTlhY2ZmODFmYjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTk1NSw3ICs5NTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyOjpwYWludEN1cnJlbnRGcmFt
ZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEZsb2F0UmVjdAogICAgIG1fcHJp
dmF0ZS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQocCwgcik7CiB9CiAKLWJvb2wgTWVkaWFQ
bGF5ZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK2Jv
b2wgTWVkaWFQbGF5ZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBm
bGlwWSkKIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoY29udGV4dCwgdGV4dHVyZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQs
IGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKaW5kZXggNzYxZTUxZGZlNWY4
N2ViYzI4OTFiMzM0OTEyMWY5NzIxYjk1YzkyNC4uMTgzZDhiNTAyNTk3ZjFhNWM5ZDQ1MmY2YzQy
ZWM4ODFjNmM0ZTlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJBdWRpb1RyYWNrUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBl
czNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgogI2luY2x1ZGUgIkxlZ2FjeUNETVNlc3Npb24uaCIKICNpbmNsdWRlICJNZWRpYVBsYXll
ckVudW1zLmgiCkBAIC00MjEsNyArNDIxLDcgQEAgcHVibGljOgogICAgIC8vIFRoZSBkZXN0aW5h
dGlvbiB0ZXh0dXJlIG1heSBuZWVkIHRvIGJlIHJlc2l6ZWQgdG8gdG8gdGhlIGRpbWVuc2lvbnMg
b2YgdGhlIHNvdXJjZSB0ZXh0dXJlIG9yIHJlLWRlZmluZWQgdG8gdGhlIHJlcXVpcmVkIGludGVy
bmFsRm9ybWF0LgogICAgIC8vIFRoZSBjdXJyZW50IHJlc3RyaWN0aW9ucyByZXF1aXJlIHRoYXQg
Zm9ybWF0IHNob3VkIGJlIFJHQiBvciBSR0JBLCB0eXBlIHNob3VsZCBiZSBVTlNJR05FRF9CWVRF
IGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlLgog
Ci0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKTsKKyAgICBi
b29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCosIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpOwogCiAgICAgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCmluZGV4IGIw
MDNiMWMxYTdiMGQ2ODgxODMzMzBhMWYwNTBkMzRiZjNiODZkNjcuLjlmN2Y2ZTZiMDJkM2JlYmUw
OTBlYmNjMzJhNGIwZGNhMWNjMTc1YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCkBAIC0xNTcsNyArMTU3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoR3JhcGhpY3NDb250ZXh0JiBjLCBjb25zdCBGbG9hdFJlY3QmIHIpIHsgcGFpbnQoYywg
cik7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJl
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIEdD
M0RpbnQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIGJvb2wsIGJvb2wpIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4
dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVt
LCBHQ0dMaW50LCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xlbnVtLCBib29sLCBib29sKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JD
dXJyZW50VGltZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcApp
bmRleCA4NzUxM2FiZWQ5OGJmNGU3NDI0NTkwOWUyM2Y2NDE2NjBlNjY1OTc4Li43OGI4MmY3ZDlh
Y2UyYWExZjdmYzg3MjI0NzQ5YWE1ZDMwNTViZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3Bw
CkBAIC0xMDAsNyArMTAwLDcgQEAgaW50IEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRHcmFwaGljc1Jl
c2V0U3RhdHVzQVJCKCkKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOwog
fQogCi1TdHJpbmcgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VB
TkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK1N0cmluZyBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQog
ewogICAgIGludCBzb3VyY2VMZW5ndGggPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYo
c2hhZGVyLCBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAmc291cmNl
TGVuZ3RoKTsKQEAgLTEzNywxNyArMTM3LDE3IEBAIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6Omlu
aXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCkKICAgICBtX2luaXRpYWxpemVkQXZhaWxhYmxl
RXh0ZW5zaW9ucyA9IHRydWU7CiB9CiAKLXZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRuUGl4
ZWxzRVhUKGludCwgaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVt
LCBHQzNEc2l6ZWksIHZvaWQgKikKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRuUGl4ZWxz
RVhUKGludCwgaW50LCBHQ0dMc2l6ZWksIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMc2l6ZWksIHZvaWQgKikKIHsKICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKIH0KIAotdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0blVu
aWZvcm1mdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGZsb2F0ICopCit2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybWZ2RVhUKEdDR0x1aW50LCBpbnQsIEdDR0xzaXplaSwg
ZmxvYXQgKikKIHsKICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKIH0KIAotdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0blVuaWZvcm1pdkVY
VChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGludCAqKQordm9pZCBFeHRlbnNpb25zR0xBTkdM
RTo6Z2V0blVuaWZvcm1pdkVYVChHQ0dMdWludCwgaW50LCBHQ0dMc2l6ZWksIGludCAqKQogewog
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
fQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zCiAgICAgZ2w6OlJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgc2FtcGxlcywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lv
bnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCitQbGF0Zm9ybUdMT2JqZWN0IEV4dGVu
c2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7CiAgICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQgYXJyYXkgPSAwOwpAQCAtMTcxLDcgKzE3
MSw3IEBAIFBsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uc0dMQU5HTEU6OmNyZWF0ZVZlcnRleEFy
cmF5T0VTKCkKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MCw3ICsxODAsNyBA
QCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0IGFycmF5KQogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsK
IH0KIAotR0MzRGJvb2xlYW4gRXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm0zRE9iamVjdCBhcnJheSkKK0dDR0xib29sZWFuIEV4dGVuc2lvbnNHTEFOR0xFOjppc1Zl
cnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkK
ICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTg5LDcgKzE4OSw3IEBAIEdDM0Rib29sZWFu
IEV4dGVuc2lvbnNHTEFOR0xFOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJy
YXkpCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAotdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJy
YXkpCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1H
TE9iamVjdCBhcnJheSkKIHsKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIGdsOjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwpAQCAtMjE4LDI0ICsyMTgsMjQgQEAg
Ym9vbCBFeHRlbnNpb25zR0xBTkdMRTo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBu
YW1lKQogICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkgfHwg
bV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7CiB9CiAKLXZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51bSog
YnVmcykKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdCdWZmZXJzRVhUKEdDR0xzaXplaSBu
LCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKICAgICBnbDo6RHJhd0J1ZmZlcnNFWFQobiwgYnVm
cyk7CiB9CiAKLXZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0Mz
RGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJp
bWNvdW50KQordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dM
ZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmlt
Y291bnQpCiB7CiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6
RHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsK
IH0KIAotdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0Rl
bnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNl
dCwgR0MzRHNpemVpIHByaW1jb3VudCkKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5
cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RHJhd0VsZW1lbnRzSW5zdGFuY2Vk
QU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwogfQogCi12b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBk
aXZpc29yKQordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6dmVydGV4QXR0cmliRGl2aXNvcihHQ0dM
dWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKIHsKICAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRp
dmlzb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKaW5kZXggMTExNGQ0OGY3OGY3YzczOWY0N2Q5MTY2
OGEwOGZjNmQ2ZjI2MzA1ZS4uYjdhYWMxMDVlYWFmNTY4MmI4NzdmOGUxMTMzOGRkODk4Njk4YTdi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0
ZW5zaW9uc0dMQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC00NSwyOCArNDUsMjggQEAgcHVibGljOgogICAg
IGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwogICAgIGludCBnZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkgb3ZlcnJpZGU7CiAKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNy
ZWF0ZVZlcnRleEFycmF5T0VTKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc1ZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZFZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIFBsYXRmb3JtR0xPYmpl
Y3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZVZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOworICAgIEdDR0xib29sZWFuIGlz
VmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBiaW5k
VmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBpbnNl
cnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHB1c2hH
cm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHBvcEdyb3Vw
TWFya2VyRVhUKHZvaWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0J1ZmZlcnNFWFQoR0MzRHNp
emVpLCBjb25zdCBHQzNEZW51bSopIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0J1ZmZlcnNFWFQo
R0NHTHNpemVpLCBjb25zdCBHQ0dMZW51bSopIG92ZXJyaWRlOwogCi0gICAgU3RyaW5nIGdldFRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAg
ICBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtR0xPYmplY3Qp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBz
cmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9u
ZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZp
bHRlcikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1v
ZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwg
R0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0Mz
RHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0Fy
cmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0VsZW1lbnRz
SW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
bG9uZyBsb25nIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKSBv
dmVycmlkZTsKIAogICAgIC8vIEVYVCBSb2J1c3RuZXNzIC0gdXNlcyBnZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkKLSAgICB2b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
YnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRuVW5pZm9ybWl2
RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGlu
dCAqcGFyYW1zKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQg
eSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRu
VW5pZm9ybWl2RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1
ZlNpemUsIGludCAqcGFyYW1zKSBvdmVycmlkZTsKIAogICAgIGJvb2wgaXNOVklESUEoKSBvdmVy
cmlkZSB7IHJldHVybiBtX2lzTlZJRElBOyB9CiAgICAgYm9vbCBpc0FNRCgpIG92ZXJyaWRlIHsg
cmV0dXJuIG1faXNBTUQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXgg
YjA0YWNkYWQ4NjgwMGM2MzYxN2UzN2MyMWYzYmUyNTkwOTE0YjM4Zi4uODEwMTE5MjNmYjJiZjRl
OTg0NTA3ZGEzMDcxNmMwNmY0MDZjNWQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdM
RS5jcHAKQEAgLTI3NSwxMyArMjc1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjCiAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYm91bmRGcmFtZUJ1ZmZlcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVm
ZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldElu
dGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CkBAIC0z
MTQsNyArMzE0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYo
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRl
clR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQqIHJhbmdlLCBHQzNEaW50KiBw
cmVjaXNpb24pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTGVudW0gcHJlY2lzaW9uVHlwZSwgR0NH
TGludCogcmFuZ2UsIEdDR0xpbnQqIHByZWNpc2lvbikKIHsKICAgICBVTlVTRURfUEFSQU0oc2hh
ZGVyVHlwZSk7CiAgICAgQVNTRVJUKHJhbmdlKTsKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0g
c2hhZGVyVHlwZSwgR0MzRAogICAgIH0KIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7CiAgICAgaWYgKHdpZHRoICYmIGhl
aWdodCAmJiAhcGl4ZWxzKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFM
VUUpOwpAQCAtMzU2LDEzICszNTYsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnUKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5n
ZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RGVwdGhSYW5nZWYoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHpOZWFyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpGYXIpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQ0dMY2xhbXBmIGRlcHRo
KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpDbGVhckRlcHRoZihzdGF0
aWNfY2FzdDxmbG9hdD4oZGVwdGgpKTsKQEAgLTM3NSw3ICszNzUsNyBAQCBFeHRlbnNpb25zR0wm
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKICAgICByZXR1cm4gKm1f
ZXh0ZW5zaW9uczsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVs
cyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgdm9pZCogZGF0YSkKIHsKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVz
aCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIGFsbCBw
cmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4
ZWxzLgpAQCAtNjMwLDE0ICs2MzAsMTQgQEAgSW50U2l6ZSBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAogICAgIHJldHVybiBJbnRTaXpl
KG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9
IHRleHR1cmU7CiAgICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwpA
QCAtNjQ1LDIwICs2NDUsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNo
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE8KICAgICBnbDo6QXR0
YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHByb2dy
YW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgZ2w6OkJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQog
ewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBmYm87CkBAIC02NzIsMTE0
ICs2NzIsMTE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QKICAgICB9CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHJl
bmRlcmJ1ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6QmluZFJl
bmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CiB9CiAKIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2
ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQpOwogICAgIGdsOjpCaW5kVGV4dHVyZSh0YXJn
ZXQsIHRleHR1cmUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENv
bG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdD
M0RjbGFtcGYgYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xj
bGFtcGYgYWxwaGEpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkJsZW5k
Q29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiB7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBt
b2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFs
cGhhKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCbGVuZEVxdWF0aW9u
U2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKIH0KIAogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9y
LCBHQ0dMZW51bSBkZmFjdG9yKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGds
OjpCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0
UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xl
bnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFscGhhKQogewogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBH
QzNEZW51bSB1c2FnZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXpl
LCAwLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwg
R0MzRGVudW0gdXNhZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRh
KEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdD
R0xlbnVtIHVzYWdlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCdWZm
ZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBv
ZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRw
dHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNl
dCwgc2l6ZSwgZGF0YSk7CiB9CiAKLXZvaWQqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBC
dWZmZXJSYW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlw
dHIgbGVuZ3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKQordm9pZCogR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQs
IEdDR0xzaXplaXB0ciBsZW5ndGgsIEdDR0xiaXRmaWVsZCBhY2Nlc3MpCiB7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsOjpNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9m
ZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOwogfQogCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5tYXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KQorR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2w6OlVubWFwQnVmZmVyKHRhcmdldCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRP
ZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRh
cmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGlu
dHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgZ2w6OkNvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFy
Z2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RzaXplaSBidWZTaXplLCBH
QzNEaW50KiBwYXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5h
bGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTGludCogcGFyYW1zKQogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwg
aW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEc2l6ZWkgc2FtcGxlcywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGds
OjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAg
IGdsOjpUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
U3RvcmFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVp
IGRlcHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQogewogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CiAgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYgdW5pZm9ybUluZGljZXMs
IEdDM0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGludD4mIHBhcmFtcykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1l
LCBWZWN0b3I8R0NHTGludD4mIHBhcmFtcykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC03ODcsMzggKzc4NywzOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIGNvbnN0CiAgICAgZ2w6OkdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUlu
ZGljZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCBwYXJhbXMuZGF0YSgp
KTsKIH0KIAotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0
YXJnZXQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdD
M0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dM
Y2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpDbGVhcihtYXNrKTsKICAgICBjaGVja0dQVVN0
YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwo
R0MzRGludCBzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdD
R0xpbnQgcykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Q2xlYXJTdGVu
Y2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0Mz
RGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJv
b2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NH
TGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJv
b2xlYW4gYWxwaGEpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkNvbG9y
TWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hh
ZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpA
QCAtODMwLDE0ICs4MzAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Q29tcGlsZVNoYWRlcihzaGFkZXIpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQg
Ym9yZGVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOwpAQCAtODUxLDcgKzg1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzCiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CkBAIC04NjUs
MjUgKzg2NSwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCiAgICAgICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJP
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0MzRGVudW0g
bW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1v
ZGUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkN1bGxGYWNlKG1vZGUp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0MzRGVudW0g
ZnVuYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBm
dW5jKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpEZXB0aEZ1bmMoZnVu
Yyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQzNEYm9v
bGVhbiBmbGFnKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xi
b29sZWFuIGZsYWcpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkRlcHRo
TWFzayhmbGFnKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7CiAgICAgQVNTRVJUKHNoYWRlcik7CkBAIC04OTEsMzkgKzg5MSwzOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybTNETwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RGlzYWJsZShjYXApOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVp
bnQgaW5kZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgZ2w6OkRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJz
dCwgR0MzRHNpemVpIGNvdW50KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0Fy
cmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkRyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50KTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBH
QzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGdsOjpEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKICAgICBjaGVja0dQ
VVN0YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUoR0Mz
RGVudW0gY2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVt
IGNhcCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RW5hYmxlKGNhcCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDM0R1aW50IGluZGV4KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKQEAgLTk0MSwz
MiArOTQxLDMyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKICAgICBn
bDo6Rmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNE
ZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGlu
dCBsZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCiB7CiAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwg
YXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CiAgICAgbV9zdGF0ZS50ZXh0
dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFy
Z2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVu
dW0gdGFyZ2V0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZW5lcmF0
ZU1pcG1hcCh0YXJnZXQpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
Y3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3Rp
dmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOwpAQCAtOTg5LDEyICs5ODksMTIgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1w
bChwcm9ncmFtLCBpbmRleCwgaW5mbyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVp
bnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKQEAgLTEwMTksMTIgKzEwMTksMTIg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIHJldHVybiBnZXRB
Y3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpbmRleCwgaW5mbyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9i
amVjdCogc2hhZGVycykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVk
U2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NH
THNpemVpKiBjb3VudCwgUGxhdGZvcm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXBy
b2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0x
MDM0LDcgKzEwMzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hl
ZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEcwogICAgIGdsOjpHZXRBdHRh
Y2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAotaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7CkBA
IC0xMDQ0LDcgKzEwNDQsNyBAQCBpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgUwogICAgIHJldHVybiBn
bDo6R2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAot
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sIG5hbWUpOwogfQpAQCAtMTA1OCw3ICsxMDU4LDcgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKICAgICAv
LyBhIHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBjbGVh
ciB0aGUgZXJyb3IuCiAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwg
d2UgZ290IE5PX0VSUk9SLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkg
ewotICAgICAgICBHQzNEZW51bSBlcnJvciA9IGdsOjpHZXRFcnJvcigpOworICAgICAgICBHQ0dM
ZW51bSBlcnJvciA9IGdsOjpHZXRFcnJvcigpOwogICAgICAgICBpZiAoZXJyb3IgPT0gTk9fRVJS
T1IpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVy
cm9yKTsKQEAgLTEwNjgsNyArMTA2OCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0dXJuIG1vdmVkQW5FcnJv
cjsKIH0KIAotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKK0dD
R0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigpCiB7CiAgICAgaWYgKCFt
X3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRo
ZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxpc3QgaW4gY2FzZQpAQCAt
MTA4MiwxOSArMTA4MiwxOSBAQCBHQzNEZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RXJyb3IoKQogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK1N0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCiB7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihnbDo6R2V0U3RyaW5nKG5hbWUpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2Rl
KTsKIH0KIAotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIGlmICghYnVmZmVy
KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xMTAzLDEzICsxMTAzLDEzIEBAIEdDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGJ1ZmZlcikKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLUdDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQorR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXAp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsOjpJc0VuYWJsZWQo
Y2FwKTsKIH0KIAotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKK0dDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZm
ZXIpCiB7CiAgICAgaWYgKCFmcmFtZWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpA
QCAtMTExOCw3ICsxMTE4LDcgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKICAgICByZXR1cm4g
Z2w6OklzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwogfQogCi1HQzNEYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK0dD
R0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwpAQCAtMTEyNyw3ICsxMTI3LDcgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCiAgICAgcmV0dXJuIGds
OjpJc1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK0dD
R0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKICAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAgR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVu
ZGVyYnVmZmUKICAgICByZXR1cm4gZ2w6OklzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9
CiAKLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIXNoYWRlcikKICAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTE0NSw3ICsxMTQ1LDcgQEAgR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KQogICAgIHJldHVybiBnbDo6SXNTaGFkZXIoc2hhZGVyKTsKIH0KIAotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUp
CitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3Jt
R0xPYmplY3QgdGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKQEAgLTExNTQsNDQgKzExNTQsNDQgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCiAgICAgcmV0
dXJuIGdsOjpJc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIGdsOjpMaW5lV2lkdGgod2lkdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCBwYXJhbSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6UGl4
ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3Is
IEdDR0xmbG9hdCB1bml0cykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6
UG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52
ZXJ0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNs
YW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGdsOjpTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c2Npc3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpTY2lz
c29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYg
c3RyaW5nKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKIApAQCAtMTIwMywxODQgKzEyMDMsMTg0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3Ry
aW5nCiAgICAgZ2w6OlNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZz
aGFkZXJTb3VyY2VMZW5ndGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdD
R0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIGdsOjpTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0Rl
bnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBnbDo6U3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2sp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQzNEdWlu
dCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVp
bnQgbWFzaykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6U3RlbmNpbE1h
c2sobWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQg
bWFzaykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6U3RlbmNpbE1hc2tT
ZXBhcmF0ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBH
Q0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpm
YWlsLCB6cGFzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgZ2w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xpbnQgdmFsdWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6
OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYw
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6
VW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdD
M0RmbG9hdCogYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5
KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NH
TGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMi4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybTJm
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQg
djEsIEdDM0RmbG9hdCB2MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0
IHYyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtM2YobG9j
YXRpb24sIHYwLCB2MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxv
YXQqIGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsK
ICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2Miwg
R0MzRGZsb2F0IHYzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIs
IEdDR0xmbG9hdCB2MykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5p
Zm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxv
YXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiA0LgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtNGZ2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCiB7
CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0xaShsb2NhdGlvbiwg
djApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50IHYwLCBHQzNEaW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAs
IHYxKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBnbDo6VW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYx
LCBHQ0dMaW50IHYyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlm
b3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25z
dCBHQzNEaW50KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5
KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtM2l2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBH
QzNEaW50IHYzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdDR0xpbnQg
djMpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm00aShsb2Nh
dGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNE
aW50KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewog
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgy
ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNw
b3NlLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUs
IEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwg
dHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVp
IHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsK
ICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpVc2VQcm9ncmFtKHByb2dyYW0pOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRh
dGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7CiAKQEAgLTEzODgsNjcgKzEzODgsNjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKICAgICBnbDo6VmFs
aWRhdGVQcm9ncmFtKHByb2dyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB2MCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VmVydGV4QXR0
cmliMWYoaW5kZXgsIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4
LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCB2MCwgR0MzRGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQogewog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZihpbmRleCwg
djAsIHYxKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
MmZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBH
Q0dMZmxvYXQqIGFycmF5KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpW
ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0Mz
RGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEs
IEdDR0xmbG9hdCB2MikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VmVy
dGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9h
dCogYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYo
R0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0
IHYzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xm
bG9hdCB2MykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6VmVydGV4QXR0
cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQq
IGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdD
R0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWlu
dCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxp
emVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6
ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJf
dD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9y
dChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9
CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRl
eEFycmF5KCkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVZlcnRleEFycmF5KCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQg
YXJyYXkgPSAwOwpAQCAtMTQ1Niw3ICsxNDU2LDcgQEAgUGxhdGZvcm0zRE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQogICAgIHJldHVybiBhcnJheTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxh
dGZvcm0zRE9iamVjdCBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICAg
ICBnbDo6RGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CiB9CiAKLUdDM0Rib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJy
YXkpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQ
bGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKQEAgLTE0NzIsMzEgKzE0NzIsMzEgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICAg
ICByZXR1cm4gZ2w6OklzVmVydGV4QXJyYXkoYXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2Jq
ZWN0IGFycmF5KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpCaW5kVmVy
dGV4QXJyYXkoYXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRC
b29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xib29sZWFu
KiB2YWx1ZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0Qm9vbGVh
bnYocG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0
ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsK
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0QnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCog
dmFsdWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldEZsb2F0dihw
bmFtZSwgdmFsdWUpOwogfQogICAgIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
SW50ZWdlcjY0dihHQzNEZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1ZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQ2
NCogdmFsdWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKQEAgLTE1MDUsNyArMTUwNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpCiAgICAg
Ly8gZ2w6OkdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCkBAIC0x
NTEzLDEzICsxNTEzLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdlCiAgICAgZ2w6OkdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUs
IHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWl2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUs
IHZhbHVlKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgR0MzRHNpemVpIGNvdW50LCBj
b25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5t
YW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0sIEdDR0xzaXplaSBjb3Vu
dCwgY29uc3QgU3RyaW5nJiBsb2cpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHNoYWRlcnMpOwogICAg
IFVOVVNFRF9QQVJBTShjb3VudCk7CkBAIC0xNTM5LDcgKzE1MzksNyBAQCBTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXJzWzJdLAogICAgIHJldHVybiBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKIH0KIAotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0pCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dy
YW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7CiAKQEAgLTE1NTMsMjAgKzE1NTMsMjAgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCiAgICAgVmVj
dG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwogICAgIGdsOjpHZXRQcm9ncmFtSW5mb0xvZyhwcm9n
cmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CiAKLSAgICBHQzNEc2l6ZWkgY291bnQ7
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOworICAgIEdDR0xzaXplaSBjb3VudDsK
KyAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07CiAgICAgZ2V0QXR0YWNoZWRTaGFkZXJz
KHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CiAKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7CiAg
ICAgQVNTRVJUKHNoYWRlcik7CiAKQEAgLTE1NzQsNyArMTU3NCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNE
ZW51bSBwbmFtCiAgICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKIH0K
IAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFk
ZXIpOwogCkBAIC0xNTg4LDQwICsxNTg4LDQwIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBWZWN0
b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CiAgICAgZ2w6OkdldFNoYWRlckluZm9Mb2coc2hhZGVy
LCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CiAKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1sy
XSA9IHsgc2hhZGVyLCAwIH07CiAgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVy
cywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7CiB9CiAKLVN0cmluZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QpCitTdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0
KQogewogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQqIHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VGV4UGFyYW1ldGVyZnYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
KiB2YWx1ZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0VGV4UGFy
YW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRl
eFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZh
bHVlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpHZXRUZXhQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMZmxvYXQqIHZhbHVlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpH
ZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50KiB2YWx1ZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICBnbDo6R2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKLUdDM0Rp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK0dDR0xpbnQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKQEAgLTE2Mjks
MjggKzE2MjksMjggQEAgR0MzRGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9y
bUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY28KICAgICByZXR1cm4gZ2w6Okdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
Z2w6OkdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50KiB2YWx1ZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6R2V0
VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLUdDM0RzaXplaXB0ciBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZW51bSBwbmFtZSkKK0dDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIEdMdm9pZCogcG9pbnRlciA9IDA7
CiAgICAgZ2w6OkdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHBvaW50ZXIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRy
PihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQq
IHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKIApAQCAtMTY1OSwyMSArMTY1OSwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRAogICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJl
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBH
QzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Q29tcHJlc3Nl
ZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQu
YWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6Q29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi1QbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQorUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKIHsKICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQgbyA9IDA7CkBAIC0xNjgxLDcgKzE2ODEs
NyBAQCBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZm
ZXIoKQogICAgIHJldHVybiBvOwogfQogCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgR0x1aW50IG8gPSAwOwpAQCAtMTY4OSwxMyArMTY4OSwxMyBAQCBQbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
CiAgICAgcmV0dXJuIG87CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVByb2dyYW0oKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgcmV0dXJuIGdsOjpDcmVhdGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCitQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogewogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsKQEAgLTE3MDMsMTMgKzE3
MDMsMTMgQEAgUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKCkKICAgICByZXR1cm4gbzsKIH0KIAotUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCitQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0g
dHlwZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2w6OkNyZWF0
ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDog
R0xfVkVSVEVYX1NIQURFUik7CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQorUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgR0x1aW50IG8gPSAwOwpAQCAtMTcxOCwxMyArMTcxOCwxMyBAQCBQbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKICAgICByZXR1cm4g
bzsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
QnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZy
YW1lYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3VuZEZCTykgewpAQCAtMTcz
NSwyNSArMTczNSwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFt
ZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQogICAgIGdsOjpEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbDo6RGVsZXRlUHJvZ3JhbShw
cm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVy
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVm
ZmVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsOjpEZWxldGVSZW5kZXJi
dWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7
CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2w6OkRlbGV0ZVNoYWRlcihzaGFkZXIp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogewogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAo
YXV0byYga2V5VmFsdWUpIHsKQEAgLTE3NjMsNyArMTc2Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQogICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9y
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVu
dW0gZXJyb3IpCiB7CiAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0
aGUgc3ludGhldGljIGVycm9yIGxpc3QgdG8KICAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2Yg
ZXJyb3JzLCBzbyBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxsIGdldApAQCAtMTgwOCwyNiArMTgw
OCwyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFu
Z2VkTm90aWZpY2F0aW9uKCkKICAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIGdsOjpUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNl
ZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXpl
aSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5z
dGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NH
THNpemVpIHByaW1jb3VudCkKIHsKICAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3Rh
bmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAgICAgY2hlY2tHUFVTdGF0dXMo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dHB0ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNv
dW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3Vu
dCkKIHsKICAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNv
dW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNE
dWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3Ip
CiB7CiAgICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlz
b3IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9UZW1wb3JhcnlBTkdMRVNldHRpbmcuaAppbmRleCA4ZjZjZmUxZWVlOTBjY2Ni
NWVkMTcxODYyZTljZmIxNDQ4YzgxOGNlLi4zODM1ODVjYzE5YjM5ZDMxYWQ0Y2Y2ZDY3NWJiMDE5
MjkyMWNiOTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9UZW1wb3JhcnlBTkdMRVNldHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9UZW1wb3JhcnlBTkdMRVNldHRpbmcuaApAQCAtMjYsNyArMjYsNyBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAK
QEAgLTQyLDEzICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBUZW1wb3JhcnlB
TkdMRVNldHRpbmcgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRlbXBvcmFyeUFOR0xFU2V0
dGluZyk7CiBwdWJsaWM6Ci0gICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nKEdDM0RlbnVtIGNhcGFi
aWxpdHksIEdDM0RlbnVtIHNjb3BlZFN0YXRlKTsKKyAgICBUZW1wb3JhcnlBTkdMRVNldHRpbmco
R0NHTGVudW0gY2FwYWJpbGl0eSwgR0NHTGVudW0gc2NvcGVkU3RhdGUpOwogICAgIH5UZW1wb3Jh
cnlBTkdMRVNldHRpbmcoKTsKIAogcHJpdmF0ZToKLSAgICBjb25zdCBHQzNEZW51bSBtX2NhcGFi
aWxpdHk7Ci0gICAgY29uc3QgR0MzRGVudW0gbV9zY29wZWRTdGF0ZTsKLSAgICBHQzNEZW51bSBt
X29yaWdpbmFsU3RhdGU7CisgICAgY29uc3QgR0NHTGVudW0gbV9jYXBhYmlsaXR5OworICAgIGNv
bnN0IEdDR0xlbnVtIG1fc2NvcGVkU3RhdGU7CisgICAgR0NHTGVudW0gbV9vcmlnaW5hbFN0YXRl
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCmluZGV4IDViZDRlMWZiMGRmMjliNTc4MTM2
YmFkMDUxM2Y4NmFlN2RkZTZlNDcuLmFmMWU2ZThhYTcyNjA5MTEyOWZlNGQ2M2ZlZjI1Y2RiOTc4
YWUwZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKQEAgLTI3MSw3ICsyNzEsNyBAQCBwcml2YXRl
OgogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKSBvdmVycmlk
ZTsKICAgICB2b2lkIHdhaXRGb3JWaWRlb091dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2UoKTsKIAot
ICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRlOworICAgIGJv
b2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKiwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRlOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmlu
ZGV4IDFiZWFjZDQzM2M0YzdjNWM3NTA0MWJiNDc2ODVjYzU5Njg5YmRjY2YuLmM4YzRjMzZlZWZk
MGI3NzMyYTJmMDViYWViYmZmNmJmMWM0Nzk5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpA
QCAtMjI5NSw3ICsyMjk1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpwYWludFdpdGhWaWRlb091dHB1dChHcmFwaGljc0NvbnRleHQmIGMKIAogfQogCi1ib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm0z
RE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJl
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBQbGF0Zm9ybUdMT2JqZWN0IG91dHB1
dFRleHR1cmUsIEdDR0xlbnVtIG91dHB1dFRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGZsaXBZKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMuaAppbmRleCAwNTAwMWU3M2YzMTZmMmE3MzU1N2JhOTU3NmYxOTQy
YTlkMTcwOWZmLi5jNzg4N2IyZDgwNzRjMDZiMDMzNjk2ODMxMmZjMjc3ODZlNGM3ZTczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMuaApAQCAtMjIzLDcgKzIyMyw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCB1cGRhdGVMYXN0SW1hZ2UoKTsKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJ
bkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7CisgICAgYm9v
bCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7CiAKICAgICBib29sIHN1
cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZTsKICAgICAvLyBjYWxs
ZWQgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbSBmbGlwcyB0aGUgaW50byBvciBvdXQgb2YgYWNj
ZWxlcmF0ZWQgcmVuZGVyaW5nIG1vZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KaW5kZXgg
NzU1ZjViZTQzOTlmOGM0ZWE2MDEzMWJiMjJkOGNhMDJmZGMzOGFmZC4uZmUwZTE3ZjZiMGM0Y2Fi
ZWJkMmEwOTgwOTc1ODU5NjY0MzU0Y2IyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQpA
QCAtNjI3LDcgKzYyNyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvCiAgICAgY29udGV4dC5k
cmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlUmVjdC5zaXplKCksIG91dHB1dFJlY3QsIGltYWdl
UmVjdCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0
VGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkp
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y29weVZpZGVvVGV4
dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBQ
bGF0Zm9ybUdMT2JqZWN0IG91dHB1dFRleHR1cmUsIEdDR0xlbnVtIG91dHB1dFRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQogewogICAgIC8v
IFdlIGhhdmUgYmVlbiBhc2tlZCB0byBwYWludCBpbnRvIGEgV2ViR0wgY2FudmFzLCBzbyB0YWtl
IHRoYXQgYXMgYSBzaWduYWwgdG8gY3JlYXRlCiAgICAgLy8gYSBkZWNvbXByZXNzaW9uIHNlc3Np
b24sIGV2ZW4gaWYgdGhhdCBtZWFucyB0aGUgbmF0aXZlIHZpZGVvIGNhbid0IGFsc28gYmUgZGlz
cGxheWVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmluZGV4IDlkZTkwNDQ4MDdiOTE3NjllNGYzNGQz
NWNiMTZlNjM0NTNlNmJkMjAuLmZiYmQ5M2EzMGU5ZDkwZDE4NDBmMWI1NTcxMWFiNjU5NzBhZjY2
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCkBAIC03MjMsNyArNzIzLDcgQEAgUGxhdGZvcm1M
YXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAgIHJldHVybiAwOwog
fQogCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wmLCBHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgZGVzdGluYXRp
b25UZXh0dXJlLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sIGZsaXBZKQorYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAi
U2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9u
IGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwpAQCAtNzMzLDcgKzczMyw3IEBAIGJvb2wgSW1h
Z2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYs
IEdDM0RlbnVtIHRhcmdlCiAgICAgaWYgKCFtX2RhdGEubV90ZXh0dXJlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBHQzNEZW51bSBiaW5kVGV4dHVyZVRhcmdldDsKKyAgICBHQ0dMZW51
bSBiaW5kVGV4dHVyZVRhcmdldDsKICAgICBzd2l0Y2ggKHRhcmdldCkgewogICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKICAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KaW5kZXggMGI3NWNmOTVm
YmY2MGU5YjgyYzExNzA0MzY3ZDgwZTZhMjlmYzE5YS4uMzNlOWRmZjA2NGQwMjNlZjM4Mzk2M2E0
ZDM4YzZkOTJiZTAwZTdjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
Y29hLm1tCkBAIC01MDYsNyArNTA2LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICAv
LyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KICAgICBBTkdMRVJlc291cmNlcy5NYXhE
cmF3QnVmZmVycyA9IDE7CiAgICAgCi0gICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwor
ICAgIEdDR0xpbnQgcmFuZ2VbMl0sIHByZWNpc2lvbjsKICAgICBnZXRTaGFkZXJQcmVjaXNpb25G
b3JtYXQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0
R0w6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKICAgICBBTkdMRVJlc291cmNlcy5G
cmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9u
KTsKIApAQCAtNTg5LDcgKzU4OSw3IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0woKQogfQogCiAjaWYgVVNFKE9QRU5HTF9FUykKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUoR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgY2FsbCB0byBz
ZXRCb3VuZHMgYmVsb3cgdG8gdXBkYXRlIHRoZSBiYWNraW5nIHN0b3JlIHNpemUgYnV0IHdlIGFs
c28KICAgICAvLyBkbyBub3Qgd2FudCB0byBjbG9iYmVyIHRoZSBib3VuZHMgc2V0IGR1cmluZyBs
YXlvdXQuCkBAIC02ODYsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlc2VudFJlbmRlcmJ1ZmZlcigpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4SW1hZ2VJT1N1cmZhY2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIEdDM0R1aW50IHBs
YW5lKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2VJT1N1cmZhY2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgSU9TdXJm
YWNlUmVmIHN1cmZhY2UsIEdDR0x1aW50IHBsYW5lKQogewogI2lmIFVTRShPUEVOR0wpCiAgICAg
Q0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4ocGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCmluZGV4IDI5MjAxNmFjMTRlYWMyYWE4
ZmU0ZDE1ZDI4Zjk0YjAyZTJkNjc1Y2MuLjE0OThkZjA4Mjg3ZDJhM2IwMDI5OWZlOGYwODk5M2Vl
NTNhNzRmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1dlYkdMTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViR0xMYXllci5tbQpAQCAtMTYyLDcgKzE2Miw3IEBAIHN0YXRpYyB2b2lkIGZyZWVE
YXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgaWYg
KF9kcmF3aW5nQnVmZmVyKSB7CiAgICAgICAgIGlmIChfbGF0Y2hlZFBidWZmZXIpIHsKIAotICAg
ICAgICAgICAgR0MzRGVudW0gdGV4dHVyZSA9IF9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsK
KyAgICAgICAgICAgIEdDR0xlbnVtIHRleHR1cmUgPSBfY29udGV4dC0+cGxhdGZvcm1UZXh0dXJl
KCk7CiAgICAgICAgICAgICBnbDo6QmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OklPU3Vy
ZmFjZVRleHR1cmVUYXJnZXQsIHRleHR1cmUpOwogICAgICAgICAgICAgaWYgKCFFR0xfUmVsZWFz
ZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikp
IHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVwb3J0IGVycm9yLgpAQCAtMjQwLDIxICsy
NDAsMjEgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBz
aXplX3QgLyogc2l6ZSAqLykKIC0gKHZvaWQpYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxl
U3VyZmFjZQogewogI2lmIFVTRShPUEVOR0wpCi0gICAgR0MzRGVudW0gdGV4dHVyZSA9IF9jb250
ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKKyAgICBHQ0dMZW51bSB0ZXh0dXJlID0gX2NvbnRleHQt
PnBsYXRmb3JtVGV4dHVyZSgpOwogICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQVJCLCB0ZXh0dXJlKTsKIAogICAgIGlmIChfZHJhd2luZ0J1ZmZlciAmJiBfZHJhd2luZ0J1
ZmZlci0+aXNJblVzZSgpKQogICAgICAgICBzdGQ6OnN3YXAoX2RyYXdpbmdCdWZmZXIsIF9zcGFy
ZUJ1ZmZlcik7CiAKICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlID0gX2RyYXdpbmdCdWZmZXIt
PnN1cmZhY2UoKTsKLSAgICBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCA9IF91c2luZ0FscGhhID8g
R0xfUkdCQSA6IEdMX1JHQjsKKyAgICBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCA9IF91c2luZ0Fs
cGhhID8gR0xfUkdCQSA6IEdMX1JHQjsKIAogICAgIC8vIExpbmsgdGhlIElPU3VyZmFjZSB0byB0
aGUgdGV4dHVyZS4KICAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxD
R0xDb250ZXh0T2JqPihfY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKTsKICAg
ICBDR0xFcnJvciBlcnJvciA9IENHTFRleEltYWdlSU9TdXJmYWNlMkQoY2dsQ29udGV4dCwgR0xf
VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBpbnRlcm5hbEZvcm1hdCwgX2J1ZmZlclNpemUud2lkdGgo
KSwgX2J1ZmZlclNpemUuaGVpZ2h0KCksIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84
X1JFViwgaW9TdXJmYWNlLCAwKTsKICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBlcnJvciA9PSBr
Q0dMTm9FcnJvcik7CiAjZWxpZiBVU0UoQU5HTEUpCi0gICAgR0MzRGVudW0gdGV4dHVyZSA9IF9j
b250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKKyAgICBHQ0dMZW51bSB0ZXh0dXJlID0gX2NvbnRl
eHQtPnBsYXRmb3JtVGV4dHVyZSgpOwogCiAgICAgZ2w6OkJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLmgKaW5kZXgg
NDYzZDA2MWQyNTM5ZmYyMjY3NGM1YjgwNzlmZDFkZWMwY2E2ZjJlZC4uYzQ3YzY5NGY3ZDVkYmJj
ZjdmMzNkOTk2YmU5Y2ViMWUyMzMyMjdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5oCkBAIC0yNyw3ICsyNyw3IEBACiAK
ICNpZiBIQVZFKENPUkVfVklERU8pCiAKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBAIC01OCw3ICs1
OCw3IEBAIHB1YmxpYzoKIAogICAgIFRleHR1cmVDYWNoZUNWKEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMJiwgUmV0YWluUHRyPFRleHR1cmVDYWNoZVR5cGU+JiYpOwogCi0gICAgUmV0YWluUHRyPFRl
eHR1cmVUeXBlPiB0ZXh0dXJlRnJvbUltYWdlKENWUGl4ZWxCdWZmZXJSZWYsIEdDM0RlbnVtIG91
dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7CisgICAgUmV0YWluUHRyPFRleHR1cmVUeXBlPiB0
ZXh0dXJlRnJvbUltYWdlKENWUGl4ZWxCdWZmZXJSZWYsIEdDR0xlbnVtIG91dHB1dFRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSk7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQoKSB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KaW5kZXggNDlj
YjY1ZTdlMGQxNmYwNjZjMTYwZDUyMTdjOTc0YjYyNzRlOWE4Mi4uYWM3MWUxMzAyMWM3MTAyNDhk
NWY3ODA5NzNmMWVmNWI4MDEzYzgwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KQEAgLTYxLDcgKzYxLDcgQEAgVGV4
dHVyZUNhY2hlQ1Y6OlRleHR1cmVDYWNoZUNWKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250
ZXh0LCBSZXRhaW5QdHI8VGV4dHUKIHsKIH0KIAotUmV0YWluUHRyPFRleHR1cmVDYWNoZUNWOjpU
ZXh0dXJlVHlwZT4gVGV4dHVyZUNhY2hlQ1Y6OnRleHR1cmVGcm9tSW1hZ2UoQ1ZQaXhlbEJ1ZmZl
clJlZiBpbWFnZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKQorUmV0YWlu
UHRyPFRleHR1cmVDYWNoZUNWOjpUZXh0dXJlVHlwZT4gVGV4dHVyZUNhY2hlQ1Y6OnRleHR1cmVG
cm9tSW1hZ2UoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgR0NHTGVudW0gb3V0cHV0VGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlKQogewogI2lmIFVTRShBTkdMRSkKICAgICAvLyBGSVhNRTogZmlndXJlIG91
dCBob3cgdG8gZG8gdGhpcyBpbnRlZ3JhdGluZyB2aWEgQU5HTEUuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJD
Vi5jcHAKaW5kZXggZjk5ZmU4ZTA2ZmY3OGUwM2M2NzYzM2U5ODFiOTYyNzNmMWNlODMwMy4uN2Vi
NjBkNzFiMTVkMzFkMjFmNjAxNTcyYTkxZjA5MTk2ZDgxYTNjMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGll
ckNWLmNwcApAQCAtNTE0LDExICs1MTQsMTEgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6
aW5pdGlhbGl6ZUNvbnRleHRPYmplY3RzKCkKICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UuYXBwZW5k
TGl0ZXJhbCgiICAgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjtcbiIpOwogICAgIHZlcnRleFNo
YWRlclNvdXJjZS5hcHBlbmRMaXRlcmFsKCJ9XG4iKTsKIAotICAgIFBsYXRmb3JtM0RPYmplY3Qg
dmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6
OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyID0gbV9j
b250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9TSEFERVIpOwog
ICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291
cmNlLnRvU3RyaW5nKCkpOwogICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlckRpcmVjdCh2ZXJ0
ZXhTaGFkZXIpOwogCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgR0NHTGludCB2YWx1ZSA9
IDA7CiAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdih2ZXJ0ZXhTaGFkZXIsIEdyYXBoaWNzQ29u
dGV4dEdMOjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAg
ICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9Q
bGF0Zm9ybVRleHR1cmUoJXApIC0gVmVydGV4IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0
aGlzKTsKQEAgLTU2MSw3ICs1NjEsNyBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0
aWFsaXplQ29udGV4dE9iamVjdHMoKQogICAgIGZyYWdtZW50U2hhZGVyU291cmNlLmFwcGVuZExp
dGVyYWwoIiAgICB9XG4iKTsKICAgICBmcmFnbWVudFNoYWRlclNvdXJjZS5hcHBlbmRMaXRlcmFs
KCJ9XG4iKTsKIAotICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRl
eHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSKTsKKyAg
ICBQbGF0Zm9ybUdMT2JqZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFk
ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUik7CiAgICAgbV9jb250ZXh0LT5z
aGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlLnRvU3RyaW5n
KCkpOwogICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlckRpcmVjdChmcmFnbWVudFNoYWRlcik7
CiAKQEAgLTYzOSwxMSArNjM5LDExIEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRp
YWxpemVVVkNvbnRleHRPYmplY3RzKCkKICAgICAgICAgIn1cbiJfcwogICAgIH07CiAKLSAgICBQ
bGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdy
YXBoaWNzQ29udGV4dEdMOjpWRVJURVhfU0hBREVSKTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IHZl
cnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dEdMOjpW
RVJURVhfU0hBREVSKTsKICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIs
IHZlcnRleFNoYWRlclNvdXJjZSk7CiAgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyRGlyZWN0
KHZlcnRleFNoYWRlcik7CiAKLSAgICBHQzNEaW50IHN0YXR1cyA9IDA7CisgICAgR0NHTGludCBz
dGF0dXMgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYodmVydGV4U2hhZGVyLCBHcmFw
aGljc0NvbnRleHRHTDo6Q09NUElMRV9TVEFUVVMsICZzdGF0dXMpOwogICAgIGlmICghc3RhdHVz
KSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXpl
VVZDb250ZXh0T2JqZWN0cyglcCkgLSBWZXJ0ZXggc2hhZGVyIGZhaWxlZCB0byBjb21waWxlLiIs
IHRoaXMpOwpAQCAtNjc4LDcgKzY3OCw3IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6Omlu
aXRpYWxpemVVVkNvbnRleHRPYmplY3RzKCkKICAgICAgICAgIn1cbiJfcwogICAgIH07CiAKLSAg
ICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFk
ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUik7CisgICAgUGxhdGZvcm1HTE9i
amVjdCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFHTUVOVF9TSEFERVIpOwogICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZy
YWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAgICAgbV9jb250ZXh0LT5jb21w
aWxlU2hhZGVyRGlyZWN0KGZyYWdtZW50U2hhZGVyKTsKIApAQCAtNzMwLDcgKzczMCw3IEBAIGJv
b2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVVVkNvbnRleHRPYmplY3RzKCkKIH0K
IAogI2lmIFVTRShBTkdMRSkKLXZvaWQqIFZpZGVvVGV4dHVyZUNvcGllckNWOjphdHRhY2hJT1N1
cmZhY2VUb1RleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSB0eXBlLCBJT1N1cmZh
Y2VSZWYgc3VyZmFjZSwgR0MzRHVpbnQgcGxhbmUpCit2b2lkKiBWaWRlb1RleHR1cmVDb3BpZXJD
Vjo6YXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0g
dHlwZSwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIEdDR0x1aW50IHBsYW5lKQogewogICAgIGF1dG8g
ZGlzcGxheSA9IG1fY29udGV4dC0+cGxhdGZvcm1EaXNwbGF5KCk7CiAgICAgRUdMaW50IGVnbFRl
eHR1cmVUYXJnZXQgPSAwOwpAQCAtNzc4LDcgKzc3OCw3IEBAIHZvaWQgVmlkZW9UZXh0dXJlQ29w
aWVyQ1Y6OmRldGFjaElPU3VyZmFjZUZyb21UZXh0dXJlKHZvaWQqIGhhbmRsZSkKIH0KICNlbmRp
ZgogCi1ib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5SW1hZ2VUb1BsYXRmb3JtVGV4dHVy
ZShDVlBpeGVsQnVmZmVyUmVmIGltYWdlLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIFBs
YXRmb3JtM0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCitib29sIFZpZGVv
VGV4dHVyZUNvcGllckNWOjpjb3B5SW1hZ2VUb1BsYXRmb3JtVGV4dHVyZShDVlBpeGVsQnVmZmVy
UmVmIGltYWdlLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIFBsYXRmb3JtR0xPYmplY3Qg
b3V0cHV0VGV4dHVyZSwgR0NHTGVudW0gb3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCiB7CiAgICAgLy8gQ1ZPcGVuR0xUZXh0dXJl
Q2FjaGUgc2VlbXMgdG8gYmUgZGlzYWJsZWQgc2luY2UgdGhlIGRlcHJlY2F0aW9uIG9mCiAgICAg
Ly8gT3BlbkdMLiBUbyBhdm9pZCBwb3J0aW5nIHVudXNlZCBjb2RlIHRvIHRoZSBBTkdMRSBjb2Rl
IHBhdGhzLCByZW1vdmUgaXQuCkBAIC04NDIsNyArODQyLDcgQEAgYm9vbCBWaWRlb1RleHR1cmVD
b3BpZXJDVjo6Y29weUltYWdlVG9QbGF0Zm9ybVRleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFn
ZSwgc2kKICAgICBtX2NvbnRleHQtPnRleEltYWdlMkREaXJlY3QoR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9y
bWF0LCB0eXBlLCBudWxscHRyKTsKIAogICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBvdXRwdXRUZXh0
dXJlLCBsZXZlbCk7Ci0gICAgR0MzRGVudW0gc3RhdHVzID0gbV9jb250ZXh0LT5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUik7CisgICAgR0NHTGVu
dW0gc3RhdHVzID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUik7CiAgICAgaWYgKHN0YXR1cyAhPSBHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiVmlkZW9UZXh0
dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBVbmFi
bGUgdG8gY3JlYXRlIGZyYW1lYnVmZmVyIGZvciBvdXRwdXRUZXh0dXJlLiIsIHRoaXMpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC04NTgsMTEgKzg1OCwxMSBAQCBib29sIFZpZGVvVGV4dHVy
ZUNvcGllckNWOjpjb3B5SW1hZ2VUb1BsYXRmb3JtVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVmIGlt
YWdlLCBzaQogICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodE9mUGxh
bmUoc3VyZmFjZSwgMSk7CiAKICNpZiBVU0UoT1BFTkdMX0VTKQotICAgIEdDM0RlbnVtIHZpZGVv
VGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEOworICAgIEdDR0xl
bnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEOwog
I2VsaWYgVVNFKE9QRU5HTCkKLSAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVUYXJnZXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCOworICAgIEdDR0xlbnVtIHZpZGVv
VGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkI7
CiAjZWxpZiBVU0UoQU5HTEUpCi0gICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OklPU3VyZmFjZVRleHR1cmVUYXJnZXQ7CisgICAgR0NHTGVudW0gdmlk
ZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0R0w6OklPU3VyZmFjZVRleHR1cmVUYXJn
ZXQ7CiAjZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpAQCAt
OTQ4LDcgKzk0OCw3IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlJbWFnZVRvUGxh
dGZvcm1UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIHNpCiAjZW5kaWYgLy8gSEFWRShJ
T1NVUkZBQ0UpCiB9CiAKLWJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1
cmVUb1BsYXRmb3JtVGV4dHVyZShUZXh0dXJlVHlwZSBpbnB1dFZpZGVvVGV4dHVyZSwgc2l6ZV90
IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBQbGF0Zm9ybTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdD
M0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sIGZsaXBZLCBib29sIHN3YXBDb2xvckNoYW5uZWxzKQorYm9vbCBWaWRlb1RleHR1cmVD
b3BpZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKFRleHR1cmVUeXBlIGlu
cHV0VmlkZW9UZXh0dXJlLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIFBsYXRmb3JtR0xP
YmplY3Qgb3V0cHV0VGV4dHVyZSwgR0NHTGVudW0gb3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFksIGJvb2wgc3dhcENvbG9yQ2hhbm5l
bHMpCiB7CiAgICAgaWYgKCFpbnB1dFZpZGVvVGV4dHVyZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtOTU3LDggKzk1Nyw4IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlWaWRl
b1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShUZXh0dXJlVHlwZSBpbnB1dFZpCiAgICAgR0xmbG9h
dCBsb3dlclJpZ2h0WzJdID0geyAwLCAwIH07CiAgICAgR0xmbG9hdCB1cHBlclJpZ2h0WzJdID0g
eyAwLCAwIH07CiAgICAgR0xmbG9hdCB1cHBlckxlZnRbMl0gPSB7IDAsIDAgfTsKLSAgICBQbGF0
Zm9ybTNET2JqZWN0IHZpZGVvVGV4dHVyZU5hbWU7Ci0gICAgR0MzRGVudW0gdmlkZW9UZXh0dXJl
VGFyZ2V0OworICAgIFBsYXRmb3JtR0xPYmplY3QgdmlkZW9UZXh0dXJlTmFtZTsKKyAgICBHQ0dM
ZW51bSB2aWRlb1RleHR1cmVUYXJnZXQ7CiAKICNpZiBVU0UoT1BFTkdMX0VTKQogICAgIHZpZGVv
VGV4dHVyZU5hbWUgPSBDVk9wZW5HTEVTVGV4dHVyZUdldE5hbWUoaW5wdXRWaWRlb1RleHR1cmUp
OwpAQCAtOTk5LDcgKzk5OSw3IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlWaWRl
b1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShUZXh0dXJlVHlwZSBpbnB1dFZpCiAgICAgcmV0dXJu
IGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSh2aWRlb1RleHR1cmVOYW1lLCB2aWRl
b1RleHR1cmVUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIG91dHB1dFRleHR1cmUsIG91dHB1dFRhcmdl
dCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEs
IGZsaXBZLCBzd2FwQ29sb3JDaGFubmVscyk7CiB9CiAKLWJvb2wgVmlkZW9UZXh0dXJlQ29waWVy
Q1Y6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHZp
ZGVvVGV4dHVyZU5hbWUsIEdDM0RlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCwgc2l6ZV90IHdpZHRo
LCBzaXplX3QgaGVpZ2h0LCBQbGF0Zm9ybTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0RlbnVt
IG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29s
IGZsaXBZLCBib29sIHN3YXBDb2xvckNoYW5uZWxzKQorYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJD
Vjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKFBsYXRmb3JtR0xPYmplY3Qgdmlk
ZW9UZXh0dXJlTmFtZSwgR0NHTGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0LCBzaXplX3Qgd2lkdGgs
IHNpemVfdCBoZWlnaHQsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0NHTGVudW0g
b3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFksIGJvb2wgc3dhcENvbG9yQ2hhbm5lbHMpCiB7CiAgICAgTE9HKFdlYkdMLCAiVmlkZW9U
ZXh0dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBp
bnRlcm5hbEZvcm1hdDogJXMsIGZvcm1hdDogJXMsIHR5cGU6ICVzIGZsaXBZOiAlcywgcHJlbXVs
dGlwbHlBbHBoYTogJXMiLCB0aGlzLCBlbnVtVG9TdHJpbmdNYXAoKVtpbnRlcm5hbEZvcm1hdF0s
IGVudW1Ub1N0cmluZ01hcCgpW2Zvcm1hdF0sIGVudW1Ub1N0cmluZ01hcCgpW3R5cGVdLCBmbGlw
WSA/ICJ0cnVlIiA6ICJmYWxzZSIsIHByZW11bHRpcGx5QWxwaGEgPyAidHJ1ZSIgOiAiZmFsc2Ui
KTsKIApAQCAtMTAyMSw3ICsxMDIxLDcgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29w
eVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdmkKICAgICBt
X2NvbnRleHQtPnRleEltYWdlMkREaXJlY3QoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQs
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBu
dWxscHRyKTsKIAogICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVO
VDAsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7
Ci0gICAgR0MzRGVudW0gc3RhdHVzID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUik7CisgICAgR0NHTGVudW0gc3RhdHVzID0g
bV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUik7CiAgICAgaWYgKHN0YXR1cyAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVJfQ09NUExFVEUpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiVmlkZW9UZXh0dXJlQ29waWVyQ1Y6
OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBVbmFibGUgdG8gY3JlYXRl
IGZyYW1lYnVmZmVyIGZvciBvdXRwdXRUZXh0dXJlLiIsIHRoaXMpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9W
aWRlb1RleHR1cmVDb3BpZXJDVi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuaAppbmRleCAxMTVlOTgwYzllOTk5NTNjZDU4NjNmYzI5
OTY0NDQ2ZTEyMDM4MTc4Li4xNWRlMDZhM2ZlNTk2NTViNDY0NzBiYTcxZGVkZDdjYzNkMGJkZmYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1Rl
eHR1cmVDb3BpZXJDVi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2
L1ZpZGVvVGV4dHVyZUNvcGllckNWLmgKQEAgLTUxLDE5ICs1MSwxOSBAQCBwdWJsaWM6CiAgICAg
dHlwZWRlZiBDVk9wZW5HTFRleHR1cmVSZWYgVGV4dHVyZVR5cGU7CiAjZW5kaWYKIAotICAgIGJv
b2wgY29weUltYWdlVG9QbGF0Zm9ybVRleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiwgc2l6ZV90IHdp
ZHRoLCBzaXplX3QgaGVpZ2h0LCBQbGF0Zm9ybTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0Rl
bnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBi
b29sIGZsaXBZKTsKLSAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShU
ZXh0dXJlVHlwZSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBQbGF0Zm9ybTNET2JqZWN0
IG91dHB1dFRleHR1cmUsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZLCBib29sIHN3YXBDb2xvckNoYW5uZWxzID0g
ZmFsc2UpOworICAgIGJvb2wgY29weUltYWdlVG9QbGF0Zm9ybVRleHR1cmUoQ1ZQaXhlbEJ1ZmZl
clJlZiwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBQbGF0Zm9ybUdMT2JqZWN0IG91dHB1
dFRleHR1cmUsIEdDR0xlbnVtIG91dHB1dFRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGZsaXBZKTsKKyAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShUZXh0dXJlVHlwZSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBQ
bGF0Zm9ybUdMT2JqZWN0IG91dHB1dFRleHR1cmUsIEdDR0xlbnVtIG91dHB1dFRhcmdldCwgR0NH
TGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZLCBib29sIHN3YXBD
b2xvckNoYW5uZWxzID0gZmFsc2UpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNv
bnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGNvcHlW
aWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVy
ZSwgR0MzRGVudW0gaW5wdXRUYXJnZXQsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgUGxh
dGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSwgYm9vbCBzd2FwQ29s
b3JDaGFubmVscyk7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUo
UGxhdGZvcm1HTE9iamVjdCBpbnB1dFRleHR1cmUsIEdDR0xlbnVtIGlucHV0VGFyZ2V0LCBzaXpl
X3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIFBsYXRmb3JtR0xPYmplY3Qgb3V0cHV0VGV4dHVyZSwg
R0NHTGVudW0gb3V0cHV0VGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wgZmxpcFksIGJvb2wgc3dhcENvbG9yQ2hhbm5lbHMpOwogCiAgICAgYm9vbCBpbml0
aWFsaXplQ29udGV4dE9iamVjdHMoKTsKICAgICBib29sIGluaXRpYWxpemVVVkNvbnRleHRPYmpl
Y3RzKCk7CiAKICNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICB1bnNpZ25lZCBsYXN0VGV4dHVyZVNl
ZWQoR0MzRHVpbnQgdGV4dHVyZSkKKyAgICB1bnNpZ25lZCBsYXN0VGV4dHVyZVNlZWQoR0NHTHVp
bnQgdGV4dHVyZSkKICAgICB7CiAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2xhc3RUZXh0dXJl
U2VlZC5maW5kKHRleHR1cmUpOwogICAgICAgICByZXR1cm4gaXRlcmF0b3IgPT0gbV9sYXN0VGV4
dHVyZVNlZWQuZW5kKCkgPyAwIDogaXRlcmF0b3ItPnZhbHVlOwpAQCAtNzcsNyArNzcsNyBAQCBw
cml2YXRlOgogCiAgICAgLy8gUmV0dXJucyBhIGhhbmRsZSB3aGljaCwgaWYgbm9uLW51bGwsIG11
c3QgYmUgcmVsZWFzZWQgdmlhIHRoZQogICAgIC8vIGRldGFjaCBjYWxsIGJlbG93LgotICAgIHZv
aWQqIGF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IHR5cGUsIElPU3VyZmFjZVJlZiwgR0MzRHVpbnQgcGxhbmUpOworICAgIHZvaWQqIGF0dGFjaElP
U3VyZmFjZVRvVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIHR5cGUsIElPU3Vy
ZmFjZVJlZiwgR0NHTHVpbnQgcGxhbmUpOwogICAgIHZvaWQgZGV0YWNoSU9TdXJmYWNlRnJvbVRl
eHR1cmUodm9pZCogaGFuZGxlKTsKICNlbmRpZgogCkBAIC04NiwzMSArODYsMzEgQEAgcHJpdmF0
ZToKICNpZiAhVVNFKEFOR0xFKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2FjaGVDVj4g
bV90ZXh0dXJlQ2FjaGU7CiAjZW5kaWYKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhbWVidWZm
ZXIgeyAwIH07Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3Byb2dyYW0geyAwIH07Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBtX3ZlcnRleEJ1ZmZlciB7IDAgfTsKLSAgICBHQzNEaW50IG1fdGV4dHVy
ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0MzRGludCBtX3RleHR1cmVEaW1lbnNpb25z
VW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQzNEaW50IG1fZmxpcFlVbmlmb3JtTG9jYXRp
b24geyAtMSB9OwotICAgIEdDM0RpbnQgbV9zd2FwQ29sb3JDaGFubmVsc1VuaWZvcm1Mb2NhdGlv
biB7IC0xIH07Ci0gICAgR0MzRGludCBtX3ByZW11bHRpcGx5VW5pZm9ybUxvY2F0aW9uIHsgLTEg
fTsKLSAgICBHQzNEaW50IG1fcG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiB7IC0xIH07Ci0gICAg
UGxhdGZvcm0zRE9iamVjdCBtX3l1dlByb2dyYW0geyAwIH07Ci0gICAgUGxhdGZvcm0zRE9iamVj
dCBtX3l1dlZlcnRleEJ1ZmZlciB7IDAgfTsKLSAgICBHQzNEaW50IG1feVRleHR1cmVVbmlmb3Jt
TG9jYXRpb24geyAtMSB9OwotICAgIEdDM0RpbnQgbV91dlRleHR1cmVVbmlmb3JtTG9jYXRpb24g
eyAtMSB9OwotICAgIEdDM0RpbnQgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0g
ICAgR0MzRGludCBtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKLSAgICBHQzNE
aW50IG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiB7IC0xIH07Ci0gICAgR0MzRGludCBt
X3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07Ci0gICAgR0MzRGludCBtX3V2VGV4
dHVyZVNpemVVbmlmb3JtTG9jYXRpb24geyAtMSB9OworICAgIFBsYXRmb3JtR0xPYmplY3QgbV9m
cmFtZWJ1ZmZlciB7IDAgfTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fcHJvZ3JhbSB7IDAgfTsK
KyAgICBQbGF0Zm9ybUdMT2JqZWN0IG1fdmVydGV4QnVmZmVyIHsgMCB9OworICAgIEdDR0xpbnQg
bV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fdGV4dHVyZURp
bWVuc2lvbnNVbmlmb3JtTG9jYXRpb24geyAtMSB9OworICAgIEdDR0xpbnQgbV9mbGlwWVVuaWZv
cm1Mb2NhdGlvbiB7IC0xIH07CisgICAgR0NHTGludCBtX3N3YXBDb2xvckNoYW5uZWxzVW5pZm9y
bUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50IG1fcHJlbXVsdGlwbHlVbmlmb3JtTG9jYXRp
b24geyAtMSB9OworICAgIEdDR0xpbnQgbV9wb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uIHsgLTEg
fTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IG1feXV2UHJvZ3JhbSB7IDAgfTsKKyAgICBQbGF0Zm9y
bUdMT2JqZWN0IG1feXV2VmVydGV4QnVmZmVyIHsgMCB9OworICAgIEdDR0xpbnQgbV95VGV4dHVy
ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07CisgICAgR0NHTGludCBtX3V2VGV4dHVyZVVuaWZvcm1M
b2NhdGlvbiB7IC0xIH07CisgICAgR0NHTGludCBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uIHsg
LTEgfTsKKyAgICBHQ0dMaW50IG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24geyAtMSB9Owor
ICAgIEdDR0xpbnQgbV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uIHsgLTEgfTsKKyAgICBH
Q0dMaW50IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKKyAgICBHQ0dMaW50
IG1fdXZUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07CiAKICNpZiBIQVZFKElPU1VS
RkFDRSkKICAgICBib29sIG1fbGFzdEZsaXBZIHsgZmFsc2UgfTsKICAgICBVbnNhZmVQb2ludGVy
PElPU3VyZmFjZVJlZj4gbV9sYXN0U3VyZmFjZTsKICAgICB1aW50MzJfdCBtX2xhc3RTdXJmYWNl
U2VlZCB7IDAgfTsKIAotICAgIHVzaW5nIFRleHR1cmVTZWVkTWFwID0gSGFzaE1hcDxHQzNEdWlu
dCwgdW5zaWduZWQsIFdURjo6SW50SGFzaDxHQzNEdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8R0MzRHVpbnQ+PjsKKyAgICB1c2luZyBUZXh0dXJlU2VlZE1hcCA9IEhh
c2hNYXA8R0NHTHVpbnQsIHVuc2lnbmVkLCBXVEY6OkludEhhc2g8R0NHTHVpbnQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50Pj47CiAgICAgVGV4dHVyZVNlZWRN
YXAgbV9sYXN0VGV4dHVyZVNlZWQ7CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDQzNzlmZWM4ODgyMTA2M2NmOTEyZDlh
NzZjNzUwOGQ5ZDhmNWUwZWQuLjJkZWQyMDM4NzkxMThjYTZiZTJmZDk0ODdmYmE0NWU3NTQ3YzA4
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3Bw
CkBAIC0zMjk0LDcgKzMyOTQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlYwogfQogCiAjaWYg
VVNFKEdTVFJFQU1FUl9HTCkKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb3B5
VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNv
bnRleHQsIFBsYXRmb3JtM0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZv
cm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IG91dHB1dFRleHR1cmUsIEdDR0xlbnVtIG91dHB1dFRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQogewogICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CmluZGV4IGUyMzlmOTZjNGNjMDk4OWEzOTE2YTE5YzEyNTk5NDU0ZjZlZWUxYWYuLjNlYzExZmJk
Y2RlMzc5ZmZmNjhmMTE4MjRkMjM4ODA5ZTkyYWM5NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJl
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9v
bCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51
bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgb3Zl
cnJpZGU7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92
ZXJyaWRlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAKaW5kZXggYjhjYjNk
NjhkNzg5NzgyNzRjYTI5ZDIyYTJmOTQ4OWIyODRmMjIxNi4uOTYxMTI1NzIzNWQ1OGIwMTYwY2Ni
Mjc2YmJkYTczOWRkYTMwYjdiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAKQEAgLTc2
LDcgKzc2LDcgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW4KICAgICA6OmdsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlRVhUKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOwogfQogCi1QbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnNHTE9wZW5HTDo6
Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQorUGxhdGZvcm1HTE9iamVjdCBFeHRlbnNpb25zR0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIEdMdWludCBhcnJheSA9IDA7CkBAIC04OSw3ICs4OSw3IEBAIFBsYXRm
b3JtM0RPYmplY3QgRXh0ZW5zaW9uc0dMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiAg
ICAgcmV0dXJuIGFycmF5OwogfQogCi12b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVy
dGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3ZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAg
IGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEV4
dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBh
cnJheSkKICNlbmRpZgogfQogCi1HQzNEYm9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0w6OmlzVmVy
dGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK0dDR0xib29sZWFuIEV4dGVuc2lv
bnNHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewog
ICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTExOCw3ICsxMTgs
NyBAQCBHQzNEYm9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0w6OmlzVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm0zRE9iamVjdCBhcnJheSkKICAgICByZXR1cm4gR0xfRkFMU0U7CiB9CiAKLXZvaWQgRXh0
ZW5zaW9uc0dMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJh
eSkKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1H
TE9iamVjdCBhcnJheSkKIHsKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwog
I2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYm
IFVTRShPUEVOR0xfRVMpKQpAQCAtMjQwLDcgKzI0MCw3IEBAIGJvb2wgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgcmV0dXJuIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKIH0KIAotdm9pZCBFeHRlbnNpb25z
R0xPcGVuR0w6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVm
cykKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkgbiwg
Y29uc3QgR0NHTGVudW0qIGJ1ZnMpCiB7CiAgICAgLy8gIEZJWE1FOiBpbXBsZW1lbnQgc3VwcG9y
dCBmb3Igb3RoZXIgcGxhdGZvcm1zLgogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTI1Myw3ICsyNTMs
NyBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpIG4s
IGNvbnN0IEdDM0RlbnVtKiBidWZzKQogI2VuZGlmCiB9CiAKLXZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKK3ZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdD
R0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKICAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTI2OCw3ICsyNjgsNyBA
QCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBt
b2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEcwogI2VuZGlmCiB9CiAKLXZvaWQgRXh0ZW5zaW9uc0dM
T3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNv
dW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50
KQordm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51
bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQs
IEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKICNpZiBQTEFURk9STShHVEspCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBFeHRlbnNp
b25zR0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6
ZWkgY291bnQsIEcKICNlbmRpZgogfQogCi12b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6dmVydGV4
QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3ZvaWQgRXh0
ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dM
dWludCBkaXZpc29yKQogewogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAj
aWYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5oCmluZGV4IDE2M2U5Yzk0MGQy
NGQ0NDM4ZGIxODBhNmU2ZWEzNWQ3NGY2ZTdmNzUuLmU0OTIyNGJmMWU3NGEwNjFhN2Q3YWUxNjM0
ZDRhNzZkNDBmYWZkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmgKQEAgLTQzLDE4ICs0Mywx
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBz
cmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9u
ZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZp
bHRlcikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpIG92ZXJyaWRlOwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9F
UygpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7Ci0gICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9y
bTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9y
bTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVZlcnRleEFy
cmF5T0VTKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9y
bUdMT2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQ0dMYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBs
YXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBs
YXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOwogICAgIHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJFWFQo
Y29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVu
dW0qKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDR0xzaXplaSwgY29uc3Qg
R0NHTGVudW0qKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNE
ZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmlt
Y291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZp
c29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNp
emVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdF
bGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2
aXNvcikgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9u
KGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVu
R0xDb21tb24uY3BwCmluZGV4IDdmNDk1YWNlOGVkZWU5NjYyYzlmNGNjNjM1NzI0OGFkODMyMWZm
ZjYuLmM3MTczNjM5ODc4YWNlODg1YTMwYjhkYWM1OGZjNjQ5YWQ0YmI3OGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVu
R0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCkBAIC0xNjQsNyArMTY0LDcgQEAgaW50IEV4
dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsKIH0KIAotU3RyaW5nIEV4dGVuc2lv
bnNHTE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQorU3RyaW5nIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6Z2V0VHJh
bnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAg
IEFTU0VSVChzaGFkZXIpOwogICAgIGludCBHTHNoYWRlclR5cGU7CkBAIC0xODEsNyArMTgxLDcg
QEAgU3RyaW5nIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAiIjsg
Ly8gSW52YWxpZCBzaGFkZXIgdHlwZS4KIAotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgSGFz
aE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6U2hhZGVyU291
cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX2NvbnRleHQtPm1fc2hhZGVyU291cmNlTWFw
LmZpbmQoc2hhZGVyKTsKIAogICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0LT5tX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMjM5LDE3ICsyMzksMTcgQEAg
dm9pZCBFeHRlbnNpb25zR0xPcGVuR0xDb21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNp
b25zKCkKICAgICBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9IHRydWU7CiB9CiAK
LXZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjpyZWFkblBpeGVsc0VYVChpbnQsIGludCwg
R0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRHNpemVpLCB2b2lk
ICopCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6cmVhZG5QaXhlbHNFWFQoaW50LCBp
bnQsIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMZW51bSwgR0NHTGVudW0sIEdDR0xzaXplaSwg
dm9pZCAqKQogewogICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogfQogCi12b2lkIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6Z2V0blVuaWZv
cm1mdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGZsb2F0ICopCit2b2lkIEV4dGVuc2lv
bnNHTE9wZW5HTENvbW1vbjo6Z2V0blVuaWZvcm1mdkVYVChHQ0dMdWludCwgaW50LCBHQ0dMc2l6
ZWksIGZsb2F0ICopCiB7CiAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiB9CiAKLXZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjpnZXRu
VW5pZm9ybWl2RVhUKEdDM0R1aW50LCBpbnQsIEdDM0RzaXplaSwgaW50ICopCit2b2lkIEV4dGVu
c2lvbnNHTE9wZW5HTENvbW1vbjo6Z2V0blVuaWZvcm1pdkVYVChHQ0dMdWludCwgaW50LCBHQ0dM
c2l6ZWksIGludCAqKQogewogICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oCmlu
ZGV4IGQwNmIxNWIxYTcxMDk0MDY3ODVjY2RkYmVhNzlkNjI4MzVmYjNjOWUuLmIyNzMyMzg0ZjAx
NmVjNjBmYzE3MzVhMTVjOGFkMDBkZjhkMzY3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3Bl
bkdMQ29tbW9uLmgKQEAgLTQ1LDE5ICs0NSwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VuYWJs
ZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIoKSBvdmVycmlkZTsKIAotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJy
YXlPRVMoKSBvdmVycmlkZSA9IDA7Ci0gICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0KSBvdmVycmlkZSA9IDA7Ci0gICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZSA9IDA7Ci0gICAgdm9pZCBiaW5kVmVydGV4
QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGUgPSAwOworICAgIFBsYXRmb3JtR0xP
YmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSBvdmVycmlkZSA9IDA7CisgICAgdm9pZCBkZWxl
dGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZSA9IDA7CisgICAgR0NH
TGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZSA9IDA7
CisgICAgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCkgb3ZlcnJpZGUg
PSAwOwogCi0gICAgdm9pZCBkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWksIGNvbnN0IEdDM0RlbnVt
Kikgb3ZlcnJpZGUgPSAwOworICAgIHZvaWQgZHJhd0J1ZmZlcnNFWFQoR0NHTHNpemVpLCBjb25z
dCBHQ0dMZW51bSopIG92ZXJyaWRlID0gMDsKIAotICAgIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGdl
dFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsK
IAogICAgIC8vIEVYVCBSb2J1c3RuZXNzIC0gdXNlcyBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCkKLSAgICB2b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0Rz
aXplaSBidWZTaXplLCB2b2lkICpkYXRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldG5Vbmlmb3Jt
ZnZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwg
ZmxvYXQgKnBhcmFtcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1
aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1z
KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKSBvdmVycmlkZTsKKyAgICB2b2lkIGdl
dG5Vbmlmb3JtZnZFWFQoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRuVW5pZm9ybWl2
RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIGlu
dCAqcGFyYW1zKSBvdmVycmlkZTsKIAogICAgIGJvb2wgaXNOVklESUEoKSBvdmVycmlkZSB7IHJl
dHVybiBtX2lzTlZJRElBOyB9CiAgICAgYm9vbCBpc0FNRCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
aXNBTUQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCmluZGV4IDJiMWQwZDE5N2Vj
NDkwN2I4YTJjMTM3NDFmOGNmMDJhYjI0N2FkOWEuLmY2NGJkZWUzMTI5MzNiZjNlZGQ1ZmJkZjUz
MTkyZGI0NTRhN2VkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcApAQCAtMTI3
LDcgKzEyNyw3IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnBvcEdyb3VwTWFya2VyRVhU
KHZvaWQpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGxhdGZvcm0zRE9iamVjdCBFeHRl
bnNpb25zR0xPcGVuR0xFUzo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQorUGxhdGZvcm1HTE9iamVj
dCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQogewogICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG1fZ2xHZW5WZXJ0ZXhBcnJh
eXNPRVMpIHsKQEAgLTE0MCw3ICsxNDAsNyBAQCBQbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnNH
TE9wZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RP
YmplY3QgYXJyYXkpCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpk
ZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKIH0KIAotR0Mz
RGJvb2xlYW4gRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0z
RE9iamVjdCBhcnJheSkKK0dDR0xib29sZWFuIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjppc1ZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTY1LDcgKzE2NSw3IEBAIEdDM0Rib29sZWFuIEV4
dGVuc2lvbnNHTE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJy
YXkpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpi
aW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3ZvaWQgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQog
ewogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG1fZ2xCaW5k
VmVydGV4QXJyYXlPRVMpCkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVu
R0xFUzo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogfQog
Ci12b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgLyog
biAqLywgY29uc3QgR0MzRGVudW0qIC8qIGJ1ZnMgKi8pCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5H
TEVTOjpkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkgLyogbiAqLywgY29uc3QgR0NHTGVudW0qIC8q
IGJ1ZnMgKi8pCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGUgc3VwcG9ydC4KICAgICBu
b3RJbXBsZW1lbnRlZCgpOwpAQCAtMTk5LDcgKzE5OSw3IEBAIGludCBFeHRlbnNpb25zR0xPcGVu
R0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpyZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkKK3ZvaWQgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OnJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xz
aXplaSBidWZTaXplLCB2b2lkICpkYXRhKQogewogICAgIGlmIChtX2dsUmVhZG5QaXhlbHNFWFQp
IHsKICAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTIxNiw3ICsy
MTYsNyBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpyZWFkblBpeGVsc0VYVChpbnQgeCwg
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpegogICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogfQogCi12b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjpnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwg
R0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5H
TEVTOjpnZXRuVW5pZm9ybWZ2RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NH
THNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpCiB7CiAgICAgaWYgKG1fZ2xHZXRuVW5pZm9y
bWZ2RVhUKSB7CiAgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC0y
MjcsNyArMjI3LDcgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1mdkVY
VChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0QKICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKIH0KIAotdm9pZCBFeHRlbnNp
b25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykKK3ZvaWQgRXh0ZW5zaW9uc0dM
T3BlbkdMRVM6OmdldG5Vbmlmb3JtaXZFWFQoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9u
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMpCiB7CiAgICAgaWYgKG1fZ2xHZXRuVW5p
Zm9ybWl2RVhUKSB7CiAgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CkBA
IC0yMzgsNyArMjM4LDcgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1p
dkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0QKICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKIH0KIAotdm9pZCBFeHRl
bnNpb25zR0xPcGVuR0xFUzo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNE
aW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit2b2lkIEV4
dGVuc2lvbnNHTE9wZW5HTEVTOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKICAg
ICBpZiAoIW1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpIHsKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CkBAIC0yNDksNyArMjQ5
LDcgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNE
ZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzMKICAgICBtX2dsRHJhd0FycmF5c0luc3RhbmNl
ZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKIH0KIAotdm9pZCBFeHRlbnNp
b25zR0xPcGVuR0xFUzo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHBy
aW1jb3VudCkKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIGxvbmcgbG9u
ZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgaWYgKCFtX2dsRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBFeHRlbnNp
b25zR0xPcGVuR0xFUzo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0Rz
aXplaSBjb3VudCwKICAgICBtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291
bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG9mZnNldCkpLCBwcmltY291bnQpOwogfQogCi12b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjp2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQordm9p
ZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRl
eCwgR0NHTHVpbnQgZGl2aXNvcikKIHsKICAgICBpZiAoIW1fZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
QU5HTEUpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5oCmluZGV4IDFkMWM2YzBhODA2
YzMxOWFiNjE5NjU4ZmQwNmY0ZWU1NDRiZWI0YmQuLmM3NDgyNWM4MWVhZDBhNzQ2MGFlYTFkYWYx
YzlhZTE4MzcwMjkzOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5oCkBAIC01MSwxNSAr
NTEsMTUgQEAKICNpZm5kZWYgR0xfRVhUX3JvYnVzdG5lc3MKICNkZWZpbmUgR0xfRVhUX3JvYnVz
dG5lc3MgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgR0MzRGVudW0g
R0xfQVBJRU5UUlkgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKHZvaWQpOwotR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsUmVhZG5QaXhlbHNFWFQoR0xpbnQgeCwgR0xpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKTsKLUdMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbEdldG5Vbmlmb3JtZnZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcyk7Ci1HTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xHZXRuVW5pZm9ybWl2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOworR0xfQVBJQ0FMTCBHQ0dM
ZW51bSBHTF9BUElFTlRSWSBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQodm9pZCk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZWFkblBpeGVsc0VYVChHTGludCB4LCBHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQg
bG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7CiAjZW5kaWYKLXR5
cGVkZWYgR0MzRGVudW0gKEdMX0FQSUVOVFJZUCBQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNF
WFRQUk9DKSAodm9pZCk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQUROUElY
RUxTRVhUUFJPQykgKEdMaW50IHgsIEdMaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6
ZSwgdm9pZCAqZGF0YSk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE5VTklG
T1JNRlZFWFRQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
YnVmU2l6ZSwgZmxvYXQgKnBhcmFtcyk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEdFVE5VTklGT1JNSVZFWFRQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7Cit0eXBlZGVmIEdDR0xlbnVtIChHTF9B
UElFTlRSWVAgUEZOR0xHRVRHUkFQSElDU1JFU0VUU1RBVFVTRVhUUFJPQykgKHZvaWQpOwordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRUFETlBJWEVMU0VYVFBST0MpIChHTGludCB4
LCBHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZv
cm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpOwordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVROVU5JRk9STUZWRVhUUFJPQykgKEdMdWlu
dCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJh
bXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVROVU5JRk9STUlWRVhUUFJP
QykgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIEdM
aW50ICpwYXJhbXMpOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTgxLDI5ICs4
MSwyOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBvdmVycmlkZTsK
IAotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWksIGNvbnN0IEdDM0RlbnVt
Kikgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1HTE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygp
IG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVj
dCkgb3ZlcnJpZGU7CisgICAgR0NHTGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdM
T2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdM
T2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDR0xzaXplaSwgY29u
c3QgR0NHTGVudW0qKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBw
cmltY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0Rl
bnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNl
dCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJE
aXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGRy
YXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
bnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpIG92ZXJyaWRl
OworICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQg
ZGl2aXNvcikgb3ZlcnJpZGU7CiAKICAgICAvLyBFWFQgUm9idXN0bmVzcyAtIHJlc2V0CiAgICAg
aW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSBvdmVycmlkZTsKIAogICAgIC8vIEVYVCBS
b2J1c3RuZXNzIC0gZXRjCi0gICAgdm9pZCByZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0blVuaWZv
cm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXpl
LCBpbnQgKnBhcmFtcykgb3ZlcnJpZGU7CisgICAgdm9pZCByZWFkblBpeGVsc0VYVChpbnQgeCwg
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlv
biwgR0NHTHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpIG92ZXJyaWRlOworICAgIHZvaWQg
Z2V0blVuaWZvcm1pdkVYVChHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXpl
aSBidWZTaXplLCBpbnQgKnBhcmFtcykgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBib29s
IHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwogICAgIFN0cmluZyBn
ZXRFeHRlbnNpb25zKCkgb3ZlcnJpZGU7CiAKLSAgICBHQzNEZW51bSBtX2NvbnRleHRSZXNldFN0
YXR1czsKKyAgICBHQ0dMZW51bSBtX2NvbnRleHRSZXNldFN0YXR1czsKIAogICAgIGJvb2wgbV9z
dXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0OwogICAgIGJvb2wgbV9zdXBwb3J0c0lNR011bHRp
c2FtcGxlZFJlbmRlclRvVGV4dHVyZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCmluZGV4IGFiMzM2MTE4MGIxYjJiYTZlOTEyZTQwZGQyMTUzYjRmZDM0YjQwNTYuLjYwNmM5
OTY4NmEwMDg5ZjYwNmRmYzAyMzExZDM0Y2UxNDY1NDA5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmNwcApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIG5hbWVzcGFjZSB7CiAKLUdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGdldERhdGFG
b3JtYXQoR0MzRGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdDM0RlbnVtIGRlc3RpbmF0aW9uVHlw
ZSkKK0dyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGdldERhdGFGb3JtYXQoR0NHTGVudW0g
ZGVzdGluYXRpb25Gb3JtYXQsIEdDR0xlbnVtIGRlc3RpbmF0aW9uVHlwZSkKIHsKICAgICBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTg7CiAgICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsKQEAgLTE0
MywxMyArMTQzLDEzIEBAIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGdldERhdGFGb3Jt
YXQoR0MzRGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdDM0RlbnVtCiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVz
b3VyY2VTYWZlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB1bnBhY2tBbGlnbm1l
bnQpCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZl
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1lbnQpCiB7CiAg
ICAgQVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8
IHVucGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKICAgICBVbmlx
dWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwogICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0
ID4gMCkgewogICAgICAgICB1bnNpZ25lZCBzaXplOwotICAgICAgICBHQzNEZW51bSBlcnJvciA9
IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgdW5w
YWNrQWxpZ25tZW50LCAmc2l6ZSwgbnVsbHB0cik7CisgICAgICAgIEdDR0xlbnVtIGVycm9yID0g
Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCB1bnBh
Y2tBbGlnbm1lbnQsICZzaXplLCBudWxscHRyKTsKICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBo
aWNzQ29udGV4dEdMOjpOT19FUlJPUikgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
ZXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY0LDcgKzE2NCw3IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxlCiAgICAgcmV0dXJuIHRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCB6
ZXJvLmdldCgpKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHV0ZUZv
cm1hdEFuZFR5cGVQYXJhbWV0ZXJzKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdW5z
aWduZWQqIGNvbXBvbmVudHNQZXJQaXhlbCwgdW5zaWduZWQqIGJ5dGVzUGVyQ29tcG9uZW50KQor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0
ZXJzKEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgdW5zaWduZWQqIGNvbXBvbmVudHNQ
ZXJQaXhlbCwgdW5zaWduZWQqIGJ5dGVzUGVyQ29tcG9uZW50KQogewogICAgIHN3aXRjaCAoZm9y
bWF0KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEOgpAQCAtMTk3LDQ1ICsxOTcs
NDUgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQ
YXJhbWV0ZXJzKEdDM0RlbnVtIGZvcm1hdCwgR0MKIAogICAgIHN3aXRjaCAodHlwZSkgewogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgICpieXRlc1Bl
ckNvbXBvbmVudCA9IHNpemVvZihHQzNEdWJ5dGUpOworICAgICAgICAqYnl0ZXNQZXJDb21wb25l
bnQgPSBzaXplb2YoR0NHTHVieXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6QllURToKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdD
M0RieXRlKTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xieXRlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hP
UlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEdXNob3J0KTsKKyAg
ICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1c2hvcnQpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKLSAgICAgICAgKmJ5dGVz
UGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RzaG9ydCk7CisgICAgICAgICpieXRlc1BlckNvbXBv
bmVudCA9IHNpemVvZihHQ0dMc2hvcnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwg
PSAxOwotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVzaG9ydCk7Cisg
ICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdXNob3J0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0Xzg6CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6
CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVWOgog
ICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9u
ZW50ID0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6
ZW9mKEdDR0x1aW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfSU5UOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0Mz
RHVpbnQpOworICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVpbnQpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ6Ci0gICAgICAg
ICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEaW50KTsKKyAgICAgICAgKmJ5dGVzUGVy
Q29tcG9uZW50ID0gc2l6ZW9mKEdDR0xpbnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAgKmJ5
dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgICAgICpieXRlc1BlckNv
bXBvbmVudCA9IHNpemVvZihHQ0dMZmxvYXQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgICAgICpieXRl
c1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEaGFsZmZsb2F0KTsKKyAgICAgICAgKmJ5dGVzUGVy
Q29tcG9uZW50ID0gc2l6ZW9mKEdDR0xoYWxmZmxvYXQpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6Ci0g
ICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEZmxvYXQpICsgc2l6ZW9mKEdD
M0R1aW50KTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xmbG9hdCkg
KyBzaXplb2YoR0NHTHVpbnQpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yNDMsNyArMjQzLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKEdDM0RlbnVtIGZvcm1hdCwg
R0MKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdDM0RlbnVtJiBmb3JtYXQsIEdDM0RlbnVtJiB0eXBlKQorYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0NH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtJiBmb3JtYXQsIEdDR0xlbnVtJiB0eXBlKQog
ewogI2RlZmluZSBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKGludGVybmFsRm9ybWF0TWFjcm8s
IGZvcm1hdE1hY3JvLCB0eXBlTWFjcm8pIGNhc2UgaW50ZXJuYWxGb3JtYXRNYWNybzogXAogICAg
ICAgICBmb3JtYXQgPSBmb3JtYXRNYWNybzsgXApAQCAtMzIyLDcgKzMyMiw3IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9y
bWF0KEdDM0RlbnVtIGluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUdDM0RlbnVtIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBhbGlnbm1lbnQsIHVuc2lnbmVkKiBpbWFnZVNpemVJbkJ5dGVzLCB1bnNpZ25lZCogcGFkZGlu
Z0luQnl0ZXMpCitHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHV0ZUltYWdl
U2l6ZUluQnl0ZXMoR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYWxpZ25tZW50LCB1bnNpZ25lZCogaW1hZ2VT
aXplSW5CeXRlcywgdW5zaWduZWQqIHBhZGRpbmdJbkJ5dGVzKQogewogICAgIEFTU0VSVChpbWFn
ZVNpemVJbkJ5dGVzKTsKICAgICBBU1NFUlQoYWxpZ25tZW50ID09IDEgfHwgYWxpZ25tZW50ID09
IDIgfHwgYWxpZ25tZW50ID09IDQgfHwgYWxpZ25tZW50ID09IDgpOwpAQCAtMzY3LDcgKzM2Nyw3
IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0
b3IoSW1hZ2UqIGltYWdlLCBET01Tb3VyY2UKICAgICBtX2V4dHJhY3RTdWNjZWVkZWQgPSBleHRy
YWN0SW1hZ2UocHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWNrSW1hZ2VEYXRhKEltYWdlKiBp
bWFnZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGJvb2wgZmxpcFksIEFscGhhT3AgYWxwaGFPcCwgRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdu
bWVudCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGFja0ltYWdlRGF0YShJbWFnZSogaW1hZ2UsIGNvbnN0IHZvaWQqIHBpeGVscywgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBBbHBoYU9wIGFscGhhT3AsIERh
dGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1
bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsK
ICAgICBpZiAoIWltYWdlIHx8ICFwaXhlbHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM4
NSw3ICszODUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWNrSW1hZ2VEYXRh
KEltYWdlKiBpbWFnZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdl
RGF0YSogaW1hZ2VEYXRhLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZXh0cmFjdEltYWdlRGF0YShJbWFnZURhdGEqIGltYWdl
RGF0YSwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBpZiAoIWltYWdl
RGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDA0LDcgKzQwNCw3IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmV4dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiBpbWFnZURh
dGEsIEdDM0RlbnVtIGZvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkIHVucGFja0Fs
aWdubWVudCwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBjb25zdCB2b2lkKiBw
aXhlbHMsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHVuc2lnbmVkIHVucGFja0FsaWdubWVudCwg
Ym9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBjb25zdCB2b2lkKiBwaXhlbHMsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICAvLyBBc3N1bWVzIGZvcm1hdCwgdHlwZSwgZXRj
LiBoYXZlIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQuCiAgICAgRGF0YUZvcm1hdCBzb3VyY2VEYXRh
Rm9ybWF0ID0gZ2V0RGF0YUZvcm1hdChmb3JtYXQsIHR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuaAppbmRleCA3YmI4ODk1YjFhZWE4N2M2NTNiNWY2YTZjZTBlMGMzNTNkNGRm
OTExLi4wNGZiOWI0ZTMyZWJiODQ2ODE3OWU4NjEwYmYzOWNmZDYyMThkNGJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29udGV4dE9i
ajsgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV90ZXh0dXJlOyB9CisgICAgUGxhdGZvcm1HTE9iamVjdCBwbGF0Zm9ybVRl
eHR1cmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3RleHR1cmU7IH0KICAgICBDQUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQogI2lmIFVTRShBTkdMRSkKICAgICBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdCB7
IHJldHVybiBtX2Rpc3BsYXlPYmo7IH0KQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAjZW5k
aWYgLy8gVVNFKEFOR0xFKQogI2Vsc2UKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFBsYXRmb3JtR0xP
YmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKQEAgLTEyNywxOCAr
MTI3LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CiAKICAgICAvLyBF
cXVpdmFsZW50IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAgd2l0aCBubyBh
bGxvY2F0aW9uLgotICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKIAogICAgIC8vIEdl
dCBhbiBhdHRyaWJ1dGUgbG9jYXRpb24gd2l0aG91dCBjaGVja2luZyB0aGUgbmFtZSAtPiBtYW5n
bGVkbmFtZSBtYXBwaW5nLgotICAgIGludCBnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgaW50IGdldEF0dHJp
YkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKIAogICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0aHJvdWdoIEFO
R0xFLgotICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybTNET2JqZWN0KTsKKyAg
ICB2b2lkIGNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCk7CiAKICAgICAvLyBI
ZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlh
bGl6ZWQgdG8gMC4KICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVz
aXplZC4KICAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZh
dWx0IHNldHRpbmcuCi0gICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludCBhbGlnbm1lbnQgPSA0KTsKKyAgICBib29sIHRleEltYWdl
MkRSZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50
IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IGFsaWdubWVu
dCA9IDQpOwogCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CiAKQEAgLTE0OSw4
ICsxNDksOCBAQCBwdWJsaWM6CiAgICAgLy8gQ29tcHV0ZXMgdGhlIGNvbXBvbmVudHMgcGVyIHBp
eGVsIGFuZCBieXRlcyBwZXIgY29tcG9uZW50CiAgICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQg
YW5kIHR5cGUgY29tYmluYXRpb24uIFJldHVybnMgZmFsc2UgaWYKICAgICAvLyBlaXRoZXIgd2Fz
IGFuIGludmFsaWQgZW51bS4KLSAgICBzdGF0aWMgYm9vbCBjb21wdXRlRm9ybWF0QW5kVHlwZVBh
cmFtZXRlcnMoR0MzRGVudW0gZm9ybWF0LAotICAgICAgICBHQzNEZW51bSB0eXBlLAorICAgIHN0
YXRpYyBib29sIGNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQ0dMZW51bSBmb3JtYXQs
CisgICAgICAgIEdDR0xlbnVtIHR5cGUsCiAgICAgICAgIHVuc2lnbmVkKiBjb21wb25lbnRzUGVy
UGl4ZWwsCiAgICAgICAgIHVuc2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCk7CiAKQEAgLTE1OSwy
MyArMTU5LDIzIEBAIHB1YmxpYzoKICAgICAvLyByZXR1cm4gdGhlIHN1Z2dlc3RlZCBHTCBlcnJv
ciBpbmRpY2F0aW5nIHRoZSBjYXVzZSBvZiB0aGUgZmFpbHVyZToKICAgICAvLyAgIElOVkFMSURf
VkFMVUUgaWYgd2lkdGgvaGVpZ2h0IGlzIG5lZ2F0aXZlIG9yIG92ZXJmbG93IGhhcHBlbnMuCiAg
ICAgLy8gICBJTlZBTElEX0VOVU0gaWYgZm9ybWF0L3R5cGUgaXMgaWxsZWdhbC4KLSAgICBzdGF0
aWMgR0MzRGVudW0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVudW0gZm9ybWF0LAotICAg
ICAgICBHQzNEZW51bSB0eXBlLAotICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAgIEdD
M0RzaXplaSBoZWlnaHQsCi0gICAgICAgIEdDM0RpbnQgYWxpZ25tZW50LAorICAgIHN0YXRpYyBH
Q0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsCisgICAgICAg
IEdDR0xlbnVtIHR5cGUsCisgICAgICAgIEdDR0xzaXplaSB3aWR0aCwKKyAgICAgICAgR0NHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgR0NHTGludCBhbGlnbm1lbnQsCiAgICAgICAgIHVuc2lnbmVk
KiBpbWFnZVNpemVJbkJ5dGVzLAogICAgICAgICB1bnNpZ25lZCogcGFkZGluZ0luQnl0ZXMpOwog
Ci0gICAgc3RhdGljIGJvb2wgcG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQo
R0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtJiBmb3JtYXQsIEdDM0RlbnVtJiB0eXBl
KTsKKyAgICBzdGF0aWMgYm9vbCBwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJbnRlcm5hbEZvcm1h
dChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0mIGZvcm1hdCwgR0NHTGVudW0mIHR5
cGUpOwogCiAgICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZURh
dGEgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKICAgICAvLyBwYWNraW5nIHRoZSBwaXhlbCBkYXRh
IGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLAogICAgIC8vIGFuZCBvYmV5
aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFncy4gUmV0dXJucyB0cnVlCiAg
ICAgLy8gdXBvbiBzdWNjZXNzLgogICAgIHN0YXRpYyBib29sIGV4dHJhY3RJbWFnZURhdGEoSW1h
Z2VEYXRhKiwKLSAgICAgICAgR0MzRGVudW0gZm9ybWF0LAotICAgICAgICBHQzNEZW51bSB0eXBl
LAorICAgICAgICBHQ0dMZW51bSBmb3JtYXQsCisgICAgICAgIEdDR0xlbnVtIHR5cGUsCiAgICAg
ICAgIGJvb2wgZmxpcFksCiAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKQEAgLTE4Niw3ICsxODYsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gdW5wYWNrQWxpZ25tZW50LCB0aGUgb3V0cHV0IGRhdGEgd2lsbCBiZSB0aWdodGx5IHBhY2tl
ZC4KICAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgYW55IGVycm9y
IG9jY3VycmVkLgogICAgIHN0YXRpYyBib29sIGV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsCisgICAgICAgIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwKICAgICAgICAg
dW5zaWduZWQgdW5wYWNrQWxpZ25tZW50LAogICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11
bHRpcGx5QWxwaGEsCiAgICAgICAgIGNvbnN0IHZvaWQqIHBpeGVscywKQEAgLTE5NiwxODMgKzE5
NiwxODMgQEAgcHVibGljOgogICAgIC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCiAgICAgLy8K
IAotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0
Zm9ybTNET2JqZWN0LCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBs
YXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZFRl
eHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2
b2lkIGJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFt
cGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBibGVuZEVxdWF0
aW9uKEdDM0RlbnVtIG1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFy
YXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3Rvcikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVt
IGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXpl
LCBHQzNEZW51bSB1c2FnZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVz
YWdlKSBvdmVycmlkZTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCogbWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFjY2Vzcykg
b3ZlcnJpZGU7Ci0gICAgR0MzRGJvb2xlYW4gdW5tYXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KSBv
dmVycmlkZTsKLSAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQs
IEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIg
d3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0cikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGdldEludGVy
bmFsZm9ybWF0aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RzaXplaSBidWZTaXplLCBHQzNEaW50KiBwYXJhbXMpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpIHNhbXBsZXMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0ZXhTdG9yYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKLSAgICB2
b2lkIHRleFN0b3JhZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RzaXplaSBkZXB0aCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1zKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYgdW5pZm9ybUlu
ZGljZXMsIEdDM0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGludD4mIHBhcmFtcykgb3ZlcnJpZGU7
Ci0KLSAgICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzaykgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGVhckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNE
Y2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJE
ZXB0aChHQzNEY2xhbXBmIGRlcHRoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU3RlbmNpbChH
QzNEaW50IHMpIG92ZXJyaWRlOwotICAgIHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwg
R0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQqIGRhdGEpIG92ZXJyaWRlOwotICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIG92ZXJyaWRlOwotICAg
IHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdWxsRmFjZShH
QzNEZW51bSBtb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5j
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFy
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0
Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRl
eCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQg
Zmlyc3QsIEdDM0RzaXplaSBjb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRy
IG9mZnNldCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApIG92ZXJy
aWRlOwotICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpIG92
ZXJyaWRlOworICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyKSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKSBv
dmVycmlkZTsKKyAgICB2b2lkIGJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZl
cihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQg
YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsK
KyAgICB2b2lkIGJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdD
R0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkgb3ZlcnJpZGU7CisgICAgdm9pZCBibGVu
ZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgYmxlbmRFcXVhdGlv
blNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVudW0gZGZhY3Rvcikg
b3ZlcnJpZGU7CisgICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdD
R0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFscGhhKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgYnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0
ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDR0xl
bnVtIHVzYWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpIG92ZXJyaWRlOworCisgICAgdm9pZCogbWFwQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIGxlbmd0aCwgR0NHTGJpdGZpZWxkIGFj
Y2Vzcykgb3ZlcnJpZGU7CisgICAgR0NHTGJvb2xlYW4gdW5tYXBCdWZmZXIoR0NHTGVudW0gdGFy
Z2V0KSBvdmVycmlkZTsKKyAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRU
YXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xp
bnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0cikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGdl
dEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMaW50KiBwYXJhbXMpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVt
IHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpIG92ZXJyaWRlOworCisgICAgdm9pZCB0ZXhT
dG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsK
KyAgICB2b2lkIHRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xzaXplaSBkZXB0aCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZv
cm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYgdW5p
Zm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lLCBWZWN0b3I8R0NHTGludD4mIHBhcmFtcykgb3Zl
cnJpZGU7CisKKyAgICBHQ0dMZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRh
cmdldCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjbGVhckNvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVu
LCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpIG92ZXJyaWRlOworICAgIHZvaWQg
Y2xlYXJEZXB0aChHQ0dMY2xhbXBmIGRlcHRoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyU3Rl
bmNpbChHQ0dMaW50IHMpIG92ZXJyaWRlOworICAgIHZvaWQgY29sb3JNYXNrKEdDR0xib29sZWFu
IHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29sZWFuIGFs
cGhhKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUs
IGNvbnN0IHZvaWQqIGRhdGEpIG92ZXJyaWRlOworICAgIHZvaWQgY29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdD
R0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51
bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIG92ZXJyaWRl
OworICAgIHZvaWQgY29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIpIG92ZXJyaWRlOworICAg
IHZvaWQgY29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjdWxs
RmFjZShHQ0dMZW51bSBtb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlcHRoRnVuYyhHQ0dMZW51
bSBmdW5jKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1w
ZiB6RmFyKSBvdmVycmlkZTsKKyAgICB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
LCBQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2FibGUoR0NHTGVudW0g
Y2FwKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWlu
dCBpbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3RWxl
bWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
aW50cHRyIG9mZnNldCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGVuYWJsZShHQ0dMZW51bSBjYXAp
IG92ZXJyaWRlOworICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5k
ZXgpIG92ZXJyaWRlOwogICAgIHZvaWQgZmluaXNoKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmbHVz
aCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJn
ZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoR0MzRGVudW0gdGFyZ2V0KSBvdmVycmlkZTsKLQotICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmli
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBv
dmVycmlkZTsKLSAgICBib29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOwotICAgIGJvb2wgZ2V0QWN0aXZl
VW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJ
bmZvJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7Ci0gICAgdm9pZCBn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4
Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpIG92ZXJy
aWRlOwotICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEJvb2xlYW52KEdDM0RlbnVt
IHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QnVmZmVy
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpIG92ZXJyaWRlOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUp
IG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQ2NCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0UHJvZ3JhbWl2KFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9y
bUdMT2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0LCBHQ0dMaW50IGxldmVsKSBvdmVycmlkZTsKKyAgICB2b2lkIGZyb250RmFj
ZShHQ0dMZW51bSBtb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKEdDR0xl
bnVtIHRhcmdldCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGdldEFjdGl2ZUF0dHJpYihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgb3ZlcnJpZGU7
CisgICAgYm9vbCBnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
R0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKTsKKyAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpIG92
ZXJyaWRlOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIHZvaWQgZ2V0QXR0YWNo
ZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHNpemVpIG1heENvdW50LCBH
Q0dMc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybUdMT2JqZWN0KiBzaGFkZXJzKSBvdmVycmlkZTsKKyAg
ICBHQ0dMaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwg
R0NHTGJvb2xlYW4qIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEJ1ZmZlclBhcmFtZXRl
cml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKSBvdmVy
cmlkZTsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0Rmxv
YXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lk
IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGdldEludGVnZXJ2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBnZXRJbnRlZ2VyNjR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50
NjQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkgb3ZlcnJpZGU7CiAj
aWYgIVVTRShBTkdMRSkKLSAgICB2b2lkIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7
CisgICAgdm9pZCBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpOwogI2VuZGlmIC8vICFV
U0UoQU5HTEUpCi0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOwotICAgIFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmpl
Y3RbMl0sIEdDM0RzaXplaSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAgIFN0cmluZyBnZXRT
aGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U2hh
ZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lv
blR5cGUsIEdDM0RpbnQqIHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pIG92ZXJyaWRlOwotICAg
IFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAg
U3RyaW5nIGdldFN0cmluZyhHQzNEZW51bSBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFRl
eFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCog
dmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQg
Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkgb3Zl
cnJpZGU7Ci0gICAgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVy
dGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKSBvdmVycmlk
ZTsKLSAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
LSAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKSBvdmVycmlkZTsKLSAgICBH
QzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAg
IEdDM0Rib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBH
QzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAg
ICBHQzNEYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBH
QzNEYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBsaW5lV2lkdGgoR0MzRGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGxpbmtQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQgcGFyYW0pIG92ZXJyaWRlOwotICAgIHZvaWQgcG9seWdvbk9mZnNldChH
QzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBy
ZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkgb3Zl
cnJpZGU7CisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QpIG92
ZXJyaWRlOworICAgIFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Rb
Ml0sIEdDR0xzaXplaSwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1
ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpIG92ZXJyaWRlOworICAgIFN0cmluZyBnZXRTaGFk
ZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0xlbnVtIHByZWNpc2lvblR5
cGUsIEdDR0xpbnQqIHJhbmdlLCBHQ0dMaW50KiBwcmVjaXNpb24pIG92ZXJyaWRlOworICAgIFN0
cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCkgb3ZlcnJpZGU7CisgICAgU3Ry
aW5nIGdldFN0cmluZyhHQ0dMZW51bSBuYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFRleFBh
cmFtZXRlcmZ2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFs
dWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50KiB2YWx1ZSkgb3ZlcnJp
ZGU7CisgICAgR0NHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KEdD
R0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xpbnQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICBHQ0dMc2l6ZWlwdHIgZ2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKSBvdmVycmlkZTsK
KyAgICBHQ0dMYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsKKyAg
ICBHQ0dMYm9vbGVhbiBpc0VuYWJsZWQoR0NHTGVudW0gY2FwKSBvdmVycmlkZTsKKyAgICBHQ0dM
Ym9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOworICAgIEdD
R0xib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsKKyAgICBH
Q0dMYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQ0dM
Ym9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBs
aW5lV2lkdGgoR0NHTGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRm
b3JtR0xPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5h
bWUsIEdDR0xpbnQgcGFyYW0pIG92ZXJyaWRlOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpIG92ZXJyaWRlOworCisgICAgdm9pZCByZWFk
UGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgdm9pZCogZGF0YSkgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogCi0gICAgdm9pZCByZW5k
ZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
YW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNoYWRlclNvdXJjZShQ
bGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIHN0cmluZykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSBvdmVycmlkZTsKLSAgICB2
b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spIG92ZXJyaWRlOwotICAgIHZvaWQgc3RlbmNp
bE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0g
enBhc3MpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKSBvdmVycmlk
ZTsKLQotICAgIGJvb2wgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQgcGFyYW0pIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdW5pZm9ybTFm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZv
cm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92
ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtMmYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KSBvdmVycmlkZTsKLSAgICB2b2lk
IHVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQq
IHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgeCwgR0MzRGludCB5KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0yaXYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVycmlkZTsKLSAgICB2b2lk
IHVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5p
Zm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHop
IG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWksIGNvbnN0IEdDM0RpbnQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTRmKEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0Rm
bG9hdCB3KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9y
bTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdD
M0RpbnQgdykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3Jt
TWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm1N
YXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVzZVByb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0o
UGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdl
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShH
Q0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpIG92ZXJyaWRlOworICAgIHZvaWQg
c2Npc3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0
LCBjb25zdCBTdHJpbmcmIHN0cmluZykgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGVuY2lsRnVuYyhH
Q0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykgb3ZlcnJpZGU7CisgICAg
dm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdD
R0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNr
KEdDR0x1aW50IG1hc2spIG92ZXJyaWRlOworICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShH
Q0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0ZW5jaWxP
cChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpIG92ZXJyaWRl
OworICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZmFp
bCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKSBvdmVycmlkZTsKKworICAgIGJvb2wg
dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9y
ZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykg
b3ZlcnJpZGU7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkgb3ZlcnJpZGU7CisgICAgdm9pZCB0ZXhQYXJhbWV0
ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pIG92ZXJy
aWRlOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzKSBvdmVycmlkZTsKKworICAgIHZvaWQgdW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB4KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0xZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHNpemVpLCBjb25zdCBHQ0dMZmxvYXQqIHYpIG92ZXJyaWRlOworICAgIHZv
aWQgdW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCkgb3ZlcnJpZGU7CisgICAg
dm9pZCB1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSwgY29uc3QgR0NHTGlu
dCogdikgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHgsIEdDR0xmbG9hdCB5KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0yZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHNpemVpLCBjb25zdCBHQ0dMZmxvYXQqIHYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCwgR0NHTGludCB5
KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNp
emVpLCBjb25zdCBHQ0dMaW50KiB2KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0zZihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6KSBvdmVy
cmlkZTsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpLCBj
b25zdCBHQ0dMZmxvYXQqIHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTNpKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHopIG92ZXJyaWRlOworICAg
IHZvaWQgdW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWksIGNvbnN0IEdDR0xp
bnQqIHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSwgR0NHTGZsb2F0IHosIEdDR0xmbG9hdCB3KSBvdmVycmlk
ZTsKKyAgICB2b2lkIHVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpLCBjb25z
dCBHQ0dMZmxvYXQqIHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTRpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykgb3ZlcnJp
ZGU7CisgICAgdm9pZCB1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSwgY29u
c3QgR0NHTGludCogdikgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xzaXplaSwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dM
ZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHNpemVpLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xm
bG9hdCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWksIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZs
b2F0KiB2YWx1ZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVj
dCkgb3ZlcnJpZGU7CiAjaWYgIVVTRShBTkdMRSkKLSAgICBib29sIGNoZWNrVmFyeWluZ3NQYWNr
aW5nKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0IGZyYWdt
ZW50U2hhZGVyKSBjb25zdDsKLSAgICBib29sIHByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybTNET2Jq
ZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7
CisgICAgYm9vbCBjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNo
YWRlciwgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7CisgICAgYm9vbCBw
cmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xP
YmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2b2lkIHZlcnRleEF0
dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBv
dmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgeCwgR0MzRGZsb2F0IHkpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdD
M0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBHQzNEZmxvYXQgeikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVp
bnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6LCBHQzNEZmxvYXQgdykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwg
R0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwg
R0MzRGludHB0ciBvZmZzZXQpIG92ZXJyaWRlOworICAgIHZvaWQgdmVydGV4QXR0cmliMWYoR0NH
THVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4KSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjFmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4LCBHQ0dM
ZmxvYXQgeSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5k
ZXgsIGNvbnN0IEdDR0xmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9h
dCB6KSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwg
Y29uc3QgR0NHTGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOworICAgIHZvaWQgdmVydGV4QXR0cmli
NGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSwgR0NHTGZsb2F0IHos
IEdDR0xmbG9hdCB3KSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQ0dMdWlu
dCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOworICAgIHZvaWQgdmVy
dGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0
eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRy
IG9mZnNldCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKIAotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBH
QzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJy
aWRlOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaSBw
cmltY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWlu
dCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3QXJyYXlz
SW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwg
R0NHTHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0
YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
aW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKSBvdmVy
cmlkZTsKIAogICAgIC8vIFZlcnRleEFycmF5T2plY3QgY2FsbHMKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVWZXJ0ZXhB
cnJheShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc1ZlcnRl
eEFycmF5KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZFZlcnRleEFy
cmF5KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIFBsYXRmb3JtR0xPYmplY3QgY3Jl
YXRlVmVydGV4QXJyYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZVZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOworICAgIEdDR0xib29sZWFuIGlzVmVydGV4QXJyYXko
UGxhdGZvcm1HTE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBiaW5kVmVydGV4QXJyYXkoUGxh
dGZvcm1HTE9iamVjdCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBhaW50VG9DYW52YXMoY29uc3Qg
dW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0Jik7CiAKQEAgLTM5MCwxMSAr
MzkwLDExIEBAIHB1YmxpYzoKICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZh
cyhJbWFnZUJ1ZmZlciopOwogCiAjaWYgVVNFKE9QRU5HTCkgJiYgRU5BQkxFKFdFQkdMMikKLSAg
ICB2b2lkIHByaW1pdGl2ZVJlc3RhcnRJbmRleChHQzNEdWludCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQpIG92ZXJyaWRlOwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIHRleEltYWdlSU9TdXJmYWNlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiwg
R0MzRHVpbnQgcGxhbmUpOworICAgIGJvb2wgdGV4SW1hZ2VJT1N1cmZhY2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgSU9TdXJmYWNlUmVmLCBH
Q0dMdWludCBwbGFuZSk7CiAKICNpZiBVU0UoT1BFTkdMX0VTKQogICAgIHZvaWQgcHJlc2VudFJl
bmRlcmJ1ZmZlcigpOwpAQCAtNDE0LDE5ICs0MTQsMTkgQEAgcHVibGljOgogICAgIEdyYXBoaWNz
Q29udGV4dEdMUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uOyB9CiAKICAg
ICAvLyBTdXBwb3J0IGZvciBidWZmZXIgY3JlYXRpb24gYW5kIGRlbGV0aW9uCi0gICAgUGxhdGZv
cm0zRE9iamVjdCBjcmVhdGVCdWZmZXIoKSBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IGNyZWF0ZUZyYW1lYnVmZmVyKCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVh
dGVQcm9ncmFtKCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVSZW5kZXJi
dWZmZXIoKSBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVNoYWRlcihHQzNE
ZW51bSkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVUZXh0dXJlKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1H
TE9iamVjdCBjcmVhdGVCdWZmZXIoKSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNy
ZWF0ZUZyYW1lYnVmZmVyKCkgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1HTE9iamVjdCBjcmVhdGVQ
cm9ncmFtKCkgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1HTE9iamVjdCBjcmVhdGVSZW5kZXJidWZm
ZXIoKSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZVNoYWRlcihHQ0dMZW51
bSkgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1HTE9iamVjdCBjcmVhdGVUZXh0dXJlKCkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsK
KyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsKKyAgICB2
b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsKKyAgICB2
b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRl
bGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCkgb3ZlcnJpZGU7CiAKICAgICAvLyBTeW50aGVz
aXplcyBhbiBPcGVuR0wgZXJyb3Igd2hpY2ggd2lsbCBiZSByZXR1cm5lZCBmcm9tIGEKICAgICAv
LyBsYXRlciBjYWxsIHRvIGdldEVycm9yLiBUaGlzIGlzIHVzZWQgdG8gZW11bGF0ZSBPcGVuR0wg
RVMKQEAgLTQzNiw3ICs0MzYsNyBAQCBwdWJsaWM6CiAgICAgLy8gUGVyIHRoZSBiZWhhdmlvciBv
ZiBnbEdldEVycm9yLCB0aGlzIHN0b3JlcyBhdCBtb3N0IG9uZQogICAgIC8vIGluc3RhbmNlIG9m
IGFueSBnaXZlbiBlcnJvciwgYW5kIHJldHVybnMgdGhlbSBmcm9tIGNhbGxzIHRvCiAgICAgLy8g
Z2V0RXJyb3IgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZC4KLSAgICB2b2lkIHN5bnRoZXNp
emVHTEVycm9yKEdDM0RlbnVtIGVycm9yKTsKKyAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdD
R0xlbnVtIGVycm9yKTsKIAogICAgIC8vIFJlYWQgcmVhbCBPcGVuR0wgZXJyb3JzLCBhbmQgbW92
ZSB0aGVtIHRvIHRoZSBzeW50aGV0aWMKICAgICAvLyBlcnJvciBsaXN0LiBSZXR1cm4gdHJ1ZSBp
ZiBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgbW92ZWQuCkBAIC00NTMsNyArNDUzLDcgQEAgcHVibGlj
OgogICAgIC8vIFBhY2tzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2Ugd2hpY2ggaXMg
cGFzc2VkIGluIHxwaXhlbHN8IGludG8gdGhlIHBhc3NlZCBWZWN0b3IKICAgICAvLyBhY2NvcmRp
bmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwgYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFu
ZCBBbHBoYU9wIGZsYWdzLgogICAgIC8vIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MuCi0gICAg
c3RhdGljIGJvb2wgcGFja0ltYWdlRGF0YShJbWFnZSosIGNvbnN0IHZvaWQqIHBpeGVscywgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIGZsaXBZLCBBbHBoYU9wLCBEYXRhRm9y
bWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWdu
ZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOworICAgIHN0
YXRpYyBib29sIHBhY2tJbWFnZURhdGEoSW1hZ2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCwgRGF0YUZvcm1h
dCBzb3VyY2VGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVk
IHNvdXJjZVVucGFja0FsaWdubWVudCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKIAogICAgIGNs
YXNzIEltYWdlRXh0cmFjdG9yIHsKICAgICBwdWJsaWM6CkBAIC00OTgsMTAgKzQ5OCwxMCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSB7IG1fZmFpbE5l
eHRTdGF0dXNDaGVjayA9IHRydWU7IH0KIAotICAgIEdDM0RlbnVtIGFjdGl2ZVRleHR1cmVVbml0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdDsgfQotICAgIEdDM0Rl
bnVtIGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKTsgfQotICAgIEdDM0RlbnVtIGN1cnJlbnRCb3VuZFRhcmdldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuY3VycmVudEJvdW5kVGFyZ2V0KCk7IH0KLSAgICB1bnNpZ25lZCB0
ZXh0dXJlU2VlZChHQzNEdWludCB0ZXh0dXJlKSB7IHJldHVybiBtX3N0YXRlLnRleHR1cmVTZWVk
Q291bnQuY291bnQodGV4dHVyZSk7IH0KKyAgICBHQ0dMZW51bSBhY3RpdmVUZXh0dXJlVW5pdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQ7IH0KKyAgICBHQ0dMZW51
bSBjdXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jdXJyZW50Qm91
bmRUZXh0dXJlKCk7IH0KKyAgICBHQ0dMZW51bSBjdXJyZW50Qm91bmRUYXJnZXQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLmN1cnJlbnRCb3VuZFRhcmdldCgpOyB9CisgICAgdW5zaWduZWQgdGV4
dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkgeyByZXR1cm4gbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmNvdW50KHRleHR1cmUpOyB9CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdXNpbmcgUGxh
dGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsKQEAgLTUzNCw3ICs1MzQsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKTsKIAogI2lm
IFVTRShPUEVOR0xfRVMpCi0gICAgdm9pZCBzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURyYXdh
YmxlKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBzZXRSZW5k
ZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCk7CiAjZW5kaWYKIAogICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOwpA
QCAtNTY0LDcgKzU2NCw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
c2g6OlNoYWRlclZhcmlhYmxlPiBTaGFkZXJTeW1ib2xNYXA7CiAKICAgICBzdHJ1Y3QgU2hhZGVy
U291cmNlRW50cnkgewotICAgICAgICBHQzNEZW51bSB0eXBlOworICAgICAgICBHQ0dMZW51bSB0
eXBlOwogICAgICAgICBTdHJpbmcgc291cmNlOwogICAgICAgICBTdHJpbmcgdHJhbnNsYXRlZFNv
dXJjZTsKICAgICAgICAgU3RyaW5nIGxvZzsKQEAgLTU5MSwyMiArNTkxLDIyIEBAIHByaXZhdGU6
CiAKICNpZiAhVVNFKEFOR0xFKQogICAgIC8vIEZJWE1FOiBTaGFkZXJzIGFyZSBuZXZlciByZW1v
dmVkIGZyb20gdGhpcyBtYXAsIGV2ZW4gaWYgdGhleSBhbmQgdGhlaXIgcHJvZ3JhbSBhcmUgZGVs
ZXRlZC4KLSAgICAvLyBUaGlzIGlzIGJhZCwgYW5kIGl0IGFsc28gcmVsaWVzIG9uIHRoZSBmYWN0
IHdlIG5ldmVyIHJldXNlIFBsYXRmb3JtM0RPYmplY3QgbnVtYmVycy4KLSAgICB0eXBlZGVmIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNvdXJjZU1h
cDsKKyAgICAvLyBUaGlzIGlzIGJhZCwgYW5kIGl0IGFsc28gcmVsaWVzIG9uIHRoZSBmYWN0IHdl
IG5ldmVyIHJldXNlIFBsYXRmb3JtR0xPYmplY3QgbnVtYmVycy4KKyAgICB0eXBlZGVmIEhhc2hN
YXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNvdXJjZU1hcDsK
ICAgICBTaGFkZXJTb3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7CiAKLSAgICB0eXBlZGVmIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgc3RkOjpwYWlyPFBsYXRmb3JtM0RPYmplY3QsIFBsYXRm
b3JtM0RPYmplY3Q+PiBMaW5rZWRTaGFkZXJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRm
b3JtR0xPYmplY3QsIHN0ZDo6cGFpcjxQbGF0Zm9ybUdMT2JqZWN0LCBQbGF0Zm9ybUdMT2JqZWN0
Pj4gTGlua2VkU2hhZGVyTWFwOwogICAgIExpbmtlZFNoYWRlck1hcCBtX2xpbmtlZFNoYWRlck1h
cDsKIAogICAgIHN0cnVjdCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMgewotICAgICAgICBWZWN0
b3I8R0MzRGludD4gZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwOwotICAgICAgICBW
ZWN0b3I8R0MzRGludD4gZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcDsKKyAgICAgICAg
VmVjdG9yPEdDR0xpbnQ+IGZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcDsKKyAgICAg
ICAgVmVjdG9yPEdDR0xpbnQ+IGZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXA7CiAKICAg
ICAgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkKICAgICAgICAgewogICAgICAgICB9CiAK
LSAgICAgICAgR0MzRGludCBjb3VudEZvclR5cGUoR0MzRGVudW0gYWN0aXZlVHlwZSkKKyAgICAg
ICAgR0NHTGludCBjb3VudEZvclR5cGUoR0NHTGVudW0gYWN0aXZlVHlwZSkKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKGFjdGl2ZVR5cGUgPT0gQUNUSVZFX0FUVFJJQlVURVMgfHwgYWN0
aXZlVHlwZSA9PSBBQ1RJVkVfVU5JRk9STVMpOwogICAgICAgICAgICAgaWYgKGFjdGl2ZVR5cGUg
PT0gQUNUSVZFX0FUVFJJQlVURVMpCkBAIC02MTUsMTcgKzYxNSwxNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgcmV0dXJuIGZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpOwog
ICAgICAgICB9CiAgICAgfTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwg
QWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzPiBTaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXA7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtR0xPYmplY3QsIEFjdGl2ZVNoYWRlclN5bWJvbENv
dW50cz4gU2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwOwogICAgIFNoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcCBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcDsKIAogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gSGFzaGVkU3ltYm9sTWFwOwogICAgIEhhc2hlZFN5bWJv
bE1hcCBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwOwogCi0gICAgU3RyaW5nIG1hcHBlZFN5
bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgU3RyaW5nIG1hcHBlZFN5bWJvbE5hbWUoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXJzWzJdLCBzaXplX3QgY291bnQsIGNvbnN0IFN0cmluZyYgbmFtZSk7
Ci0gICAgU3RyaW5nIG9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBPcHRpb25h
bDxTdHJpbmc+IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAg
T3B0aW9uYWw8U3RyaW5nPiBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CisgICAgU3RyaW5nIG1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgU3RyaW5n
IG1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdLCBzaXplX3QgY291
bnQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgU3RyaW5nIG9yaWdpbmFsU3ltYm9sTmFtZShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG1hcHBlZFN5bWJvbEluU2hhZGVyU291
cmNlTWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSk7CisgICAgT3B0aW9uYWw8U3RyaW5nPiBvcmlnaW5hbFN5bWJvbElu
U2hhZGVyU291cmNlTWFwKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJv
bFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZGVy
TmFtZUhhc2g+IG5hbWVIYXNoTWFwRm9yU2hhZGVyczsKICNlbmRpZiAvLyAhVVNFKEFOR0xFKQpA
QCAtNjUwLDM3ICs2NTAsMzcgQEAgcHJpdmF0ZToKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2Nv
bXBpbGVyOwogI2VuZGlmCiAKLSAgICBHQzNEdWludCBtX3RleHR1cmUgeyAwIH07Ci0gICAgR0Mz
RHVpbnQgbV9mYm8geyAwIH07CisgICAgR0NHTHVpbnQgbV90ZXh0dXJlIHsgMCB9OworICAgIEdD
R0x1aW50IG1fZmJvIHsgMCB9OwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBH
QzNEdWludCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OwotICAgIEdDM0R1aW50IG1faW50ZXJt
ZWRpYXRlVGV4dHVyZSB7IDAgfTsKKyAgICBHQ0dMdWludCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsg
MCB9OworICAgIEdDR0x1aW50IG1faW50ZXJtZWRpYXRlVGV4dHVyZSB7IDAgfTsKICNlbmRpZgog
Ci0gICAgR0MzRHVpbnQgbV9kZXB0aEJ1ZmZlciB7IDAgfTsKLSAgICBHQzNEdWludCBtX3N0ZW5j
aWxCdWZmZXIgeyAwIH07Ci0gICAgR0MzRHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07
CisgICAgR0NHTHVpbnQgbV9kZXB0aEJ1ZmZlciB7IDAgfTsKKyAgICBHQ0dMdWludCBtX3N0ZW5j
aWxCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07
CiAKICAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkIHsgZmFsc2UgfTsKLSAgICBHQzNEdWludCBt
X2ludGVybmFsQ29sb3JGb3JtYXQgeyAwIH07CisgICAgR0NHTHVpbnQgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0IHsgMCB9OwogCiAjaWYgVVNFKEFOR0xFKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMU3VyZmFjZSBtX3BidWZmZXI7CiAjZW5kaWYKIAogICAg
IHN0cnVjdCBHcmFwaGljc0NvbnRleHRHTFN0YXRlIHsKLSAgICAgICAgR0MzRHVpbnQgYm91bmRG
Qk8geyAwIH07Ci0gICAgICAgIEdDM0RlbnVtIGFjdGl2ZVRleHR1cmVVbml0IHsgR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkUwIH07Ci0KLSAgICAgICAgdXNpbmcgQm91bmRUZXh0dXJlTWFwID0g
SGFzaE1hcDxHQzNEZW51bSwKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxHQzNEdWludCwgR0MzRGVu
dW0+LAotICAgICAgICAgICAgV1RGOjpJbnRIYXNoPEdDM0RlbnVtPiwgCi0gICAgICAgICAgICBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDM0R1aW50PiwKLSAgICAgICAgICAg
IFdURjo6UGFpckhhc2hUcmFpdHM8V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxH
QzNEdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0MzRHVpbnQ+Pgor
ICAgICAgICBHQ0dMdWludCBib3VuZEZCTyB7IDAgfTsKKyAgICAgICAgR0NHTGVudW0gYWN0aXZl
VGV4dHVyZVVuaXQgeyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgICAgICB1
c2luZyBCb3VuZFRleHR1cmVNYXAgPSBIYXNoTWFwPEdDR0xlbnVtLAorICAgICAgICAgICAgc3Rk
OjpwYWlyPEdDR0x1aW50LCBHQ0dMZW51bT4sCisgICAgICAgICAgICBXVEY6OkludEhhc2g8R0NH
TGVudW0+LCAKKyAgICAgICAgICAgIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
R0NHTHVpbnQ+LAorICAgICAgICAgICAgV1RGOjpQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDR0x1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czxHQ0dMdWludD4+CiAgICAgICAgID47CiAgICAgICAgIEJvdW5kVGV4dHVyZU1h
cCBib3VuZFRleHR1cmVNYXA7Ci0gICAgICAgIEdDM0R1aW50IGN1cnJlbnRCb3VuZFRleHR1cmUo
KSBjb25zdCB7IHJldHVybiBib3VuZFRleHR1cmUoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0gICAg
ICAgIEdDM0R1aW50IGJvdW5kVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKKyAg
ICAgICAgR0NHTHVpbnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5k
VGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0KKyAgICAgICAgR0NHTHVpbnQgYm91bmRUZXh0
dXJlKEdDR0xlbnVtIHRleHR1cmVVbml0KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwogICAgICAg
ICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5lbmQoKSkKQEAgLTY4OCw4ICs2
ODgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAotICAg
ICAgICBHQzNEdWludCBjdXJyZW50Qm91bmRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBib3VuZFRh
cmdldChhY3RpdmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAgR0MzRGVudW0gYm91bmRUYXJnZXQo
R0MzRGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgICAgIEdDR0x1aW50IGN1cnJlbnRCb3Vu
ZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGFyZ2V0KGFjdGl2ZVRleHR1cmVVbml0KTsg
fQorICAgICAgICBHQ0dMZW51bSBib3VuZFRhcmdldChHQ0dMZW51bSB0ZXh0dXJlVW5pdCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1h
cC5maW5kKHRleHR1cmVVbml0KTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRl
eHR1cmVNYXAuZW5kKCkpCkBAIC02OTcsMjQgKzY5NywyNCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEJvdW5kVGV4dHVyZShH
QzNEZW51bSB0ZXh0dXJlVW5pdCwgR0MzRHVpbnQgdGV4dHVyZSwgR0MzRGVudW0gdGFyZ2V0KQor
ICAgICAgICB2b2lkIHNldEJvdW5kVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlVW5pdCwgR0NHTHVp
bnQgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBib3Vu
ZFRleHR1cmVNYXAuc2V0KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJn
ZXQpKTsKICAgICAgICAgfQogCi0gICAgICAgIHVzaW5nIFRleHR1cmVTZWVkQ291bnQgPSBIYXNo
Q291bnRlZFNldDxHQzNEdWludCwgV1RGOjpJbnRIYXNoPEdDM0R1aW50PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQzNEdWludD4+OworICAgICAgICB1c2luZyBUZXh0dXJl
U2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0NHTHVpbnQsIFdURjo6SW50SGFzaDxHQ0dMdWlu
dD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0NHTHVpbnQ+PjsKICAgICAg
ICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OwogICAgIH07CiAKICAgICBHcmFw
aGljc0NvbnRleHRHTFN0YXRlIG1fc3RhdGU7CiAKICAgICAvLyBGb3IgbXVsdGlzYW1wbGluZwot
ICAgIEdDM0R1aW50IG1fbXVsdGlzYW1wbGVGQk8geyAwIH07Ci0gICAgR0MzRHVpbnQgbV9tdWx0
aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKLSAgICBHQzNEdWludCBtX211bHRpc2Ft
cGxlQ29sb3JCdWZmZXIgeyAwIH07CisgICAgR0NHTHVpbnQgbV9tdWx0aXNhbXBsZUZCTyB7IDAg
fTsKKyAgICBHQ0dMdWludCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9Owor
ICAgIEdDR0x1aW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciB7IDAgfTsKIAogICAgIC8vIEVy
cm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KLSAgICBMaXN0SGFzaFNldDxHQzNE
ZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7CisgICAgTGlzdEhhc2hTZXQ8R0NHTGVudW0+IG1fc3lu
dGhldGljRXJyb3JzOwogCiAjaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikK
ICAgICBmcmllbmQgY2xhc3MgTmljb3NpYTo6R0MzRExheWVyOwpAQCAtNzM2LDcgKzczNiw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgeyBmYWxzZSB9OwogCiAj
aWYgVVNFKENBSVJPKQotICAgIFBsYXRmb3JtM0RPYmplY3QgbV92YW8geyAwIH07CisgICAgUGxh
dGZvcm1HTE9iamVjdCBtX3ZhbyB7IDAgfTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
ICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xCYXNlLmNwcAppbmRleCBiYjA4NmQwYzUxZmNkMTViODU5N2UyYmMwMzkwOThk
YTFmMTI5ODc2Li4zY2MzZGM5MDEyZThmZjQwOTE0MWRkNDM4MDhiNzEyNjRjOGNkMzM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcApAQCAtMjc1LDcgKzI3
NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZiBVU0UoT1BF
TkdMKQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlCiAgICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKICAgICAv
LyBOZWVkIHRvIGVtdWxhdGUgTUFYX0ZSQUdNRU5UL1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgYW5k
IE1BWF9WQVJZSU5HX1ZFQ1RPUlMKICAgICAvLyBiZWNhdXNlIGRlc2t0b3AgR0wncyBjb3JyZXNw
b25kaW5nIHF1ZXJpZXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cwpAQCAtMzU4LDcg
KzM1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBl
LCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lz
aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0xlbnVtIHByZWNpc2lvblR5cGUsIEdDR0xpbnQq
IHJhbmdlLCBHQ0dMaW50KiBwcmVjaXNpb24pCiB7CiAgICAgVU5VU0VEX1BBUkFNKHNoYWRlclR5
cGUpOwogICAgIEFTU0VSVChyYW5nZSk7CkBAIC0zODksMTUgKzM4OSwxNSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hh
ZGVyVHlwZSwgR0MzRAogICAgIH0KIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7CiAgICAgaWYgKHdpZHRoICYmIGhlaWdo
dCAmJiAhcGl4ZWxzKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR0MzRGVudW0gb3BlbkdMRm9y
bWF0ID0gZm9ybWF0OwotICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0gaW50ZXJu
YWxmb3JtYXQ7CisgICAgR0NHTGVudW0gb3BlbkdMRm9ybWF0ID0gZm9ybWF0OworICAgIEdDR0xl
bnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7CiAjaWYgVVNFKE9QRU5H
TCkKICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAgICBpZiAoZm9ybWF0ID09IEdM
X1JHQkEpCkBAIC00NTUsNyArNDU1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnUKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5n
ZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNF
KE9QRU5HTF9FUykKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKICNlbmRp
ZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDM0RjbGFt
cGYgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xj
bGFtcGYgZGVwdGgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAjaWYgUExBVEZPUk0o
Q09DT0EpICYmIFVTRShPUEVOR0xfRVMpCkBAIC00ODgsNyArNDg4LDcgQEAgRXh0ZW5zaW9uc0dM
JiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCiB9CiAjZW5kaWYKIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgdm9pZCogZGF0YSkK
IHsKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNTdjOTIwZGY5M2ZkOTA4
MDBjNDkzOTg4MmM1ODMxOGU2N2JkNzMyNS4uNDIwM2YwY2E3ZWY4YWQyYmJiOWY5ZjU3NGQwYTA0
MzkxN2FjNzZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21t
b24uY3BwCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgOjpnbEZsdXNoKCk7CiB9CiAKLWJv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3Jt
M0RPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyKSBj
b25zdAorYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmco
UGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRT
aGFkZXIpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZl
cnRleFNoYWRlcikpOwogICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFn
bWVudFNoYWRlcikpOwpAQCAtNDA1LDE0ICs0MDUsMTQgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmcoUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFk
ZXIKICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBjb21iaW5lZFZhcnlpbmdz
LnZhbHVlcygpKQogICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZhcnlpbmdTeW1ib2wpOwog
Ci0gICAgR0MzRGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7CisgICAgR0NHTGludCBtYXhWYXJ5
aW5nVmVjdG9ycyA9IDA7CiAjaWYgVVNFKE9QRU5HTF9FUykKICAgICA6OmdsR2V0SW50ZWdlcnYo
TUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdWZWN0b3JzKTsKICNlbHNlCiAgICAgaWYg
KG1faXNGb3JXZWJHTDIpCiAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19W
RUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwogICAgIGVsc2UgewotICAgICAgICBHQzNEaW50
IG1heFZhcnlpbmdGbG9hdHMgPSAwOworICAgICAgICBHQ0dMaW50IG1heFZhcnlpbmdGbG9hdHMg
PSAwOwogICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4
VmFyeWluZ0Zsb2F0cyk7CiAgICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zs
b2F0cyAvIDQ7CiAgICAgfQpAQCAtNDIwLDcgKzQyMCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hh
ZGVyCiAgICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMobWF4
VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxh
dGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwg
UGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKIHsKICAgICBBU1NFUlQobV9z
aGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7CiAgICAgQVNTRVJUKG1fc2hh
ZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7CkBAIC00NDksMTQgKzQ0OSwx
NCBAQCBJbnRTaXplIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbEZyYW1lYnVm
ZmVyU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3Vy
cmVudEhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRl
eHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFj
dGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKICAgICA6OmdsQWN0
aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NF
UlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7CkBAIC00NjUsNyArNDY1LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgUGxhdGZvcm0zRE8KICAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRl
cik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcm
IG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBu
YW1lKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
QEAgLTQ3NSwxMyArNDc1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1CiAgICAgOjpnbEJp
bmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVm
ZmVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xCaW5kQnVmZmVyKHRh
cmdldCwgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZy
YW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBHTHVpbnQgZmJvOwpAQCAtNDk1LDg5ICs0OTUsODkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdAogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRl
cmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgcmVuZGVyYnVm
ZmVyKTsKIH0KIAogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShH
QzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCB0ZXh0dXJlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIG1fc3RhdGUu
c2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdl
dCk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFt
cGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYg
Z3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0Mz
RGVudW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24o
R0NHTGVudW0gbW9kZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsQmxl
bmRFcXVhdGlvbihtb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymxl
bmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dM
ZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEp
OwogfQogCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQzNEZW51
bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCiB7CiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9y
KTsKIH0gICAgICAgCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1Nl
cGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBo
YSwgR0MzRGVudW0gZHN0QWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0g
c3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFscGhhKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
QzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NH
THNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlKQogewogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwg
ZGF0YSwgdXNhZ2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJT
dWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBz
aXplLCBjb25zdCB2b2lkKiBkYXRhKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVm
ZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlw
dHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7CiB9CiAK
ICNpZiBVU0UoT1BFTkdMXzMpIHx8IFVTRShPUEVOR0xfRVNfMykKLXZvaWQqIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjptYXBCdWZmZXJSYW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIg
b2Zmc2V0LCBHQzNEc2l6ZWlwdHIgbGVuZ3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKQordm9pZCog
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBsZW5ndGgsIEdDR0xiaXRmaWVsZCBhY2Nl
c3MpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIDo6Z2xNYXBCdWZm
ZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOwogfQogCi1HQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KQor
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKEdDR0xlbnVt
IHRhcmdldCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gOjpnbFVu
bWFwQnVmZmVyKHRhcmdldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
cHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0
LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0RzaXpl
aXB0ciBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRh
dGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIg
cmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7
CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbENvcHlCdWZmZXJTdWJEYXRhKHJl
YWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gcG5hbWUsIEdD
M0RzaXplaSBidWZTaXplLCBHQzNEaW50KiBwYXJhbXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTGludCog
cGFyYW1zKQogewogI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CkBAIC01OTEsMjcgKzU5MSwyNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZQogI2VuZGlmCiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNh
bXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVp
IGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxz
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEc2l6ZWkgZGVwdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFRleFN0b3JhZ2Uz
RCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsK
ICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybXMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1
bmlmb3JtSW5kaWNlcywgR0MzRGVudW0gcG5hbWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywg
R0NHTGVudW0gcG5hbWUsIFZlY3RvcjxHQ0dMaW50PiYgcGFyYW1zKQogewogICAgIEFTU0VSVChw
cm9ncmFtKTsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTYxOSw3MyArNjE5LDczIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgY29uc3QKICAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9n
cmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUs
IHBhcmFtcy5kYXRhKCkpOwogfQogI2Vsc2UKLXZvaWQqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYXBCdWZmZXJSYW5nZShHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRyLCBHQzNE
Yml0ZmllbGQpCit2b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2Uo
R0NHTGVudW0sIEdDR0xpbnRwdHIsIEdDR0xzaXplaXB0ciwgR0NHTGJpdGZpZWxkKQogewogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5tYXBCdWZmZXIoR0MzRGVudW0pCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5tYXBCdWZmZXIoR0NHTGVudW0pCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtLCBHQzNE
ZW51bSwgR0MzRGludHB0ciwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRyKQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMaW50cHRyLCBHQ0dMaW50cHRyLCBHQ0dMc2l6ZWlwdHIpCiB7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0MzRGVudW0sIEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEaW50KikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMZW51bSwg
R0NHTHNpemVpLCBHQ0dMaW50KikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0RlbnVtLCBHQzNEc2l6ZWksIEdD
M0RlbnVtLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSwgR0NHTHNpemVpLCBH
Q0dMZW51bSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwg
R0MzRHNpemVpLCBHQzNEc2l6ZWkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhT
dG9yYWdlMkQoR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNp
emVpKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0Qo
R0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNE
c2l6ZWkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVu
dW0sIEdDR0xzaXplaSwgR0NHTGVudW0sIEdDR0xzaXplaSwgR0NHTHNpemVpLCBHQ0dMc2l6ZWkp
CiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1z
KFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFZlY3RvcjxHQzNEdWludD4mLCBHQzNEZW51bSwgVmVj
dG9yPEdDM0RpbnQ+JikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVu
aWZvcm1zKFBsYXRmb3JtR0xPYmplY3QsIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mLCBHQ0dMZW51
bSwgVmVjdG9yPEdDR0xpbnQ+JikKIHsKIH0KICNlbmRpZiAvLyBVU0UoT1BFTkdMXzMpIHx8IFVT
RShPUEVOR0xfRVNfMykKIAotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQorR0NHTGVudW0gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQogewog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1c0VYVCh0YXJnZXQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0Rj
bGFtcGYgYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNs
YW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQzNEYml0ZmllbGQgbWFz
aykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNr
KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xDbGVhcihtYXNrKTsKICAg
ICBjaGVja0dQVVN0YXR1cygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhclN0ZW5jaWwoR0MzRGludCBzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6
OmdsQ2xlYXJTdGVuY2lsKHMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4g
Ymx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4g
Ymx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwpAQCAtNzM3LDcgKzczNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgICAgIFZlY3Rv
cjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKICAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hh
ZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CiAKLSAgICAgICAgUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKKyAgICAgICAgUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKICAgICAgICAgZW50cnkubG9nID0gZ2V0VW5t
YW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKICAg
ICB9CiAKQEAgLTc0NywxMiArNzQ3LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgfQogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRl
ckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsK
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVj
dCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7CisgICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBTaGFkZXJTb3Vy
Y2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKIAogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTc4Miw3ICs3ODIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
aW50IGJvcmRlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBhdXRvIGF0dHJz
ID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKQEAgLTc5Niw3ICs3OTYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDMwogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwpA
QCAtODEwLDI1ICs4MTAsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAogICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNl
KEdDM0RlbnVtIG1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShH
Q0dMZW51bSBtb2RlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xDdWxs
RmFjZShtb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5j
KEdDM0RlbnVtIGZ1bmMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMo
R0NHTGVudW0gZnVuYykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsRGVw
dGhGdW5jKGZ1bmMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1h
c2soR0MzRGJvb2xlYW4gZmxhZykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRo
TWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAg
IDo6Z2xEZXB0aE1hc2soZmxhZyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwpAQCAtODM3LDM5ICs4MzcsMzkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE8KICAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNo
YWRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0MzRGVu
dW0gY2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBj
YXApCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbERpc2FibGUoY2FwKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDM0R1aW50IGluZGV4KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNv
dW50KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xEcmF3QXJyYXlzKG1v
ZGUsIGZpcnN0LCBjb3VudCk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNv
dW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKICAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWlu
dGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CiAg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZW5hYmxlKEdDM0RlbnVtIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJs
ZShHQ0dMZW51bSBjYXApCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEVu
YWJsZShjYXApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
CkBAIC04ODcsMzIgKzg4NywzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVz
aCgpCiAgICAgOjpnbEZsdXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZl
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVm
ZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRh
Y2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUsIEdDM0RpbnQgbGV2ZWwpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdD
R0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVs
KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1
cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwog
ICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0
dXJlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0Mz
RGVudW0gbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dM
ZW51bSBtb2RlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xGcm9udEZh
Y2UobW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlw
bWFwKEdDM0RlbnVtIHRhcmdldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVy
YXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghcHJvZ3JhbSkgewog
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKQEAgLTk0Miw5ICs5NDIs
OSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewotICAgIEdDM0RpbnQgc3lt
Ym9sQ291bnQ7CisgICAgR0NHTGludCBzeW1ib2xDb3VudDsKICAgICBhdXRvIHJlc3VsdCA9IG1f
c2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CiAgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewogICAgICAgICBnZXRO
b25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkFD
VElWRV9BVFRSSUJVVEVTLCAmc3ltYm9sQ291bnQpOwpAQCAtOTUyLDEyICs5NTIsMTIgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHVpbnQKICAgICB9CiAgICAgCiAgICAgQWN0aXZlU2hhZGVyU3ltYm9s
Q291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOwotICAgIEdDM0R1aW50IHJhd0lu
ZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRl
eE1hcFtpbmRleF0gOiAtMTsKKyAgICBHQ0dMdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJv
bENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXBbaW5kZXhdIDogLTE7CiAK
ICAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7
CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBs
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGlu
Zm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZv
KQogewogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX1ZBTFVFKTsKQEAgLTk4OSw5ICs5ODksOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDMwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
Y3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVV
bmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCiB7Ci0gICAgR0MzRGludCBzeW1ib2xDb3VudDsKKyAgICBHQ0dMaW50IHN5bWJv
bENvdW50OwogICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZmluZChwcm9ncmFtKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmVuZCgpKSB7CiAgICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChw
cm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQp
OwpAQCAtOTk5LDEyICs5OTksMTIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW4KICAgICB9CiAg
ICAgCiAgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQt
PnZhbHVlOwotICAgIEdDM0R1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZp
bHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0
ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwW2luZGV4XSA6IC0xOworICAgIEdDR0x1aW50IHJh
d0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5k
ZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4
TWFwW2luZGV4XSA6IC0xOwogICAgIAogICAgIHJldHVybiBnZXRBY3RpdmVVbmlmb3JtSW1wbChw
cm9ncmFtLCByYXdJbmRleCwgaW5mbyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXpl
aSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzaXplaSBtYXhDb3VudCwgR0NHTHNpemVpKiBjb3VudCwg
UGxhdGZvcm1HTE9iamVjdCogc2hhZGVycykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC0xMDIyLDcgKzEwMjIsNyBA
QCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlSGFzaGVkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoIndlYmdsXyIsIGhleChudW1iZXIsIExvd2VyY2FzZSkpOwog
fQogCi1PcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1i
b2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJT
eW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK09wdGlvbmFsPFN0cmlu
Zz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFw
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZChzaGFkZXIpOwogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCkBAIC0xMDM3LDEzICsxMDM3LDEzIEBAIE9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtCiAg
ICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkp
OwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1i
b2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBHQzNEc2l6ZWkg
Y291bnQgPSAwOwotICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKKyAgICBH
Q0dMc2l6ZWkgY291bnQgPSAwOworICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsg
fTsKICAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsK
IAotICAgIGZvciAoR0MzRHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgIGZvciAo
R0NHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBhdXRvIG1hcHBlZE5h
bWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBl
LCBuYW1lKTsKICAgICAgICAgaWYgKG1hcHBlZE5hbWUpCiAgICAgICAgICAgICByZXR1cm4gbWFw
cGVkTmFtZS52YWx1ZSgpOwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
QU5HTEUKICAgICByZXR1cm4gbmFtZTsKIH0KIAotT3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK09wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9y
aWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFO
R0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAg
ICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKQEAgLTEwOTQsMTMgKzEwOTQsMTMg
QEAgT3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6b3JpZ2luYWxTeW1i
b2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm8KICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdp
bmFsU3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9s
VHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgR0MzRHNpemVpIGNv
dW50OwotICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXTsKKyAgICBHQ0dMc2l6ZWkgY291
bnQ7CisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdOwogICAgIGdldEF0dGFjaGVkU2hh
ZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwogICAgIAotICAgIGZvciAoR0MzRHNp
emVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgIGZvciAoR0NHTHNpemVpIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewogICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3lt
Ym9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7CiAgICAg
ICAgIGlmIChvcmlnaW5hbE5hbWUpCiAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZh
bHVlKCk7CkBAIC0xMTMwLDcgKzExMzAsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFORwogICAg
IHJldHVybiBuYW1lOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBl
ZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdLCBzaXplX3QgY291bnQsIGNv
bnN0IFN0cmluZyYgbmFtZSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVk
U3ltYm9sTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29u
c3QgU3RyaW5nJiBuYW1lKQogewogICAgIGZvciAoc2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1i
b2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcp
OyArK3N5bWJvbFR5cGUpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CkBAIC0xMTQ4LDcgKzExNDgsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdLCBzaQogICAg
IHJldHVybiBuYW1lOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQor
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAoIXByb2dyYW0p
CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTExNjAsNyArMTE2MCw3IEBAIGludCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTCiAgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBw
ZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoraW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2Nh
dGlvbkRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTExNzksNyArMTE3
OSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpCiAgICAgLy8gYSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVz
ZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgogICAgIC8vIE90aGVyd2lzZSwgd2Ugd291
bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJPUi4KICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMTAwOyArK2kpIHsKLSAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBnbEdldEVycm9y
KCk7CisgICAgICAgIEdDR0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpOwogICAgICAgICBpZiAo
ZXJyb3IgPT0gTk9fRVJST1IpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9zeW50aGV0
aWNFcnJvcnMuYWRkKGVycm9yKTsKQEAgLTExODksNyArMTE4OSw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiAgICAgcmV0
dXJuIG1vdmVkQW5FcnJvcjsKIH0KIAotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEVycm9yKCkKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigp
CiB7CiAgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8g
TmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxp
c3QgaW4gY2FzZQpAQCAtMTIwMywxOSArMTIwMywxOSBAQCBHQzNEZW51bSBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKIH0KIAot
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKG5hbWUpKSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBt
b2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIG1vZGUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEhp
bnQodGFyZ2V0LCBtb2RlKTsKIH0KIAotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQorR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewog
ICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xMjI0LDEzICsx
MjI0LDEzIEBAIEdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQ
bGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKICAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7
CiB9CiAKLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0Mz
RGVudW0gY2FwKQorR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxl
ZChHQ0dMZW51bSBjYXApCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJu
IDo6Z2xJc0VuYWJsZWQoY2FwKTsKIH0KIAotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKK0dDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFmcmFtZWJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwpAQCAtMTIzOSw3ICsxMjM5LDcgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZl
cikKICAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOwogfQogCi1H
QzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSkKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1By
b2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSkKICAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAgR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0pCiAgICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKLUdDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IHJlbmRlcmJ1ZmZlcikKK0dDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Jl
bmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKICAgICBpZiAoIXJl
bmRlcmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTI1Nyw3ICsxMjU3LDcg
QEAgR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmUKICAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVy
RVhUKHJlbmRlcmJ1ZmZlcik7CiB9CiAKLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK0dDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsK
ICAgICBpZiAoIXNoYWRlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTI2Niw3ICsx
MjY2LDcgQEAgR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsK
IH0KIAotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmUpCitHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1
cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKQEAgLTEyNzUsMTkgKzEyNzUsMTkgQEAgR0Mz
RGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUpCiAgICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRoKQog
ewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgR0MzRHNpemVpIGNvdW50ID0gMDsKLSAgICBQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgR0NHTHNpemVpIGNvdW50ID0g
MDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CiAgICAgZ2V0QXR0YWNo
ZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CiAKICAgICBpZiAoY291bnQg
PT0gMikKQEAgLTEyOTYsMzEgKzEyOTYsMzEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQogICAgIDo6Z2xMaW5rUHJv
Z3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxT
dG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKIHsK
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBh
cmFtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChH
QzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0
b3IsIHVuaXRzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292
ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJv
b2xlYW4gaW52ZXJ0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xTYW1w
bGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIApAQCAtMTMz
MywxODQgKzEzMzMsMTg0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNv
dXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiAgICAgbV9zaGFkZXJT
b3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQg
bWFzaykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVt
IGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZh
Y2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBH
Q0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICA6OmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCBy
ZWYsIG1hc2spOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFz
ayhHQzNEdWludCBtYXNrKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1h
c2soR0NHTHVpbnQgbWFzaykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6Omds
U3RlbmNpbE1hc2sobWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwg
R0NHTHVpbnQgbWFzaykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51
bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBm
YWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0
IHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7CiAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwg
dmFsdWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJp
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgdmFsdWUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHYwKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxv
YXQqIGFycmF5KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3Jt
MWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9h
dCB2MSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKIHsKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwg
Y29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgMi4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6Omds
VW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBH
QzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwg
R0NHTGZsb2F0IHYyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlm
b3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25z
dCBHQzNEZmxvYXQqIGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBh
cnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg
My4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0Rm
bG9hdCB2MiwgR0MzRGZsb2F0IHYzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dM
ZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIHNpemUsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25z
dCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiA0LgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlm
b3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgdjApCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZvcm0xaShs
b2NhdGlvbiwgdjApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJh
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQzNEaW50
IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQg
djEpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZvcm0yaShsb2Nh
dGlvbiwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJy
YXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KICAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBH
Q0dMaW50IHYxLCBHQ0dMaW50IHYyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAg
IDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xp
bnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiAzLgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtM2l2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNE
aW50IHYyLCBHQzNEaW50IHYzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIs
IEdDR0xpbnQgdjMpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZv
cm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBj
b25zdCBHQzNEaW50KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFy
cmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0
LgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNp
emUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNp
emVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkK
IHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
biwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBh
cnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg
MTYuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVc2VQcm9ncmFtKHBy
b2dyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NF
UlQocHJvZ3JhbSk7CiAKQEAgLTE1MTgsNjcgKzE1MTgsNjcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKICAg
ICA6OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6Omds
VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFy
cmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1
aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0
IHYxKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIy
ZihpbmRleCwgdjAsIHYxKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4
LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dM
ZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0
IEdDM0RmbG9hdCogYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJy
YXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2Miwg
R0MzRGZsb2F0IHYzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
NGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQg
djIsIEdDR0xmbG9hdCB2MykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6Omds
VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBH
QzNEZmxvYXQqIGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliNGZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRl
cihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVh
biBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwg
R0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUs
IG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhl
aWdodCk7CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVZlcnRleEFycmF5KCkKK1BsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAg
ICBHTHVpbnQgYXJyYXkgPSAwOwpAQCAtMTU4OCw3ICsxNTg4LDcgQEAgUGxhdGZvcm0zRE9iamVj
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQogICAgIHJldHVy
biBhcnJheTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4
QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYg
KCFhcnJheSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU5OSw3ICsxNTk5LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBh
cnJheSkKICNlbmRpZgogfQogCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQorR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkK
IHsKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CkBAIC0xNjExLDcg
KzE2MTEsNyBAQCBHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhB
cnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogICAgIHJldHVybiBHTF9GQUxTRTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RP
YmplY3QgYXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJy
YXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikp
KSB8fCBQTEFURk9STShDT0NPQSkKQEAgLTE2MjEsMjUgKzE2MjEsMjUgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkp
CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYo
R0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMYm9vbGVhbiogdmFsdWUp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEdldEJvb2xlYW52KHBuYW1l
LCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBh
cmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7CiAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwg
cG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Rmxv
YXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQog
ewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZh
bHVlKTsKIH0KICAgICAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50NjQqIHZhbHVl
KQogewogICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CkBAIC0xNjQ4LDcgKzE2NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJ
bnRlZ2VyNjR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50NjQqIHZhbHVlKQogICAgIC8vIDo6Z2xH
ZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCogdmFsdWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
aWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQpAQCAtMTY1NiwxMyAr
MTY1NiwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZQogICAgIDo6Z2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldE5vbkJ1aWx0SW5BY3Rp
dmVTeW1ib2xDb3VudChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldE5vbkJ1aWx0
SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoQUNUSVZFX0FUVFJJQlVURVMgPT0g
cG5hbWUgfHwgQUNUSVZFX1VOSUZPUk1TID09IHBuYW1lKTsKICAgICBpZiAoIXZhbHVlKQpAQCAt
MTY4MCw5ICsxNjgwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVp
bHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtM0RPYmplY3QgcHIKIAogICAgIC8vIFJldHJp
ZXZlIHRoZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEg
bWFwcGluZyBvZgogICAgIC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhl
IHJlYWwgdW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCi0gICAgR0MzRGludCBhdHRy
aWJ1dGVDb3VudCA9IDA7CisgICAgR0NHTGludCBhdHRyaWJ1dGVDb3VudCA9IDA7CiAgICAgOjpn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRFUywgJmF0dHJpYnV0ZUNvdW50
KTsKLSAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7Cisg
ICAgZm9yIChHQ0dMaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgewogICAgICAg
ICBBY3RpdmVJbmZvIGluZm87CiAgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwg
aSwgaW5mbyk7CiAgICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCkBAIC0x
NjkyLDkgKzE2OTIsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWls
dEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm0zRE9iamVjdCBwcgogICAgIH0KICAgICAKICAg
ICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCi0gICAgR0MzRGludCB1bmlmb3JtQ291bnQg
PSAwOworICAgIEdDR0xpbnQgdW5pZm9ybUNvdW50ID0gMDsKICAgICA6OmdsR2V0UHJvZ3JhbWl2
KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Ci0gICAgZm9yIChHQzNE
aW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICBmb3IgKEdDR0xpbnQgaSA9
IDA7IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkgewogICAgICAgICBBY3RpdmVJbmZvIGluZm87CiAg
ICAgICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGksIGluZm8pOwogICAgICAgICBp
ZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQpAQCAtMTcwNiw3ICsxNzA2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50
KFBsYXRmb3JtM0RPYmplY3QgcHIKICAgICAqdmFsdWUgPSBzeW1ib2xDb3VudHMuY291bnRGb3JU
eXBlKHBuYW1lKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgR0MzRHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0sIEdDR0xzaXplaSBj
b3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCiB7CiAgICAgTE9HKFdlYkdMLCAiT3JpZ2luYWwgU2hh
ZGVySW5mb0xvZzpcbiVzIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwogCkBAIC0xNzQyLDcgKzE3NDIs
NyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdLAogICAgIHJldHVybiBwcm9jZXNzZWRMb2cudG9T
dHJpbmcoKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFt
SW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsK
ICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKQEAgLTE3NTYsMjAgKzE3NTYsMjAgQEAgU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0pCiAgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwogICAgIDo6Z2xHZXRQ
cm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CiAKLSAg
ICBHQzNEc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOworICAg
IEdDR0xzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl07CiAgICAg
Z2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CiAKICAgICBy
ZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0
YSgpLCBzaXplKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFs
dWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFNoYWRlcml2KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCogdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKQEAgLTE4MDQsNyArMTgw
NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtCiAgICAgfQogfQogCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxh
dGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKQEAgLTE4Mjcs
MTEgKzE4MjcsMTEgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJ
bmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIFZlY3RvcjxHTGNoYXI+IGluZm8o
bGVuZ3RoKTsKICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUs
IGluZm8uZGF0YSgpKTsKIAotICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hh
ZGVyLCAwIH07CisgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAg
fTsKICAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5m
by5kYXRhKCksIHNpemUpKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCitTdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
IHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIApAQCAtMTg0NCwzMSArMTg0NCwzMSBAQCBTdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3VyY2U7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMZmxvYXQqIHZhbHVlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6
Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCogdmFsdWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEdl
dFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xmbG9hdCogdmFsdWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQqIHZhbHVlKQogewogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsK
IH0KIAotR0MzRGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsK
IApAQCAtMTg3OSwyOCArMTg3OSwyOCBAQCBHQzNEaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjbwogICAgIHJl
dHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRh
dGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJp
YmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYmZ2KEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKICAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYml2
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQ0dMdWludCBpbmRleCwg
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKIH0K
IAotR0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQorR0NHTHNpemVpcHRyIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgR0x2
b2lkKiBwb2ludGVyID0gMDsKICAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgs
IHBuYW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4o
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHQ0dMc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9m
ZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogCkBAIC0xOTMxLDIxICsxOTMxLDIxIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNECiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9z
dGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7
CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1
ZmZlcigpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVC
dWZmZXIoKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsK
QEAgLTE5NTMsNyArMTk1Myw3IEBAIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCiAgICAgcmV0dXJuIG87CiB9CiAKLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK1BsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsK
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQgbyA9IDA7CkBAIC0xOTYxLDEz
ICsxOTYxLDEzIEBAIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKICAgICByZXR1cm4gbzsKIH0KIAotUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCitQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKCkKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7CiB9CiAKLVBsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigp
CitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJi
dWZmZXIoKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsK
QEAgLTE5NzUsMTMgKzE5NzUsMTMgQEAgUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKICAgICByZXR1cm4gbzsKIH0KIAotUGxhdGZv
cm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVt
IHR5cGUpCitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVT
aGFkZXIoR0NHTGVudW0gdHlwZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBy
ZXR1cm4gZ2xDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdN
RU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOwogfQogCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKK1BsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogewogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsKQEAgLTE5OTAsMTMgKzE5OTAsMTMgQEAg
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgp
CiAgICAgcmV0dXJuIG87CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QgZnJhbWVidWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRkJP
KSB7CkBAIC0yMDA3LDI2ICsyMDA3LDI2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBtX3NoYWRl
clByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CiAgICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVS
ZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5k
ZXJidWZmZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2xEZWxldGVSZW5k
ZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2xEZWxldGVTaGFkZXIoc2hh
ZGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKICAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVy
ZV0gKGF1dG8mIGtleVZhbHVlKSB7CkBAIC0yMDM2LDcgKzIwMzYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkK
ICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1cmUpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBl
cnJvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdD
R0xlbnVtIGVycm9yKQogewogICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMg
dG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCiAgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVy
IG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKQEAgLTIwODEsMzIg
KzIwODEsMzIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0
Q2hhbmdlZE5vdGlmaWNhdGlvbigpCiAgICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hh
bmdlZE5vdGlmaWNhdGlvbigpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAg
ICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1
cmUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0
YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNE
c2l6ZWkgcHJpbWNvdW50KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5
c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQs
IEdDR0xzaXplaSBwcmltY291bnQpCiB7CiAgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJ
bnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwogICAgIGNoZWNrR1BVU3Rh
dHVzKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0lu
c3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXpl
aSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmlt
Y291bnQpCiB7CiAgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2Rl
LCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3Io
R0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKQogewogICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBk
aXZpc29yKTsKIH0KIAogI2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIpCi12b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0MzRHVpbnQgaW5k
ZXgpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgo
R0NHTHVpbnQgaW5kZXgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFBy
aW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFUy5jcHAKaW5kZXggYWRkYjY3OGRhYjY1NmIxNWViZGE4ZDk5MzNjMTE1ZTZkMzE4ZDRj
Ni4uZWI2MjkzMDUzNzExMzU1MmZjZWRiYjAwZTg3ZjJhMDM1ZTIxMmNiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcApAQCAtNDYsNyArNDYsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogICAgIDo6Z2xS
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgdm9pZCogZGF0YSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKIApAQCAtMTkwLDE5ICsxOTAsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JikKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCogdmFsdWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEdl
dEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51
bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xl
bnVtIHNoYWRlclR5cGUsIEdDR0xlbnVtIHByZWNpc2lvblR5cGUsIEdDR0xpbnQqIHJhbmdlLCBH
Q0dMaW50KiBwcmVjaXNpb24pCiB7CiAgICAgQVNTRVJUKHJhbmdlKTsKICAgICBBU1NFUlQocHJl
Y2lzaW9uKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRAogICAg
IDo6Z2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwg
cmFuZ2UsIHByZWNpc2lvbik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiti
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewogICAgIGlmICh3aWR0aCAmJiBoZWlnaHQg
JiYgIXBpeGVscykgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsK
QEAgLTIzNCwxMyArMjM0LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlk
YXRlQXR0cmlidXRlcygpCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNs
YW1wZiB6RmFyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xEZXB0aFJh
bmdlZih6TmVhciwgekZhcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwpAQCAtMzMxLDcgKzMzMSw3IEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMu
CiAgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwogICAgIAotICAgIEdDM0Rp
bnQgcmFuZ2VbMl0sIHByZWNpc2lvbjsKKyAgICBHQ0dMaW50IHJhbmdlWzJdLCBwcmVjaXNpb247
CiAgICAgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpG
UkFHTUVOVF9TSEFERVIsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpISUdIX0ZMT0FULCByYW5n
ZSwgJnByZWNpc2lvbik7CiAgICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdo
ID0gKHJhbmdlWzBdIHx8IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7CiAgICAgCkBAIC0zODgsNyAr
Mzg4LDcgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxh
dGZvcm1Db250ZXh0KCk7CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CitQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAogewogICAgIHJldHVybiBt
X3RleHR1cmU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaAppbmRleCBmMzk0M2E5
NjlmOWYzZWE1YTRlNmVmYTNiNmM2ZTY4NmYwZGRiNGFhLi4xOTU0ODM4YTUzNGY2MzUwNWZmNTgz
ZWEzNGViZmRjMzNlZjYwOGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgKQEAg
LTI2LDcgKzI2LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVz
M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKIAogI2lmIEVOQUJMRShHUkFQSElD
U19DT05URVhUX0dMKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCiAKQEAgLTQ0
LDEzICs0NCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBUZW1wb3JhcnlPcGVuR0xT
ZXR0aW5nIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZW1wb3JhcnlPcGVuR0xTZXR0aW5n
KTsKIHB1YmxpYzoKLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nKEdDM0RlbnVtIGNhcGFiaWxp
dHksIEdDM0RlbnVtIHNjb3BlZFN0YXRlKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nKEdD
R0xlbnVtIGNhcGFiaWxpdHksIEdDR0xlbnVtIHNjb3BlZFN0YXRlKTsKICAgICB+VGVtcG9yYXJ5
T3BlbkdMU2V0dGluZygpOwogCiBwcml2YXRlOgotICAgIGNvbnN0IEdDM0RlbnVtIG1fY2FwYWJp
bGl0eTsKLSAgICBjb25zdCBHQzNEZW51bSBtX3Njb3BlZFN0YXRlOwotICAgIEdDM0RlbnVtIG1f
b3JpZ2luYWxTdGF0ZTsKKyAgICBjb25zdCBHQ0dMZW51bSBtX2NhcGFiaWxpdHk7CisgICAgY29u
c3QgR0NHTGVudW0gbV9zY29wZWRTdGF0ZTsKKyAgICBHQ0dMZW51bSBtX29yaWdpbmFsU3RhdGU7
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIu
Y3BwCmluZGV4IDkxYmZkYjkxNDY2MTYzZTNmYWY3MWM5NjEyMzc0MzdmNDA2ZWYzNzEuLmY3MGU3
MWM2NDFhNmUzNDUzMGQ3ZGFkMWZmOWYwMmMzOWNiMmUxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC0yODUsNyArMjg1LDcgQEAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1
c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIGFuZCB3ZSBuZWVkIGEgVkFPIGZvciByZW5kZXJp
bmcuCiAgICAgICAgIC8vIEEgVkFPIGNvdWxkIGJlIGNyZWF0ZWQgYW5kIGJvdW5kIGJ5IGVhY2gg
Y29tcG9uZW50IHVzaW5nIEdMIHJlbmRlcmluZyAoVGV4dHVyZU1hcHBlciwgV2ViR0wsIGV0Yyku
IFRoaXMgaXMKICAgICAgICAgLy8gYSBzaW1wbGVyIHNvbHV0aW9uOiB0aGUgZmlyc3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wgY3JlYXRlZCBvbiBhIEdMQ29udGV4dCB3aWxsIGNyZWF0ZSBhbmQg
YmluZCBhIFZBTyBmb3IgdGhhdCBjb250ZXh0LgotICAgICAgICBHQzNEaW50IGN1cnJlbnRWQU8g
PSAwOworICAgICAgICBHQ0dMaW50IGN1cnJlbnRWQU8gPSAwOwogICAgICAgICBnZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6VkVSVEVYX0FSUkFZX0JJTkRJTkcsICZjdXJyZW50
VkFPKTsKICAgICAgICAgaWYgKCFjdXJyZW50VkFPKSB7CiAgICAgICAgICAgICBtX3ZhbyA9IGNy
ZWF0ZVZlcnRleEFycmF5KCk7CkBAIC0zMTgsNyArMzE4LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyBhdHQKICAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KICAgICBBTkdMRVJl
c291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CiAKLSAgICBHQzNEaW50IHJhbmdlWzJdLCBwcmVj
aXNpb247CisgICAgR0NHTGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwogICAgIGdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRfU0hBREVSLCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24pOwog
ICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8fCBy
YW5nZVsxXSB8fCBwcmVjaXNpb24pOwogCkBAIC00NDAsNyArNDQwLDcgQEAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTCgpIGMKICNlbmRpZgogfQogCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAorUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV90ZXh0dXJlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA2YjQ3OTI1N2E2MTg5
ZjkyNTM2MzA3NDY1MzU1NzgzOWNhYTRjNThmLi5iOTczOWE1Zjk3MjBjOThjNWI1ZWVkNzkxMTFh
ZmZmOGE2ODQxODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtNzIxLDcgKzcyMSw3IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICB9OwogI3VuZGVmIFNJREVfVFJJQU5HTEVfREFUQQog
Ci0gICAgR0x1aW50IHZibyA9IGRhdGEoKS5nZXRTdGF0aWNWQk8oR0xfQVJSQVlfQlVGRkVSLCBz
aXplb2YoR0MzRGZsb2F0KSAqIDQ4LCB1bml0UmVjdFNpZGVUcmlhbmdsZXMpOworICAgIEdMdWlu
dCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKEdDR0xm
bG9hdCkgKiA0OCwgdW5pdFJlY3RTaWRlVHJpYW5nbGVzKTsKICAgICBnbEJpbmRCdWZmZXIoR0xf
QVJSQVlfQlVGRkVSLCB2Ym8pOwogICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnZl
cnRleExvY2F0aW9uKCksIDQsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7CiAgICAgZ2xEcmF3QXJy
YXlzKEdMX1RSSUFOR0xFUywgMCwgMTIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCmlu
ZGV4IGM2ZTU2MzdmZjZlMDc4ZDg5ZDZmZjkzMDkzZTZhOWVmZjBjNzk4MjIuLjE2NGRjYjkxZmVk
ZTQ0ZjVlZjlhMWFhOTE5NmYwZmI3NmRhYTQ1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90
ZS5jcHAKQEAgLTUyMyw3ICs1MjMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6
cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29ucwogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjpjb3B5
VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEZW51bSwgYm9vbCwgYm9vbCkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjpjb3B5
VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQ
bGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5oCmluZGV4IGI2OTFmZTY0MGRiNTk3Yzk2
ZDUxZjhiMzNiYTMzOGMwMzZiODM3ZjQuLjhkMzM1ODdiNTAxNjEyN2Q5MTk0NTNjYTY2ZTM4YjRl
YjVkOGE5N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuaApAQCAtMTg3LDcgKzE4Nyw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJh
bWVJbkNvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1
cmUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBH
QzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9v
bCkgZmluYWw7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51
bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVtLCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgZmlu
YWw7CiAgICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGlt
ZSgpIGZpbmFsOwogCiAgICAgdm9pZCBzZXRQcmVsb2FkKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpQ
cmVsb2FkKSBmaW5hbDsK
</data>
<flag name="review"
          id="402906"
          type_id="1"
          status="+"
          setter="graouts"
    />
          </attachment>
      

    </bug>

</bugzilla>