<?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>8836</bug_id>
          
          <creation_ts>2006-05-10 13:21:59 -0700</creation_ts>
          <short_desc>Split out html_objectimpl into separate files</short_desc>
          <delta_ts>2006-05-12 11:09:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>41899</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-10 13:21:59 -0700</bug_when>
    <thetext>It bugged me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41900</commentid>
    <comment_count>1</comment_count>
      <attachid>8227</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-10 13:22:27 -0700</bug_when>
    <thetext>Created attachment 8227
do the split</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41930</commentid>
    <comment_count>2</comment_count>
      <attachid>8227</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-05-10 16:12:05 -0700</bug_when>
    <thetext>Comment on attachment 8227
do the split

This seems to be missing the added files, but I assume you will fix that before landing. r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8227</attachid>
            <date>2006-05-10 13:22:27 -0700</date>
            <delta_ts>2006-05-10 16:12:05 -0700</delta_ts>
            <desc>do the split</desc>
            <filename>split.patch</filename>
            <type>text/plain</type>
            <size>210357</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL2pzL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pz
L2tqc19kb20uY3BwCShyZXZpc2lvbiAxNDI1NykKKysrIGJpbmRpbmdzL2pzL2tqc19kb20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxMSBAQAogI2luY2x1ZGUgIkRPTUltcGxlbWVu
dGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50VHlwZS5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0F0dHIuaCIKICNpbmNsdWRlICJK
U0VsZW1lbnQuaCIKICNpbmNsdWRlICJKU0NoYXJhY3RlckRhdGEuaCIKQEAgLTQxLDEzICs0Mywx
MyBAQAogI2luY2x1ZGUgIkpTUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSlNS
YW5nZS5oIgogI2luY2x1ZGUgIkpTVGV4dC5oIgorI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgog
I2luY2x1ZGUgImNzc19ydWxlaW1wbC5oIgogI2luY2x1ZGUgImNzc19zdHlsZXNoZWV0aW1wbC5o
IgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiZG9tX3htbGltcGwuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJodG1sX29iamVjdGltcGwuaCIKICNpbmNsdWRlICJKU0hUTUxFbGVtZW50V3JhcHBlckZhY3Rv
cnkuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLV1FLSFRNTFNldHRpbmdz
LmgiCkBAIC04NDMsMTkgKzg0NSwxOSBAQCBET01OYW1lZE5vZGVNYXA6On5ET01OYW1lZE5vZGVN
YXAoKQogCiBKU1ZhbHVlICpET01OYW1lZE5vZGVNYXA6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gIERPTU5hbWVkTm9kZU1hcCAq
dGhpc09iaiA9IHN0YXRpY19jYXN0PERPTU5hbWVkTm9kZU1hcCAqPihzbG90LnNsb3RCYXNlKCkp
OworICBET01OYW1lZE5vZGVNYXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVN
YXAqPihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4ganNOdW1iZXIodGhpc09iai0+bV9pbXBs
LT5sZW5ndGgoKSk7CiB9CiAKIEpTVmFsdWUgKkRPTU5hbWVkTm9kZU1hcDo6aW5kZXhHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewotICBET01OYW1l
ZE5vZGVNYXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVNYXAgKj4oc2xvdC5z
bG90QmFzZSgpKTsKKyAgRE9NTmFtZWROb2RlTWFwKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9N
TmFtZWROb2RlTWFwKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJuIHRvSlMoZXhlYywgdGhp
c09iai0+bV9pbXBsLT5pdGVtKHNsb3QuaW5kZXgoKSkpOwogfQogCiBKU1ZhbHVlICpET01OYW1l
ZE5vZGVNYXA6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewotICBET01OYW1lZE5vZGVNYXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01O
YW1lZE5vZGVNYXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgRE9NTmFtZWROb2RlTWFwKiB0aGlz
T2JqID0gc3RhdGljX2Nhc3Q8RE9NTmFtZWROb2RlTWFwKj4oc2xvdC5zbG90QmFzZSgpKTsKICAg
cmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+bV9pbXBsLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlO
YW1lKSk7CiB9CiAKQEAgLTg5Miw3ICs4OTQsNyBAQCBKU1ZhbHVlICpET01OYW1lZE5vZGVNYXBQ
cm90b0Z1bmM6OmNhbGxBCiAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NTmFtZWRO
b2RlTWFwOjppbmZvKSkKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwog
ICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgTmFtZWROb2RlTWFw
ICZtYXAgPSAqc3RhdGljX2Nhc3Q8RE9NTmFtZWROb2RlTWFwICo+KHRoaXNPYmopLT5pbXBsKCk7
CisgIE5hbWVkTm9kZU1hcCAmbWFwID0gKnN0YXRpY19jYXN0PERPTU5hbWVkTm9kZU1hcCo+KHRo
aXNPYmopLT5pbXBsKCk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTU5hbWVkTm9kZU1h
cDo6R2V0TmFtZWRJdGVtOgogICAgICAgcmV0dXJuIHRvSlMoZXhlYywgbWFwLmdldE5hbWVkSXRl
bShhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOwpAQCAtMTAxNyw3ICsxMDE5LDcgQEAgSlNWYWx1
ZSAqZ2V0UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZQogCiAjaWYgX19BUFBMRV9fCiAgICAg
aWYgKG4tPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCBuLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8
fCBuLT5oYXNUYWdOYW1lKGFwcGxldFRhZykpIHsKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQg
KnBsdWdJbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCAqPihuKTsKKyAg
ICAgICAgSFRNTFBsdWdJbkVsZW1lbnQqIHBsdWdJbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
UGx1Z0luRWxlbWVudCo+KG4pOwogICAgICAgICBpZiAocGx1Z0luRWxlbWVudC0+Z2V0SW5zdGFu
Y2UoKSkKICAgICAgICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0aGUgUGx1Z0lu
IGVsZW1lbnQuCiAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAocGx1Z0lu
RWxlbWVudC0+Z2V0SW5zdGFuY2UoKSk7CkluZGV4OiBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gYmluZGluZ3MvanMva2pzX2h0bWwuY3BwCShyZXZpc2lvbiAxNDI1NykK
KysrIGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTcgKzI1
LDIxIEBACiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEFwcGxldEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MQmFzZUZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3Jt
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTFBhcmFtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIk5hbWVOb2RlTGlzdC5oIgpAQCAtNDksNyArNTMsNiBAQAogI2luY2x1ZGUgImh0bWxf
aW1hZ2VpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbF9pbmxpbmVpbXBsLmgiCiAjaW5jbHVkZSAiaHRt
bF9saXN0aW1wbC5oIgotI2luY2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5oIgogI2luY2x1ZGUgImh0
bWxfdGFibGVpbXBsLmgiCiAjaW5jbHVkZSAia2pzX2Nzcy5oIgogI2luY2x1ZGUgImtqc19ldmVu
dHMuaCIKSW5kZXg6IGh0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9IVE1MUGFyYW1FbGVtZW50LmNwcAkocmV2aXNpb24gMTQyNTcpCisrKyBodG1sL0hUTUxQYXJh
bUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw5NTggKzIxLDE2IEBACiAgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiaHRtbF9vYmplY3RpbXBsLmgiCisjaW5jbHVkZSAiSFRNTFBhcmFt
RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTERvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgIlJlbmRlckFwcGxldC5oIgotI2luY2x1ZGUgIlJlbmRlckVtcHR5QXBwbGV0Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAi
Y3NzaGVscGVyLmgiCi0jaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgotI2luY2x1ZGUgImRv
bTJfZXZlbnRzaW1wbC5oIgotI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCi0jaW5jbHVkZSAi
cmVuZGVyX2ZyYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFj
ZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1IVE1MUGx1Z0luRWxlbWVudDo6SFRNTFBsdWdJbkVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRh
Z05hbWUsIGRvYykKLXsKLX0KLQotU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50OjphbGlnbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhU
TUxQbHVnSW5FbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNl
dEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxQbHVnSW5FbGVt
ZW50OjpoZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0
cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldEhlaWdodChjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0
cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldE5hbWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVl
KTsKLX0KLQotU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotfQotCi12b2lkIEhUTUxQbHVnSW5FbGVt
ZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh3
aWR0aEF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBIVE1MUGx1Z0luRWxlbWVudDo6bWFwVG9FbnRy
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJl
c3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8Ci0gICAgICAg
IGF0dHJOYW1lID09IGhlaWdodEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gdnNwYWNlQXR0
ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoc3BhY2VBdHRyKSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBlVW5pdmVyc2FsOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAK
LSAgICBpZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVSZXBs
YWNlZDsgLy8gU2hhcmUgd2l0aCA8aW1nPiBzaW5jZSB0aGUgYWxpZ25tZW50IGJlaGF2aW9yIGlz
IHRoZSBzYW1lLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBI
VE1MUGx1Z0luRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBh
dHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gd2lkdGhBdHRyKQotICAgICAgICBhZGRD
U1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBoZWlnaHRBdHRyKQotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0
ciwgQ1NTX1BST1BfSEVJR0hULCBhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gdnNwYWNlQXR0cikgewotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BS
T1BfTUFSR0lOX1RPUCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRy
LCBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBoc3BhY2VBdHRyKSB7Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRy
LCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIGFkZENTU0xl
bmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIGF0dHItPnZhbHVlKCkpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikKLSAgICAgICAgYWRkSFRNTEFsaWdu
bWVudChhdHRyKTsKLSAgICBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKLX0gICAgCi0KLWJvb2wgSFRNTFBsdWdJbkVsZW1lbnQ6OmNoZWNrRFRE
KGNvbnN0IE5vZGUqIG5ld0NoaWxkKQotewotICAgIHJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFt
ZShwYXJhbVRhZykgfHwgSFRNTEVsZW1lbnQ6OmNoZWNrRFREKG5ld0NoaWxkKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MQXBwbGV0RWxlbWVudDo6SFRNTEFwcGxldEVsZW1lbnQo
RG9jdW1lbnQgKmRvYykKLTogSFRNTFBsdWdJbkVsZW1lbnQoYXBwbGV0VGFnLCBkb2MpCi0sIG1f
YWxsUGFyYW1zQXZhaWxhYmxlKGZhbHNlKQotewotfQotCi1IVE1MQXBwbGV0RWxlbWVudDo6fkhU
TUxBcHBsZXRFbGVtZW50KCkKLXsKLSNpZiBfX0FQUExFX18KLSAgICAvLyBtX2luc3RhbmNlIHNo
b3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cCBpbiBkZXRhY2goKS4KLSAgICBhc3NlcnQoIW1faW5z
dGFuY2UpOwotI2VuZGlmCi19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGFsdEF0dHIgfHwKLSAgICAgICAgYXR0ci0+bmFtZSgpID09IGFyY2hpdmVBdHRyIHx8Ci0g
ICAgICAgIGF0dHItPm5hbWUoKSA9PSBjb2RlQXR0ciB8fAotICAgICAgICBhdHRyLT5uYW1lKCkg
PT0gY29kZWJhc2VBdHRyIHx8Ci0gICAgICAgIGF0dHItPm5hbWUoKSA9PSBtYXlzY3JpcHRBdHRy
IHx8Ci0gICAgICAgIGF0dHItPm5hbWUoKSA9PSBvYmplY3RBdHRyKSB7Ci0gICAgICAgIC8vIERv
IG5vdGhpbmcuCi0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKLSAg
ICAgICAgU3RyaW5nIG5ld05hbWVBdHRyID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGlu
RG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAg
ICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVu
dCgpKTsKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAg
ICAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG5ld05hbWVBdHRyKTsKLSAgICAgICAgfQotICAg
ICAgICBvbGROYW1lQXR0ciA9IG5ld05hbWVBdHRyOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGlkQXR0cikgewotICAgICAgICBTdHJpbmcgbmV3SWRBdHRyID0gYXR0ci0+dmFsdWUo
KTsKLSAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpKSB7Ci0gICAgICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxE
b2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFO
YW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0
ZW0obmV3SWRBdHRyKTsKLSAgICAgICAgfQotICAgICAgICBvbGRJZEF0dHIgPSBuZXdJZEF0dHI7
Ci0gICAgICAgIC8vIGFsc28gY2FsbCBzdXBlcmNsYXNzCi0gICAgICAgIEhUTUxQbHVnSW5FbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRN
TFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi12b2lkIEhU
TUxBcHBsZXRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgaWYgKGRvY3Vt
ZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBz
dGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRvYy0+YWRk
TmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAgZG9jLT5hZGREb2NFeHRyYU5hbWVkSXRl
bShvbGRJZEF0dHIpOwotICAgIH0KLQotICAgIEhUTUxQbHVnSW5FbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCgpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAg
ICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1
bWVudCgpKTsKLSAgICAgICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAg
ICAgICBkb2MtPnJlbW92ZURvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7Ci0gICAgfQotCi0g
ICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLX0KLQotYm9vbCBI
VE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpCi17
Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29kZUF0dHIpLmlzTnVsbCgpOwotfQotCi1SZW5k
ZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAq
YXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpOwotCi0gICAgaWYgKGZyYW1lICYmIGZyYW1lLT5qYXZhRW5hYmxlZCgpKSB7
Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFyZ3M7Ci0KLSAgICAgICAgYXJncy5z
ZXQoImNvZGUiLCBnZXRBdHRyaWJ1dGUoY29kZUF0dHIpKTsKLSAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBjb2RlQmFzZSA9IGdldEF0dHJpYnV0ZShjb2RlYmFzZUF0dHIpOwotICAgICAgICBp
ZighY29kZUJhc2UuaXNOdWxsKCkpCi0gICAgICAgICAgICBhcmdzLnNldCgiY29kZUJhc2UiLCBj
b2RlQmFzZSk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldEF0dHJpYnV0
ZShkb2N1bWVudCgpLT5odG1sTW9kZSgpICE9IERvY3VtZW50OjpYSHRtbCA/IG5hbWVBdHRyIDog
aWRBdHRyKTsKLSAgICAgICAgaWYgKCFuYW1lLmlzTnVsbCgpKQotICAgICAgICAgICAgYXJncy5z
ZXQoIm5hbWUiLCBuYW1lKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmNoaXZlID0g
Z2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyKTsKLSAgICAgICAgaWYgKCFhcmNoaXZlLmlzTnVsbCgp
KQotICAgICAgICAgICAgYXJncy5zZXQoImFyY2hpdmUiLCBhcmNoaXZlKTsKLQotICAgICAgICBh
cmdzLnNldCgiYmFzZVVSTCIsIGRvY3VtZW50KCktPmJhc2VVUkwoKSk7Ci0KLSAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBtYXlTY3JpcHQgPSBnZXRBdHRyaWJ1dGUobWF5c2NyaXB0QXR0cik7
Ci0gICAgICAgIGlmICghbWF5U2NyaXB0LmlzTnVsbCgpKQotICAgICAgICAgICAgYXJncy5zZXQo
Im1heVNjcmlwdCIsIG1heVNjcmlwdCk7Ci0KLSAgICAgICAgLy8gT3RoZXIgYXJndW1lbnRzIChm
cm9tIDxQQVJBTT4gdGFncykgYXJlIGFkZGVkIGxhdGVyLgotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIG5ldyAoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyQXBwbGV0KHRoaXMsIGFy
Z3MpOwotICAgIH0KLQotICAgIC8vICMjIyByZW1vdmUgbWUuIHdlIHNob3VsZCBuZXZlciBzaG93
IGFuIGVtcHR5IGFwcGxldCwgaW5zdGVhZAotICAgIC8vIHJlbmRlciB0aGUgYWx0ZXJuYXRpdmUg
Y29udGVudCBnaXZlbiBieSB0aGUgd2VicGFnZQotICAgIHJldHVybiBuZXcgKGRvY3VtZW50KCkt
PnJlbmRlckFyZW5hKCkpIFJlbmRlckVtcHR5QXBwbGV0KHRoaXMpOwotfQotCi0jaWYgX19BUFBM
RV9fCi1LSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqSFRNTEFwcGxldEVsZW1lbnQ6OmdldEluc3Rh
bmNlKCkgY29uc3QKLXsKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwot
ICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5qYXZhRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGlmIChtX2luc3RhbmNlKQotICAgICAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQo
KTsKLSAgICAKLSAgICBSZW5kZXJBcHBsZXQgKnIgPSBzdGF0aWNfY2FzdDxSZW5kZXJBcHBsZXQq
PihyZW5kZXJlcigpKTsKLSAgICBpZiAocikgewotICAgICAgICByLT5jcmVhdGVXaWRnZXRJZk5l
Y2Vzc2FyeSgpOwotICAgICAgICBpZiAoci0+d2lkZ2V0KCkpCi0gICAgICAgICAgICAvLyBDYWxs
IGludG8gdGhlIGZyYW1lIChhbmQgb3ZlciB0aGUgYnJpZGdlKSB0byBwdWxsIHRoZSBCaW5kaW5n
czo6SW5zdGFuY2UKLSAgICAgICAgICAgIC8vIGZyb20gdGhlIGd1dHMgb2YgdGhlIHBsdWdpbi4K
LSAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRn
ZXQoci0+d2lkZ2V0KCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLX0K
LSNlbmRpZgotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkKLXsKLSAg
ICAvLyBUaGUgcGFyc2VyIGp1c3QgcmVhY2hlZCA8L2FwcGxldD4sIHNvIGFsbCB0aGUgcGFyYW1z
IGFyZSBhdmFpbGFibGUgbm93LgotICAgIG1fYWxsUGFyYW1zQXZhaWxhYmxlID0gdHJ1ZTsKLSAg
ICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1
ZSk7IC8vIFRoaXMgd2lsbCBjYXVzZSBpdCB0byBjcmVhdGUgaXRzIHdpZGdldCAmIHRoZSBKYXZh
IGFwcGxldAotICAgIEhUTUxQbHVnSW5FbGVtZW50OjpjbG9zZVJlbmRlcmVyKCk7Ci19Ci0KLXZv
aWQgSFRNTEFwcGxldEVsZW1lbnQ6OmRldGFjaCgpCi17Ci0jaWYgX19BUFBMRV9fCi0gICAgbV9p
bnN0YW5jZSA9IDA7Ci0jZW5kaWYKLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0YWNoKCk7Ci19
Ci0KLWJvb2wgSFRNTEFwcGxldEVsZW1lbnQ6OmFsbFBhcmFtc0F2YWlsYWJsZSgpCi17Ci0gICAg
cmV0dXJuIG1fYWxsUGFyYW1zQXZhaWxhYmxlOwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1l
bnQ6OmFsdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKLX0K
LQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0QWx0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxBcHBs
ZXRFbGVtZW50OjphcmNoaXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFy
Y2hpdmVBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0QXJjaGl2ZShjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhcmNoaXZlQXR0ciwgdmFsdWUp
OwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OmNvZGUoKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoY29kZUF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50
OjpzZXRDb2RlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGVB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXBwbGV0RWxlbWVudDo6Y29kZUJhc2UoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0Q29kZUJhc2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1M
QXBwbGV0RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KGhzcGFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpzZXRIc3BhY2UoY29u
c3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgdmFsdWUp
OwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6Om9iamVjdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShvYmplY3RBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxl
bWVudDo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KG9iamVjdEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxBcHBsZXRFbGVtZW50Ojp2c3Bh
Y2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodnNwYWNlQXR0cik7Ci19Ci0K
LXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnNldFZzcGFjZShjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotSFRNTEVtYmVkRWxlbWVudDo6SFRNTEVtYmVkRWxlbWVudChEb2N1bWVudCAq
ZG9jKQotOiBIVE1MUGx1Z0luRWxlbWVudChlbWJlZFRhZywgZG9jKQotewotfQotCi1IVE1MRW1i
ZWRFbGVtZW50Ojp+SFRNTEVtYmVkRWxlbWVudCgpCi17Ci0jaWYgX19BUFBMRV9fCi0gICAgLy8g
bV9pbnN0YW5jZSBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgaW4gZGV0YWNoKCkuCi0gICAg
YXNzZXJ0KCFtX2luc3RhbmNlKTsKLSNlbmRpZgotfQotCi0jaWYgX19BUFBMRV9fCi1LSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZSAqSFRNTEVtYmVkRWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAot
ewotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9pbnN0YW5jZSkKLSAgICAgICAgcmV0
dXJuIG1faW5zdGFuY2UuZ2V0KCk7Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0ICpyID0gcmVuZGVy
ZXIoKTsKLSAgICBpZiAoIXIpIHsKLSAgICAgICAgTm9kZSAqcCA9IHBhcmVudE5vZGUoKTsKLSAg
ICAgICAgaWYgKHAgJiYgcC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgciA9
IHAtPnJlbmRlcmVyKCk7Ci0gICAgfQotCi0gICAgaWYgKHIgJiYgci0+aXNXaWRnZXQoKSl7Ci0g
ICAgICAgIGlmIChXaWRnZXQgKndpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihy
KS0+d2lkZ2V0KCkpIHsKLSAgICAgICAgICAgIC8vIENhbGwgaW50byB0aGUgZnJhbWUgKGFuZCBv
dmVyIHRoZSBicmlkZ2UpIHRvIHB1bGwgdGhlIEJpbmRpbmdzOjpJbnN0YW5jZQotICAgICAgICAg
ICAgLy8gZnJvbSB0aGUgZ3V0cyBvZiB0aGUgSmF2YSBWTS4KLSAgICAgICAgICAgIG1faW5zdGFu
Y2UgPSBmcmFtZS0+Z2V0RW1iZWRJbnN0YW5jZUZvcldpZGdldCh3aWRnZXQpOwotICAgICAgICAg
ICAgLy8gQXBwbGV0IG1heSBzcGVjaWZpZWQgd2l0aCA8ZW1iZWQ+IHRhZy4KLSAgICAgICAgICAg
IGlmICghbV9pbnN0YW5jZSkKLSAgICAgICAgICAgICAgICBtX2luc3RhbmNlID0gZnJhbWUtPmdl
dEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7Ci19Ci0jZW5kaWYKLQotYm9vbCBIVE1MRW1iZWRFbGVt
ZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRy
aWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSBoaWRkZW5B
dHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVVbml2ZXJzYWw7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiBIVE1MUGx1Z0luRWxlbWVudDo6bWFwVG9F
bnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgRGVwcmVjYXRl
ZFN0cmluZyB2YWwgPSBhdHRyLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgCi0gICAg
aW50IHBvczsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHNl
cnZpY2VUeXBlID0gdmFsLmxvd2VyKCk7Ci0gICAgICAgIHBvcyA9IHNlcnZpY2VUeXBlLmZpbmQo
ICI7IiApOwotICAgICAgICBpZiAoIHBvcyE9LTEgKQotICAgICAgICAgICAgc2VydmljZVR5cGUg
PSBzZXJ2aWNlVHlwZS5sZWZ0KCBwb3MgKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBjb2RlQXR0ciB8fAotICAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpIHsK
LSAgICAgICAgIHVybCA9IFdlYkNvcmU6OnBhcnNlVVJMKGF0dHItPnZhbHVlKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBwbHVnaW5wYWdlQXR0
ciB8fAotICAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IHBsdWdpbnNwYWdlQXR0cikgewot
ICAgICAgICBwbHVnaW5QYWdlID0gdmFsOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGhpZGRlbkF0dHIpIHsKLSAgICAgICAgaWYgKHZhbC5sb3dlcigpPT0ieWVzIiB8fCB2YWwubG93
ZXIoKT09InRydWUiKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogTm90IGR5bmFtaWMsIGJ1dCBp
dCdzIG5vdCByZWFsbHkgaW1wb3J0YW50IHRoYXQgc3VjaCBhIHJhcmVseS11c2VkCi0gICAgICAg
ICAgICAvLyBmZWF0dXJlIHdvcmsgZHluYW1pY2FsbHkuCi0gICAgICAgICAgICBhZGRDU1NMZW5n
dGgoIGF0dHIsIENTU19QUk9QX1dJRFRILCAiMCIgKTsKLSAgICAgICAgICAgIGFkZENTU0xlbmd0
aCggYXR0ciwgQ1NTX1BST1BfSEVJR0hULCAiMCIgKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7Ci0gICAgICAgIFN0cmluZyBuZXdOYW1lQXR0
ciA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBz
dGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBkb2Mt
PnJlbW92ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0gICAgICAgICAgICBkb2MtPmFkZE5hbWVk
SXRlbShuZXdOYW1lQXR0cik7Ci0gICAgICAgIH0KLSAgICAgICAgb2xkTmFtZUF0dHIgPSBuZXdO
YW1lQXR0cjsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1ib29sIEhUTUxFbWJlZEVsZW1lbnQ6OnJlbmRlcmVy
SXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIEZyYW1lICpmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnBsdWdpbnNFbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5vZGUgKnAgPSBwYXJlbnROb2RlKCk7
Ci0gICAgaWYgKHAgJiYgcC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7Ci0gICAgICAgIGFzc2Vy
dChwLT5yZW5kZXJlcigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1SZW5kZXJPYmplY3QgKkhUTUxFbWJlZEVsZW1lbnQ6OmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJQYXJ0T2JqZWN0KHRoaXMpOwotfQotCi12b2lkIEhUTUxF
bWJlZEVsZW1lbnQ6OmF0dGFjaCgpCi17Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmF0dGFjaCgp
OwotCi0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRP
YmplY3QqPihyZW5kZXJlcigpKS0+dXBkYXRlV2lkZ2V0KCk7Ci19Ci0KLXZvaWQgSFRNTEVtYmVk
RWxlbWVudDo6ZGV0YWNoKCkKLXsKLSNpZiBfX0FQUExFX18KLSAgICBtX2luc3RhbmNlID0gMDsK
LSNlbmRpZgotICAgIEhUTUxQbHVnSW5FbGVtZW50OjpkZXRhY2goKTsKLX0KLQotdm9pZCBIVE1M
RW1iZWRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgaWYgKGRvY3VtZW50
KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0
aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRvYy0+YWRkTmFt
ZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICB9Ci0KLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkg
ewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAq
Pihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIp
OwotICAgIH0KLQotICAgIEhUTUxQbHVnSW5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7
Ci19Ci0KLWJvb2wgSFRNTEVtYmVkRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICph
dHRyKSBjb25zdAotewotICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cjsKLX0KLQot
U3RyaW5nIEhUTUxFbWJlZEVsZW1lbnQ6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShzcmNBdHRyKTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpzZXRTcmMoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdmFsdWUpOwot
fQotCi1TdHJpbmcgSFRNTEVtYmVkRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEVtYmVkRWxlbWVudDo6c2V0
VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwg
dmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxPYmplY3RFbGVtZW50OjpI
VE1MT2JqZWN0RWxlbWVudChEb2N1bWVudCAqZG9jKSAKLTogSFRNTFBsdWdJbkVsZW1lbnQob2Jq
ZWN0VGFnLCBkb2MpCi0sIG1faW1hZ2VMb2FkZXIoMCkKLXsKLSAgICBuZWVkV2lkZ2V0VXBkYXRl
ID0gZmFsc2U7Ci0gICAgbV91c2VGYWxsYmFja0NvbnRlbnQgPSBmYWxzZTsKLSAgICBtX2NvbXBs
ZXRlID0gZmFsc2U7Ci0gICAgbV9kb2NOYW1lZEl0ZW0gPSB0cnVlOwotfQotCi1IVE1MT2JqZWN0
RWxlbWVudDo6fkhUTUxPYmplY3RFbGVtZW50KCkKLXsKLSNpZiBfX0FQUExFX18KLSAgICAvLyBt
X2luc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cCBpbiBkZXRhY2goKS4KLSAgICBh
c3NlcnQoIW1faW5zdGFuY2UpOwotI2VuZGlmCi0gICAgCi0gICAgZGVsZXRlIG1faW1hZ2VMb2Fk
ZXI7Ci19Ci0KLSNpZiBfX0FQUExFX18KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MT2Jq
ZWN0RWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAotewotICAgIEZyYW1lICpmcmFtZSA9IGRv
Y3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAobV9pbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7Ci0K
LSAgICBpZiAoUmVuZGVyT2JqZWN0ICpyID0gcmVuZGVyZXIoKSkgewotICAgICAgICBpZiAoci0+
aXNXaWRnZXQoKSkgewotICAgICAgICAgICAgaWYgKFdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyV2lkZ2V0ICo+KHIpLT53aWRnZXQoKSkgewotICAgICAgICAgICAgICAgIC8vIENh
bGwgaW50byB0aGUgZnJhbWUgKGFuZCBvdmVyIHRoZSBicmlkZ2UpIHRvIHB1bGwgdGhlIEJpbmRp
bmdzOjpJbnN0YW5jZQotICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIGd1dHMgb2YgdGhlIHBs
dWdpbi4KLSAgICAgICAgICAgICAgICBtX2luc3RhbmNlID0gZnJhbWUtPmdldE9iamVjdEluc3Rh
bmNlRm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAgICAgICAgICAgICAgLy8gQXBwbGV0IG1heSBzcGVj
aWZpZWQgd2l0aCA8b2JqZWN0PiB0YWcuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2luc3RhbmNl
KQotICAgICAgICAgICAgICAgICAgICBtX2luc3RhbmNlID0gZnJhbWUtPmdldEFwcGxldEluc3Rh
bmNlRm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLX0KLSNlbmRpZgotCi1IVE1MRm9ybUVsZW1l
bnQgKkhUTUxPYmplY3RFbGVtZW50Ojpmb3JtKCkgY29uc3QKLXsKLSAgICBmb3IgKE5vZGUgKnAg
PSBwYXJlbnROb2RlKCk7IHAgIT0gMDsgcCA9IHAtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBp
ZiAocC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnQgKj4ocCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwotfQot
Ci12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpCi17Ci0gICAgU3RyaW5nIHZhbCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaW50
IHBvczsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHNlcnZp
Y2VUeXBlID0gdmFsLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwotICAgICAgICBwb3MgPSBz
ZXJ2aWNlVHlwZS5maW5kKCAiOyIgKTsKLSAgICAgICAgaWYgKCBwb3MhPS0xICkKLSAgICAgICAg
ICBzZXJ2aWNlVHlwZSA9IHNlcnZpY2VUeXBlLmxlZnQoIHBvcyApOwotICAgICAgICBpZiAocmVu
ZGVyZXIoKSkKLSAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgaWYg
KCFpc0ltYWdlVHlwZSgpICYmIG1faW1hZ2VMb2FkZXIpIHsKLSAgICAgICAgICBkZWxldGUgbV9p
bWFnZUxvYWRlcjsKLSAgICAgICAgICBtX2ltYWdlTG9hZGVyID0gMDsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGRhdGFBdHRyKSB7Ci0gICAgICAgIHVybCA9IFdl
YkNvcmU6OnBhcnNlVVJMKHZhbCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICBpZiAocmVu
ZGVyZXIoKSkKLSAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgaWYg
KHJlbmRlcmVyKCkgJiYgaXNJbWFnZVR5cGUoKSkgewotICAgICAgICAgIGlmICghbV9pbWFnZUxv
YWRlcikKLSAgICAgICAgICAgICAgbV9pbWFnZUxvYWRlciA9IG5ldyBIVE1MSW1hZ2VMb2FkZXIo
dGhpcyk7Ci0gICAgICAgICAgbV9pbWFnZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNsYXNzaWRBdHRyKSB7Ci0g
ICAgICAgIGNsYXNzSWQgPSB2YWw7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICAg
IG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ubG9hZEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobG9hZEV2ZW50LCBh
dHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpIHsKLSAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIodW5sb2FkRXZlbnQsIGF0dHIpOwotICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmV3
TmFtZUF0dHIgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKGlzRG9jTmFtZWRJdGVt
KCkgJiYgaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgICAgICBkb2MtPnJlbW92ZU5hbWVkSXRlbShv
bGROYW1lQXR0cik7Ci0gICAgICAgICAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0obmV3TmFtZUF0
dHIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb2xkTmFtZUF0dHIgPSBuZXdOYW1lQXR0
cjsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKLSAgICAgICAgU3Ry
aW5nIG5ld0lkQXR0ciA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChpc0RvY05hbWVkSXRl
bSgpICYmIGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0g
ICAgICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAq
Pihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFOYW1lZEl0ZW0o
b2xkSWRBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0ZW0obmV3SWRB
dHRyKTsKLSAgICAgICAgfQotICAgICAgICBvbGRJZEF0dHIgPSBuZXdJZEF0dHI7Ci0gICAgICAg
IC8vIGFsc28gY2FsbCBzdXBlcmNsYXNzCi0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTFBsdWdJbkVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1Eb2N1bWVudCogSFRNTE9i
amVjdEVsZW1lbnQ6OmNvbnRlbnREb2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgLy8gIyMjCi0gICAg
cmV0dXJuIDA7Ci19Ci0KLWJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIGlmIChtX3VzZUZhbGxiYWNrQ29udGVudCB8fCBp
c0ltYWdlVHlwZSgpKQotICAgICAgICByZXR1cm4gSFRNTFBsdWdJbkVsZW1lbnQ6OnJlbmRlcmVy
SXNOZWVkZWQoc3R5bGUpOwotCi0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUo
KTsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGx1Z2luc0VuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1SZW5kZXJPYmplY3Qg
KkhUTUxPYmplY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJl
bmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBpZiAobV91c2VGYWxsYmFja0NvbnRlbnQpCi0gICAg
ICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OmNyZWF0ZU9iamVjdCh0aGlzLCBzdHlsZSk7Ci0gICAg
aWYgKGlzSW1hZ2VUeXBlKCkpCi0gICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbWFn
ZSh0aGlzKTsKLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyUGFydE9iamVjdCh0aGlzKTsK
LX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBIVE1MUGx1Z0lu
RWxlbWVudDo6YXR0YWNoKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKSAmJiAhbV91c2VGYWxsYmFj
a0NvbnRlbnQpIHsKLSAgICAgICAgaWYgKGlzSW1hZ2VUeXBlKCkpIHsKLSAgICAgICAgICAgIGlm
ICghbV9pbWFnZUxvYWRlcikKLSAgICAgICAgICAgICAgICBtX2ltYWdlTG9hZGVyID0gbmV3IEhU
TUxJbWFnZUxvYWRlcih0aGlzKTsKLSAgICAgICAgICAgIG1faW1hZ2VMb2FkZXItPnVwZGF0ZUZy
b21FbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICAgICAg
ICAgIFJlbmRlckltYWdlKiBpbWFnZU9iaiA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVu
ZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgaW1hZ2VPYmotPnNldENhY2hlZEltYWdlKG1faW1h
Z2VMb2FkZXItPmltYWdlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKG5lZWRXaWRnZXRVcGRhdGUpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXQg
bmVlZFdpZGdldFVwZGF0ZSB0byBmYWxzZSBiZWZvcmUgY2FsbGluZyB1cGRhdGVXaWRnZXQgYmVj
YXVzZSB1cGRhdGVXaWRnZXQgbWF5IGNhdXNlCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBtZXRo
b2Qgb3IgcmVjYWxjU3R5bGUgKHdoaWNoIGFsc28gY2FsbHMgdXBkYXRlV2lkZ2V0KSB0byBiZSBj
YWxsZWQuCi0gICAgICAgICAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihyZW5kZXJlcigpKS0+dXBk
YXRlV2lkZ2V0KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5lZWRX
aWRnZXRVcGRhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIHNldENoYW5nZWQoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6
Y2xvc2VSZW5kZXJlcigpCi17Ci0gICAgLy8gVGhlIHBhcnNlciBqdXN0IHJlYWNoZWQgPC9vYmpl
Y3Q+LgotICAgIHNldENvbXBsZXRlKHRydWUpOwotICAgIAotICAgIEhUTUxQbHVnSW5FbGVtZW50
OjpjbG9zZVJlbmRlcmVyKCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldENvbXBs
ZXRlKGJvb2wgY29tcGxldGUpCi17Ci0gICAgaWYgKGNvbXBsZXRlICE9IG1fY29tcGxldGUpIHsK
LSAgICAgICAgbV9jb21wbGV0ZSA9IGNvbXBsZXRlOwotICAgICAgICBpZiAoY29tcGxldGUgJiYg
IW1fdXNlRmFsbGJhY2tDb250ZW50KSB7Ci0gICAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0g
dHJ1ZTsKLSAgICAgICAgICAgIGlmIChpbkRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgc2V0
Q2hhbmdlZCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50
OjpkZXRhY2goKQotewotICAgIGlmIChhdHRhY2hlZCgpICYmIHJlbmRlcmVyKCkgJiYgIW1fdXNl
RmFsbGJhY2tDb250ZW50KSB7Ci0gICAgICAgIC8vIFVwZGF0ZSB0aGUgd2lkZ2V0IHRoZSBuZXh0
IHRpbWUgd2UgYXR0YWNoIChkZXRhY2hpbmcgZGVzdHJveXMgdGhlIHBsdWdpbikuCi0gICAgICAg
IG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwotICAgIH0KLQotI2lmIF9fQVBQTEVfXwotICAgIG1f
aW5zdGFuY2UgPSAwOwotI2VuZGlmCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgpOwot
fQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0g
ICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkg
ewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAq
Pihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwot
ICAgICAgICBkb2MtPmFkZERvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7Ci0gICAgfQotCi0g
ICAgSFRNTFBsdWdJbkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci19Ci0KLXZvaWQg
SFRNTE9iamVjdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIGlmIChpc0Rv
Y05hbWVkSXRlbSgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAg
SFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQo
KSk7Ci0gICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAg
ZG9jLT5yZW1vdmVEb2NFeHRyYU5hbWVkSXRlbShvbGRJZEF0dHIpOwotICAgIH0KLQotICAgIEhU
TUxQbHVnSW5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci19Ci0KLXZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoKQotewotICAgIGlmICghbV91
c2VGYWxsYmFja0NvbnRlbnQgJiYgbmVlZFdpZGdldFVwZGF0ZSAmJiByZW5kZXJlcigpICYmICFp
c0ltYWdlVHlwZSgpKSB7Ci0gICAgICAgIGRldGFjaCgpOwotICAgICAgICBhdHRhY2goKTsKLSAg
ICB9Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnJlY2FsY1N0eWxlKGNoKTsKLX0KLQotdm9pZCBI
VE1MT2JqZWN0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKLXsKLSAgICB1cGRhdGVEb2NOYW1l
ZEl0ZW0oKTsKLSAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFtX3VzZUZhbGxiYWNrQ29udGVudCkg
ewotICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgc2V0Q2hhbmdlZCgp
OwotICAgIH0KLX0KLQotYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlICphdHRyKSBjb25zdAotewotICAgIHJldHVybiAoYXR0ci0+bmFtZSgpID09IGRhdGFB
dHRyIHx8IChhdHRyLT5uYW1lKCkgPT0gdXNlbWFwQXR0ciAmJiBhdHRyLT52YWx1ZSgpLmRvbVN0
cmluZygpWzBdICE9ICcjJykpOwotfQotCi1ib29sIEhUTUxPYmplY3RFbGVtZW50Ojppc0ltYWdl
VHlwZSgpCi17Ci0gICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSAmJiB1cmwuc3RhcnRzV2l0
aCgiZGF0YToiKSkgewotICAgICAgICAvLyBFeHRyYWN0IHRoZSBNSU1FIHR5cGUgZnJvbSB0aGUg
ZGF0YSBVUkwuCi0gICAgICAgIGludCBpbmRleCA9IHVybC5maW5kKCc7Jyk7Ci0gICAgICAgIGlm
IChpbmRleCA9PSAtMSkKLSAgICAgICAgICAgIGluZGV4ID0gdXJsLmZpbmQoJywnKTsKLSAgICAg
ICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICBpbnQgbGVuID0gaW5kZXggLSA1Owot
ICAgICAgICAgICAgaWYgKGxlbiA+IDApCi0gICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSB1
cmwubWlkKDUsIGxlbik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2Vydmlj
ZVR5cGUgPSAidGV4dC9wbGFpbiI7IC8vIERhdGEgVVJMcyB3aXRoIG5vIE1JTUUgdHlwZSBhcmUg
Y29uc2lkZXJlZCB0ZXh0L3BsYWluLgotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBJbWFnZTo6c3VwcG9ydHNUeXBlKHNlcnZpY2VUeXBlKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0
RWxlbWVudDo6cmVuZGVyRmFsbGJhY2tDb250ZW50KCkKLXsKLSAgICBpZiAobV91c2VGYWxsYmFj
a0NvbnRlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgb3Vyc2VsdmVzIGFzIHVz
aW5nIHRoZSBmYWxsYmFjayBjb250ZW50LgotICAgIG1fdXNlRmFsbGJhY2tDb250ZW50ID0gdHJ1
ZTsKLQotICAgIC8vIE5vdyBkbyBhIGRldGFjaCBhbmQgcmVhdHRhY2guICAgIAotICAgIC8vIEZJ
WE1FOiBTdHlsZSBnZXRzIHJlY2FsY3VsYXRlZCB3aGljaCBpcyBzdWJvcHRpbWFsLgotICAgIGRl
dGFjaCgpOwotICAgIGF0dGFjaCgpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50Ojp1cGRh
dGVEb2NOYW1lZEl0ZW0oKQotewotICAgIC8vIFRoZSBydWxlIGlzICI8b2JqZWN0PiBlbGVtZW50
cyB3aXRoIG5vIGNoaWxkcmVuIG90aGVyIHRoYW4KLSAgICAvLyA8cGFyYW0+IGVsZW1lbnRzIGFu
ZCB3aGl0ZXNwYWNlIGNhbiBiZSBmb3VuZCBieSBuYW1lIGluIGEKLSAgICAvLyBkb2N1bWVudCwg
YW5kIG90aGVyIDxvYmplY3Q+IGVsZW1lbnRzIGNhbm5vdC4iCi0gICAgYm9vbCB3YXNOYW1lZEl0
ZW0gPSBtX2RvY05hbWVkSXRlbTsKLSAgICBib29sIGlzTmFtZWRJdGVtID0gdHJ1ZTsKLSAgICBO
b2RlICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoY2hpbGQgJiYgaXNOYW1lZEl0
ZW0pIHsKLSAgICAgICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAg
IGlmICghc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihjaGlsZCktPmhhc1RhZ05hbWUocGFyYW1UYWcp
KQotICAgICAgICAgICAgICAgIGlzTmFtZWRJdGVtID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxU
ZXh0ICo+KGNoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgICAg
IGlzTmFtZWRJdGVtID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXNOYW1l
ZEl0ZW0gPSBmYWxzZTsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAg
ICB9Ci0gICAgaWYgKGlzTmFtZWRJdGVtICE9IHdhc05hbWVkSXRlbSAmJiBkb2N1bWVudCgpLT5p
c0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIEhUTUxEb2N1bWVudCAqZG9jID0gc3RhdGljX2Nh
c3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoaXNOYW1lZEl0ZW0p
IHsKLSAgICAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAg
ICAgIGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAg
ICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBtX2RvY05hbWVkSXRlbSA9IGlzTmFtZWRJdGVtOwotfQotCi1TdHJpbmcg
SFRNTE9iamVjdEVsZW1lbnQ6OmNvZGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoY29kZUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRDb2RlKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGVBdHRyLCB2YWx1ZSk7Ci19
Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6YXJjaGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShhcmNoaXZlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OnNldEFyY2hpdmUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
YXJjaGl2ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojpib3Jk
ZXIoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYm9yZGVyQXR0cik7Ci19Ci0K
LXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEJvcmRlcihjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShib3JkZXJBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1M
T2JqZWN0RWxlbWVudDo6Y29kZUJhc2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoY29kZWJhc2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29kZUJh
c2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRy
LCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6Y29kZVR5cGUoKSBjb25z
dAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZXR5cGVBdHRyKTsKLX0KLQotdm9pZCBI
VE1MT2JqZWN0RWxlbWVudDo6c2V0Q29kZVR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoY29kZXR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2Jq
ZWN0RWxlbWVudDo6ZGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShkYXRh
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldERhdGEoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGF0YUF0dHIsIHZhbHVlKTsKLX0KLQotYm9v
bCBIVE1MT2JqZWN0RWxlbWVudDo6ZGVjbGFyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRB
dHRyaWJ1dGUoZGVjbGFyZUF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVt
ZW50OjpzZXREZWNsYXJlKGJvb2wgZGVjbGFyZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGVjbGFy
ZUF0dHIsIGRlY2xhcmUgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6
OmhzcGFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoc3BhY2VBdHRyKTsK
LX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0SHNwYWNlKGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5n
IEhUTUxPYmplY3RFbGVtZW50OjpzdGFuZGJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHN0YW5kYnlBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0U3Rh
bmRieShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzdGFuZGJ5QXR0
ciwgdmFsdWUpOwotfQotCi1pbnQgSFRNTE9iamVjdEVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhYmluZGV4QXR0cikudG9JbnQoKTsKLX0KLQot
dm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHRhYkluZGV4KQotewotICAg
IHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7Ci19
Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNl
dFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIs
IHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojp1c2VNYXAoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodXNlbWFwQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OnNldFVzZU1hcChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0
dHJpYnV0ZSh1c2VtYXBBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVu
dDo6dnNwYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZzcGFjZUF0dHIp
OwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRWc3BhY2UoY29uc3QgU3RyaW5nICZ2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwgdmFsdWUpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KIEhUTUxQYXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQoRG9j
dW1lbnQgKmRvYykKICAgICA6IEhUTUxFbGVtZW50KHBhcmFtVGFnLCBkb2MpCiB7CkluZGV4OiBo
dG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPYmplY3RF
bGVtZW50LmNwcAkocmV2aXNpb24gMTQyNTcpCisrKyBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEsNTE4ICsyMSwyNiBAQAogICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5oIgorI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50Lmgi
CiAKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3
b3Jkcy5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgIlJlbmRlckFwcGxldC5oIgotI2luY2x1ZGUgIlJlbmRlckVtcHR5QXBwbGV0LmgiCiAjaW5j
bHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiY3NzaGVs
cGVyLmgiCi0jaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgotI2luY2x1ZGUgImRvbTJfZXZl
bnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW5jbHVkZSAicmVuZGVy
X2ZyYW1lcy5oIgorI2luY2x1ZGUgInJlbmRlcl9yZXBsYWNlZC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MUGx1Z0luRWxlbWVudDo6SFRN
TFBsdWdJbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotU3RyaW5nIEhUTUxQ
bHVnSW5FbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShh
bGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpzZXRBbGlnbihjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0K
LQotU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50OjpoZWlnaHQoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6
OnNldEhlaWdodChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShoZWln
aHRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6bmFtZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRN
TFBsdWdJbkVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50
Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwot
fQotCi12b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBIVE1M
UGx1Z0luRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUg
PT0gd2lkdGhBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGhlaWdodEF0dHIgfHwKLSAgICAg
ICAgYXR0ck5hbWUgPT0gdnNwYWNlQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoc3BhY2VB
dHRyKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBlVW5pdmVyc2FsOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRyKSB7
Ci0gICAgICAgIHJlc3VsdCA9IGVSZXBsYWNlZDsgLy8gU2hhcmUgd2l0aCA8aW1nPiBzaW5jZSB0
aGUgYWxpZ25tZW50IGJlaGF2aW9yIGlzIHRoZSBzYW1lLgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFt
ZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
d2lkdGhBdHRyKQotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIGF0
dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoZWlnaHRBdHRyKQot
ICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfSEVJR0hULCBhdHRyLT52YWx1ZSgp
KTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdnNwYWNlQXR0cikgewotICAgICAgICBh
ZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1RPUCwgYXR0ci0+dmFsdWUoKSk7Ci0g
ICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBhdHRyLT52
YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoc3BhY2VBdHRyKSB7Ci0g
ICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgYXR0ci0+dmFs
dWUoKSk7Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQs
IGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0
cikKLSAgICAgICAgYWRkSFRNTEFsaWdubWVudChhdHRyKTsKLSAgICBlbHNlCi0gICAgICAgIEhU
TUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0gICAgCi0KLWJvb2wgSFRN
TFBsdWdJbkVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQotewotICAgIHJl
dHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykgfHwgSFRNTEVsZW1lbnQ6OmNoZWNr
RFREKG5ld0NoaWxkKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MQXBwbGV0RWxl
bWVudDo6SFRNTEFwcGxldEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLTogSFRNTFBsdWdJbkVsZW1l
bnQoYXBwbGV0VGFnLCBkb2MpCi0sIG1fYWxsUGFyYW1zQXZhaWxhYmxlKGZhbHNlKQotewotfQot
Ci1IVE1MQXBwbGV0RWxlbWVudDo6fkhUTUxBcHBsZXRFbGVtZW50KCkKLXsKLSNpZiBfX0FQUExF
X18KLSAgICAvLyBtX2luc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cCBpbiBkZXRh
Y2goKS4KLSAgICBhc3NlcnQoIW1faW5zdGFuY2UpOwotI2VuZGlmCi19Ci0KLXZvaWQgSFRNTEFw
cGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikK
LXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIgfHwKLSAgICAgICAgYXR0ci0+bmFt
ZSgpID09IGFyY2hpdmVBdHRyIHx8Ci0gICAgICAgIGF0dHItPm5hbWUoKSA9PSBjb2RlQXR0ciB8
fAotICAgICAgICBhdHRyLT5uYW1lKCkgPT0gY29kZWJhc2VBdHRyIHx8Ci0gICAgICAgIGF0dHIt
Pm5hbWUoKSA9PSBtYXlzY3JpcHRBdHRyIHx8Ci0gICAgICAgIGF0dHItPm5hbWUoKSA9PSBvYmpl
Y3RBdHRyKSB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gbmFtZUF0dHIpIHsKLSAgICAgICAgU3RyaW5nIG5ld05hbWVBdHRyID0gYXR0ci0+
dmFsdWUoKTsKLSAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0
PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlTmFt
ZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG5ld05h
bWVBdHRyKTsKLSAgICAgICAgfQotICAgICAgICBvbGROYW1lQXR0ciA9IG5ld05hbWVBdHRyOwot
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikgewotICAgICAgICBTdHJpbmcg
bmV3SWRBdHRyID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBk
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRG9jdW1lbnQg
KmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAg
ICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAgICAg
IGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0ZW0obmV3SWRBdHRyKTsKLSAgICAgICAgfQotICAgICAg
ICBvbGRJZEF0dHIgPSBuZXdJZEF0dHI7Ci0gICAgICAgIC8vIGFsc28gY2FsbCBzdXBlcmNsYXNz
Ci0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1
bWVudCgpCi17Ci0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAg
ICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1l
bnQoKSk7Ci0gICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAg
ZG9jLT5hZGREb2NFeHRyYU5hbWVkSXRlbShvbGRJZEF0dHIpOwotICAgIH0KLQotICAgIEhUTUxQ
bHVnSW5FbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotfQotCi12b2lkIEhUTUxBcHBs
ZXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5yZW1vdmVOYW1l
ZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICBkb2MtPnJlbW92ZURvY0V4dHJhTmFtZWRJdGVt
KG9sZElkQXR0cik7Ci0gICAgfQotCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnJlbW92ZWRGcm9t
RG9jdW1lbnQoKTsKLX0KLQotYm9vbCBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29kZUF0
dHIpLmlzTnVsbCgpOwotfQotCi1SZW5kZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAg
ICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotCi0gICAgaWYgKGZyYW1lICYm
IGZyYW1lLT5qYXZhRW5hYmxlZCgpKSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IGFyZ3M7Ci0KLSAgICAgICAgYXJncy5zZXQoImNvZGUiLCBnZXRBdHRyaWJ1dGUoY29kZUF0dHIp
KTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2RlQmFzZSA9IGdldEF0dHJpYnV0ZShj
b2RlYmFzZUF0dHIpOwotICAgICAgICBpZighY29kZUJhc2UuaXNOdWxsKCkpCi0gICAgICAgICAg
ICBhcmdzLnNldCgiY29kZUJhc2UiLCBjb2RlQmFzZSk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSA9IGdldEF0dHJpYnV0ZShkb2N1bWVudCgpLT5odG1sTW9kZSgpICE9IERvY3Vt
ZW50OjpYSHRtbCA/IG5hbWVBdHRyIDogaWRBdHRyKTsKLSAgICAgICAgaWYgKCFuYW1lLmlzTnVs
bCgpKQotICAgICAgICAgICAgYXJncy5zZXQoIm5hbWUiLCBuYW1lKTsKLSAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhcmNoaXZlID0gZ2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyKTsKLSAgICAg
ICAgaWYgKCFhcmNoaXZlLmlzTnVsbCgpKQotICAgICAgICAgICAgYXJncy5zZXQoImFyY2hpdmUi
LCBhcmNoaXZlKTsKLQotICAgICAgICBhcmdzLnNldCgiYmFzZVVSTCIsIGRvY3VtZW50KCktPmJh
c2VVUkwoKSk7Ci0KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYXlTY3JpcHQgPSBnZXRB
dHRyaWJ1dGUobWF5c2NyaXB0QXR0cik7Ci0gICAgICAgIGlmICghbWF5U2NyaXB0LmlzTnVsbCgp
KQotICAgICAgICAgICAgYXJncy5zZXQoIm1heVNjcmlwdCIsIG1heVNjcmlwdCk7Ci0KLSAgICAg
ICAgLy8gT3RoZXIgYXJndW1lbnRzIChmcm9tIDxQQVJBTT4gdGFncykgYXJlIGFkZGVkIGxhdGVy
LgotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5ldyAoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEo
KSkgUmVuZGVyQXBwbGV0KHRoaXMsIGFyZ3MpOwotICAgIH0KLQotICAgIC8vICMjIyByZW1vdmUg
bWUuIHdlIHNob3VsZCBuZXZlciBzaG93IGFuIGVtcHR5IGFwcGxldCwgaW5zdGVhZAotICAgIC8v
IHJlbmRlciB0aGUgYWx0ZXJuYXRpdmUgY29udGVudCBnaXZlbiBieSB0aGUgd2VicGFnZQotICAg
IHJldHVybiBuZXcgKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpIFJlbmRlckVtcHR5QXBwbGV0
KHRoaXMpOwotfQotCi0jaWYgX19BUFBMRV9fCi1LSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqSFRN
TEFwcGxldEVsZW1lbnQ6OmdldEluc3RhbmNlKCkgY29uc3QKLXsKLSAgICBGcmFtZSAqZnJhbWUg
PSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5qYXZhRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX2luc3RhbmNlKQotICAgICAg
ICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLSAgICAKLSAgICBSZW5kZXJBcHBsZXQgKnIgPSBz
dGF0aWNfY2FzdDxSZW5kZXJBcHBsZXQqPihyZW5kZXJlcigpKTsKLSAgICBpZiAocikgewotICAg
ICAgICByLT5jcmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSgpOwotICAgICAgICBpZiAoci0+d2lkZ2V0
KCkpCi0gICAgICAgICAgICAvLyBDYWxsIGludG8gdGhlIGZyYW1lIChhbmQgb3ZlciB0aGUgYnJp
ZGdlKSB0byBwdWxsIHRoZSBCaW5kaW5nczo6SW5zdGFuY2UKLSAgICAgICAgICAgIC8vIGZyb20g
dGhlIGd1dHMgb2YgdGhlIHBsdWdpbi4KLSAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+
Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoci0+d2lkZ2V0KCkpOwotICAgIH0KLSAgICByZXR1
cm4gbV9pbnN0YW5jZS5nZXQoKTsKLX0KLSNlbmRpZgotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50
OjpjbG9zZVJlbmRlcmVyKCkKLXsKLSAgICAvLyBUaGUgcGFyc2VyIGp1c3QgcmVhY2hlZCA8L2Fw
cGxldD4sIHNvIGFsbCB0aGUgcGFyYW1zIGFyZSBhdmFpbGFibGUgbm93LgotICAgIG1fYWxsUGFy
YW1zQXZhaWxhYmxlID0gdHJ1ZTsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVy
ZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7IC8vIFRoaXMgd2lsbCBjYXVzZSBpdCB0byBjcmVh
dGUgaXRzIHdpZGdldCAmIHRoZSBKYXZhIGFwcGxldAotICAgIEhUTUxQbHVnSW5FbGVtZW50Ojpj
bG9zZVJlbmRlcmVyKCk7Ci19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OmRldGFjaCgpCi17
Ci0jaWYgX19BUFBMRV9fCi0gICAgbV9pbnN0YW5jZSA9IDA7Ci0jZW5kaWYKLSAgICBIVE1MUGx1
Z0luRWxlbWVudDo6ZGV0YWNoKCk7Ci19Ci0KLWJvb2wgSFRNTEFwcGxldEVsZW1lbnQ6OmFsbFBh
cmFtc0F2YWlsYWJsZSgpCi17Ci0gICAgcmV0dXJuIG1fYWxsUGFyYW1zQXZhaWxhYmxlOwotfQot
Ci1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OmFsdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShhbHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0QWx0
KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHZhbHVl
KTsKLX0KLQotU3RyaW5nIEhUTUxBcHBsZXRFbGVtZW50OjphcmNoaXZlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0
RWxlbWVudDo6c2V0QXJjaGl2ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZShhcmNoaXZlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6
OmNvZGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZUF0dHIpOwotfQot
Ci12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpzZXRDb2RlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKGNvZGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXBw
bGV0RWxlbWVudDo6Y29kZUJhc2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
Y29kZWJhc2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0Q29kZUJhc2Uo
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyLCB2
YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXBwbGV0RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhzcGFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBs
ZXRFbGVtZW50OjpzZXRIc3BhY2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUoaHNwYWNlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6
Om9iamVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShvYmplY3RBdHRyKTsK
LX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG9iamVjdEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5n
IEhUTUxBcHBsZXRFbGVtZW50Ojp2c3BhY2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUodnNwYWNlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnNldFZzcGFj
ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCB2
YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEVtYmVkRWxlbWVudDo6SFRN
TEVtYmVkRWxlbWVudChEb2N1bWVudCAqZG9jKQotOiBIVE1MUGx1Z0luRWxlbWVudChlbWJlZFRh
ZywgZG9jKQotewotfQotCi1IVE1MRW1iZWRFbGVtZW50Ojp+SFRNTEVtYmVkRWxlbWVudCgpCi17
Ci0jaWYgX19BUFBMRV9fCi0gICAgLy8gbV9pbnN0YW5jZSBzaG91bGQgaGF2ZSBiZWVuIGNsZWFu
ZWQgdXAgaW4gZGV0YWNoKCkuCi0gICAgYXNzZXJ0KCFtX2luc3RhbmNlKTsKLSNlbmRpZgotfQot
Ci0jaWYgX19BUFBMRV9fCi1LSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqSFRNTEVtYmVkRWxlbWVu
dDo6Z2V0SW5zdGFuY2UoKSBjb25zdAotewotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCkt
PmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAo
bV9pbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7Ci0gICAgCi0gICAg
UmVuZGVyT2JqZWN0ICpyID0gcmVuZGVyZXIoKTsKLSAgICBpZiAoIXIpIHsKLSAgICAgICAgTm9k
ZSAqcCA9IHBhcmVudE5vZGUoKTsKLSAgICAgICAgaWYgKHAgJiYgcC0+aGFzVGFnTmFtZShvYmpl
Y3RUYWcpKQotICAgICAgICAgICAgciA9IHAtPnJlbmRlcmVyKCk7Ci0gICAgfQotCi0gICAgaWYg
KHIgJiYgci0+aXNXaWRnZXQoKSl7Ci0gICAgICAgIGlmIChXaWRnZXQgKndpZGdldCA9IHN0YXRp
Y19jYXN0PFJlbmRlcldpZGdldCAqPihyKS0+d2lkZ2V0KCkpIHsKLSAgICAgICAgICAgIC8vIENh
bGwgaW50byB0aGUgZnJhbWUgKGFuZCBvdmVyIHRoZSBicmlkZ2UpIHRvIHB1bGwgdGhlIEJpbmRp
bmdzOjpJbnN0YW5jZQotICAgICAgICAgICAgLy8gZnJvbSB0aGUgZ3V0cyBvZiB0aGUgSmF2YSBW
TS4KLSAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+Z2V0RW1iZWRJbnN0YW5jZUZvcldp
ZGdldCh3aWRnZXQpOwotICAgICAgICAgICAgLy8gQXBwbGV0IG1heSBzcGVjaWZpZWQgd2l0aCA8
ZW1iZWQ+IHRhZy4KLSAgICAgICAgICAgIGlmICghbV9pbnN0YW5jZSkKLSAgICAgICAgICAgICAg
ICBtX2luc3RhbmNlID0gZnJhbWUtPmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7Ci19Ci0jZW5k
aWYKLQotYm9vbCBIVE1MRW1iZWRFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAg
IGlmIChhdHRyTmFtZSA9PSBoaWRkZW5BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVVbml2ZXJz
YWw7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiBI
VE1MUGx1Z0luRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9p
ZCBIVE1MRW1iZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpCi17Ci0gICAgRGVwcmVjYXRlZFN0cmluZyB2YWwgPSBhdHRyLT52YWx1ZSgpLmRlcHJl
Y2F0ZWRTdHJpbmcoKTsKLSAgCi0gICAgaW50IHBvczsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09
IHR5cGVBdHRyKSB7Ci0gICAgICAgIHNlcnZpY2VUeXBlID0gdmFsLmxvd2VyKCk7Ci0gICAgICAg
IHBvcyA9IHNlcnZpY2VUeXBlLmZpbmQoICI7IiApOwotICAgICAgICBpZiAoIHBvcyE9LTEgKQot
ICAgICAgICAgICAgc2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KCBwb3MgKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2RlQXR0ciB8fAotICAgICAgICAgICAgICAgYXR0
ci0+bmFtZSgpID09IHNyY0F0dHIpIHsKLSAgICAgICAgIHVybCA9IFdlYkNvcmU6OnBhcnNlVVJM
KGF0dHItPnZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBwbHVnaW5wYWdlQXR0ciB8fAotICAgICAgICAgICAgICAgYXR0ci0+bmFtZSgp
ID09IHBsdWdpbnNwYWdlQXR0cikgewotICAgICAgICBwbHVnaW5QYWdlID0gdmFsOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhpZGRlbkF0dHIpIHsKLSAgICAgICAgaWYgKHZhbC5s
b3dlcigpPT0ieWVzIiB8fCB2YWwubG93ZXIoKT09InRydWUiKSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogTm90IGR5bmFtaWMsIGJ1dCBpdCdzIG5vdCByZWFsbHkgaW1wb3J0YW50IHRoYXQgc3Vj
aCBhIHJhcmVseS11c2VkCi0gICAgICAgICAgICAvLyBmZWF0dXJlIHdvcmsgZHluYW1pY2FsbHku
Ci0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoIGF0dHIsIENTU19QUk9QX1dJRFRILCAiMCIgKTsK
LSAgICAgICAgICAgIGFkZENTU0xlbmd0aCggYXR0ciwgQ1NTX1BST1BfSEVJR0hULCAiMCIgKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7Ci0g
ICAgICAgIFN0cmluZyBuZXdOYW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChp
bkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAg
ICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1l
bnQoKSk7Ci0gICAgICAgICAgICBkb2MtPnJlbW92ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0g
ICAgICAgICAgICBkb2MtPmFkZE5hbWVkSXRlbShuZXdOYW1lQXR0cik7Ci0gICAgICAgIH0KLSAg
ICAgICAgb2xkTmFtZUF0dHIgPSBuZXdOYW1lQXR0cjsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRN
TFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1ib29sIEhU
TUxFbWJlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQotewot
ICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8
fCAhZnJhbWUtPnBsdWdpbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IE5vZGUgKnAgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKHAgJiYgcC0+aGFzVGFnTmFtZShvYmpl
Y3RUYWcpKSB7Ci0gICAgICAgIGFzc2VydChwLT5yZW5kZXJlcigpKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1SZW5kZXJPYmplY3QgKkhU
TUxFbWJlZEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKQotewotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJQYXJ0T2JqZWN0
KHRoaXMpOwotfQotCi12b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmF0dGFjaCgpCi17Ci0gICAgSFRN
TFBsdWdJbkVsZW1lbnQ6OmF0dGFjaCgpOwotCi0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihyZW5kZXJlcigpKS0+dXBkYXRlV2lkZ2V0
KCk7Ci19Ci0KLXZvaWQgSFRNTEVtYmVkRWxlbWVudDo6ZGV0YWNoKCkKLXsKLSNpZiBfX0FQUExF
X18KLSAgICBtX2luc3RhbmNlID0gMDsKLSNlbmRpZgotICAgIEhUTUxQbHVnSW5FbGVtZW50Ojpk
ZXRhY2goKTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dCgpCi17Ci0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAg
SFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQo
KSk7Ci0gICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICB9Ci0KLSAg
ICBIVE1MUGx1Z0luRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLX0KLQotdm9pZCBI
VE1MRW1iZWRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsKLSAgICBpZiAoZG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0
YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5yZW1v
dmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgIH0KLQotICAgIEhUTUxQbHVnSW5FbGVtZW50
OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci19Ci0KLWJvb2wgSFRNTEVtYmVkRWxlbWVudDo6aXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAotewotICAgIHJldHVybiBhdHRyLT5u
YW1lKCkgPT0gc3JjQXR0cjsKLX0KLQotU3RyaW5nIEhUTUxFbWJlZEVsZW1lbnQ6OnNyYygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzcmNBdHRyKTsKLX0KLQotdm9pZCBIVE1M
RW1iZWRFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUoc3JjQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEVtYmVkRWxlbWVudDo6dHlw
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTEVtYmVkRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KIEhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChEb2N1bWVudCAqZG9jKSAK
IDogSFRNTFBsdWdJbkVsZW1lbnQob2JqZWN0VGFnLCBkb2MpCiAsIG1faW1hZ2VMb2FkZXIoMCkK
QEAgLTU1Niw3ICs2NCw3IEBAIEhUTUxPYmplY3RFbGVtZW50Ojp+SFRNTE9iamVjdEVsZW1lbnQo
KQogI2lmIF9fQVBQTEVfXwogS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVt
ZW50OjpnZXRJbnN0YW5jZSgpIGNvbnN0CiB7Ci0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC01NjUsNyArNzMsNyBAQCBLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSAqSFRNTE9iamVjdEVsZW1lCiAKICAgICBpZiAoUmVuZGVyT2Jq
ZWN0ICpyID0gcmVuZGVyZXIoKSkgewogICAgICAgICBpZiAoci0+aXNXaWRnZXQoKSkgewotICAg
ICAgICAgICAgaWYgKFdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+
KHIpLT53aWRnZXQoKSkgeworICAgICAgICAgICAgaWYgKFdpZGdldCogd2lkZ2V0ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4ociktPndpZGdldCgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
Q2FsbCBpbnRvIHRoZSBmcmFtZSAoYW5kIG92ZXIgdGhlIGJyaWRnZSkgdG8gcHVsbCB0aGUgQmlu
ZGluZ3M6Okluc3RhbmNlCiAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgZ3V0cyBvZiB0aGUg
cGx1Z2luLgogICAgICAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+Z2V0T2JqZWN0SW5z
dGFuY2VGb3JXaWRnZXQod2lkZ2V0KTsKQEAgLTU4MCwxMSArODgsMTEgQEAgS0pTOjpCaW5kaW5n
czo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVtZQogfQogI2VuZGlmCiAKLUhUTUxGb3JtRWxlbWVu
dCAqSFRNTE9iamVjdEVsZW1lbnQ6OmZvcm0oKSBjb25zdAorSFRNTEZvcm1FbGVtZW50KiBIVE1M
T2JqZWN0RWxlbWVudDo6Zm9ybSgpIGNvbnN0CiB7Ci0gICAgZm9yIChOb2RlICpwID0gcGFyZW50
Tm9kZSgpOyBwICE9IDA7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIHAg
PSBwYXJlbnROb2RlKCk7IHAgIT0gMDsgcCA9IHAtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBp
ZiAocC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnQgKj4ocCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50Kj4ocCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiAwOwpAQCAtNjMz
LDcgKzE0MSw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKICAgICAgICAgU3RyaW5nIG5l
d0lkQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpc0RvY05hbWVkSXRlbSgpICYm
IGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAg
ICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1
bWVudCgpKTsKKyAgICAgICAgICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8SFRN
TERvY3VtZW50Kj4oZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBkb2MtPnJlbW92ZURvY0V4dHJh
TmFtZWRJdGVtKG9sZElkQXR0cik7CiAgICAgICAgICAgICBkb2MtPmFkZERvY0V4dHJhTmFtZWRJ
dGVtKG5ld0lkQXR0cik7CiAgICAgICAgIH0KQEAgLTgxNiwyMCArMzI0LDIwIEBAIHZvaWQgSFRN
TE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXQKICAgICAvLyBkb2N1bWVudCwgYW5kIG90
aGVyIDxvYmplY3Q+IGVsZW1lbnRzIGNhbm5vdC4iCiAgICAgYm9vbCB3YXNOYW1lZEl0ZW0gPSBt
X2RvY05hbWVkSXRlbTsKICAgICBib29sIGlzTmFtZWRJdGVtID0gdHJ1ZTsKLSAgICBOb2RlICpj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICBOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAg
ICB3aGlsZSAoY2hpbGQgJiYgaXNOYW1lZEl0ZW0pIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc0Vs
ZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihj
aGlsZCktPmhhc1RhZ05hbWUocGFyYW1UYWcpKQorICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oY2hpbGQpLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkKICAgICAgICAgICAgICAg
ICBpc05hbWVkSXRlbSA9IGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5pc1RleHRO
b2RlKCkpIHsKLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8VGV4dCAqPihjaGlsZCktPmNv
bnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8VGV4
dCo+KGNoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQogICAgICAgICAgICAgICAgIGlz
TmFtZWRJdGVtID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaXNOYW1lZEl0
ZW0gPSBmYWxzZTsKICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICB9
CiAgICAgaWYgKGlzTmFtZWRJdGVtICE9IHdhc05hbWVkSXRlbSAmJiBkb2N1bWVudCgpLT5pc0hU
TUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIEhUTUxEb2N1bWVudCAqZG9jID0gc3RhdGljX2Nhc3Q8
SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOworICAgICAgICBIVE1MRG9jdW1lbnQqIGRvYyA9
IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvY3VtZW50KCkpOwogICAgICAgICBpZiAoaXNO
YW1lZEl0ZW0pIHsKICAgICAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsK
ICAgICAgICAgICAgIGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKQEAgLTk3
MSw3NCArNDc5LDQgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VnNwYWNlKGNvbnN0IAog
ICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCB2YWx1ZSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotSFRNTFBhcmFtRWxlbWVudDo6SFRNTFBhcmFtRWxlbWVudChEb2N1bWVudCAqZG9j
KQotICAgIDogSFRNTEVsZW1lbnQocGFyYW1UYWcsIGRvYykKLXsKLX0KLQotSFRNTFBhcmFtRWxl
bWVudDo6fkhUTUxQYXJhbUVsZW1lbnQoKQotewotfQotCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAo
YXR0ci0+bmFtZSgpID09IGlkQXR0cikgewotICAgICAgICAvLyBNdXN0IGNhbGwgYmFzZSBjbGFz
cyBzbyB0aGF0IGhhc0lEIGJpdCBnZXRzIHNldC4KLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwotICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aHRtbE1vZGUo
KSAhPSBEb2N1bWVudDo6WEh0bWwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbmFt
ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0
dHIpIHsKLSAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKLSAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsKLSAgICAgICAgbV92YWx1ZSA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKLX0KLQotYm9vbCBIVE1MUGFyYW1FbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRy
aWJ1dGUgKmF0dHIpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIp
IHsKLSAgICAgICAgQXR0cmlidXRlICphdHRyID0gYXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJ
dGVtKG5hbWVBdHRyKTsKLSAgICAgICAgaWYgKGF0dHIpIHsKLSAgICAgICAgICAgIFN0cmluZyB2
YWx1ZSA9IGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKCkubG93ZXIoKTsKLSAgICAgICAgICAgIGlm
ICh2YWx1ZSA9PSAic3JjIiB8fCB2YWx1ZSA9PSAibW92aWUiIHx8IHZhbHVlID09ICJkYXRhIikK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSFRNTFBhcmFtRWxlbWVudDo6c2V0TmFtZShjb25zdCBTdHJp
bmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwotfQotCi1T
dHJpbmcgSFRNTFBhcmFtRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBhcmFtRWxlbWVudDo6c2V0VHlwZShj
b25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUp
OwotfQotCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcg
SFRNTFBhcmFtRWxlbWVudDo6dmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHZhbHVldHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNldFZh
bHVlVHlwZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2YWx1ZXR5
cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IGh0bWwvSFRNTFBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaHRtbC9IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMTQyNTcpCisrKyBodG1sL0hU
TUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAi
aHRtbF9ibG9ja2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2hlYWRpbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbF9saXN0aW1wbC5oIgotI2luY2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5oIgogI2luY2x1ZGUg
Imh0bWxfdGFibGVpbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IGh0bWwvSFRN
TE5hbWVDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxOYW1lQ29sbGVjdGlv
bi5jcHAJKHJldmlzaW9uIDE0MjU3KQorKysgaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw5IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVDb2xsZWN0
aW9uLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgImh0bWxfb2JqZWN0aW1w
bC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3
LDcgKzQ4LDcgQEAgTm9kZSogSFRNTE5hbWVDb2xsZWN0aW9uOjp0cmF2ZXJzZU5leHRJdAogICAg
IHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkp
IHsKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIEVsZW1lbnQg
KmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50ICo+KGN1cnJlbnQpOworICAgICAgICAgICAgRWxlbWVu
dCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihjdXJyZW50KTsKICAgICAgICAgICAgIHN3aXRj
aCh0eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdJTkRPV19OQU1FRF9JVEVNUzoKICAgICAgICAg
ICAgICAgICAvLyBmaW5kIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgZW1iZWRzIGFuZCBv
YmplY3RzIGJ5IG5hbWUsIApAQCAtNzMsNyArNzQsNyBAQCBOb2RlKiBIVE1MTmFtZUNvbGxlY3Rp
b246OnRyYXZlcnNlTmV4dEl0CiAgICAgICAgICAgICAgICAgICAgICAgICBlLT5nZXRBdHRyaWJ1
dGUoaWRBdHRyKSA9PSBtX25hbWU7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzVGFn
TmFtZShvYmplY3RUYWcpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IChlLT5nZXRBdHRy
aWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSB8fCBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBt
X25hbWUpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0
RWxlbWVudCAqPihlKS0+aXNEb2NOYW1lZEl0ZW0oKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4oZSktPmlzRG9jTmFtZWRJdGVtKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIGFzc2VydCgwKTsKSW5kZXg6IGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBodG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDE0MjU3KQorKysg
aHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyNCArMjMs
MjcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3Rvcnku
aCIKIAorI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJhc2VG
b250RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MRW1iZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGVnZW5k
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE9wdEdyb3VwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTFBhcmFtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgImh0bWxfYmFzZWlt
cGwuaCIKICNpbmNsdWRlICJodG1sX2Jsb2NraW1wbC5oIgogI2luY2x1ZGUgImh0bWxfaGVhZGlt
cGwuaCIKICNpbmNsdWRlICJodG1sX2xpc3RpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbF9vYmplY3Rp
bXBsLmgiCiAjaW5jbHVkZSAiaHRtbF90YWJsZWltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9I
VE1MQXBwbGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE0MjU3KQorKysgaHRtbC9IVE1MQXBwbGV0
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEyNCArMjEsMTkgQEAKICAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJodG1sX29iamVjdGltcGwuaCIKKyNpbmNsdWRlICJIVE1MQXBwbGV0
RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTERvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJBcHBsZXQu
aCIKICNpbmNsdWRlICJSZW5kZXJFbXB0eUFwcGxldC5oIgotI2luY2x1ZGUgIlJlbmRlckltYWdl
LmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1ZGUgImNzc2hlbHBlci5oIgotI2luY2x1ZGUg
ImNzc3N0eWxlc2VsZWN0b3IuaCIKLSNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKLSNpbmNs
dWRlICJodG1sX2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgInJlbmRlcl9mcmFtZXMuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTFBsdWdJbkVs
ZW1lbnQ6OkhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCi17Ci19Ci0KLVN0
cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6c2V0QWxp
Z24oY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2
YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpOwotfQotCi12b2lkIEhUTUxQbHVn
SW5FbGVtZW50OjpzZXRIZWlnaHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUoaGVpZ2h0QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFBsdWdJbkVsZW1lbnQ6
Om5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwotfQot
Ci12b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKG5hbWVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MUGx1
Z0luRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUod2lk
dGhBdHRyKTsKLX0KLQotdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6c2V0V2lkdGgoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCB2YWx1ZSk7Ci19Ci0K
LWJvb2wgSFRNTFBsdWdJbkVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYg
KGF0dHJOYW1lID09IHdpZHRoQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoZWlnaHRBdHRy
IHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHZzcGFjZUF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUg
PT0gaHNwYWNlQXR0cikgewotICAgICAgICAgICAgcmVzdWx0ID0gZVVuaXZlcnNhbDsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGF0dHJOYW1lID09IGFs
aWduQXR0cikgewotICAgICAgICByZXN1bHQgPSBlUmVwbGFjZWQ7IC8vIFNoYXJlIHdpdGggPGlt
Zz4gc2luY2UgdGhlIGFsaWdubWVudCBiZWhhdmlvciBpcyB0aGUgc2FtZS4KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50
cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IHdpZHRoQXR0cikKLSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9Q
X1dJRFRILCBhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaGVp
Z2h0QXR0cikKLSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwgYXR0
ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZzcGFjZUF0dHIpIHsK
LSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9UT1AsIGF0dHItPnZh
bHVlKCkpOwotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0JPVFRP
TSwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHNwYWNl
QXR0cikgewotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xFRlQs
IGF0dHItPnZhbHVlKCkpOwotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFS
R0lOX1JJR0hULCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBhbGlnbkF0dHIpCi0gICAgICAgIGFkZEhUTUxBbGlnbm1lbnQoYXR0cik7Ci0gICAgZWxzZQot
ICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19ICAgIAot
Ci1ib29sIEhUTUxQbHVnSW5FbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkK
LXsKLSAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpIHx8IEhUTUxFbGVt
ZW50OjpjaGVja0RURChuZXdDaGlsZCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogSFRN
TEFwcGxldEVsZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KERvY3VtZW50ICpkb2MpCiA6IEhUTUxQ
bHVnSW5FbGVtZW50KGFwcGxldFRhZywgZG9jKQogLCBtX2FsbFBhcmFtc0F2YWlsYWJsZShmYWxz
ZSkKQEAgLTM1OSw2ODYgKzI1NCw0IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnNldFZzcGFj
ZShjb25zdCAKICAgICBzZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwgdmFsdWUpOwogfQogCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxFbWJlZEVsZW1lbnQ6OkhUTUxFbWJlZEVsZW1lbnQoRG9j
dW1lbnQgKmRvYykKLTogSFRNTFBsdWdJbkVsZW1lbnQoZW1iZWRUYWcsIGRvYykKLXsKLX0KLQot
SFRNTEVtYmVkRWxlbWVudDo6fkhUTUxFbWJlZEVsZW1lbnQoKQotewotI2lmIF9fQVBQTEVfXwot
ICAgIC8vIG1faW5zdGFuY2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwIGluIGRldGFjaCgp
LgotICAgIGFzc2VydCghbV9pbnN0YW5jZSk7Ci0jZW5kaWYKLX0KLQotI2lmIF9fQVBQTEVfXwot
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxFbWJlZEVsZW1lbnQ6OmdldEluc3RhbmNlKCkg
Y29uc3QKLXsKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlm
ICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAg
ICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgpOwotICAgIAotICAgIFJlbmRlck9iamVjdCAqciA9
IHJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyKSB7Ci0gICAgICAgIE5vZGUgKnAgPSBwYXJlbnROb2Rl
KCk7Ci0gICAgICAgIGlmIChwICYmIHAtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKLSAgICAgICAg
ICAgIHIgPSBwLT5yZW5kZXJlcigpOwotICAgIH0KLQotICAgIGlmIChyICYmIHItPmlzV2lkZ2V0
KCkpewotICAgICAgICBpZiAoV2lkZ2V0ICp3aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRn
ZXQgKj4ociktPndpZGdldCgpKSB7Ci0gICAgICAgICAgICAvLyBDYWxsIGludG8gdGhlIGZyYW1l
IChhbmQgb3ZlciB0aGUgYnJpZGdlKSB0byBwdWxsIHRoZSBCaW5kaW5nczo6SW5zdGFuY2UKLSAg
ICAgICAgICAgIC8vIGZyb20gdGhlIGd1dHMgb2YgdGhlIEphdmEgVk0uCi0gICAgICAgICAgICBt
X2luc3RhbmNlID0gZnJhbWUtPmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQod2lkZ2V0KTsKLSAg
ICAgICAgICAgIC8vIEFwcGxldCBtYXkgc3BlY2lmaWVkIHdpdGggPGVtYmVkPiB0YWcuCi0gICAg
ICAgICAgICBpZiAoIW1faW5zdGFuY2UpCi0gICAgICAgICAgICAgICAgbV9pbnN0YW5jZSA9IGZy
YW1lLT5nZXRBcHBsZXRJbnN0YW5jZUZvcldpZGdldCh3aWRnZXQpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgpOwotfQotI2VuZGlmCi0KLWJvb2wgSFRNTEVt
YmVkRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0g
aGlkZGVuQXR0cikgewotICAgICAgICByZXN1bHQgPSBlVW5pdmVyc2FsOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gSFRNTFBsdWdJbkVsZW1lbnQ6
Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTEVtYmVkRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIERl
cHJlY2F0ZWRTdHJpbmcgdmFsID0gYXR0ci0+dmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0g
IAotICAgIGludCBwb3M7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikgewotICAg
ICAgICBzZXJ2aWNlVHlwZSA9IHZhbC5sb3dlcigpOwotICAgICAgICBwb3MgPSBzZXJ2aWNlVHlw
ZS5maW5kKCAiOyIgKTsKLSAgICAgICAgaWYgKCBwb3MhPS0xICkKLSAgICAgICAgICAgIHNlcnZp
Y2VUeXBlID0gc2VydmljZVR5cGUubGVmdCggcG9zICk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gY29kZUF0dHIgfHwKLSAgICAgICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSBzcmNB
dHRyKSB7Ci0gICAgICAgICB1cmwgPSBXZWJDb3JlOjpwYXJzZVVSTChhdHRyLT52YWx1ZSgpKS5k
ZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcGx1Z2lu
cGFnZUF0dHIgfHwKLSAgICAgICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSBwbHVnaW5zcGFnZUF0
dHIpIHsKLSAgICAgICAgcGx1Z2luUGFnZSA9IHZhbDsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBoaWRkZW5BdHRyKSB7Ci0gICAgICAgIGlmICh2YWwubG93ZXIoKT09InllcyIgfHwg
dmFsLmxvd2VyKCk9PSJ0cnVlIikgewotICAgICAgICAgICAgLy8gRklYTUU6IE5vdCBkeW5hbWlj
LCBidXQgaXQncyBub3QgcmVhbGx5IGltcG9ydGFudCB0aGF0IHN1Y2ggYSByYXJlbHktdXNlZAot
ICAgICAgICAgICAgLy8gZmVhdHVyZSB3b3JrIGR5bmFtaWNhbGx5LgotICAgICAgICAgICAgYWRk
Q1NTTGVuZ3RoKCBhdHRyLCBDU1NfUFJPUF9XSURUSCwgIjAiICk7Ci0gICAgICAgICAgICBhZGRD
U1NMZW5ndGgoIGF0dHIsIENTU19QUk9QX0hFSUdIVCwgIjAiICk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgewotICAgICAgICBTdHJpbmcgbmV3
TmFtZUF0dHIgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmIGRv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEhUTUxEb2N1bWVudCAq
ZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAgICAgICAg
ICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICAgICAgZG9jLT5h
ZGROYW1lZEl0ZW0obmV3TmFtZUF0dHIpOwotICAgICAgICB9Ci0gICAgICAgIG9sZE5hbWVBdHRy
ID0gbmV3TmFtZUF0dHI7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotYm9vbCBIVE1MRW1iZWRFbGVtZW50Ojpy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBGcmFtZSAqZnJhbWUg
PSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5wbHVnaW5z
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOb2RlICpwID0gcGFyZW50
Tm9kZSgpOwotICAgIGlmIChwICYmIHAtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkgewotICAgICAg
ICBhc3NlcnQocC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVuZGVyT2JqZWN0ICpIVE1MRW1iZWRFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKLXsK
LSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyUGFydE9iamVjdCh0aGlzKTsKLX0KLQotdm9p
ZCBIVE1MRW1iZWRFbGVtZW50OjphdHRhY2goKQotewotICAgIEhUTUxQbHVnSW5FbGVtZW50Ojph
dHRhY2goKTsKLQotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJQYXJ0T2JqZWN0Kj4ocmVuZGVyZXIoKSktPnVwZGF0ZVdpZGdldCgpOwotfQotCi12b2lkIEhU
TUxFbWJlZEVsZW1lbnQ6OmRldGFjaCgpCi17Ci0jaWYgX19BUFBMRV9fCi0gICAgbV9pbnN0YW5j
ZSA9IDA7Ci0jZW5kaWYKLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0YWNoKCk7Ci19Ci0KLXZv
aWQgSFRNTEVtYmVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQotewotICAgIGlmIChk
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIEhUTUxEb2N1bWVudCAqZG9j
ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAgICAgICBkb2Mt
PmFkZE5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0gICAgfQotCi0gICAgSFRNTFBsdWdJbkVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci19Ci0KLXZvaWQgSFRNTEVtYmVkRWxlbWVudDo6
cmVtb3ZlZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9j
dW1lbnQgKj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5h
bWVBdHRyKTsKLSAgICB9Ci0KLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwotfQotCi1ib29sIEhUTUxFbWJlZEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJp
YnV0ZSAqYXR0cikgY29uc3QKLXsKLSAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IHNyY0F0dHI7
Ci19Ci0KLVN0cmluZyBIVE1MRW1iZWRFbGVtZW50OjpzcmMoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoc3JjQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEVtYmVkRWxlbWVudDo6c2V0
U3JjKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHZh
bHVlKTsKLX0KLQotU3RyaW5nIEhUTUxFbWJlZEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxFbWJlZEVsZW1l
bnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlw
ZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MT2JqZWN0RWxl
bWVudDo6SFRNTE9iamVjdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykgCi06IEhUTUxQbHVnSW5FbGVt
ZW50KG9iamVjdFRhZywgZG9jKQotLCBtX2ltYWdlTG9hZGVyKDApCi17Ci0gICAgbmVlZFdpZGdl
dFVwZGF0ZSA9IGZhbHNlOwotICAgIG1fdXNlRmFsbGJhY2tDb250ZW50ID0gZmFsc2U7Ci0gICAg
bV9jb21wbGV0ZSA9IGZhbHNlOwotICAgIG1fZG9jTmFtZWRJdGVtID0gdHJ1ZTsKLX0KLQotSFRN
TE9iamVjdEVsZW1lbnQ6On5IVE1MT2JqZWN0RWxlbWVudCgpCi17Ci0jaWYgX19BUFBMRV9fCi0g
ICAgLy8gbV9pbnN0YW5jZSBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgaW4gZGV0YWNoKCku
Ci0gICAgYXNzZXJ0KCFtX2luc3RhbmNlKTsKLSNlbmRpZgotICAgIAotICAgIGRlbGV0ZSBtX2lt
YWdlTG9hZGVyOwotfQotCi0jaWYgX19BUFBMRV9fCi1LSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAq
SFRNTE9iamVjdEVsZW1lbnQ6OmdldEluc3RhbmNlKCkgY29uc3QKLXsKLSAgICBGcmFtZSAqZnJh
bWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAgIHJldHVybiBtX2luc3RhbmNlLmdl
dCgpOwotCi0gICAgaWYgKFJlbmRlck9iamVjdCAqciA9IHJlbmRlcmVyKCkpIHsKLSAgICAgICAg
aWYgKHItPmlzV2lkZ2V0KCkpIHsKLSAgICAgICAgICAgIGlmIChXaWRnZXQgKndpZGdldCA9IHN0
YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihyKS0+d2lkZ2V0KCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBDYWxsIGludG8gdGhlIGZyYW1lIChhbmQgb3ZlciB0aGUgYnJpZGdlKSB0byBwdWxsIHRo
ZSBCaW5kaW5nczo6SW5zdGFuY2UKLSAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBndXRzIG9m
IHRoZSBwbHVnaW4uCi0gICAgICAgICAgICAgICAgbV9pbnN0YW5jZSA9IGZyYW1lLT5nZXRPYmpl
Y3RJbnN0YW5jZUZvcldpZGdldCh3aWRnZXQpOwotICAgICAgICAgICAgICAgIC8vIEFwcGxldCBt
YXkgc3BlY2lmaWVkIHdpdGggPG9iamVjdD4gdGFnLgotICAgICAgICAgICAgICAgIGlmICghbV9p
bnN0YW5jZSkKLSAgICAgICAgICAgICAgICAgICAgbV9pbnN0YW5jZSA9IGZyYW1lLT5nZXRBcHBs
ZXRJbnN0YW5jZUZvcldpZGdldCh3aWRnZXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7Ci19Ci0jZW5kaWYKLQotSFRNTEZv
cm1FbGVtZW50ICpIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybSgpIGNvbnN0Ci17Ci0gICAgZm9yIChO
b2RlICpwID0gcGFyZW50Tm9kZSgpOyBwICE9IDA7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsKLSAg
ICAgICAgaWYgKHAtPmhhc1RhZ05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50ICo+KHApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
MDsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQotewotICAgIFN0cmluZyB2YWwgPSBhdHRyLT52YWx1ZSgpOwot
ICAgIGludCBwb3M7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikgewotICAgICAg
ICBzZXJ2aWNlVHlwZSA9IHZhbC5kZXByZWNhdGVkU3RyaW5nKCkubG93ZXIoKTsKLSAgICAgICAg
cG9zID0gc2VydmljZVR5cGUuZmluZCggIjsiICk7Ci0gICAgICAgIGlmICggcG9zIT0tMSApCi0g
ICAgICAgICAgc2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KCBwb3MgKTsKLSAgICAgICAg
aWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IHRydWU7Ci0gICAg
ICAgIGlmICghaXNJbWFnZVR5cGUoKSAmJiBtX2ltYWdlTG9hZGVyKSB7Ci0gICAgICAgICAgZGVs
ZXRlIG1faW1hZ2VMb2FkZXI7Ci0gICAgICAgICAgbV9pbWFnZUxvYWRlciA9IDA7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkYXRhQXR0cikgewotICAgICAgICB1
cmwgPSBXZWJDb3JlOjpwYXJzZVVSTCh2YWwpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAg
aWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IHRydWU7Ci0gICAg
ICAgIGlmIChyZW5kZXJlcigpICYmIGlzSW1hZ2VUeXBlKCkpIHsKLSAgICAgICAgICBpZiAoIW1f
aW1hZ2VMb2FkZXIpCi0gICAgICAgICAgICAgIG1faW1hZ2VMb2FkZXIgPSBuZXcgSFRNTEltYWdl
TG9hZGVyKHRoaXMpOwotICAgICAgICAgIG1faW1hZ2VMb2FkZXItPnVwZGF0ZUZyb21FbGVtZW50
KCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjbGFzc2lkQXR0
cikgewotICAgICAgICBjbGFzc0lkID0gdmFsOwotICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAg
ICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGxvYWRF
dmVudCwgYXR0cik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb251bmxvYWRBdHRy
KSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHVubG9hZEV2ZW50LCBhdHRyKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgewotICAgICAgICAgICAgU3Ry
aW5nIG5ld05hbWVBdHRyID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChpc0RvY05h
bWVkSXRlbSgpICYmIGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1M
RG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgZG9jLT5yZW1vdmVOYW1l
ZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG5l
d05hbWVBdHRyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9sZE5hbWVBdHRyID0gbmV3
TmFtZUF0dHI7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7Ci0gICAg
ICAgIFN0cmluZyBuZXdJZEF0dHIgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAoaXNEb2NO
YW1lZEl0ZW0oKSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQo
KSkgewotICAgICAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9j
dW1lbnQgKj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBkb2MtPnJlbW92ZURvY0V4dHJhTmFt
ZWRJdGVtKG9sZElkQXR0cik7Ci0gICAgICAgICAgICBkb2MtPmFkZERvY0V4dHJhTmFtZWRJdGVt
KG5ld0lkQXR0cik7Ci0gICAgICAgIH0KLSAgICAgICAgb2xkSWRBdHRyID0gbmV3SWRBdHRyOwot
ICAgICAgICAvLyBhbHNvIGNhbGwgc3VwZXJjbGFzcwotICAgICAgICBIVE1MUGx1Z0luRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxQ
bHVnSW5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotRG9jdW1lbnQq
IEhUTUxPYmplY3RFbGVtZW50Ojpjb250ZW50RG9jdW1lbnQoKSBjb25zdAotewotICAgIC8vICMj
IwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBpZiAobV91c2VGYWxsYmFja0NvbnRl
bnQgfHwgaXNJbWFnZVR5cGUoKSkKLSAgICAgICAgcmV0dXJuIEhUTUxQbHVnSW5FbGVtZW50Ojpy
ZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsKLQotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCkt
PmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnBsdWdpbnNFbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVuZGVy
T2JqZWN0ICpIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFy
ZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgaWYgKG1fdXNlRmFsbGJhY2tDb250ZW50
KQotICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QodGhpcywgc3R5bGUp
OwotICAgIGlmIChpc0ltYWdlVHlwZSgpKQotICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVu
ZGVySW1hZ2UodGhpcyk7Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclBhcnRPYmplY3Qo
dGhpcyk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmF0dGFjaCgpCi17Ci0gICAgSFRN
TFBsdWdJbkVsZW1lbnQ6OmF0dGFjaCgpOwotCi0gICAgaWYgKHJlbmRlcmVyKCkgJiYgIW1fdXNl
RmFsbGJhY2tDb250ZW50KSB7Ci0gICAgICAgIGlmIChpc0ltYWdlVHlwZSgpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1faW1hZ2VMb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9pbWFnZUxvYWRlciA9
IG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcyk7Ci0gICAgICAgICAgICBtX2ltYWdlTG9hZGVyLT51
cGRhdGVGcm9tRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgICAgICAgICBSZW5kZXJJbWFnZSogaW1hZ2VPYmogPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFn
ZSo+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIGltYWdlT2JqLT5zZXRDYWNoZWRJbWFn
ZShtX2ltYWdlTG9hZGVyLT5pbWFnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChuZWVkV2lkZ2V0VXBkYXRlKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gU2V0IG5lZWRXaWRnZXRVcGRhdGUgdG8gZmFsc2UgYmVmb3JlIGNhbGxpbmcgdXBkYXRlV2lk
Z2V0IGJlY2F1c2UgdXBkYXRlV2lkZ2V0IG1heSBjYXVzZQotICAgICAgICAgICAgICAgIC8vIHRo
aXMgbWV0aG9kIG9yIHJlY2FsY1N0eWxlICh3aGljaCBhbHNvIGNhbGxzIHVwZGF0ZVdpZGdldCkg
dG8gYmUgY2FsbGVkLgotICAgICAgICAgICAgICAgIG5lZWRXaWRnZXRVcGRhdGUgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0Kj4ocmVuZGVyZXIo
KSktPnVwZGF0ZVdpZGdldCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQotewotICAgIC8vIFRoZSBwYXJzZXIganVzdCByZWFjaGVk
IDwvb2JqZWN0Pi4KLSAgICBzZXRDb21wbGV0ZSh0cnVlKTsKLSAgICAKLSAgICBIVE1MUGx1Z0lu
RWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50Ojpz
ZXRDb21wbGV0ZShib29sIGNvbXBsZXRlKQotewotICAgIGlmIChjb21wbGV0ZSAhPSBtX2NvbXBs
ZXRlKSB7Ci0gICAgICAgIG1fY29tcGxldGUgPSBjb21wbGV0ZTsKLSAgICAgICAgaWYgKGNvbXBs
ZXRlICYmICFtX3VzZUZhbGxiYWNrQ29udGVudCkgewotICAgICAgICAgICAgbmVlZFdpZGdldFVw
ZGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQotICAgICAgICAgICAg
ICAgIHNldENoYW5nZWQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBIVE1MT2JqZWN0
RWxlbWVudDo6ZGV0YWNoKCkKLXsKLSAgICBpZiAoYXR0YWNoZWQoKSAmJiByZW5kZXJlcigpICYm
ICFtX3VzZUZhbGxiYWNrQ29udGVudCkgewotICAgICAgICAvLyBVcGRhdGUgdGhlIHdpZGdldCB0
aGUgbmV4dCB0aW1lIHdlIGF0dGFjaCAoZGV0YWNoaW5nIGRlc3Ryb3lzIHRoZSBwbHVnaW4pLgot
ICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBfX0FQUExFX18K
LSAgICBtX2luc3RhbmNlID0gMDsKLSNlbmRpZgotICAgIEhUTUxQbHVnSW5FbGVtZW50OjpkZXRh
Y2goKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KQotewotICAgIGlmIChpc0RvY05hbWVkSXRlbSgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9j
dW1lbnQgKj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9sZE5hbWVB
dHRyKTsKLSAgICAgICAgZG9jLT5hZGREb2NFeHRyYU5hbWVkSXRlbShvbGRJZEF0dHIpOwotICAg
IH0KLQotICAgIEhUTUxQbHVnSW5FbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotfQot
Ci12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsKLSAgICBp
ZiAoaXNEb2NOYW1lZEl0ZW0oKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0g
ICAgICAgIEhUTUxEb2N1bWVudCAqZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRv
Y3VtZW50KCkpOwotICAgICAgICBkb2MtPnJlbW92ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0g
ICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICB9Ci0K
LSAgICBIVE1MUGx1Z0luRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotfQotCi12b2lk
IEhUTUxPYmplY3RFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaCkKLXsKLSAgICBp
ZiAoIW1fdXNlRmFsbGJhY2tDb250ZW50ICYmIG5lZWRXaWRnZXRVcGRhdGUgJiYgcmVuZGVyZXIo
KSAmJiAhaXNJbWFnZVR5cGUoKSkgewotICAgICAgICBkZXRhY2goKTsKLSAgICAgICAgYXR0YWNo
KCk7Ci0gICAgfQotICAgIEhUTUxQbHVnSW5FbGVtZW50OjpyZWNhbGNTdHlsZShjaCk7Ci19Ci0K
LXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgdXBkYXRl
RG9jTmFtZWRJdGVtKCk7Ci0gICAgaWYgKGluRG9jdW1lbnQoKSAmJiAhbV91c2VGYWxsYmFja0Nv
bnRlbnQpIHsKLSAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IHRydWU7Ci0gICAgICAgIHNldENo
YW5nZWQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmlzVVJMQXR0cmli
dXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKLXsKLSAgICByZXR1cm4gKGF0dHItPm5hbWUoKSA9
PSBkYXRhQXR0ciB8fCAoYXR0ci0+bmFtZSgpID09IHVzZW1hcEF0dHIgJiYgYXR0ci0+dmFsdWUo
KS5kb21TdHJpbmcoKVswXSAhPSAnIycpKTsKLX0KLQotYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6
aXNJbWFnZVR5cGUoKQotewotICAgIGlmIChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgJiYgdXJsLnN0
YXJ0c1dpdGgoImRhdGE6IikpIHsKLSAgICAgICAgLy8gRXh0cmFjdCB0aGUgTUlNRSB0eXBlIGZy
b20gdGhlIGRhdGEgVVJMLgotICAgICAgICBpbnQgaW5kZXggPSB1cmwuZmluZCgnOycpOwotICAg
ICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICAgICAgICBpbmRleCA9IHVybC5maW5kKCcsJyk7
Ci0gICAgICAgIGlmIChpbmRleCAhPSAtMSkgewotICAgICAgICAgICAgaW50IGxlbiA9IGluZGV4
IC0gNTsKLSAgICAgICAgICAgIGlmIChsZW4gPiAwKQotICAgICAgICAgICAgICAgIHNlcnZpY2VU
eXBlID0gdXJsLm1pZCg1LCBsZW4pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHNlcnZpY2VUeXBlID0gInRleHQvcGxhaW4iOyAvLyBEYXRhIFVSTHMgd2l0aCBubyBNSU1FIHR5
cGUgYXJlIGNvbnNpZGVyZWQgdGV4dC9wbGFpbi4KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gSW1hZ2U6OnN1cHBvcnRzVHlwZShzZXJ2aWNlVHlwZSk7Ci19Ci0KLXZvaWQgSFRN
TE9iamVjdEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ29udGVudCgpCi17Ci0gICAgaWYgKG1fdXNl
RmFsbGJhY2tDb250ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIG91cnNlbHZl
cyBhcyB1c2luZyB0aGUgZmFsbGJhY2sgY29udGVudC4KLSAgICBtX3VzZUZhbGxiYWNrQ29udGVu
dCA9IHRydWU7Ci0KLSAgICAvLyBOb3cgZG8gYSBkZXRhY2ggYW5kIHJlYXR0YWNoLiAgICAKLSAg
ICAvLyBGSVhNRTogU3R5bGUgZ2V0cyByZWNhbGN1bGF0ZWQgd2hpY2ggaXMgc3Vib3B0aW1hbC4K
LSAgICBkZXRhY2goKTsKLSAgICBhdHRhY2goKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVu
dDo6dXBkYXRlRG9jTmFtZWRJdGVtKCkKLXsKLSAgICAvLyBUaGUgcnVsZSBpcyAiPG9iamVjdD4g
ZWxlbWVudHMgd2l0aCBubyBjaGlsZHJlbiBvdGhlciB0aGFuCi0gICAgLy8gPHBhcmFtPiBlbGVt
ZW50cyBhbmQgd2hpdGVzcGFjZSBjYW4gYmUgZm91bmQgYnkgbmFtZSBpbiBhCi0gICAgLy8gZG9j
dW1lbnQsIGFuZCBvdGhlciA8b2JqZWN0PiBlbGVtZW50cyBjYW5ub3QuIgotICAgIGJvb2wgd2Fz
TmFtZWRJdGVtID0gbV9kb2NOYW1lZEl0ZW07Ci0gICAgYm9vbCBpc05hbWVkSXRlbSA9IHRydWU7
Ci0gICAgTm9kZSAqY2hpbGQgPSBmaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxkICYmIGlz
TmFtZWRJdGVtKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIXN0YXRpY19jYXN0PEVsZW1lbnQgKj4oY2hpbGQpLT5oYXNUYWdOYW1lKHBh
cmFtVGFnKSkKLSAgICAgICAgICAgICAgICBpc05hbWVkSXRlbSA9IGZhbHNlOwotICAgICAgICB9
IGVsc2UgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmICghc3RhdGlj
X2Nhc3Q8VGV4dCAqPihjaGlsZCktPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKLSAgICAgICAg
ICAgICAgICBpc05hbWVkSXRlbSA9IGZhbHNlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGlzTmFtZWRJdGVtID0gZmFsc2U7Ci0gICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCk7Ci0gICAgfQotICAgIGlmIChpc05hbWVkSXRlbSAhPSB3YXNOYW1lZEl0ZW0gJiYgZG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0
YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgaWYgKGlzTmFt
ZWRJdGVtKSB7Ci0gICAgICAgICAgICBkb2MtPmFkZE5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0g
ICAgICAgICAgICBkb2MtPmFkZERvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBkb2MtPnJlbW92ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7
Ci0gICAgICAgICAgICBkb2MtPnJlbW92ZURvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgbV9kb2NOYW1lZEl0ZW0gPSBpc05hbWVkSXRlbTsKLX0KLQot
U3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojpjb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGNvZGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29k
ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjb2RlQXR0ciwgdmFs
dWUpOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmFyY2hpdmUoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmpl
Y3RFbGVtZW50OjpzZXRBcmNoaXZlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKGFyY2hpdmVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVu
dDo6Ym9yZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJvcmRlckF0dHIp
OwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRCb3JkZXIoY29uc3QgU3RyaW5nICZ2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYm9yZGVyQXR0ciwgdmFsdWUpOwotfQotCi1TdHJp
bmcgSFRNTE9iamVjdEVsZW1lbnQ6OmNvZGVCYXNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGNvZGViYXNlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNl
dENvZGVCYXNlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGVi
YXNlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmNvZGVUeXBl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNvZGV0eXBlQXR0cik7Ci19Ci0K
LXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldENvZGVUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGV0eXBlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcg
SFRNTE9iamVjdEVsZW1lbnQ6OmRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoZGF0YUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXREYXRhKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGRhdGFBdHRyLCB2YWx1ZSk7Ci19
Ci0KLWJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmRlY2xhcmUoKSBjb25zdAotewotICAgIHJldHVy
biAhZ2V0QXR0cmlidXRlKGRlY2xhcmVBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MT2Jq
ZWN0RWxlbWVudDo6c2V0RGVjbGFyZShib29sIGRlY2xhcmUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGRlY2xhcmVBdHRyLCBkZWNsYXJlID8gIiIgOiAwKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RF
bGVtZW50Ojpoc3BhY2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoaHNwYWNl
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEhzcGFjZShjb25zdCBTdHJp
bmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6c3RhbmRieSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShzdGFuZGJ5QXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6
OnNldFN0YW5kYnkoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc3Rh
bmRieUF0dHIsIHZhbHVlKTsKLX0KLQotaW50IEhUTUxPYmplY3RFbGVtZW50Ojp0YWJJbmRleCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIpLnRvSW50KCk7
Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldFRhYkluZGV4KGludCB0YWJJbmRleCkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJpbmc6Om51bWJlcih0YWJJbmRl
eCkpOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVt
ZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5
cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6dXNlTWFwKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpOwotfQotCi12b2lk
IEhUTUxPYmplY3RFbGVtZW50OjpzZXRVc2VNYXAoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUodXNlbWFwQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE9iamVj
dEVsZW1lbnQ6OnZzcGFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2c3Bh
Y2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VnNwYWNlKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIHZhbHVlKTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MUGFyYW1FbGVtZW50OjpIVE1MUGFyYW1FbGVt
ZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChwYXJhbVRhZywgZG9jKQotewot
fQotCi1IVE1MUGFyYW1FbGVtZW50Ojp+SFRNTFBhcmFtRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQg
SFRNTFBhcmFtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7Ci0gICAgICAgIC8vIE11
c3QgY2FsbCBiYXNlIGNsYXNzIHNvIHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgotICAgICAgICBI
VE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgICAgIGlmIChkb2N1
bWVudCgpLT5odG1sTW9kZSgpICE9IERvY3VtZW50OjpYSHRtbCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBuYW1lQXR0cikgewotICAgICAgICBtX25hbWUgPSBhdHRyLT52YWx1ZSgpOwot
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgewotICAgICAgICBtX3Zh
bHVlID0gYXR0ci0+dmFsdWUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1ib29sIEhUTUxQYXJhbUVsZW1lbnQ6Omlz
VVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKLXsKLSAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IHZhbHVlQXR0cikgewotICAgICAgICBBdHRyaWJ1dGUgKmF0dHIgPSBhdHRyaWJ1dGVz
KCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZUF0dHIpOwotICAgICAgICBpZiAoYXR0cikgewotICAg
ICAgICAgICAgU3RyaW5nIHZhbHVlID0gYXR0ci0+dmFsdWUoKS5kb21TdHJpbmcoKS5sb3dlcigp
OwotICAgICAgICAgICAgaWYgKHZhbHVlID09ICJzcmMiIHx8IHZhbHVlID09ICJtb3ZpZSIgfHwg
dmFsdWUgPT0gImRhdGEiKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBIVE1MUGFyYW1FbGVtZW50Ojpz
ZXROYW1lKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG5hbWVBdHRy
LCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MUGFyYW1FbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MUGFyYW1F
bGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgSFRNTFBhcmFtRWxlbWVudDo6c2V0VmFsdWUo
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MUGFyYW1FbGVtZW50Ojp2YWx1ZVR5cGUoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodmFsdWV0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBh
cmFtRWxlbWVudDo6c2V0VmFsdWVUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKHZhbHVldHlwZUF0dHIsIHZhbHVlKTsKLX0KLQogfQpJbmRleDogaHRtbC9odG1s
X29iamVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAko
cmV2aXNpb24gMTQyNTcpCisrKyBodG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTA0NCArMCwwIEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBE
T00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBTdGVmYW4gU2No
aW1hbnNraSAoMVN0ZWluQGdteC5kZSkKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sX29i
amVjdGltcGwuaCIKLQotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgotI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyQXBwbGV0
LmgiCi0jaW5jbHVkZSAiUmVuZGVyRW1wdHlBcHBsZXQuaCIKLSNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgotI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJjc3NoZWxwZXIuaCIKLSNpbmNsdWRl
ICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5j
bHVkZSAiaHRtbF9pbWFnZWltcGwuaCIKLSNpbmNsdWRlICJyZW5kZXJfZnJhbWVzLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci11c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxQbHVnSW5F
bGVtZW50OjpIVE1MUGx1Z0luRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQotewotfQotCi1T
dHJpbmcgSFRNTFBsdWdJbkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldEFs
aWduKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwg
dmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFBsdWdJbkVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MUGx1
Z0luRWxlbWVudDo6c2V0SGVpZ2h0KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKGhlaWdodEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50
OjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLX0K
LQotdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFBs
dWdJbkVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHdp
ZHRoQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldFdpZHRoKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgdmFsdWUpOwotfQot
Ci1ib29sIEhUTUxQbHVnSW5FbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlm
IChhdHRyTmFtZSA9PSB3aWR0aEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gaGVpZ2h0QXR0
ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSB2c3BhY2VBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1l
ID09IGhzcGFjZUF0dHIpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGVVbml2ZXJzYWw7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlmIChhdHRyTmFtZSA9PSBh
bGlnbkF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZVJlcGxhY2VkOyAvLyBTaGFyZSB3aXRoIDxp
bWc+IHNpbmNlIHRoZSBhbGlnbm1lbnQgYmVoYXZpb3IgaXMgdGhlIHNhbWUuCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0Vu
dHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCi17Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSB3aWR0aEF0dHIpCi0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJP
UF9XSURUSCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhl
aWdodEF0dHIpCi0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIGF0
dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2c3BhY2VBdHRyKSB7
Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fVE9QLCBhdHRyLT52
YWx1ZSgpKTsKLSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9CT1RU
T00sIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhzcGFj
ZUF0dHIpIHsKLSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZU
LCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01B
UkdJTl9SSUdIVCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gYWxpZ25BdHRyKQotICAgICAgICBhZGRIVE1MQWxpZ25tZW50KGF0dHIpOwotICAgIGVsc2UK
LSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfSAgICAK
LQotYm9vbCBIVE1MUGx1Z0luRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQp
Ci17Ci0gICAgcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSB8fCBIVE1MRWxl
bWVudDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhU
TUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChEb2N1bWVudCAqZG9jKQotOiBIVE1M
UGx1Z0luRWxlbWVudChhcHBsZXRUYWcsIGRvYykKLSwgbV9hbGxQYXJhbXNBdmFpbGFibGUoZmFs
c2UpCi17Ci19Ci0KLUhUTUxBcHBsZXRFbGVtZW50Ojp+SFRNTEFwcGxldEVsZW1lbnQoKQotewot
I2lmIF9fQVBQTEVfXwotICAgIC8vIG1faW5zdGFuY2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVk
IHVwIGluIGRldGFjaCgpLgotICAgIGFzc2VydCghbV9pbnN0YW5jZSk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0ciB8fAotICAgICAg
ICBhdHRyLT5uYW1lKCkgPT0gYXJjaGl2ZUF0dHIgfHwKLSAgICAgICAgYXR0ci0+bmFtZSgpID09
IGNvZGVBdHRyIHx8Ci0gICAgICAgIGF0dHItPm5hbWUoKSA9PSBjb2RlYmFzZUF0dHIgfHwKLSAg
ICAgICAgYXR0ci0+bmFtZSgpID09IG1heXNjcmlwdEF0dHIgfHwKLSAgICAgICAgYXR0ci0+bmFt
ZSgpID09IG9iamVjdEF0dHIpIHsKLSAgICAgICAgLy8gRG8gbm90aGluZy4KLSAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgewotICAgICAgICBTdHJpbmcgbmV3TmFtZUF0
dHIgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50
KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEhUTUxEb2N1bWVudCAqZG9jID0g
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAgICAgICAgICAgZG9j
LT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICAgICAgZG9jLT5hZGROYW1l
ZEl0ZW0obmV3TmFtZUF0dHIpOwotICAgICAgICB9Ci0gICAgICAgIG9sZE5hbWVBdHRyID0gbmV3
TmFtZUF0dHI7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7Ci0gICAg
ICAgIFN0cmluZyBuZXdJZEF0dHIgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAoaW5Eb2N1
bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEhU
TUxEb2N1bWVudCAqZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkp
OwotICAgICAgICAgICAgZG9jLT5yZW1vdmVEb2NFeHRyYU5hbWVkSXRlbShvbGRJZEF0dHIpOwot
ICAgICAgICAgICAgZG9jLT5hZGREb2NFeHRyYU5hbWVkSXRlbShuZXdJZEF0dHIpOwotICAgICAg
ICB9Ci0gICAgICAgIG9sZElkQXR0ciA9IG5ld0lkQXR0cjsKLSAgICAgICAgLy8gYWxzbyBjYWxs
IHN1cGVyY2xhc3MKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MUGx1Z0luRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQo
KSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIp
OwotICAgICAgICBkb2MtPmFkZERvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7Ci0gICAgfQot
Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci19Ci0KLXZv
aWQgSFRNTEFwcGxldEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIGlmIChk
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIEhUTUxEb2N1bWVudCAqZG9j
ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAgICAgICBkb2Mt
PnJlbW92ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0gICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0
cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICB9Ci0KLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6
cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotfQotCi1ib29sIEhUTUxBcHBsZXRFbGVtZW50OjpyZW5k
ZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICByZXR1cm4gIWdldEF0dHJp
YnV0ZShjb2RlQXR0cikuaXNOdWxsKCk7Ci19Ci0KLVJlbmRlck9iamVjdCAqSFRNTEFwcGxldEVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0
eWxlKQotewotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0KLSAgICBp
ZiAoZnJhbWUgJiYgZnJhbWUtPmphdmFFbmFibGVkKCkpIHsKLSAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gYXJnczsKLQotICAgICAgICBhcmdzLnNldCgiY29kZSIsIGdldEF0dHJpYnV0
ZShjb2RlQXR0cikpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvZGVCYXNlID0gZ2V0
QXR0cmlidXRlKGNvZGViYXNlQXR0cik7Ci0gICAgICAgIGlmKCFjb2RlQmFzZS5pc051bGwoKSkK
LSAgICAgICAgICAgIGFyZ3Muc2V0KCJjb2RlQmFzZSIsIGNvZGVCYXNlKTsKLSAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZ2V0QXR0cmlidXRlKGRvY3VtZW50KCktPmh0bWxNb2Rl
KCkgIT0gRG9jdW1lbnQ6OlhIdG1sID8gbmFtZUF0dHIgOiBpZEF0dHIpOwotICAgICAgICBpZiAo
IW5hbWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBhcmdzLnNldCgibmFtZSIsIG5hbWUpOwotICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyY2hpdmUgPSBnZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0
dHIpOwotICAgICAgICBpZiAoIWFyY2hpdmUuaXNOdWxsKCkpCi0gICAgICAgICAgICBhcmdzLnNl
dCgiYXJjaGl2ZSIsIGFyY2hpdmUpOwotCi0gICAgICAgIGFyZ3Muc2V0KCJiYXNlVVJMIiwgZG9j
dW1lbnQoKS0+YmFzZVVSTCgpKTsKLQotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1heVNj
cmlwdCA9IGdldEF0dHJpYnV0ZShtYXlzY3JpcHRBdHRyKTsKLSAgICAgICAgaWYgKCFtYXlTY3Jp
cHQuaXNOdWxsKCkpCi0gICAgICAgICAgICBhcmdzLnNldCgibWF5U2NyaXB0IiwgbWF5U2NyaXB0
KTsKLQotICAgICAgICAvLyBPdGhlciBhcmd1bWVudHMgKGZyb20gPFBBUkFNPiB0YWdzKSBhcmUg
YWRkZWQgbGF0ZXIuCi0gICAgICAgIAotICAgICAgICByZXR1cm4gbmV3IChkb2N1bWVudCgpLT5y
ZW5kZXJBcmVuYSgpKSBSZW5kZXJBcHBsZXQodGhpcywgYXJncyk7Ci0gICAgfQotCi0gICAgLy8g
IyMjIHJlbW92ZSBtZS4gd2Ugc2hvdWxkIG5ldmVyIHNob3cgYW4gZW1wdHkgYXBwbGV0LCBpbnN0
ZWFkCi0gICAgLy8gcmVuZGVyIHRoZSBhbHRlcm5hdGl2ZSBjb250ZW50IGdpdmVuIGJ5IHRoZSB3
ZWJwYWdlCi0gICAgcmV0dXJuIG5ldyAoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVy
RW1wdHlBcHBsZXQodGhpcyk7Ci19Ci0KLSNpZiBfX0FQUExFX18KLUtKUzo6QmluZGluZ3M6Oklu
c3RhbmNlICpIVE1MQXBwbGV0RWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAotewotICAgIEZy
YW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJh
bWUtPmphdmFFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1faW5zdGFu
Y2UpCi0gICAgICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgpOwotICAgIAotICAgIFJlbmRlckFw
cGxldCAqciA9IHN0YXRpY19jYXN0PFJlbmRlckFwcGxldCo+KHJlbmRlcmVyKCkpOwotICAgIGlm
IChyKSB7Ci0gICAgICAgIHItPmNyZWF0ZVdpZGdldElmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIGlm
IChyLT53aWRnZXQoKSkKLSAgICAgICAgICAgIC8vIENhbGwgaW50byB0aGUgZnJhbWUgKGFuZCBv
dmVyIHRoZSBicmlkZ2UpIHRvIHB1bGwgdGhlIEJpbmRpbmdzOjpJbnN0YW5jZQotICAgICAgICAg
ICAgLy8gZnJvbSB0aGUgZ3V0cyBvZiB0aGUgcGx1Z2luLgotICAgICAgICAgICAgbV9pbnN0YW5j
ZSA9IGZyYW1lLT5nZXRBcHBsZXRJbnN0YW5jZUZvcldpZGdldChyLT53aWRnZXQoKSk7Ci0gICAg
fQotICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgpOwotfQotI2VuZGlmCi0KLXZvaWQgSFRNTEFw
cGxldEVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQotewotICAgIC8vIFRoZSBwYXJzZXIganVzdCBy
ZWFjaGVkIDwvYXBwbGV0Piwgc28gYWxsIHRoZSBwYXJhbXMgYXJlIGF2YWlsYWJsZSBub3cuCi0g
ICAgbV9hbGxQYXJhbXNBdmFpbGFibGUgPSB0cnVlOwotICAgIGlmIChyZW5kZXJlcigpKQotICAg
ICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsgLy8gVGhpcyB3aWxsIGNhdXNl
IGl0IHRvIGNyZWF0ZSBpdHMgd2lkZ2V0ICYgdGhlIEphdmEgYXBwbGV0Ci0gICAgSFRNTFBsdWdJ
bkVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6
ZGV0YWNoKCkKLXsKLSNpZiBfX0FQUExFX18KLSAgICBtX2luc3RhbmNlID0gMDsKLSNlbmRpZgot
ICAgIEhUTUxQbHVnSW5FbGVtZW50OjpkZXRhY2goKTsKLX0KLQotYm9vbCBIVE1MQXBwbGV0RWxl
bWVudDo6YWxsUGFyYW1zQXZhaWxhYmxlKCkKLXsKLSAgICByZXR1cm4gbV9hbGxQYXJhbXNBdmFp
bGFibGU7Ci19Ci0KLVN0cmluZyBIVE1MQXBwbGV0RWxlbWVudDo6YWx0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVt
ZW50OjpzZXRBbHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWx0
QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OmFyY2hpdmUoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIpOwotfQotCi12b2lk
IEhUTUxBcHBsZXRFbGVtZW50OjpzZXRBcmNoaXZlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXBw
bGV0RWxlbWVudDo6Y29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb2Rl
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnNldENvZGUoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZUF0dHIsIHZhbHVlKTsKLX0KLQotU3Ry
aW5nIEhUTUxBcHBsZXRFbGVtZW50Ojpjb2RlQmFzZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShjb2RlYmFzZUF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50Ojpz
ZXRDb2RlQmFzZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjb2Rl
YmFzZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxBcHBsZXRFbGVtZW50Ojpoc3BhY2Uo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoaHNwYWNlQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTEFwcGxldEVsZW1lbnQ6OnNldEhzcGFjZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXBw
bGV0RWxlbWVudDo6b2JqZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG9i
amVjdEF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpzZXRPYmplY3QoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUob2JqZWN0QXR0ciwgdmFsdWUpOwot
fQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OnZzcGFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZSh2c3BhY2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVu
dDo6c2V0VnNwYWNlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZz
cGFjZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MRW1iZWRF
bGVtZW50OjpIVE1MRW1iZWRFbGVtZW50KERvY3VtZW50ICpkb2MpCi06IEhUTUxQbHVnSW5FbGVt
ZW50KGVtYmVkVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxFbWJlZEVsZW1lbnQ6On5IVE1MRW1iZWRF
bGVtZW50KCkKLXsKLSNpZiBfX0FQUExFX18KLSAgICAvLyBtX2luc3RhbmNlIHNob3VsZCBoYXZl
IGJlZW4gY2xlYW5lZCB1cCBpbiBkZXRhY2goKS4KLSAgICBhc3NlcnQoIW1faW5zdGFuY2UpOwot
I2VuZGlmCi19Ci0KLSNpZiBfX0FQUExFX18KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1M
RW1iZWRFbGVtZW50OjpnZXRJbnN0YW5jZSgpIGNvbnN0Ci17Ci0gICAgRnJhbWUgKmZyYW1lID0g
ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmIChtX2luc3RhbmNlKQotICAgICAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsK
LSAgICAKLSAgICBSZW5kZXJPYmplY3QgKnIgPSByZW5kZXJlcigpOwotICAgIGlmICghcikgewot
ICAgICAgICBOb2RlICpwID0gcGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAocCAmJiBwLT5oYXNU
YWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAgICByID0gcC0+cmVuZGVyZXIoKTsKLSAgICB9
Ci0KLSAgICBpZiAociAmJiByLT5pc1dpZGdldCgpKXsKLSAgICAgICAgaWYgKFdpZGdldCAqd2lk
Z2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+KHIpLT53aWRnZXQoKSkgewotICAgICAg
ICAgICAgLy8gQ2FsbCBpbnRvIHRoZSBmcmFtZSAoYW5kIG92ZXIgdGhlIGJyaWRnZSkgdG8gcHVs
bCB0aGUgQmluZGluZ3M6Okluc3RhbmNlCi0gICAgICAgICAgICAvLyBmcm9tIHRoZSBndXRzIG9m
IHRoZSBKYXZhIFZNLgotICAgICAgICAgICAgbV9pbnN0YW5jZSA9IGZyYW1lLT5nZXRFbWJlZElu
c3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAgICAgICAgICAvLyBBcHBsZXQgbWF5IHNwZWNp
ZmllZCB3aXRoIDxlbWJlZD4gdGFnLgotICAgICAgICAgICAgaWYgKCFtX2luc3RhbmNlKQotICAg
ICAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRn
ZXQod2lkZ2V0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQo
KTsKLX0KLSNlbmRpZgotCi1ib29sIEhUTUxFbWJlZEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IGhpZGRlbkF0dHIpIHsKLSAgICAgICAgcmVzdWx0
ID0gZVVuaXZlcnNhbDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAgICAgCi0g
ICAgcmV0dXJuIEhUTUxQbHVnSW5FbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQp
OwotfQotCi12b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHZhbCA9IGF0dHItPnZh
bHVlKCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAKLSAgICBpbnQgcG9zOwotICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgc2VydmljZVR5cGUgPSB2YWwubG93ZXIo
KTsKLSAgICAgICAgcG9zID0gc2VydmljZVR5cGUuZmluZCggIjsiICk7Ci0gICAgICAgIGlmICgg
cG9zIT0tMSApCi0gICAgICAgICAgICBzZXJ2aWNlVHlwZSA9IHNlcnZpY2VUeXBlLmxlZnQoIHBv
cyApOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvZGVBdHRyIHx8Ci0gICAgICAg
ICAgICAgICBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cikgewotICAgICAgICAgdXJsID0gV2ViQ29y
ZTo6cGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHBsdWdpbnBhZ2VBdHRyIHx8Ci0gICAgICAgICAgICAgICBh
dHRyLT5uYW1lKCkgPT0gcGx1Z2luc3BhZ2VBdHRyKSB7Ci0gICAgICAgIHBsdWdpblBhZ2UgPSB2
YWw7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaGlkZGVuQXR0cikgewotICAgICAg
ICBpZiAodmFsLmxvd2VyKCk9PSJ5ZXMiIHx8IHZhbC5sb3dlcigpPT0idHJ1ZSIpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBOb3QgZHluYW1pYywgYnV0IGl0J3Mgbm90IHJlYWxseSBpbXBvcnRh
bnQgdGhhdCBzdWNoIGEgcmFyZWx5LXVzZWQKLSAgICAgICAgICAgIC8vIGZlYXR1cmUgd29yayBk
eW5hbWljYWxseS4KLSAgICAgICAgICAgIGFkZENTU0xlbmd0aCggYXR0ciwgQ1NTX1BST1BfV0lE
VEgsICIwIiApOwotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKCBhdHRyLCBDU1NfUFJPUF9IRUlH
SFQsICIwIiApOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFt
ZUF0dHIpIHsKLSAgICAgICAgU3RyaW5nIG5ld05hbWVBdHRyID0gYXR0ci0+dmFsdWUoKTsKLSAg
ICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7
Ci0gICAgICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5h
bWVBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG5ld05hbWVBdHRyKTsKLSAg
ICAgICAgfQotICAgICAgICBvbGROYW1lQXR0ciA9IG5ld05hbWVBdHRyOwotICAgIH0gZWxzZQot
ICAgICAgICBIVE1MUGx1Z0luRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19
Ci0KLWJvb2wgSFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAq
c3R5bGUpCi17Ci0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGx1Z2luc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgTm9kZSAqcCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAocCAmJiBwLT5oYXNU
YWdOYW1lKG9iamVjdFRhZykpIHsKLSAgICAgICAgYXNzZXJ0KHAtPnJlbmRlcmVyKCkpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJlbmRl
ck9iamVjdCAqSFRNTEVtYmVkRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFy
ZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRl
clBhcnRPYmplY3QodGhpcyk7Ci19Ci0KLXZvaWQgSFRNTEVtYmVkRWxlbWVudDo6YXR0YWNoKCkK
LXsKLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6YXR0YWNoKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIo
KSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyUGFydE9iamVjdCo+KHJlbmRlcmVyKCkpLT51
cGRhdGVXaWRnZXQoKTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpkZXRhY2goKQotewot
I2lmIF9fQVBQTEVfXwotICAgIG1faW5zdGFuY2UgPSAwOwotI2VuZGlmCi0gICAgSFRNTFBsdWdJ
bkVsZW1lbnQ6OmRldGFjaCgpOwotfQotCi12b2lkIEhUTUxFbWJlZEVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkg
ewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAq
Pihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwot
ICAgIH0KLQotICAgIEhUTUxQbHVnSW5FbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwot
fQotCi12b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAg
IGlmIChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIEhUTUxEb2N1bWVu
dCAqZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAgICAg
ICBkb2MtPnJlbW92ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0gICAgfQotCi0gICAgSFRNTFBs
dWdJbkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLX0KLQotYm9vbCBIVE1MRW1iZWRF
bGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyOwotfQotCi1TdHJpbmcgSFRNTEVtYmVkRWxlbWVu
dDo6c3JjKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNyY0F0dHIpOwotfQot
Ci12b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnNldFNyYyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRW1iZWRF
bGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRy
KTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KERvY3Vt
ZW50ICpkb2MpIAotOiBIVE1MUGx1Z0luRWxlbWVudChvYmplY3RUYWcsIGRvYykKLSwgbV9pbWFn
ZUxvYWRlcigwKQotewotICAgIG5lZWRXaWRnZXRVcGRhdGUgPSBmYWxzZTsKLSAgICBtX3VzZUZh
bGxiYWNrQ29udGVudCA9IGZhbHNlOwotICAgIG1fY29tcGxldGUgPSBmYWxzZTsKLSAgICBtX2Rv
Y05hbWVkSXRlbSA9IHRydWU7Ci19Ci0KLUhUTUxPYmplY3RFbGVtZW50Ojp+SFRNTE9iamVjdEVs
ZW1lbnQoKQotewotI2lmIF9fQVBQTEVfXwotICAgIC8vIG1faW5zdGFuY2Ugc2hvdWxkIGhhdmUg
YmVlbiBjbGVhbmVkIHVwIGluIGRldGFjaCgpLgotICAgIGFzc2VydCghbV9pbnN0YW5jZSk7Ci0j
ZW5kaWYKLSAgICAKLSAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKLX0KLQotI2lmIF9fQVBQTEVf
XwotS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVtZW50OjpnZXRJbnN0YW5j
ZSgpIGNvbnN0Ci17Ci0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX2luc3RhbmNlKQot
ICAgICAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLQotICAgIGlmIChSZW5kZXJPYmplY3Qg
KnIgPSByZW5kZXJlcigpKSB7Ci0gICAgICAgIGlmIChyLT5pc1dpZGdldCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoV2lkZ2V0ICp3aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQgKj4ocikt
PndpZGdldCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2FsbCBpbnRvIHRoZSBmcmFtZSAoYW5k
IG92ZXIgdGhlIGJyaWRnZSkgdG8gcHVsbCB0aGUgQmluZGluZ3M6Okluc3RhbmNlCi0gICAgICAg
ICAgICAgICAgLy8gZnJvbSB0aGUgZ3V0cyBvZiB0aGUgcGx1Z2luLgotICAgICAgICAgICAgICAg
IG1faW5zdGFuY2UgPSBmcmFtZS0+Z2V0T2JqZWN0SW5zdGFuY2VGb3JXaWRnZXQod2lkZ2V0KTsK
LSAgICAgICAgICAgICAgICAvLyBBcHBsZXQgbWF5IHNwZWNpZmllZCB3aXRoIDxvYmplY3Q+IHRh
Zy4KLSAgICAgICAgICAgICAgICBpZiAoIW1faW5zdGFuY2UpCi0gICAgICAgICAgICAgICAgICAg
IG1faW5zdGFuY2UgPSBmcmFtZS0+Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQod2lkZ2V0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtX2luc3RhbmNl
LmdldCgpOwotfQotI2VuZGlmCi0KLUhUTUxGb3JtRWxlbWVudCAqSFRNTE9iamVjdEVsZW1lbnQ6
OmZvcm0oKSBjb25zdAotewotICAgIGZvciAoTm9kZSAqcCA9IHBhcmVudE5vZGUoKTsgcCAhPSAw
OyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChwLT5oYXNUYWdOYW1lKGZvcm1U
YWcpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCAqPihw
KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBT
dHJpbmcgdmFsID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpbnQgcG9zOwotICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgc2VydmljZVR5cGUgPSB2YWwuZGVwcmVjYXRl
ZFN0cmluZygpLmxvd2VyKCk7Ci0gICAgICAgIHBvcyA9IHNlcnZpY2VUeXBlLmZpbmQoICI7IiAp
OwotICAgICAgICBpZiAoIHBvcyE9LTEgKQotICAgICAgICAgIHNlcnZpY2VUeXBlID0gc2Vydmlj
ZVR5cGUubGVmdCggcG9zICk7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICAgIG5l
ZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwotICAgICAgICBpZiAoIWlzSW1hZ2VUeXBlKCkgJiYgbV9p
bWFnZUxvYWRlcikgewotICAgICAgICAgIGRlbGV0ZSBtX2ltYWdlTG9hZGVyOwotICAgICAgICAg
IG1faW1hZ2VMb2FkZXIgPSAwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gZGF0YUF0dHIpIHsKLSAgICAgICAgdXJsID0gV2ViQ29yZTo6cGFyc2VVUkwodmFsKS5k
ZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICAgIG5l
ZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwotICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiBpc0ltYWdl
VHlwZSgpKSB7Ci0gICAgICAgICAgaWYgKCFtX2ltYWdlTG9hZGVyKQotICAgICAgICAgICAgICBt
X2ltYWdlTG9hZGVyID0gbmV3IEhUTUxJbWFnZUxvYWRlcih0aGlzKTsKLSAgICAgICAgICBtX2lt
YWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gY2xhc3NpZEF0dHIpIHsKLSAgICAgICAgY2xhc3NJZCA9IHZhbDsK
LSAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IHRy
dWU7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikgewotICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9udW5sb2FkQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcih1bmxvYWRFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
bmFtZUF0dHIpIHsKLSAgICAgICAgICAgIFN0cmluZyBuZXdOYW1lQXR0ciA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgICAgICAgICBpZiAoaXNEb2NOYW1lZEl0ZW0oKSAmJiBpbkRvY3VtZW50KCkgJiYg
ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICAgIEhUTUxEb2N1
bWVudCAqZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAg
ICAgICAgICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAg
ICAgICAgICBkb2MtPmFkZE5hbWVkSXRlbShuZXdOYW1lQXR0cik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBvbGROYW1lQXR0ciA9IG5ld05hbWVBdHRyOwotICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGlkQXR0cikgewotICAgICAgICBTdHJpbmcgbmV3SWRBdHRyID0gYXR0ci0+
dmFsdWUoKTsKLSAgICAgICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkgJiYgaW5Eb2N1bWVudCgpICYm
IGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEhUTUxEb2N1bWVu
dCAqZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAgICAg
ICAgICAgZG9jLT5yZW1vdmVEb2NFeHRyYU5hbWVkSXRlbShvbGRJZEF0dHIpOwotICAgICAgICAg
ICAgZG9jLT5hZGREb2NFeHRyYU5hbWVkSXRlbShuZXdJZEF0dHIpOwotICAgICAgICB9Ci0gICAg
ICAgIG9sZElkQXR0ciA9IG5ld0lkQXR0cjsKLSAgICAgICAgLy8gYWxzbyBjYWxsIHN1cGVyY2xh
c3MKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwotICAgIH0gZWxzZQotICAgICAgICBIVE1MUGx1Z0luRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7Ci19Ci0KLURvY3VtZW50KiBIVE1MT2JqZWN0RWxlbWVudDo6Y29udGVudERv
Y3VtZW50KCkgY29uc3QKLXsKLSAgICAvLyAjIyMKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBI
VE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpCi17
Ci0gICAgaWYgKG1fdXNlRmFsbGJhY2tDb250ZW50IHx8IGlzSW1hZ2VUeXBlKCkpCi0gICAgICAg
IHJldHVybiBIVE1MUGx1Z0luRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7Ci0KLSAg
ICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwg
IWZyYW1lLT5wbHVnaW5zRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJlbmRlck9iamVjdCAqSFRNTE9iamVjdEVsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQotewot
ICAgIGlmIChtX3VzZUZhbGxiYWNrQ29udGVudCkKLSAgICAgICAgcmV0dXJuIFJlbmRlck9iamVj
dDo6Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxlKTsKLSAgICBpZiAoaXNJbWFnZVR5cGUoKSkKLSAg
ICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckltYWdlKHRoaXMpOwotICAgIHJldHVybiBu
ZXcgKGFyZW5hKSBSZW5kZXJQYXJ0T2JqZWN0KHRoaXMpOwotfQotCi12b2lkIEhUTUxPYmplY3RF
bGVtZW50OjphdHRhY2goKQotewotICAgIEhUTUxQbHVnSW5FbGVtZW50OjphdHRhY2goKTsKLQot
ICAgIGlmIChyZW5kZXJlcigpICYmICFtX3VzZUZhbGxiYWNrQ29udGVudCkgewotICAgICAgICBp
ZiAoaXNJbWFnZVR5cGUoKSkgewotICAgICAgICAgICAgaWYgKCFtX2ltYWdlTG9hZGVyKQotICAg
ICAgICAgICAgICAgIG1faW1hZ2VMb2FkZXIgPSBuZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpOwot
ICAgICAgICAgICAgbV9pbWFnZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICAgICAg
ICAgIGlmIChyZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdl
T2JqID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlcigpKTsKLSAgICAgICAgICAg
ICAgICBpbWFnZU9iai0+c2V0Q2FjaGVkSW1hZ2UobV9pbWFnZUxvYWRlci0+aW1hZ2UoKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobmVlZFdpZGdl
dFVwZGF0ZSkgewotICAgICAgICAgICAgICAgIC8vIFNldCBuZWVkV2lkZ2V0VXBkYXRlIHRvIGZh
bHNlIGJlZm9yZSBjYWxsaW5nIHVwZGF0ZVdpZGdldCBiZWNhdXNlIHVwZGF0ZVdpZGdldCBtYXkg
Y2F1c2UKLSAgICAgICAgICAgICAgICAvLyB0aGlzIG1ldGhvZCBvciByZWNhbGNTdHlsZSAod2hp
Y2ggYWxzbyBjYWxscyB1cGRhdGVXaWRnZXQpIHRvIGJlIGNhbGxlZC4KLSAgICAgICAgICAgICAg
ICBuZWVkV2lkZ2V0VXBkYXRlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
UmVuZGVyUGFydE9iamVjdCo+KHJlbmRlcmVyKCkpLT51cGRhdGVXaWRnZXQoKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkKLXsKLSAg
ICAvLyBUaGUgcGFyc2VyIGp1c3QgcmVhY2hlZCA8L29iamVjdD4uCi0gICAgc2V0Q29tcGxldGUo
dHJ1ZSk7Ci0gICAgCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKTsKLX0K
LQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29tcGxldGUoYm9vbCBjb21wbGV0ZSkKLXsK
LSAgICBpZiAoY29tcGxldGUgIT0gbV9jb21wbGV0ZSkgewotICAgICAgICBtX2NvbXBsZXRlID0g
Y29tcGxldGU7Ci0gICAgICAgIGlmIChjb21wbGV0ZSAmJiAhbV91c2VGYWxsYmFja0NvbnRlbnQp
IHsKLSAgICAgICAgICAgIG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwotICAgICAgICAgICAgaWYg
KGluRG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmRldGFjaCgpCi17Ci0gICAgaWYg
KGF0dGFjaGVkKCkgJiYgcmVuZGVyZXIoKSAmJiAhbV91c2VGYWxsYmFja0NvbnRlbnQpIHsKLSAg
ICAgICAgLy8gVXBkYXRlIHRoZSB3aWRnZXQgdGhlIG5leHQgdGltZSB3ZSBhdHRhY2ggKGRldGFj
aGluZyBkZXN0cm95cyB0aGUgcGx1Z2luKS4KLSAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IHRy
dWU7Ci0gICAgfQotCi0jaWYgX19BUFBMRV9fCi0gICAgbV9pbnN0YW5jZSA9IDA7Ci0jZW5kaWYK
LSAgICBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0YWNoKCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKLXsKLSAgICBpZiAoaXNEb2NOYW1lZEl0ZW0o
KSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIEhUTUxEb2N1bWVu
dCAqZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAgICAg
ICBkb2MtPmFkZE5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0gICAgICAgIGRvYy0+YWRkRG9jRXh0
cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICB9Ci0KLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVt
b3ZlZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkgJiYgZG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0
YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5yZW1v
dmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICBkb2MtPnJlbW92ZURvY0V4dHJhTmFt
ZWRJdGVtKG9sZElkQXR0cik7Ci0gICAgfQotCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVjYWxjU3R5
bGUoU3R5bGVDaGFuZ2UgY2gpCi17Ci0gICAgaWYgKCFtX3VzZUZhbGxiYWNrQ29udGVudCAmJiBu
ZWVkV2lkZ2V0VXBkYXRlICYmIHJlbmRlcmVyKCkgJiYgIWlzSW1hZ2VUeXBlKCkpIHsKLSAgICAg
ICAgZGV0YWNoKCk7Ci0gICAgICAgIGF0dGFjaCgpOwotICAgIH0KLSAgICBIVE1MUGx1Z0luRWxl
bWVudDo6cmVjYWxjU3R5bGUoY2gpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpjaGls
ZHJlbkNoYW5nZWQoKQotewotICAgIHVwZGF0ZURvY05hbWVkSXRlbSgpOwotICAgIGlmIChpbkRv
Y3VtZW50KCkgJiYgIW1fdXNlRmFsbGJhY2tDb250ZW50KSB7Ci0gICAgICAgIG5lZWRXaWRnZXRV
cGRhdGUgPSB0cnVlOwotICAgICAgICBzZXRDaGFuZ2VkKCk7Ci0gICAgfQotfQotCi1ib29sIEhU
TUxPYmplY3RFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIChhdHRyLT5uYW1lKCkgPT0gZGF0YUF0dHIgfHwgKGF0dHItPm5hbWUoKSA9
PSB1c2VtYXBBdHRyICYmIGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKClbMF0gIT0gJyMnKSk7Ci19
Ci0KLWJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmlzSW1hZ2VUeXBlKCkKLXsKLSAgICBpZiAoc2Vy
dmljZVR5cGUuaXNFbXB0eSgpICYmIHVybC5zdGFydHNXaXRoKCJkYXRhOiIpKSB7Ci0gICAgICAg
IC8vIEV4dHJhY3QgdGhlIE1JTUUgdHlwZSBmcm9tIHRoZSBkYXRhIFVSTC4KLSAgICAgICAgaW50
IGluZGV4ID0gdXJsLmZpbmQoJzsnKTsKLSAgICAgICAgaWYgKGluZGV4ID09IC0xKQotICAgICAg
ICAgICAgaW5kZXggPSB1cmwuZmluZCgnLCcpOwotICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsK
LSAgICAgICAgICAgIGludCBsZW4gPSBpbmRleCAtIDU7Ci0gICAgICAgICAgICBpZiAobGVuID4g
MCkKLSAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZSA9IHVybC5taWQoNSwgbGVuKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZSA9ICJ0ZXh0L3BsYWluIjsg
Ly8gRGF0YSBVUkxzIHdpdGggbm8gTUlNRSB0eXBlIGFyZSBjb25zaWRlcmVkIHRleHQvcGxhaW4u
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEltYWdlOjpzdXBwb3J0c1R5cGUo
c2VydmljZVR5cGUpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJGYWxsYmFj
a0NvbnRlbnQoKQotewotICAgIGlmIChtX3VzZUZhbGxiYWNrQ29udGVudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gTWFyayBvdXJzZWx2ZXMgYXMgdXNpbmcgdGhlIGZhbGxiYWNrIGNvbnRl
bnQuCi0gICAgbV91c2VGYWxsYmFja0NvbnRlbnQgPSB0cnVlOwotCi0gICAgLy8gTm93IGRvIGEg
ZGV0YWNoIGFuZCByZWF0dGFjaC4gICAgCi0gICAgLy8gRklYTUU6IFN0eWxlIGdldHMgcmVjYWxj
dWxhdGVkIHdoaWNoIGlzIHN1Ym9wdGltYWwuCi0gICAgZGV0YWNoKCk7Ci0gICAgYXR0YWNoKCk7
Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSgpCi17Ci0g
ICAgLy8gVGhlIHJ1bGUgaXMgIjxvYmplY3Q+IGVsZW1lbnRzIHdpdGggbm8gY2hpbGRyZW4gb3Ro
ZXIgdGhhbgotICAgIC8vIDxwYXJhbT4gZWxlbWVudHMgYW5kIHdoaXRlc3BhY2UgY2FuIGJlIGZv
dW5kIGJ5IG5hbWUgaW4gYQotICAgIC8vIGRvY3VtZW50LCBhbmQgb3RoZXIgPG9iamVjdD4gZWxl
bWVudHMgY2Fubm90LiIKLSAgICBib29sIHdhc05hbWVkSXRlbSA9IG1fZG9jTmFtZWRJdGVtOwot
ICAgIGJvb2wgaXNOYW1lZEl0ZW0gPSB0cnVlOwotICAgIE5vZGUgKmNoaWxkID0gZmlyc3RDaGls
ZCgpOwotICAgIHdoaWxlIChjaGlsZCAmJiBpc05hbWVkSXRlbSkgewotICAgICAgICBpZiAoY2hp
bGQtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxFbGVt
ZW50ICo+KGNoaWxkKS0+aGFzVGFnTmFtZShwYXJhbVRhZykpCi0gICAgICAgICAgICAgICAgaXNO
YW1lZEl0ZW0gPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PFRleHQgKj4oY2hpbGQpLT5jb250YWlu
c09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgaXNOYW1lZEl0ZW0gPSBmYWxzZTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpc05hbWVkSXRlbSA9IGZhbHNlOwotICAgICAg
ICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgIH0KLSAgICBpZiAoaXNOYW1lZEl0
ZW0gIT0gd2FzTmFtZWRJdGVtICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAg
ICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9j
dW1lbnQoKSk7Ci0gICAgICAgIGlmIChpc05hbWVkSXRlbSkgewotICAgICAgICAgICAgZG9jLT5h
ZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICAgICAgZG9jLT5hZGREb2NFeHRyYU5h
bWVkSXRlbShvbGRJZEF0dHIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZG9jLT5y
ZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICAgICAgZG9jLT5yZW1vdmVEb2NF
eHRyYU5hbWVkSXRlbShvbGRJZEF0dHIpOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fZG9jTmFt
ZWRJdGVtID0gaXNOYW1lZEl0ZW07Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6Y29k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb2RlQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldENvZGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoY29kZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RF
bGVtZW50OjphcmNoaXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFyY2hp
dmVBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0QXJjaGl2ZShjb25zdCBT
dHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhcmNoaXZlQXR0ciwgdmFsdWUpOwot
fQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmJvcmRlcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShib3JkZXJBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVu
dDo6c2V0Qm9yZGVyKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGJv
cmRlckF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojpjb2RlQmFz
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb2RlYmFzZUF0dHIpOwotfQot
Ci12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRDb2RlQmFzZShjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShjb2RlYmFzZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5n
IEhUTUxPYmplY3RFbGVtZW50Ojpjb2RlVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShjb2RldHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRD
b2RlVHlwZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjb2RldHlw
ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50OjpkYXRhKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGRhdGFBdHRyKTsKLX0KLQotdm9pZCBIVE1M
T2JqZWN0RWxlbWVudDo6c2V0RGF0YShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0
dHJpYnV0ZShkYXRhQXR0ciwgdmFsdWUpOwotfQotCi1ib29sIEhUTUxPYmplY3RFbGVtZW50Ojpk
ZWNsYXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShkZWNsYXJlQXR0ciku
aXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldERlY2xhcmUoYm9vbCBk
ZWNsYXJlKQotewotICAgIHNldEF0dHJpYnV0ZShkZWNsYXJlQXR0ciwgZGVjbGFyZSA/ICIiIDog
MCk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKGhzcGFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RF
bGVtZW50OjpzZXRIc3BhY2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoaHNwYWNlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OnN0
YW5kYnkoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc3RhbmRieUF0dHIpOwot
fQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRTdGFuZGJ5KGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHN0YW5kYnlBdHRyLCB2YWx1ZSk7Ci19Ci0KLWludCBI
VE1MT2JqZWN0RWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUodGFiaW5kZXhBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50
OjpzZXRUYWJJbmRleChpbnQgdGFiSW5kZXgpCi17Ci0gICAgc2V0QXR0cmlidXRlKHRhYmluZGV4
QXR0ciwgU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RF
bGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRy
KTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcgJnZh
bHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcg
SFRNTE9iamVjdEVsZW1lbnQ6OnVzZU1hcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZSh1c2VtYXBBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VXNlTWFw
KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHVzZW1hcEF0dHIsIHZh
bHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojp2c3BhY2UoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodnNwYWNlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVj
dEVsZW1lbnQ6OnNldFZzcGFjZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZSh2c3BhY2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRN
TFBhcmFtRWxlbWVudDo6SFRNTFBhcmFtRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRN
TEVsZW1lbnQocGFyYW1UYWcsIGRvYykKLXsKLX0KLQotSFRNTFBhcmFtRWxlbWVudDo6fkhUTUxQ
YXJhbUVsZW1lbnQoKQotewotfQotCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGlkQXR0cikgewotICAgICAgICAvLyBNdXN0IGNhbGwgYmFzZSBjbGFzcyBzbyB0aGF0IGhh
c0lEIGJpdCBnZXRzIHNldC4KLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOwotICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aHRtbE1vZGUoKSAhPSBEb2N1bWVu
dDo6WEh0bWwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbmFtZSA9IGF0dHItPnZh
bHVlKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKLSAgICAg
ICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSB2YWx1ZUF0dHIpIHsKLSAgICAgICAgbV92YWx1ZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0K
LQotYm9vbCBIVE1MUGFyYW1FbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIp
IGNvbnN0Ci17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsKLSAgICAgICAg
QXR0cmlidXRlICphdHRyID0gYXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWVBdHRy
KTsKLSAgICAgICAgaWYgKGF0dHIpIHsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCkuZG9tU3RyaW5nKCkubG93ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAi
c3JjIiB8fCB2YWx1ZSA9PSAibW92aWUiIHx8IHZhbHVlID09ICJkYXRhIikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgSFRNTFBhcmFtRWxlbWVudDo6c2V0TmFtZShjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFBh
cmFtRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBl
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBhcmFtRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcg
JnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCi12b2lk
IEhUTUxQYXJhbUVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAg
c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFBhcmFtRWxl
bWVudDo6dmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbHVl
dHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNldFZhbHVlVHlwZShjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2YWx1ZXR5cGVBdHRyLCB2YWx1
ZSk7Ci19Ci0KLX0KSW5kZXg6IGh0bWwvSFRNTEVtYmVkRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGh0bWwvSFRNTEVtYmVkRWxlbWVudC5oCShyZXZpc2lvbiAxNDI1NykKKysrIGh0bWwvSFRNTEVt
YmVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMCArMjIsMTAgQEAKICAqCiAgKi8K
IAotI2lmbmRlZiBIVE1MX09CSkVDVElNUExfSAotI2RlZmluZSBIVE1MX09CSkVDVElNUExfSAor
I2lmbmRlZiBIVE1MRW1iZWRFbGVtZW50X0gKKyNkZWZpbmUgSFRNTEVtYmVkRWxlbWVudF9ICiAK
LSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50Lmgi
CiAKICNpZiBfX0FQUExFX18KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9ydW50aW1lLmg+CkBA
IC0zNSwxMDEgKzM1LDYgQEAgbmFtZXNwYWNlIEtKUyB7IG5hbWVzcGFjZSBCaW5kaW5ncyB7IGNs
YQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNz
IEhUTUxJbWFnZUxvYWRlcjsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MUGx1
Z0luRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxQbHVn
SW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVx
dWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQp
OwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBT
dHJpbmcmKTsKLSAgICAKLSAgICBTdHJpbmcgaGVpZ2h0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRI
ZWlnaHQoY29uc3QgU3RyaW5nJik7Ci0gICAgCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAg
ICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgCi0gICAgU3RyaW5nIHdpZHRoKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChjb25zdCBTdHJpbmcmKTsKLSAgICAKLSNpZiBfX0FQ
UExFX18KLSAgICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgp
IGNvbnN0ID0gMDsKLSNlbmRpZgotICAgIAotcHJvdGVjdGVkOgotICAgIFN0cmluZyBvbGROYW1l
QXR0cjsKLQotI2lmIF9fQVBQTEVfXwotICAgIG11dGFibGUgUmVmUHRyPEtKUzo6QmluZGluZ3M6
Okluc3RhbmNlPiBtX2luc3RhbmNlOwotI2VuZGlmCi19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIEhUTUxBcHBsZXRFbGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5FbGVtZW50Ci17
Ci1wdWJsaWM6Ci0gICAgSFRNTEFwcGxldEVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+SFRNTEFw
cGxldEVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJl
bmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJl
cigpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICAKLSNpZiBfX0FQUExFX18KLSAg
ICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0Owot
I2VuZGlmCi0KLSAgICBTdHJpbmcgYWx0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbHQoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgYXJjaGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QXJj
aGl2ZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBjb2RlKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRDb2RlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNvZGVCYXNlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDb2RlQmFzZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBoc3Bh
Y2UoKSBjb25zdDsKLSAgICB2b2lkIHNldEhzcGFjZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0
cmluZyBvYmplY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmKTsK
LQotICAgIFN0cmluZyB2c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFZzcGFjZShjb25zdCBT
dHJpbmcmKTsKLQotICAgIHZpcnR1YWwgYm9vbCBhbGxQYXJhbXNBdmFpbGFibGUoKTsKLSAgICB2
b2lkIHNldHVwQXBwbGV0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotCi1w
cml2YXRlOgotICAgIFN0cmluZyBvbGRJZEF0dHI7Ci0gICAgYm9vbCBtX2FsbFBhcmFtc0F2YWls
YWJsZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogY2xhc3MgSFRNTEVtYmVkRWxlbWVu
dCA6IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVudAogewogcHVibGljOgpAQCAtMTY1LDEzNCArNzAs
NiBAQCBwdWJsaWM6CiAgICAgRGVwcmVjYXRlZFN0cmluZyBzZXJ2aWNlVHlwZTsKIH07CiAKLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTE9iamVjdEVsZW1lbnQgOiBwdWJsaWMgSFRN
TFBsdWdJbkVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MT2JqZWN0RWxlbWVudChEb2N1bWVu
dCopOwotICAgIH5IVE1MT2JqZWN0RWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiA3OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNo
KCk7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKLSAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5k
ZXJTdHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRldGFjaCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgCi0gICAgdmly
dHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2hpbGRyZW5DaGFuZ2VkKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlKikgY29uc3Q7Ci0KLSAgICBib29sIGlzSW1hZ2VUeXBlKCk7Ci0KLSAgICB2b2lkIHJl
bmRlckZhbGxiYWNrQ29udGVudCgpOwotCi0jaWYgX19BUFBMRV9fCi0gICAgdmlydHVhbCBLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBjb25zdDsKLSNlbmRpZgotCi0gICAg
U3RyaW5nIGFyY2hpdmUoKSBjb25zdDsKLSAgICB2b2lkIHNldEFyY2hpdmUoY29uc3QgU3RyaW5n
Jik7Ci0KLSAgICBTdHJpbmcgYm9yZGVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCb3JkZXIoY29u
c3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgY29kZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29k
ZShjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBTdHJpbmcgY29kZUJhc2UoKSBjb25zdDsKLSAg
ICB2b2lkIHNldENvZGVCYXNlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNvZGVUeXBl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2RlVHlwZShjb25zdCBTdHJpbmcmKTsKLQotICAgIERv
Y3VtZW50KiBjb250ZW50RG9jdW1lbnQoKSBjb25zdDsKLSAgICAKLSAgICBTdHJpbmcgZGF0YSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcmKTsKLQotICAgIGJvb2wgZGVj
bGFyZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVjbGFyZShib29sKTsKLQotICAgIEhUTUxGb3Jt
RWxlbWVudCogZm9ybSgpIGNvbnN0OwotICAgIAotICAgIFN0cmluZyBoc3BhY2UoKSBjb25zdDsK
LSAgICB2b2lkIHNldEhzcGFjZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBzdGFuZGJ5
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdGFuZGJ5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgaW50
IHRhYkluZGV4KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUYWJJbmRleChpbnQpOwotCi0gICAgU3Ry
aW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICBTdHJpbmcgdXNlTWFwKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRVc2VNYXAoY29uc3QgU3RyaW5n
Jik7Ci0KLSAgICBTdHJpbmcgdnNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWc3BhY2UoY29u
c3QgU3RyaW5nJik7Ci0KLSAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bXBsZXRlOyB9Ci0gICAgdm9pZCBzZXRDb21wbGV0ZShib29sIGNvbXBsZXRlKTsKLSAgICAKLSAg
ICBib29sIGlzRG9jTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9kb2NOYW1lZEl0ZW07IH0K
LQotICAgIERlcHJlY2F0ZWRTdHJpbmcgc2VydmljZVR5cGU7Ci0gICAgRGVwcmVjYXRlZFN0cmlu
ZyB1cmw7Ci0gICAgV2ViQ29yZTo6U3RyaW5nIGNsYXNzSWQ7Ci0gICAgYm9vbCBuZWVkV2lkZ2V0
VXBkYXRlIDogMTsKLSAgICBib29sIG1fdXNlRmFsbGJhY2tDb250ZW50IDogMTsKLSAgICBIVE1M
SW1hZ2VMb2FkZXIqIG1faW1hZ2VMb2FkZXI7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVE
b2NOYW1lZEl0ZW0oKTsKLSAgICBTdHJpbmcgb2xkSWRBdHRyOwotICAgIGJvb2wgbV9jb21wbGV0
ZTsKLSAgICBib29sIG1fZG9jTmFtZWRJdGVtOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1jbGFzcyBIVE1MUGFyYW1FbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci0gICAgZnJp
ZW5kIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50OwotcHVibGljOgotICAgIEhUTUxQYXJhbUVsZW1l
bnQoRG9jdW1lbnQqKTsKLSAgICB+SFRNTFBhcmFtRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBI
VE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVz
Rm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAwOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikg
Y29uc3Q7Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAg
IHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5n
Jik7Ci0KLSAgICBTdHJpbmcgdmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZVR5
cGUoY29uc3QgU3RyaW5nJik7Ci0KLSBwcm90ZWN0ZWQ6Ci0gICAgQXRvbWljU3RyaW5nIG1fbmFt
ZTsKLSAgICBBdG9taWNTdHJpbmcgbV92YWx1ZTsKLX07Ci0KIH0KIAogI2VuZGlmCkluZGV4OiBo
dG1sL0hUTUxBcHBsZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MQXBwbGV0RWxl
bWVudC5oCShyZXZpc2lvbiAxNDI1NykKKysrIGh0bWwvSFRNTEFwcGxldEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIsMTAgKzIyLDEwIEBACiAgKgogICovCiAKLSNpZm5kZWYgSFRNTF9P
QkpFQ1RJTVBMX0gKLSNkZWZpbmUgSFRNTF9PQkpFQ1RJTVBMX0gKKyNpZm5kZWYgSFRNTEFwcGxl
dEVsZW1lbnRfSAorI2RlZmluZSBIVE1MQXBwbGV0RWxlbWVudF9ICiAKLSNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCiAKICNpZiBfX0FQUExF
X18KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9ydW50aW1lLmg+CkBAIC0zOCw0NSArMzgsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFzcyBIVE1M
SW1hZ2VMb2FkZXI7CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFBsdWdJbkVs
ZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MUGx1Z0luRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwotCi0gICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKLQot
ICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5n
Jik7Ci0gICAgCi0gICAgU3RyaW5nIGhlaWdodCgpIGNvbnN0OwotICAgIHZvaWQgc2V0SGVpZ2h0
KGNvbnN0IFN0cmluZyYpOwotICAgIAotICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotICAgIAotICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgU3RyaW5nJik7Ci0gICAgCi0jaWYgX19BUFBMRV9f
Ci0gICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBjb25z
dCA9IDA7Ci0jZW5kaWYKLSAgICAKLXByb3RlY3RlZDoKLSAgICBTdHJpbmcgb2xkTmFtZUF0dHI7
Ci0KLSNpZiBfX0FQUExFX18KLSAgICBtdXRhYmxlIFJlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZT4gbV9pbnN0YW5jZTsKLSNlbmRpZgotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBj
bGFzcyBIVE1MQXBwbGV0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVudAogewogcHVi
bGljOgpAQCAtMTI4LDE3MSArODksNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hbGxQYXJhbXNB
dmFpbGFibGU7CiB9OwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxFbWJlZEVs
ZW1lbnQgOiBwdWJsaWMgSFRNTFBsdWdJbkVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRW1i
ZWRFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgfkhUTUxFbWJlZEVsZW1lbnQoKTsKLQotICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVh
bCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2go
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVy
SXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCBp
bnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3Vt
ZW50KCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSop
IGNvbnN0OwotCi0jaWYgX19BUFBMRV9fCi0gICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZSogZ2V0SW5zdGFuY2UoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgU3RyaW5nIHNyYygpIGNv
bnN0OwotICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHR5cGUo
KSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBEZXByZWNh
dGVkU3RyaW5nIHVybDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHBsdWdpblBhZ2U7Ci0gICAgRGVw
cmVjYXRlZFN0cmluZyBzZXJ2aWNlVHlwZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
Y2xhc3MgSFRNTE9iamVjdEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBsdWdJbkVsZW1lbnQKLXsKLXB1
YmxpYzoKLSAgICBIVE1MT2JqZWN0RWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MT2JqZWN0
RWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biA3OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBib29s
IHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1
YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAg
IHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxl
KFN0eWxlQ2hhbmdlIGNoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0KLSAg
ICBib29sIGlzSW1hZ2VUeXBlKCk7Ci0KLSAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29udGVudCgp
OwotCi0jaWYgX19BUFBMRV9fCi0gICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSog
Z2V0SW5zdGFuY2UoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgU3RyaW5nIGFyY2hpdmUoKSBjb25z
dDsKLSAgICB2b2lkIHNldEFyY2hpdmUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgYm9y
ZGVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCb3JkZXIoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBT
dHJpbmcgY29kZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29kZShjb25zdCBTdHJpbmcmKTsKLSAg
ICAKLSAgICBTdHJpbmcgY29kZUJhc2UoKSBjb25zdDsKLSAgICB2b2lkIHNldENvZGVCYXNlKGNv
bnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNvZGVUeXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDb2RlVHlwZShjb25zdCBTdHJpbmcmKTsKLQotICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1l
bnQoKSBjb25zdDsKLSAgICAKLSAgICBTdHJpbmcgZGF0YSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
RGF0YShjb25zdCBTdHJpbmcmKTsKLQotICAgIGJvb2wgZGVjbGFyZSgpIGNvbnN0OwotICAgIHZv
aWQgc2V0RGVjbGFyZShib29sKTsKLQotICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0
OwotICAgIAotICAgIFN0cmluZyBoc3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldEhzcGFjZShj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBzdGFuZGJ5KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRTdGFuZGJ5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgaW50IHRhYkluZGV4KCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRUYWJJbmRleChpbnQpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAg
ICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdXNlTWFwKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRVc2VNYXAoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdnNw
YWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWc3BhY2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBi
b29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBsZXRlOyB9Ci0gICAgdm9pZCBz
ZXRDb21wbGV0ZShib29sIGNvbXBsZXRlKTsKLSAgICAKLSAgICBib29sIGlzRG9jTmFtZWRJdGVt
KCkgY29uc3QgeyByZXR1cm4gbV9kb2NOYW1lZEl0ZW07IH0KLQotICAgIERlcHJlY2F0ZWRTdHJp
bmcgc2VydmljZVR5cGU7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyB1cmw7Ci0gICAgV2ViQ29yZTo6
U3RyaW5nIGNsYXNzSWQ7Ci0gICAgYm9vbCBuZWVkV2lkZ2V0VXBkYXRlIDogMTsKLSAgICBib29s
IG1fdXNlRmFsbGJhY2tDb250ZW50IDogMTsKLSAgICBIVE1MSW1hZ2VMb2FkZXIqIG1faW1hZ2VM
b2FkZXI7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVEb2NOYW1lZEl0ZW0oKTsKLSAgICBT
dHJpbmcgb2xkSWRBdHRyOwotICAgIGJvb2wgbV9jb21wbGV0ZTsKLSAgICBib29sIG1fZG9jTmFt
ZWRJdGVtOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MUGFyYW1FbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci0gICAgZnJpZW5kIGNsYXNzIEhUTUxBcHBsZXRF
bGVtZW50OwotcHVibGljOgotICAgIEhUTUxQYXJhbUVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+
SFRNTFBhcmFtRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0KLSAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHZvaWQgc2V0TmFtZShjb25zdCBT
dHJpbmcmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNv
bnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdmFs
dWVUeXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZVR5cGUoY29uc3QgU3RyaW5nJik7Ci0K
LSBwcm90ZWN0ZWQ6Ci0gICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKLSAgICBBdG9taWNTdHJpbmcg
bV92YWx1ZTsKLX07Ci0KIH0KIAogI2VuZGlmCkluZGV4OiBodG1sL0hUTUxQbHVnSW5FbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCShyZXZpc2lvbiAxNDI1
NykKKysrIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCAr
MjIsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIEhUTUxfT0JKRUNUSU1QTF9ICi0jZGVmaW5lIEhU
TUxfT0JKRUNUSU1QTF9ICisjaWZuZGVmIEhUTUxQbHVnSW5FbGVtZW50X0gKKyNkZWZpbmUgSFRN
TFBsdWdJbkVsZW1lbnRfSAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKIApAQCAtMzUsMTEg
KzM1LDYgQEAgbmFtZXNwYWNlIEtKUyB7IG5hbWVzcGFjZSBCaW5kaW5ncyB7IGNsYQogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNzIEhUTUxJbWFn
ZUxvYWRlcjsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBjbGFzcyBIVE1MUGx1Z0luRWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudAogewogcHVibGljOgpAQCAtNzUsMjI0ICs3MCw2IEBAIHBy
b3RlY3RlZDoKICNlbmRpZgogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1M
QXBwbGV0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVudAotewotcHVibGljOgotICAg
IEhUTUxBcHBsZXRFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgfkhUTUxBcHBsZXRFbGVtZW50KCk7
Ci0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
LSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwot
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJl
bmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgCi0jaWYgX19BUFBMRV9fCi0gICAgdmlydHVhbCBLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBjb25zdDsKLSNlbmRpZgotCi0gICAg
U3RyaW5nIGFsdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWx0KGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgU3RyaW5nIGFyY2hpdmUoKSBjb25zdDsKLSAgICB2b2lkIHNldEFyY2hpdmUoY29uc3QgU3Ry
aW5nJik7Ci0KLSAgICBTdHJpbmcgY29kZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29kZShjb25z
dCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBjb2RlQmFzZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
Q29kZUJhc2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgaHNwYWNlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRIc3BhY2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgb2JqZWN0KCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcg
dnNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWc3BhY2UoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgYWxsUGFyYW1zQXZhaWxhYmxlKCk7Ci0gICAgdm9pZCBzZXR1cEFwcGxl
dCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLQotcHJpdmF0ZToKLSAgICBT
dHJpbmcgb2xkSWRBdHRyOwotICAgIGJvb2wgbV9hbGxQYXJhbXNBdmFpbGFibGU7Ci19OwotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxFbWJlZEVsZW1lbnQgOiBwdWJsaWMgSFRN
TFBsdWdJbkVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRW1iZWRFbGVtZW50KERvY3VtZW50
Kik7Ci0gICAgfkhUTUxFbWJlZEVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoKCk7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUqKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgCi0gICAg
dmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotCi0jaWYgX19B
UFBMRV9fCi0gICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2Uo
KSBjb25zdDsKLSNlbmRpZgotCi0gICAgU3RyaW5nIHNyYygpIGNvbnN0OwotICAgIHZvaWQgc2V0
U3JjKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lk
IHNldFR5cGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIHVybDsKLSAg
ICBEZXByZWNhdGVkU3RyaW5nIHBsdWdpblBhZ2U7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBzZXJ2
aWNlVHlwZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTE9iamVjdEVs
ZW1lbnQgOiBwdWJsaWMgSFRNTFBsdWdJbkVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MT2Jq
ZWN0RWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MT2JqZWN0RWxlbWVudCgpOwotCi0gICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA3OyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRl
cmVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNl
cnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50
KCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0KLSAgICBib29sIGlzSW1hZ2VUeXBl
KCk7Ci0KLSAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29udGVudCgpOwotCi0jaWYgX19BUFBMRV9f
Ci0gICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBjb25z
dDsKLSNlbmRpZgotCi0gICAgU3RyaW5nIGFyY2hpdmUoKSBjb25zdDsKLSAgICB2b2lkIHNldEFy
Y2hpdmUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgYm9yZGVyKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRCb3JkZXIoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgY29kZSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0Q29kZShjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBTdHJpbmcgY29k
ZUJhc2UoKSBjb25zdDsKLSAgICB2b2lkIHNldENvZGVCYXNlKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgU3RyaW5nIGNvZGVUeXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2RlVHlwZShjb25zdCBT
dHJpbmcmKTsKLQotICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQoKSBjb25zdDsKLSAgICAK
LSAgICBTdHJpbmcgZGF0YSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcm
KTsKLQotICAgIGJvb2wgZGVjbGFyZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVjbGFyZShib29s
KTsKLQotICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0OwotICAgIAotICAgIFN0cmlu
ZyBoc3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldEhzcGFjZShjb25zdCBTdHJpbmcmKTsKLQot
ICAgIFN0cmluZyBzdGFuZGJ5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdGFuZGJ5KGNvbnN0IFN0
cmluZyYpOwotCi0gICAgaW50IHRhYkluZGV4KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUYWJJbmRl
eChpbnQpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29u
c3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdXNlTWFwKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRV
c2VNYXAoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdnNwYWNlKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRWc3BhY2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBib29sIGlzQ29tcGxldGUoKSBj
b25zdCB7IHJldHVybiBtX2NvbXBsZXRlOyB9Ci0gICAgdm9pZCBzZXRDb21wbGV0ZShib29sIGNv
bXBsZXRlKTsKLSAgICAKLSAgICBib29sIGlzRG9jTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4g
bV9kb2NOYW1lZEl0ZW07IH0KLQotICAgIERlcHJlY2F0ZWRTdHJpbmcgc2VydmljZVR5cGU7Ci0g
ICAgRGVwcmVjYXRlZFN0cmluZyB1cmw7Ci0gICAgV2ViQ29yZTo6U3RyaW5nIGNsYXNzSWQ7Ci0g
ICAgYm9vbCBuZWVkV2lkZ2V0VXBkYXRlIDogMTsKLSAgICBib29sIG1fdXNlRmFsbGJhY2tDb250
ZW50IDogMTsKLSAgICBIVE1MSW1hZ2VMb2FkZXIqIG1faW1hZ2VMb2FkZXI7Ci0KLXByaXZhdGU6
Ci0gICAgdm9pZCB1cGRhdGVEb2NOYW1lZEl0ZW0oKTsKLSAgICBTdHJpbmcgb2xkSWRBdHRyOwot
ICAgIGJvb2wgbV9jb21wbGV0ZTsKLSAgICBib29sIG1fZG9jTmFtZWRJdGVtOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MUGFyYW1FbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50Ci17Ci0gICAgZnJpZW5kIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50OwotcHVibGljOgot
ICAgIEhUTUxQYXJhbUVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+SFRNTFBhcmFtRWxlbWVudCgp
OwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRy
aWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbmFtZTsgfQotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0
cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0
VmFsdWUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdmFsdWVUeXBlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRWYWx1ZVR5cGUoY29uc3QgU3RyaW5nJik7Ci0KLSBwcm90ZWN0ZWQ6Ci0gICAg
QXRvbWljU3RyaW5nIG1fbmFtZTsKLSAgICBBdG9taWNTdHJpbmcgbV92YWx1ZTsKLX07Ci0KIH0K
IAogI2VuZGlmCkluZGV4OiBodG1sL0hUTUxQYXJhbUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBo
dG1sL0hUTUxQYXJhbUVsZW1lbnQuaAkocmV2aXNpb24gMTQyNTcpCisrKyBodG1sL0hUTUxQYXJh
bUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMjQ2ICsyMiwxMyBAQAogICoKICAqLwog
Ci0jaWZuZGVmIEhUTUxfT0JKRUNUSU1QTF9ICi0jZGVmaW5lIEhUTUxfT0JKRUNUSU1QTF9ICisj
aWZuZGVmIEhUTUxQYXJhbUVsZW1lbnRfSAorI2RlZmluZSBIVE1MUGFyYW1FbGVtZW50X0gKIAog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAKLSNpZiBfX0FQUExFX18KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9ydW50aW1lLmg+Ci0jZWxzZQotbmFtZXNwYWNlIEtKUyB7IG5hbWVzcGFjZSBC
aW5kaW5ncyB7IGNsYXNzIEluc3RhbmNlOyB9IH0KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNzIEhUTUxJbWFnZUxvYWRlcjsKLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MUGx1Z0luRWxlbWVudCA6IHB1YmxpYyBI
VE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9F
bnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpOwotCi0gICAgU3RyaW5nIGFsaWdu
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBT
dHJpbmcgaGVpZ2h0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIZWlnaHQoY29uc3QgU3RyaW5nJik7
Ci0gICAgCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3Qg
U3RyaW5nJik7Ci0gICAgCi0gICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRX
aWR0aChjb25zdCBTdHJpbmcmKTsKLSAgICAKLSNpZiBfX0FQUExFX18KLSAgICB2aXJ0dWFsIEtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0ID0gMDsKLSNlbmRpZgot
ICAgIAotcHJvdGVjdGVkOgotICAgIFN0cmluZyBvbGROYW1lQXR0cjsKLQotI2lmIF9fQVBQTEVf
XwotICAgIG11dGFibGUgUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBtX2luc3RhbmNl
OwotI2VuZGlmCi19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxBcHBsZXRF
bGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5FbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTEFw
cGxldEVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+SFRNTEFwcGxldEVsZW1lbnQoKTsKLQotICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQotCi0gICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotICAgIAot
ICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7Ci0gICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5
bGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpOwotICAgIHZpcnR1YWwgdm9p
ZCBkZXRhY2goKTsKLSAgICAKLSNpZiBfX0FQUExFX18KLSAgICB2aXJ0dWFsIEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBTdHJpbmcg
YWx0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbHQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJp
bmcgYXJjaGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QXJjaGl2ZShjb25zdCBTdHJpbmcmKTsK
LQotICAgIFN0cmluZyBjb2RlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2RlKGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgU3RyaW5nIGNvZGVCYXNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2RlQmFz
ZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBoc3BhY2UoKSBjb25zdDsKLSAgICB2b2lk
IHNldEhzcGFjZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBvYmplY3QoKSBjb25zdDsK
LSAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB2c3BhY2Uo
KSBjb25zdDsKLSAgICB2b2lkIHNldFZzcGFjZShjb25zdCBTdHJpbmcmKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBhbGxQYXJhbXNBdmFpbGFibGUoKTsKLSAgICB2b2lkIHNldHVwQXBwbGV0KCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotCi1wcml2YXRlOgotICAgIFN0cmluZyBv
bGRJZEF0dHI7Ci0gICAgYm9vbCBtX2FsbFBhcmFtc0F2YWlsYWJsZTsKLX07Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTEVtYmVkRWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0lu
RWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxFbWJlZEVsZW1lbnQoRG9jdW1lbnQqKTsKLSAg
ICB+SFRNTEVtYmVkRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSopOwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2goKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwot
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJl
bmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0KLSNpZiBfX0FQUExFX18K
LSAgICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0
OwotI2VuZGlmCi0KLSAgICBTdHJpbmcgc3JjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29u
c3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlw
ZShjb25zdCBTdHJpbmcmKTsKLQotICAgIERlcHJlY2F0ZWRTdHJpbmcgdXJsOwotICAgIERlcHJl
Y2F0ZWRTdHJpbmcgcGx1Z2luUGFnZTsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHNlcnZpY2VUeXBl
OwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MT2JqZWN0RWxlbWVudCA6
IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxPYmplY3RFbGVt
ZW50KERvY3VtZW50Kik7Ci0gICAgfkhUTUxPYmplY3RFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDc7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJT
dHlsZSopOwotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSosIFJlbmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50
b0RvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAg
ICAKLSAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2gpOwotICAgIHZp
cnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0
dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKLQotICAgIGJvb2wgaXNJbWFnZVR5cGUoKTsKLQot
ICAgIHZvaWQgcmVuZGVyRmFsbGJhY2tDb250ZW50KCk7Ci0KLSNpZiBfX0FQUExFX18KLSAgICB2
aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0OwotI2Vu
ZGlmCi0KLSAgICBTdHJpbmcgYXJjaGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QXJjaGl2ZShj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBib3JkZXIoKSBjb25zdDsKLSAgICB2b2lkIHNl
dEJvcmRlcihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBjb2RlKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRDb2RlKGNvbnN0IFN0cmluZyYpOwotICAgIAotICAgIFN0cmluZyBjb2RlQmFzZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0Q29kZUJhc2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJp
bmcgY29kZVR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENvZGVUeXBlKGNvbnN0IFN0cmluZyYp
OwotCi0gICAgRG9jdW1lbnQqIGNvbnRlbnREb2N1bWVudCgpIGNvbnN0OwotICAgIAotICAgIFN0
cmluZyBkYXRhKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREYXRhKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgYm9vbCBkZWNsYXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWNsYXJlKGJvb2wpOwotCi0g
ICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RyaW5nIGhzcGFj
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0SHNwYWNlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3Ry
aW5nIHN0YW5kYnkoKSBjb25zdDsKLSAgICB2b2lkIHNldFN0YW5kYnkoY29uc3QgU3RyaW5nJik7
Ci0KLSAgICBpbnQgdGFiSW5kZXgoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhYkluZGV4KGludCk7
Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJp
bmcmKTsKLQotICAgIFN0cmluZyB1c2VNYXAoKSBjb25zdDsKLSAgICB2b2lkIHNldFVzZU1hcChj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB2c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFZzcGFjZShjb25zdCBTdHJpbmcmKTsKLQotICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29tcGxldGU7IH0KLSAgICB2b2lkIHNldENvbXBsZXRlKGJvb2wgY29tcGxldGUp
OwotICAgIAotICAgIGJvb2wgaXNEb2NOYW1lZEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2RvY05h
bWVkSXRlbTsgfQotCi0gICAgRGVwcmVjYXRlZFN0cmluZyBzZXJ2aWNlVHlwZTsKLSAgICBEZXBy
ZWNhdGVkU3RyaW5nIHVybDsKLSAgICBXZWJDb3JlOjpTdHJpbmcgY2xhc3NJZDsKLSAgICBib29s
IG5lZWRXaWRnZXRVcGRhdGUgOiAxOwotICAgIGJvb2wgbV91c2VGYWxsYmFja0NvbnRlbnQgOiAx
OwotICAgIEhUTUxJbWFnZUxvYWRlciogbV9pbWFnZUxvYWRlcjsKLQotcHJpdmF0ZToKLSAgICB2
b2lkIHVwZGF0ZURvY05hbWVkSXRlbSgpOwotICAgIFN0cmluZyBvbGRJZEF0dHI7Ci0gICAgYm9v
bCBtX2NvbXBsZXRlOwotICAgIGJvb2wgbV9kb2NOYW1lZEl0ZW07Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KIGNsYXNzIEhUTUxQYXJhbUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQK
IHsKICAgICBmcmllbmQgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnQ7CkBAIC0yOTMsNiArNjAsNyBA
QCBwdWJsaWM6CiAgICAgQXRvbWljU3RyaW5nIG1fdmFsdWU7CiB9OwogCisKIH0KIAogI2VuZGlm
CkluZGV4OiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5oCShyZXZpc2lvbiAxNDI1NykKKysrIGh0bWwvSFRNTE9iamVjdEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIyLDEwIEBACiAgKgogICovCiAKLSNpZm5k
ZWYgSFRNTF9PQkpFQ1RJTVBMX0gKLSNkZWZpbmUgSFRNTF9PQkpFQ1RJTVBMX0gKKyNpZm5kZWYg
SFRNTE9iamVjdEVsZW1lbnRfSAorI2RlZmluZSBIVE1MT2JqZWN0RWxlbWVudF9ICiAKLSNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCiAKICNp
ZiBfX0FQUExFX18KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9ydW50aW1lLmg+CkBAIC0zOCwx
MzUgKzM4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEZvcm1FbGVtZW50Owog
Y2xhc3MgSFRNTEltYWdlTG9hZGVyOwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhU
TUxQbHVnSW5FbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRN
TFBsdWdJbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdD
aGlsZCk7Ci0KLSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNv
bnN0IFN0cmluZyYpOwotICAgIAotICAgIFN0cmluZyBoZWlnaHQoKSBjb25zdDsKLSAgICB2b2lk
IHNldEhlaWdodChjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBTdHJpbmcgd2lk
dGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKGNvbnN0IFN0cmluZyYpOwotICAgIAotI2lm
IF9fQVBQTEVfXwotICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdldEluc3Rh
bmNlKCkgY29uc3QgPSAwOwotI2VuZGlmCi0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG9s
ZE5hbWVBdHRyOwotCi0jaWYgX19BUFBMRV9fCi0gICAgbXV0YWJsZSBSZWZQdHI8S0pTOjpCaW5k
aW5nczo6SW5zdGFuY2U+IG1faW5zdGFuY2U7Ci0jZW5kaWYKLX07Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotY2xhc3MgSFRNTEFwcGxldEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBsdWdJbkVsZW1l
bnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MQXBwbGV0RWxlbWVudChEb2N1bWVudCopOwotICAgIH5I
VE1MQXBwbGV0RWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiAxOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKik7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVk
ZWQoUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVy
ZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJl
bmRlcmVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIAotI2lmIF9fQVBQTEVf
XwotICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdldEluc3RhbmNlKCkgY29u
c3Q7Ci0jZW5kaWYKLQotICAgIFN0cmluZyBhbHQoKSBjb25zdDsKLSAgICB2b2lkIHNldEFsdChj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBhcmNoaXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRBcmNoaXZlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNvZGUoKSBjb25zdDsKLSAg
ICB2b2lkIHNldENvZGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgY29kZUJhc2UoKSBj
b25zdDsKLSAgICB2b2lkIHNldENvZGVCYXNlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5n
IGhzcGFjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0SHNwYWNlKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgU3RyaW5nIG9iamVjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgU3RyaW5nIHZzcGFjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VnNwYWNlKGNv
bnN0IFN0cmluZyYpOwotCi0gICAgdmlydHVhbCBib29sIGFsbFBhcmFtc0F2YWlsYWJsZSgpOwot
ICAgIHZvaWQgc2V0dXBBcHBsZXQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRl
ZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7
Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG9sZElkQXR0cjsKLSAgICBib29sIG1fYWxsUGFyYW1z
QXZhaWxhYmxlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MRW1iZWRF
bGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5FbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTEVt
YmVkRWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MRW1iZWRFbGVtZW50KCk7Ci0KLSAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNo
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KSBjb25zdDsKLQotI2lmIF9fQVBQTEVfXwotICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5z
dGFuY2UqIGdldEluc3RhbmNlKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIFN0cmluZyBzcmMoKSBj
b25zdDsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB0eXBl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgRGVwcmVj
YXRlZFN0cmluZyB1cmw7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBwbHVnaW5QYWdlOwotICAgIERl
cHJlY2F0ZWRTdHJpbmcgc2VydmljZVR5cGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
IGNsYXNzIEhUTUxPYmplY3RFbGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5FbGVtZW50CiB7CiBw
dWJsaWM6CkBAIC0yNjAsMzkgKzEzMSw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RvY05hbWVk
SXRlbTsKIH07CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFBhcmFtRWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotICAgIGZyaWVuZCBjbGFzcyBIVE1MQXBwbGV0RWxl
bWVudDsKLXB1YmxpYzoKLSAgICBIVE1MUGFyYW1FbGVtZW50KERvY3VtZW50Kik7Ci0gICAgfkhU
TUxQYXJhbUVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgdmlydHVh
bCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotCi0gICAgU3RyaW5nIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3Ry
aW5nJik7Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25z
dCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KLSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHZhbHVl
VHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VmFsdWVUeXBlKGNvbnN0IFN0cmluZyYpOwotCi0g
cHJvdGVjdGVkOgotICAgIEF0b21pY1N0cmluZyBtX25hbWU7Ci0gICAgQXRvbWljU3RyaW5nIG1f
dmFsdWU7Ci19OwotCiB9CiAKICNlbmRpZgpJbmRleDogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDI1
NykKKysrIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDM0
OCArMjEsMjMgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgog
ICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sX29iamVjdGltcGwuaCIK
KyNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50LmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5h
bWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkRlcHJlY2F0
ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2lu
Y2x1ZGUgIlJlbmRlckFwcGxldC5oIgotI2luY2x1ZGUgIlJlbmRlckVtcHR5QXBwbGV0LmgiCi0j
aW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiY3Nz
aGVscGVyLmgiCi0jaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgotI2luY2x1ZGUgImRvbTJf
ZXZlbnRzaW1wbC5oIgotI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW5jbHVkZSAicmVu
ZGVyX2ZyYW1lcy5oIgorI2luY2x1ZGUgInJlbmRlcl9yZXBsYWNlZC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MUGx1Z0luRWxlbWVudDo6
SFRNTFBsdWdJbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotU3RyaW5nIEhU
TUxQbHVnSW5FbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpzZXRBbGlnbihjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsK
LX0KLQotU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50OjpoZWlnaHQoKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1l
bnQ6OnNldEhlaWdodChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSho
ZWlnaHRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6bmFtZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQg
SFRNTFBsdWdJbkVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxQbHVnSW5FbGVt
ZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIp
OwotfQotCi12b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBI
VE1MUGx1Z0luRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gd2lkdGhBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGhlaWdodEF0dHIgfHwKLSAg
ICAgICAgYXR0ck5hbWUgPT0gdnNwYWNlQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoc3Bh
Y2VBdHRyKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBlVW5pdmVyc2FsOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRy
KSB7Ci0gICAgICAgIHJlc3VsdCA9IGVSZXBsYWNlZDsgLy8gU2hhcmUgd2l0aCA8aW1nPiBzaW5j
ZSB0aGUgYWxpZ25tZW50IGJlaGF2aW9yIGlzIHRoZSBzYW1lLgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRy
TmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gd2lkdGhBdHRyKQotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgs
IGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoZWlnaHRBdHRy
KQotICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfSEVJR0hULCBhdHRyLT52YWx1
ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdnNwYWNlQXR0cikgewotICAgICAg
ICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1RPUCwgYXR0ci0+dmFsdWUoKSk7
Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBhdHRy
LT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoc3BhY2VBdHRyKSB7
Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgYXR0ci0+
dmFsdWUoKSk7Ci0gICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklH
SFQsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWdu
QXR0cikKLSAgICAgICAgYWRkSFRNTEFsaWdubWVudChhdHRyKTsKLSAgICBlbHNlCi0gICAgICAg
IEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0gICAgCi0KLWJvb2wg
SFRNTFBsdWdJbkVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQotewotICAg
IHJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykgfHwgSFRNTEVsZW1lbnQ6OmNo
ZWNrRFREKG5ld0NoaWxkKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MQXBwbGV0
RWxlbWVudDo6SFRNTEFwcGxldEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLTogSFRNTFBsdWdJbkVs
ZW1lbnQoYXBwbGV0VGFnLCBkb2MpCi0sIG1fYWxsUGFyYW1zQXZhaWxhYmxlKGZhbHNlKQotewot
fQotCi1IVE1MQXBwbGV0RWxlbWVudDo6fkhUTUxBcHBsZXRFbGVtZW50KCkKLXsKLSNpZiBfX0FQ
UExFX18KLSAgICAvLyBtX2luc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cCBpbiBk
ZXRhY2goKS4KLSAgICBhc3NlcnQoIW1faW5zdGFuY2UpOwotI2VuZGlmCi19Ci0KLXZvaWQgSFRN
TEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIgfHwKLSAgICAgICAgYXR0ci0+
bmFtZSgpID09IGFyY2hpdmVBdHRyIHx8Ci0gICAgICAgIGF0dHItPm5hbWUoKSA9PSBjb2RlQXR0
ciB8fAotICAgICAgICBhdHRyLT5uYW1lKCkgPT0gY29kZWJhc2VBdHRyIHx8Ci0gICAgICAgIGF0
dHItPm5hbWUoKSA9PSBtYXlzY3JpcHRBdHRyIHx8Ci0gICAgICAgIGF0dHItPm5hbWUoKSA9PSBv
YmplY3RBdHRyKSB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKLSAgICAgICAgU3RyaW5nIG5ld05hbWVBdHRyID0gYXR0
ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hU
TUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIGRvYy0+cmVtb3Zl
TmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG5l
d05hbWVBdHRyKTsKLSAgICAgICAgfQotICAgICAgICBvbGROYW1lQXR0ciA9IG5ld05hbWVBdHRy
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikgewotICAgICAgICBTdHJp
bmcgbmV3SWRBdHRyID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAm
JiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRG9jdW1l
bnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAg
ICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAg
ICAgIGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0ZW0obmV3SWRBdHRyKTsKLSAgICAgICAgfQotICAg
ICAgICBvbGRJZEF0dHIgPSBuZXdJZEF0dHI7Ci0gICAgICAgIC8vIGFsc28gY2FsbCBzdXBlcmNs
YXNzCi0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1bWVudCgpCi17Ci0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAg
ICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9j
dW1lbnQoKSk7Ci0gICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAg
ICAgZG9jLT5hZGREb2NFeHRyYU5hbWVkSXRlbShvbGRJZEF0dHIpOwotICAgIH0KLQotICAgIEhU
TUxQbHVnSW5FbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotfQotCi12b2lkIEhUTUxB
cHBsZXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRp
Y19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5yZW1vdmVO
YW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICBkb2MtPnJlbW92ZURvY0V4dHJhTmFtZWRJ
dGVtKG9sZElkQXR0cik7Ci0gICAgfQotCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnJlbW92ZWRG
cm9tRG9jdW1lbnQoKTsKLX0KLQotYm9vbCBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29k
ZUF0dHIpLmlzTnVsbCgpOwotfQotCi1SZW5kZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKLXsK
LSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotCi0gICAgaWYgKGZyYW1l
ICYmIGZyYW1lLT5qYXZhRW5hYmxlZCgpKSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGFyZ3M7Ci0KLSAgICAgICAgYXJncy5zZXQoImNvZGUiLCBnZXRBdHRyaWJ1dGUoY29kZUF0
dHIpKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2RlQmFzZSA9IGdldEF0dHJpYnV0
ZShjb2RlYmFzZUF0dHIpOwotICAgICAgICBpZighY29kZUJhc2UuaXNOdWxsKCkpCi0gICAgICAg
ICAgICBhcmdzLnNldCgiY29kZUJhc2UiLCBjb2RlQmFzZSk7Ci0gICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSA9IGdldEF0dHJpYnV0ZShkb2N1bWVudCgpLT5odG1sTW9kZSgpICE9IERv
Y3VtZW50OjpYSHRtbCA/IG5hbWVBdHRyIDogaWRBdHRyKTsKLSAgICAgICAgaWYgKCFuYW1lLmlz
TnVsbCgpKQotICAgICAgICAgICAgYXJncy5zZXQoIm5hbWUiLCBuYW1lKTsKLSAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBhcmNoaXZlID0gZ2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyKTsKLSAg
ICAgICAgaWYgKCFhcmNoaXZlLmlzTnVsbCgpKQotICAgICAgICAgICAgYXJncy5zZXQoImFyY2hp
dmUiLCBhcmNoaXZlKTsKLQotICAgICAgICBhcmdzLnNldCgiYmFzZVVSTCIsIGRvY3VtZW50KCkt
PmJhc2VVUkwoKSk7Ci0KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYXlTY3JpcHQgPSBn
ZXRBdHRyaWJ1dGUobWF5c2NyaXB0QXR0cik7Ci0gICAgICAgIGlmICghbWF5U2NyaXB0LmlzTnVs
bCgpKQotICAgICAgICAgICAgYXJncy5zZXQoIm1heVNjcmlwdCIsIG1heVNjcmlwdCk7Ci0KLSAg
ICAgICAgLy8gT3RoZXIgYXJndW1lbnRzIChmcm9tIDxQQVJBTT4gdGFncykgYXJlIGFkZGVkIGxh
dGVyLgotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5ldyAoZG9jdW1lbnQoKS0+cmVuZGVyQXJl
bmEoKSkgUmVuZGVyQXBwbGV0KHRoaXMsIGFyZ3MpOwotICAgIH0KLQotICAgIC8vICMjIyByZW1v
dmUgbWUuIHdlIHNob3VsZCBuZXZlciBzaG93IGFuIGVtcHR5IGFwcGxldCwgaW5zdGVhZAotICAg
IC8vIHJlbmRlciB0aGUgYWx0ZXJuYXRpdmUgY29udGVudCBnaXZlbiBieSB0aGUgd2VicGFnZQot
ICAgIHJldHVybiBuZXcgKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpIFJlbmRlckVtcHR5QXBw
bGV0KHRoaXMpOwotfQotCi0jaWYgX19BUFBMRV9fCi1LSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAq
SFRNTEFwcGxldEVsZW1lbnQ6OmdldEluc3RhbmNlKCkgY29uc3QKLXsKLSAgICBGcmFtZSAqZnJh
bWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5qYXZh
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX2luc3RhbmNlKQotICAg
ICAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLSAgICAKLSAgICBSZW5kZXJBcHBsZXQgKnIg
PSBzdGF0aWNfY2FzdDxSZW5kZXJBcHBsZXQqPihyZW5kZXJlcigpKTsKLSAgICBpZiAocikgewot
ICAgICAgICByLT5jcmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSgpOwotICAgICAgICBpZiAoci0+d2lk
Z2V0KCkpCi0gICAgICAgICAgICAvLyBDYWxsIGludG8gdGhlIGZyYW1lIChhbmQgb3ZlciB0aGUg
YnJpZGdlKSB0byBwdWxsIHRoZSBCaW5kaW5nczo6SW5zdGFuY2UKLSAgICAgICAgICAgIC8vIGZy
b20gdGhlIGd1dHMgb2YgdGhlIHBsdWdpbi4KLSAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFt
ZS0+Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoci0+d2lkZ2V0KCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLX0KLSNlbmRpZgotCi12b2lkIEhUTUxBcHBsZXRFbGVt
ZW50OjpjbG9zZVJlbmRlcmVyKCkKLXsKLSAgICAvLyBUaGUgcGFyc2VyIGp1c3QgcmVhY2hlZCA8
L2FwcGxldD4sIHNvIGFsbCB0aGUgcGFyYW1zIGFyZSBhdmFpbGFibGUgbm93LgotICAgIG1fYWxs
UGFyYW1zQXZhaWxhYmxlID0gdHJ1ZTsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVu
ZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7IC8vIFRoaXMgd2lsbCBjYXVzZSBpdCB0byBj
cmVhdGUgaXRzIHdpZGdldCAmIHRoZSBKYXZhIGFwcGxldAotICAgIEhUTUxQbHVnSW5FbGVtZW50
OjpjbG9zZVJlbmRlcmVyKCk7Ci19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OmRldGFjaCgp
Ci17Ci0jaWYgX19BUFBMRV9fCi0gICAgbV9pbnN0YW5jZSA9IDA7Ci0jZW5kaWYKLSAgICBIVE1M
UGx1Z0luRWxlbWVudDo6ZGV0YWNoKCk7Ci19Ci0KLWJvb2wgSFRNTEFwcGxldEVsZW1lbnQ6OmFs
bFBhcmFtc0F2YWlsYWJsZSgpCi17Ci0gICAgcmV0dXJuIG1fYWxsUGFyYW1zQXZhaWxhYmxlOwot
fQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OmFsdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0
QWx0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHZh
bHVlKTsKLX0KLQotU3RyaW5nIEhUTUxBcHBsZXRFbGVtZW50OjphcmNoaXZlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBw
bGV0RWxlbWVudDo6c2V0QXJjaGl2ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0
dHJpYnV0ZShhcmNoaXZlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1l
bnQ6OmNvZGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZUF0dHIpOwot
fQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpzZXRDb2RlKGNvbnN0IFN0cmluZyAmdmFsdWUp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1M
QXBwbGV0RWxlbWVudDo6Y29kZUJhc2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoY29kZWJhc2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0Q29kZUJh
c2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRy
LCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXBwbGV0RWxlbWVudDo6aHNwYWNlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhzcGFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxB
cHBsZXRFbGVtZW50OjpzZXRIc3BhY2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUoaHNwYWNlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1l
bnQ6Om9iamVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShvYmplY3RBdHRy
KTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyAm
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG9iamVjdEF0dHIsIHZhbHVlKTsKLX0KLQotU3Ry
aW5nIEhUTUxBcHBsZXRFbGVtZW50Ojp2c3BhY2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUodnNwYWNlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnNldFZz
cGFjZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VBdHRy
LCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEVtYmVkRWxlbWVudDo6
SFRNTEVtYmVkRWxlbWVudChEb2N1bWVudCAqZG9jKQotOiBIVE1MUGx1Z0luRWxlbWVudChlbWJl
ZFRhZywgZG9jKQorSFRNTEVtYmVkRWxlbWVudDo6SFRNTEVtYmVkRWxlbWVudChEb2N1bWVudCog
ZG9jKQorICAgIDogSFRNTFBsdWdJbkVsZW1lbnQoZW1iZWRUYWcsIGRvYykKIHsKIH0KIApAQCAt
Mzc3LDcgKzUyLDcgQEAgSFRNTEVtYmVkRWxlbWVudDo6fkhUTUxFbWJlZEVsZW1lbnQoKQogI2lm
IF9fQVBQTEVfXwogS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxFbWJlZEVsZW1lbnQ6Omdl
dEluc3RhbmNlKCkgY29uc3QKIHsKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFt
ZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM5Miw3ICs2Nyw3IEBAIEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlICpIVE1MRW1iZWRFbGVtZW4KICAgICB9CiAKICAgICBpZiAociAmJiByLT5p
c1dpZGdldCgpKXsKLSAgICAgICAgaWYgKFdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyV2lkZ2V0ICo+KHIpLT53aWRnZXQoKSkgeworICAgICAgICBpZiAoV2lkZ2V0KiB3aWRnZXQg
PSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyKS0+d2lkZ2V0KCkpIHsKICAgICAgICAgICAg
IC8vIENhbGwgaW50byB0aGUgZnJhbWUgKGFuZCBvdmVyIHRoZSBicmlkZ2UpIHRvIHB1bGwgdGhl
IEJpbmRpbmdzOjpJbnN0YW5jZQogICAgICAgICAgICAgLy8gZnJvbSB0aGUgZ3V0cyBvZiB0aGUg
SmF2YSBWTS4KICAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+Z2V0RW1iZWRJbnN0YW5j
ZUZvcldpZGdldCh3aWRnZXQpOwpAQCAtNDQxLDcgKzExNiw3IEBAIHZvaWQgSFRNTEVtYmVkRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBu
YW1lQXR0cikgewogICAgICAgICBTdHJpbmcgbmV3TmFtZUF0dHIgPSBhdHRyLT52YWx1ZSgpOwog
ICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkp
IHsKLSAgICAgICAgICAgIEhUTUxEb2N1bWVudCAqZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3Vt
ZW50ICo+KGRvY3VtZW50KCkpOworICAgICAgICAgICAgSFRNTERvY3VtZW50KiBkb2MgPSBzdGF0
aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1bWVudCgpKTsKICAgICAgICAgICAgIGRvYy0+cmVt
b3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKICAgICAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVt
KG5ld05hbWVBdHRyKTsKICAgICAgICAgfQpAQCAtNTMxLDUxNCArMjA2LDQgQEAgdm9pZCBIVE1M
RW1iZWRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cgogICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgdmFsdWUpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxPYmplY3RFbGVtZW50
OjpIVE1MT2JqZWN0RWxlbWVudChEb2N1bWVudCAqZG9jKSAKLTogSFRNTFBsdWdJbkVsZW1lbnQo
b2JqZWN0VGFnLCBkb2MpCi0sIG1faW1hZ2VMb2FkZXIoMCkKLXsKLSAgICBuZWVkV2lkZ2V0VXBk
YXRlID0gZmFsc2U7Ci0gICAgbV91c2VGYWxsYmFja0NvbnRlbnQgPSBmYWxzZTsKLSAgICBtX2Nv
bXBsZXRlID0gZmFsc2U7Ci0gICAgbV9kb2NOYW1lZEl0ZW0gPSB0cnVlOwotfQotCi1IVE1MT2Jq
ZWN0RWxlbWVudDo6fkhUTUxPYmplY3RFbGVtZW50KCkKLXsKLSNpZiBfX0FQUExFX18KLSAgICAv
LyBtX2luc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cCBpbiBkZXRhY2goKS4KLSAg
ICBhc3NlcnQoIW1faW5zdGFuY2UpOwotI2VuZGlmCi0gICAgCi0gICAgZGVsZXRlIG1faW1hZ2VM
b2FkZXI7Ci19Ci0KLSNpZiBfX0FQUExFX18KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1M
T2JqZWN0RWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAotewotICAgIEZyYW1lICpmcmFtZSA9
IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpZiAobV9pbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7
Ci0KLSAgICBpZiAoUmVuZGVyT2JqZWN0ICpyID0gcmVuZGVyZXIoKSkgewotICAgICAgICBpZiAo
ci0+aXNXaWRnZXQoKSkgewotICAgICAgICAgICAgaWYgKFdpZGdldCAqd2lkZ2V0ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+KHIpLT53aWRnZXQoKSkgewotICAgICAgICAgICAgICAgIC8v
IENhbGwgaW50byB0aGUgZnJhbWUgKGFuZCBvdmVyIHRoZSBicmlkZ2UpIHRvIHB1bGwgdGhlIEJp
bmRpbmdzOjpJbnN0YW5jZQotICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIGd1dHMgb2YgdGhl
IHBsdWdpbi4KLSAgICAgICAgICAgICAgICBtX2luc3RhbmNlID0gZnJhbWUtPmdldE9iamVjdElu
c3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAgICAgICAgICAgICAgLy8gQXBwbGV0IG1heSBz
cGVjaWZpZWQgd2l0aCA8b2JqZWN0PiB0YWcuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2luc3Rh
bmNlKQotICAgICAgICAgICAgICAgICAgICBtX2luc3RhbmNlID0gZnJhbWUtPmdldEFwcGxldElu
c3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLX0KLSNlbmRpZgotCi1IVE1MRm9ybUVs
ZW1lbnQgKkhUTUxPYmplY3RFbGVtZW50Ojpmb3JtKCkgY29uc3QKLXsKLSAgICBmb3IgKE5vZGUg
KnAgPSBwYXJlbnROb2RlKCk7IHAgIT0gMDsgcCA9IHAtPnBhcmVudE5vZGUoKSkgewotICAgICAg
ICBpZiAocC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUVsZW1lbnQgKj4ocCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwot
fQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgU3RyaW5nIHZhbCA9IGF0dHItPnZhbHVlKCk7Ci0gICAg
aW50IHBvczsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHNl
cnZpY2VUeXBlID0gdmFsLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwotICAgICAgICBwb3Mg
PSBzZXJ2aWNlVHlwZS5maW5kKCAiOyIgKTsKLSAgICAgICAgaWYgKCBwb3MhPS0xICkKLSAgICAg
ICAgICBzZXJ2aWNlVHlwZSA9IHNlcnZpY2VUeXBlLmxlZnQoIHBvcyApOwotICAgICAgICBpZiAo
cmVuZGVyZXIoKSkKLSAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAg
aWYgKCFpc0ltYWdlVHlwZSgpICYmIG1faW1hZ2VMb2FkZXIpIHsKLSAgICAgICAgICBkZWxldGUg
bV9pbWFnZUxvYWRlcjsKLSAgICAgICAgICBtX2ltYWdlTG9hZGVyID0gMDsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGRhdGFBdHRyKSB7Ci0gICAgICAgIHVybCA9
IFdlYkNvcmU6OnBhcnNlVVJMKHZhbCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICBpZiAo
cmVuZGVyZXIoKSkKLSAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAg
aWYgKHJlbmRlcmVyKCkgJiYgaXNJbWFnZVR5cGUoKSkgewotICAgICAgICAgIGlmICghbV9pbWFn
ZUxvYWRlcikKLSAgICAgICAgICAgICAgbV9pbWFnZUxvYWRlciA9IG5ldyBIVE1MSW1hZ2VMb2Fk
ZXIodGhpcyk7Ci0gICAgICAgICAgbV9pbWFnZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNsYXNzaWRBdHRyKSB7
Ci0gICAgICAgIGNsYXNzSWQgPSB2YWw7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAg
ICAgIG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9ubG9hZEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobG9hZEV2ZW50
LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpIHsK
LSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIodW5sb2FkRXZlbnQsIGF0dHIpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7Ci0gICAgICAgICAgICBTdHJpbmcg
bmV3TmFtZUF0dHIgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKGlzRG9jTmFtZWRJ
dGVtKCkgJiYgaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsK
LSAgICAgICAgICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1
bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgICAgICBkb2MtPnJlbW92ZU5hbWVkSXRl
bShvbGROYW1lQXR0cik7Ci0gICAgICAgICAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0obmV3TmFt
ZUF0dHIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb2xkTmFtZUF0dHIgPSBuZXdOYW1l
QXR0cjsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKLSAgICAgICAg
U3RyaW5nIG5ld0lkQXR0ciA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChpc0RvY05hbWVk
SXRlbSgpICYmIGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7
Ci0gICAgICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFOYW1lZEl0
ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0ZW0obmV3
SWRBdHRyKTsKLSAgICAgICAgfQotICAgICAgICBvbGRJZEF0dHIgPSBuZXdJZEF0dHI7Ci0gICAg
ICAgIC8vIGFsc28gY2FsbCBzdXBlcmNsYXNzCi0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTFBsdWdJ
bkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1Eb2N1bWVudCogSFRN
TE9iamVjdEVsZW1lbnQ6OmNvbnRlbnREb2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgLy8gIyMjCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVk
ZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIGlmIChtX3VzZUZhbGxiYWNrQ29udGVudCB8
fCBpc0ltYWdlVHlwZSgpKQotICAgICAgICByZXR1cm4gSFRNTFBsdWdJbkVsZW1lbnQ6OnJlbmRl
cmVySXNOZWVkZWQoc3R5bGUpOwotCi0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGx1Z2luc0VuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1SZW5kZXJPYmpl
Y3QgKkhUTUxPYmplY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEs
IFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBpZiAobV91c2VGYWxsYmFja0NvbnRlbnQpCi0g
ICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OmNyZWF0ZU9iamVjdCh0aGlzLCBzdHlsZSk7Ci0g
ICAgaWYgKGlzSW1hZ2VUeXBlKCkpCi0gICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJ
bWFnZSh0aGlzKTsKLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyUGFydE9iamVjdCh0aGlz
KTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBIVE1MUGx1
Z0luRWxlbWVudDo6YXR0YWNoKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKSAmJiAhbV91c2VGYWxs
YmFja0NvbnRlbnQpIHsKLSAgICAgICAgaWYgKGlzSW1hZ2VUeXBlKCkpIHsKLSAgICAgICAgICAg
IGlmICghbV9pbWFnZUxvYWRlcikKLSAgICAgICAgICAgICAgICBtX2ltYWdlTG9hZGVyID0gbmV3
IEhUTUxJbWFnZUxvYWRlcih0aGlzKTsKLSAgICAgICAgICAgIG1faW1hZ2VMb2FkZXItPnVwZGF0
ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICAg
ICAgICAgIFJlbmRlckltYWdlKiBpbWFnZU9iaiA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4o
cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgaW1hZ2VPYmotPnNldENhY2hlZEltYWdlKG1f
aW1hZ2VMb2FkZXItPmltYWdlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKG5lZWRXaWRnZXRVcGRhdGUpIHsKLSAgICAgICAgICAgICAgICAvLyBT
ZXQgbmVlZFdpZGdldFVwZGF0ZSB0byBmYWxzZSBiZWZvcmUgY2FsbGluZyB1cGRhdGVXaWRnZXQg
YmVjYXVzZSB1cGRhdGVXaWRnZXQgbWF5IGNhdXNlCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBt
ZXRob2Qgb3IgcmVjYWxjU3R5bGUgKHdoaWNoIGFsc28gY2FsbHMgdXBkYXRlV2lkZ2V0KSB0byBi
ZSBjYWxsZWQuCi0gICAgICAgICAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihyZW5kZXJlcigpKS0+
dXBkYXRlV2lkZ2V0KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5l
ZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIHNldENoYW5nZWQoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVu
dDo6Y2xvc2VSZW5kZXJlcigpCi17Ci0gICAgLy8gVGhlIHBhcnNlciBqdXN0IHJlYWNoZWQgPC9v
YmplY3Q+LgotICAgIHNldENvbXBsZXRlKHRydWUpOwotICAgIAotICAgIEhUTUxQbHVnSW5FbGVt
ZW50OjpjbG9zZVJlbmRlcmVyKCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldENv
bXBsZXRlKGJvb2wgY29tcGxldGUpCi17Ci0gICAgaWYgKGNvbXBsZXRlICE9IG1fY29tcGxldGUp
IHsKLSAgICAgICAgbV9jb21wbGV0ZSA9IGNvbXBsZXRlOwotICAgICAgICBpZiAoY29tcGxldGUg
JiYgIW1fdXNlRmFsbGJhY2tDb250ZW50KSB7Ci0gICAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChpbkRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAg
c2V0Q2hhbmdlZCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEhUTUxPYmplY3RFbGVt
ZW50OjpkZXRhY2goKQotewotICAgIGlmIChhdHRhY2hlZCgpICYmIHJlbmRlcmVyKCkgJiYgIW1f
dXNlRmFsbGJhY2tDb250ZW50KSB7Ci0gICAgICAgIC8vIFVwZGF0ZSB0aGUgd2lkZ2V0IHRoZSBu
ZXh0IHRpbWUgd2UgYXR0YWNoIChkZXRhY2hpbmcgZGVzdHJveXMgdGhlIHBsdWdpbikuCi0gICAg
ICAgIG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwotICAgIH0KLQotI2lmIF9fQVBQTEVfXwotICAg
IG1faW5zdGFuY2UgPSAwOwotI2VuZGlmCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgp
OwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17
Ci0gICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQo
KSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIp
OwotICAgICAgICBkb2MtPmFkZERvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7Ci0gICAgfQot
Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci19Ci0KLXZv
aWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIGlmIChp
c0RvY05hbWVkSXRlbSgpICYmIGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAg
ICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1l
bnQoKSk7Ci0gICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAg
ICAgZG9jLT5yZW1vdmVEb2NFeHRyYU5hbWVkSXRlbShvbGRJZEF0dHIpOwotICAgIH0KLQotICAg
IEhUTUxQbHVnSW5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci19Ci0KLXZvaWQgSFRN
TE9iamVjdEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoKQotewotICAgIGlmICgh
bV91c2VGYWxsYmFja0NvbnRlbnQgJiYgbmVlZFdpZGdldFVwZGF0ZSAmJiByZW5kZXJlcigpICYm
ICFpc0ltYWdlVHlwZSgpKSB7Ci0gICAgICAgIGRldGFjaCgpOwotICAgICAgICBhdHRhY2goKTsK
LSAgICB9Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnJlY2FsY1N0eWxlKGNoKTsKLX0KLQotdm9p
ZCBIVE1MT2JqZWN0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKLXsKLSAgICB1cGRhdGVEb2NO
YW1lZEl0ZW0oKTsKLSAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFtX3VzZUZhbGxiYWNrQ29udGVu
dCkgewotICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgc2V0Q2hhbmdl
ZCgpOwotICAgIH0KLX0KLQotYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUo
QXR0cmlidXRlICphdHRyKSBjb25zdAotewotICAgIHJldHVybiAoYXR0ci0+bmFtZSgpID09IGRh
dGFBdHRyIHx8IChhdHRyLT5uYW1lKCkgPT0gdXNlbWFwQXR0ciAmJiBhdHRyLT52YWx1ZSgpLmRv
bVN0cmluZygpWzBdICE9ICcjJykpOwotfQotCi1ib29sIEhUTUxPYmplY3RFbGVtZW50Ojppc0lt
YWdlVHlwZSgpCi17Ci0gICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSAmJiB1cmwuc3RhcnRz
V2l0aCgiZGF0YToiKSkgewotICAgICAgICAvLyBFeHRyYWN0IHRoZSBNSU1FIHR5cGUgZnJvbSB0
aGUgZGF0YSBVUkwuCi0gICAgICAgIGludCBpbmRleCA9IHVybC5maW5kKCc7Jyk7Ci0gICAgICAg
IGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgICAgIGluZGV4ID0gdXJsLmZpbmQoJywnKTsKLSAg
ICAgICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICBpbnQgbGVuID0gaW5kZXggLSA1
OwotICAgICAgICAgICAgaWYgKGxlbiA+IDApCi0gICAgICAgICAgICAgICAgc2VydmljZVR5cGUg
PSB1cmwubWlkKDUsIGxlbik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2Vy
dmljZVR5cGUgPSAidGV4dC9wbGFpbiI7IC8vIERhdGEgVVJMcyB3aXRoIG5vIE1JTUUgdHlwZSBh
cmUgY29uc2lkZXJlZCB0ZXh0L3BsYWluLgotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBJbWFnZTo6c3VwcG9ydHNUeXBlKHNlcnZpY2VUeXBlKTsKLX0KLQotdm9pZCBIVE1MT2Jq
ZWN0RWxlbWVudDo6cmVuZGVyRmFsbGJhY2tDb250ZW50KCkKLXsKLSAgICBpZiAobV91c2VGYWxs
YmFja0NvbnRlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgb3Vyc2VsdmVzIGFz
IHVzaW5nIHRoZSBmYWxsYmFjayBjb250ZW50LgotICAgIG1fdXNlRmFsbGJhY2tDb250ZW50ID0g
dHJ1ZTsKLQotICAgIC8vIE5vdyBkbyBhIGRldGFjaCBhbmQgcmVhdHRhY2guICAgIAotICAgIC8v
IEZJWE1FOiBTdHlsZSBnZXRzIHJlY2FsY3VsYXRlZCB3aGljaCBpcyBzdWJvcHRpbWFsLgotICAg
IGRldGFjaCgpOwotICAgIGF0dGFjaCgpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50Ojp1
cGRhdGVEb2NOYW1lZEl0ZW0oKQotewotICAgIC8vIFRoZSBydWxlIGlzICI8b2JqZWN0PiBlbGVt
ZW50cyB3aXRoIG5vIGNoaWxkcmVuIG90aGVyIHRoYW4KLSAgICAvLyA8cGFyYW0+IGVsZW1lbnRz
IGFuZCB3aGl0ZXNwYWNlIGNhbiBiZSBmb3VuZCBieSBuYW1lIGluIGEKLSAgICAvLyBkb2N1bWVu
dCwgYW5kIG90aGVyIDxvYmplY3Q+IGVsZW1lbnRzIGNhbm5vdC4iCi0gICAgYm9vbCB3YXNOYW1l
ZEl0ZW0gPSBtX2RvY05hbWVkSXRlbTsKLSAgICBib29sIGlzTmFtZWRJdGVtID0gdHJ1ZTsKLSAg
ICBOb2RlICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoY2hpbGQgJiYgaXNOYW1l
ZEl0ZW0pIHsKLSAgICAgICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAg
ICAgIGlmICghc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihjaGlsZCktPmhhc1RhZ05hbWUocGFyYW1U
YWcpKQotICAgICAgICAgICAgICAgIGlzTmFtZWRJdGVtID0gZmFsc2U7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2Fz
dDxUZXh0ICo+KGNoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAgICAgICAgICAg
ICAgIGlzTmFtZWRJdGVtID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXNO
YW1lZEl0ZW0gPSBmYWxzZTsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsK
LSAgICB9Ci0gICAgaWYgKGlzTmFtZWRJdGVtICE9IHdhc05hbWVkSXRlbSAmJiBkb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIEhUTUxEb2N1bWVudCAqZG9jID0gc3RhdGlj
X2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoaXNOYW1lZEl0
ZW0pIHsKLSAgICAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAg
ICAgICAgIGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAg
ICAgICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBtX2RvY05hbWVkSXRlbSA9IGlzTmFtZWRJdGVtOwotfQotCi1TdHJp
bmcgSFRNTE9iamVjdEVsZW1lbnQ6OmNvZGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoY29kZUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRDb2RlKGNv
bnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGVBdHRyLCB2YWx1ZSk7
Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6YXJjaGl2ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShhcmNoaXZlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OnNldEFyY2hpdmUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoYXJjaGl2ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojpi
b3JkZXIoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYm9yZGVyQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEJvcmRlcihjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShib3JkZXJBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBI
VE1MT2JqZWN0RWxlbWVudDo6Y29kZUJhc2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoY29kZWJhc2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29k
ZUJhc2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZWJhc2VB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6Y29kZVR5cGUoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZXR5cGVBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29kZVR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoY29kZXR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1M
T2JqZWN0RWxlbWVudDo6ZGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShk
YXRhQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldERhdGEoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGF0YUF0dHIsIHZhbHVlKTsKLX0KLQot
Ym9vbCBIVE1MT2JqZWN0RWxlbWVudDo6ZGVjbGFyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFn
ZXRBdHRyaWJ1dGUoZGVjbGFyZUF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxPYmplY3RF
bGVtZW50OjpzZXREZWNsYXJlKGJvb2wgZGVjbGFyZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGVj
bGFyZUF0dHIsIGRlY2xhcmUgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1l
bnQ6OmhzcGFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoc3BhY2VBdHRy
KTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0SHNwYWNlKGNvbnN0IFN0cmluZyAm
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIHZhbHVlKTsKLX0KLQotU3Ry
aW5nIEhUTUxPYmplY3RFbGVtZW50OjpzdGFuZGJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHN0YW5kYnlBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0
U3RhbmRieShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzdGFuZGJ5
QXR0ciwgdmFsdWUpOwotfQotCi1pbnQgSFRNTE9iamVjdEVsZW1lbnQ6OnRhYkluZGV4KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhYmluZGV4QXR0cikudG9JbnQoKTsKLX0K
LQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHRhYkluZGV4KQotewot
ICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7
Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6
OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0
dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojp1c2VNYXAoKSBjb25z
dAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodXNlbWFwQXR0cik7Ci19Ci0KLXZvaWQgSFRN
TE9iamVjdEVsZW1lbnQ6OnNldFVzZU1hcChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNl
dEF0dHJpYnV0ZSh1c2VtYXBBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxl
bWVudDo6dnNwYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZzcGFjZUF0
dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRWc3BhY2UoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwgdmFsdWUpOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxQYXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQo
RG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHBhcmFtVGFnLCBkb2MpCi17Ci19Ci0K
LUhUTUxQYXJhbUVsZW1lbnQ6On5IVE1MUGFyYW1FbGVtZW50KCkKLXsKLX0KLQotdm9pZCBIVE1M
UGFyYW1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
Ci17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKLSAgICAgICAgLy8gTXVzdCBj
YWxsIGJhc2UgY2xhc3Mgc28gdGhhdCBoYXNJRCBiaXQgZ2V0cyBzZXQuCi0gICAgICAgIEhUTUxF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgaWYgKGRvY3VtZW50
KCktPmh0bWxNb2RlKCkgIT0gRG9jdW1lbnQ6OlhIdG1sKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX25hbWUgPSBhdHRyLT52YWx1ZSgpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG5hbWVBdHRyKSB7Ci0gICAgICAgIG1fbmFtZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIG1fdmFsdWUg
PSBhdHRyLT52YWx1ZSgpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLWJvb2wgSFRNTFBhcmFtRWxlbWVudDo6aXNVUkxB
dHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAotewotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSAqYXR0ciA9IGF0dHJpYnV0ZXMoKS0+
Z2V0QXR0cmlidXRlSXRlbShuYW1lQXR0cik7Ci0gICAgICAgIGlmIChhdHRyKSB7Ci0gICAgICAg
ICAgICBTdHJpbmcgdmFsdWUgPSBhdHRyLT52YWx1ZSgpLmRvbVN0cmluZygpLmxvd2VyKCk7Ci0g
ICAgICAgICAgICBpZiAodmFsdWUgPT0gInNyYyIgfHwgdmFsdWUgPT0gIm1vdmllIiB8fCB2YWx1
ZSA9PSAiZGF0YSIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNldE5h
bWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZh
bHVlKTsKLX0KLQotU3RyaW5nIEhUTUxQYXJhbUVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxQYXJhbUVsZW1l
bnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlw
ZUF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBIVE1MUGFyYW1FbGVtZW50OjpzZXRWYWx1ZShjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHZhbHVlKTsK
LX0KLQotU3RyaW5nIEhUTUxQYXJhbUVsZW1lbnQ6OnZhbHVlVHlwZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZSh2YWx1ZXR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MUGFyYW1F
bGVtZW50OjpzZXRWYWx1ZVR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUodmFsdWV0eXBlQXR0ciwgdmFsdWUpOwotfQotCiB9CkluZGV4OiBodG1sL2h0bWxfb2Jq
ZWN0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvaHRtbF9vYmplY3RpbXBsLmgJKHJldmlzaW9u
IDE0MjU3KQorKysgaHRtbC9odG1sX29iamVjdGltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSwy
OTggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50
YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAq
LwotCi0jaWZuZGVmIEhUTUxfT0JKRUNUSU1QTF9ICi0jZGVmaW5lIEhUTUxfT0JKRUNUSU1QTF9I
Ci0KLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotCi0jaWYgX19BUFBMRV9fCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvcnVudGltZS5oPgotI2Vsc2UKLW5hbWVzcGFjZSBLSlMgeyBuYW1lc3Bh
Y2UgQmluZGluZ3MgeyBjbGFzcyBJbnN0YW5jZTsgfSB9Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBIVE1MSW1hZ2VMb2FkZXI7
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MUGx1Z0luRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwotCi0gICAgdmlydHVhbCBib29sIG1h
cFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmly
dHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKLQotICAgIFN0cmluZyBh
bGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0gICAgCi0g
ICAgU3RyaW5nIGhlaWdodCgpIGNvbnN0OwotICAgIHZvaWQgc2V0SGVpZ2h0KGNvbnN0IFN0cmlu
ZyYpOwotICAgIAotICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROYW1lKGNv
bnN0IFN0cmluZyYpOwotICAgIAotICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQg
c2V0V2lkdGgoY29uc3QgU3RyaW5nJik7Ci0gICAgCi0jaWYgX19BUFBMRV9fCi0gICAgdmlydHVh
bCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBjb25zdCA9IDA7Ci0jZW5k
aWYKLSAgICAKLXByb3RlY3RlZDoKLSAgICBTdHJpbmcgb2xkTmFtZUF0dHI7Ci0KLSNpZiBfX0FQ
UExFX18KLSAgICBtdXRhYmxlIFJlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gbV9pbnN0
YW5jZTsKLSNlbmRpZgotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MQXBw
bGV0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVudAotewotcHVibGljOgotICAgIEhU
TUxBcHBsZXRFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgfkhUTUxBcHBsZXRFbGVtZW50KCk7Ci0K
LSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLSAg
ICAKLSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwotICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKik7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoKCk7Ci0gICAgCi0jaWYgX19BUFBMRV9fCi0gICAgdmlydHVhbCBLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgU3Ry
aW5nIGFsdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWx0KGNvbnN0IFN0cmluZyYpOwotCi0gICAg
U3RyaW5nIGFyY2hpdmUoKSBjb25zdDsKLSAgICB2b2lkIHNldEFyY2hpdmUoY29uc3QgU3RyaW5n
Jik7Ci0KLSAgICBTdHJpbmcgY29kZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29kZShjb25zdCBT
dHJpbmcmKTsKLQotICAgIFN0cmluZyBjb2RlQmFzZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29k
ZUJhc2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgaHNwYWNlKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRIc3BhY2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgb2JqZWN0KCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdnNw
YWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWc3BhY2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgYWxsUGFyYW1zQXZhaWxhYmxlKCk7Ci0gICAgdm9pZCBzZXR1cEFwcGxldCgp
IGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLQotcHJpdmF0ZToKLSAgICBTdHJp
bmcgb2xkSWRBdHRyOwotICAgIGJvb2wgbV9hbGxQYXJhbXNBdmFpbGFibGU7Ci19OwotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxFbWJlZEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBs
dWdJbkVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRW1iZWRFbGVtZW50KERvY3VtZW50Kik7
Ci0gICAgfkhUTUxFbWJlZEVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQp
IGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoKCk7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUq
KTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEq
LCBSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgCi0gICAgdmly
dHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotCi0jaWYgX19BUFBM
RV9fCi0gICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBj
b25zdDsKLSNlbmRpZgotCi0gICAgU3RyaW5nIHNyYygpIGNvbnN0OwotICAgIHZvaWQgc2V0U3Jj
KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFR5cGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIHVybDsKLSAgICBE
ZXByZWNhdGVkU3RyaW5nIHBsdWdpblBhZ2U7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBzZXJ2aWNl
VHlwZTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTE9iamVjdEVsZW1l
bnQgOiBwdWJsaWMgSFRNTFBsdWdJbkVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MT2JqZWN0
RWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MT2JqZWN0RWxlbWVudCgpOwotCi0gICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA3OyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVy
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRl
ZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7
Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0KLSAgICBib29sIGlzSW1hZ2VUeXBlKCk7
Ci0KLSAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29udGVudCgpOwotCi0jaWYgX19BUFBMRV9fCi0g
ICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBjb25zdDsK
LSNlbmRpZgotCi0gICAgU3RyaW5nIGFyY2hpdmUoKSBjb25zdDsKLSAgICB2b2lkIHNldEFyY2hp
dmUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgYm9yZGVyKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRCb3JkZXIoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgY29kZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0Q29kZShjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBTdHJpbmcgY29kZUJh
c2UoKSBjb25zdDsKLSAgICB2b2lkIHNldENvZGVCYXNlKGNvbnN0IFN0cmluZyYpOwotCi0gICAg
U3RyaW5nIGNvZGVUeXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2RlVHlwZShjb25zdCBTdHJp
bmcmKTsKLQotICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQoKSBjb25zdDsKLSAgICAKLSAg
ICBTdHJpbmcgZGF0YSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcmKTsK
LQotICAgIGJvb2wgZGVjbGFyZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVjbGFyZShib29sKTsK
LQotICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0OwotICAgIAotICAgIFN0cmluZyBo
c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldEhzcGFjZShjb25zdCBTdHJpbmcmKTsKLQotICAg
IFN0cmluZyBzdGFuZGJ5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdGFuZGJ5KGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgaW50IHRhYkluZGV4KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUYWJJbmRleChp
bnQpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdXNlTWFwKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRVc2VN
YXAoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdnNwYWNlKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRWc3BhY2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBib29sIGlzQ29tcGxldGUoKSBjb25z
dCB7IHJldHVybiBtX2NvbXBsZXRlOyB9Ci0gICAgdm9pZCBzZXRDb21wbGV0ZShib29sIGNvbXBs
ZXRlKTsKLSAgICAKLSAgICBib29sIGlzRG9jTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9k
b2NOYW1lZEl0ZW07IH0KLQotICAgIERlcHJlY2F0ZWRTdHJpbmcgc2VydmljZVR5cGU7Ci0gICAg
RGVwcmVjYXRlZFN0cmluZyB1cmw7Ci0gICAgV2ViQ29yZTo6U3RyaW5nIGNsYXNzSWQ7Ci0gICAg
Ym9vbCBuZWVkV2lkZ2V0VXBkYXRlIDogMTsKLSAgICBib29sIG1fdXNlRmFsbGJhY2tDb250ZW50
IDogMTsKLSAgICBIVE1MSW1hZ2VMb2FkZXIqIG1faW1hZ2VMb2FkZXI7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCB1cGRhdGVEb2NOYW1lZEl0ZW0oKTsKLSAgICBTdHJpbmcgb2xkSWRBdHRyOwotICAg
IGJvb2wgbV9jb21wbGV0ZTsKLSAgICBib29sIG1fZG9jTmFtZWRJdGVtOwotfTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MUGFyYW1FbGVtZW50IDogcHVibGljIEhUTUxFbGVt
ZW50Ci17Ci0gICAgZnJpZW5kIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50OwotcHVibGljOgotICAg
IEhUTUxQYXJhbUVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+SFRNTFBhcmFtRWxlbWVudCgpOwot
Ci0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1
dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmlu
ZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwotCi0gICAg
U3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRWYWx1ZVR5cGUoY29uc3QgU3RyaW5nJik7Ci0KLSBwcm90ZWN0ZWQ6Ci0gICAgQXRv
bWljU3RyaW5nIG1fbmFtZTsKLSAgICBBdG9taWNTdHJpbmcgbV92YWx1ZTsKLX07Ci0KLX0KLQot
I2VuZGlmCkluZGV4OiBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBo
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkocmV2aXNpb24gMTQyNTcpCisrKyBodG1sL0hUTUxQ
bHVnSW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMzYgKzIxLDE2IEBACiAgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiaHRtbF9vYmplY3RpbXBsLmgiCisjaW5jbHVkZSAiSFRNTFBs
dWdJbkVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgotI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyQXBw
bGV0LmgiCi0jaW5jbHVkZSAiUmVuZGVyRW1wdHlBcHBsZXQuaCIKLSNpbmNsdWRlICJSZW5kZXJJ
bWFnZS5oIgotI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJjc3NoZWxwZXIuaCIKLSNpbmNs
dWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCi0j
aW5jbHVkZSAiaHRtbF9pbWFnZWltcGwuaCIKLSNpbmNsdWRlICJyZW5kZXJfZnJhbWVzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIEhUTUxQbHVn
SW5FbGVtZW50OjpIVE1MUGx1Z0luRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogewpAQCAt
MTM3LDkwOCArMTE3LDQgQEAgYm9vbCBIVE1MUGx1Z0luRWxlbWVudDo6Y2hlY2tEVEQoY29uc3Qg
TgogICAgIHJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykgfHwgSFRNTEVsZW1l
bnQ6OmNoZWNrRFREKG5ld0NoaWxkKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1M
QXBwbGV0RWxlbWVudDo6SFRNTEFwcGxldEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLTogSFRNTFBs
dWdJbkVsZW1lbnQoYXBwbGV0VGFnLCBkb2MpCi0sIG1fYWxsUGFyYW1zQXZhaWxhYmxlKGZhbHNl
KQotewotfQotCi1IVE1MQXBwbGV0RWxlbWVudDo6fkhUTUxBcHBsZXRFbGVtZW50KCkKLXsKLSNp
ZiBfX0FQUExFX18KLSAgICAvLyBtX2luc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1
cCBpbiBkZXRhY2goKS4KLSAgICBhc3NlcnQoIW1faW5zdGFuY2UpOwotI2VuZGlmCi19Ci0KLXZv
aWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIgfHwKLSAgICAgICAg
YXR0ci0+bmFtZSgpID09IGFyY2hpdmVBdHRyIHx8Ci0gICAgICAgIGF0dHItPm5hbWUoKSA9PSBj
b2RlQXR0ciB8fAotICAgICAgICBhdHRyLT5uYW1lKCkgPT0gY29kZWJhc2VBdHRyIHx8Ci0gICAg
ICAgIGF0dHItPm5hbWUoKSA9PSBtYXlzY3JpcHRBdHRyIHx8Ci0gICAgICAgIGF0dHItPm5hbWUo
KSA9PSBvYmplY3RBdHRyKSB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKLSAgICAgICAgU3RyaW5nIG5ld05hbWVBdHRy
ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiBkb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0
YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIGRvYy0+
cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+YWRkTmFtZWRJ
dGVtKG5ld05hbWVBdHRyKTsKLSAgICAgICAgfQotICAgICAgICBvbGROYW1lQXR0ciA9IG5ld05h
bWVBdHRyOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlkQXR0cikgewotICAgICAg
ICBTdHJpbmcgbmV3SWRBdHRyID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGluRG9jdW1l
bnQoKSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1M
RG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsK
LSAgICAgICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAg
ICAgICAgICAgIGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0ZW0obmV3SWRBdHRyKTsKLSAgICAgICAg
fQotICAgICAgICBvbGRJZEF0dHIgPSBuZXdJZEF0dHI7Ci0gICAgICAgIC8vIGFsc28gY2FsbCBz
dXBlcmNsYXNzCi0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpCi17Ci0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkp
IHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQg
Kj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsK
LSAgICAgICAgZG9jLT5hZGREb2NFeHRyYU5hbWVkSXRlbShvbGRJZEF0dHIpOwotICAgIH0KLQot
ICAgIEhUTUxQbHVnSW5FbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotfQotCi12b2lk
IEhUTUxBcHBsZXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsKLSAgICBpZiAoZG9j
dW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9
IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAgZG9jLT5y
ZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICBkb2MtPnJlbW92ZURvY0V4dHJh
TmFtZWRJdGVtKG9sZElkQXR0cik7Ci0gICAgfQotCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnJl
bW92ZWRGcm9tRG9jdW1lbnQoKTsKLX0KLQotYm9vbCBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1
dGUoY29kZUF0dHIpLmlzTnVsbCgpOwotfQotCi1SZW5kZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHls
ZSkKLXsKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotCi0gICAgaWYg
KGZyYW1lICYmIGZyYW1lLT5qYXZhRW5hYmxlZCgpKSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IGFyZ3M7Ci0KLSAgICAgICAgYXJncy5zZXQoImNvZGUiLCBnZXRBdHRyaWJ1dGUo
Y29kZUF0dHIpKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2RlQmFzZSA9IGdldEF0
dHJpYnV0ZShjb2RlYmFzZUF0dHIpOwotICAgICAgICBpZighY29kZUJhc2UuaXNOdWxsKCkpCi0g
ICAgICAgICAgICBhcmdzLnNldCgiY29kZUJhc2UiLCBjb2RlQmFzZSk7Ci0gICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldEF0dHJpYnV0ZShkb2N1bWVudCgpLT5odG1sTW9kZSgp
ICE9IERvY3VtZW50OjpYSHRtbCA/IG5hbWVBdHRyIDogaWRBdHRyKTsKLSAgICAgICAgaWYgKCFu
YW1lLmlzTnVsbCgpKQotICAgICAgICAgICAgYXJncy5zZXQoIm5hbWUiLCBuYW1lKTsKLSAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmNoaXZlID0gZ2V0QXR0cmlidXRlKGFyY2hpdmVBdHRy
KTsKLSAgICAgICAgaWYgKCFhcmNoaXZlLmlzTnVsbCgpKQotICAgICAgICAgICAgYXJncy5zZXQo
ImFyY2hpdmUiLCBhcmNoaXZlKTsKLQotICAgICAgICBhcmdzLnNldCgiYmFzZVVSTCIsIGRvY3Vt
ZW50KCktPmJhc2VVUkwoKSk7Ci0KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYXlTY3Jp
cHQgPSBnZXRBdHRyaWJ1dGUobWF5c2NyaXB0QXR0cik7Ci0gICAgICAgIGlmICghbWF5U2NyaXB0
LmlzTnVsbCgpKQotICAgICAgICAgICAgYXJncy5zZXQoIm1heVNjcmlwdCIsIG1heVNjcmlwdCk7
Ci0KLSAgICAgICAgLy8gT3RoZXIgYXJndW1lbnRzIChmcm9tIDxQQVJBTT4gdGFncykgYXJlIGFk
ZGVkIGxhdGVyLgotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5ldyAoZG9jdW1lbnQoKS0+cmVu
ZGVyQXJlbmEoKSkgUmVuZGVyQXBwbGV0KHRoaXMsIGFyZ3MpOwotICAgIH0KLQotICAgIC8vICMj
IyByZW1vdmUgbWUuIHdlIHNob3VsZCBuZXZlciBzaG93IGFuIGVtcHR5IGFwcGxldCwgaW5zdGVh
ZAotICAgIC8vIHJlbmRlciB0aGUgYWx0ZXJuYXRpdmUgY29udGVudCBnaXZlbiBieSB0aGUgd2Vi
cGFnZQotICAgIHJldHVybiBuZXcgKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpIFJlbmRlckVt
cHR5QXBwbGV0KHRoaXMpOwotfQotCi0jaWYgX19BUFBMRV9fCi1LSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZSAqSFRNTEFwcGxldEVsZW1lbnQ6OmdldEluc3RhbmNlKCkgY29uc3QKLXsKLSAgICBGcmFt
ZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1l
LT5qYXZhRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX2luc3RhbmNl
KQotICAgICAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLSAgICAKLSAgICBSZW5kZXJBcHBs
ZXQgKnIgPSBzdGF0aWNfY2FzdDxSZW5kZXJBcHBsZXQqPihyZW5kZXJlcigpKTsKLSAgICBpZiAo
cikgewotICAgICAgICByLT5jcmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSgpOwotICAgICAgICBpZiAo
ci0+d2lkZ2V0KCkpCi0gICAgICAgICAgICAvLyBDYWxsIGludG8gdGhlIGZyYW1lIChhbmQgb3Zl
ciB0aGUgYnJpZGdlKSB0byBwdWxsIHRoZSBCaW5kaW5nczo6SW5zdGFuY2UKLSAgICAgICAgICAg
IC8vIGZyb20gdGhlIGd1dHMgb2YgdGhlIHBsdWdpbi4KLSAgICAgICAgICAgIG1faW5zdGFuY2Ug
PSBmcmFtZS0+Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoci0+d2lkZ2V0KCkpOwotICAgIH0K
LSAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLX0KLSNlbmRpZgotCi12b2lkIEhUTUxBcHBs
ZXRFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkKLXsKLSAgICAvLyBUaGUgcGFyc2VyIGp1c3QgcmVh
Y2hlZCA8L2FwcGxldD4sIHNvIGFsbCB0aGUgcGFyYW1zIGFyZSBhdmFpbGFibGUgbm93LgotICAg
IG1fYWxsUGFyYW1zQXZhaWxhYmxlID0gdHJ1ZTsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAg
ICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7IC8vIFRoaXMgd2lsbCBjYXVzZSBp
dCB0byBjcmVhdGUgaXRzIHdpZGdldCAmIHRoZSBKYXZhIGFwcGxldAotICAgIEhUTUxQbHVnSW5F
bGVtZW50OjpjbG9zZVJlbmRlcmVyKCk7Ci19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OmRl
dGFjaCgpCi17Ci0jaWYgX19BUFBMRV9fCi0gICAgbV9pbnN0YW5jZSA9IDA7Ci0jZW5kaWYKLSAg
ICBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0YWNoKCk7Ci19Ci0KLWJvb2wgSFRNTEFwcGxldEVsZW1l
bnQ6OmFsbFBhcmFtc0F2YWlsYWJsZSgpCi17Ci0gICAgcmV0dXJuIG1fYWxsUGFyYW1zQXZhaWxh
YmxlOwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OmFsdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVu
dDo6c2V0QWx0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsdEF0
dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxBcHBsZXRFbGVtZW50OjphcmNoaXZlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyKTsKLX0KLQotdm9pZCBI
VE1MQXBwbGV0RWxlbWVudDo6c2V0QXJjaGl2ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShhcmNoaXZlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFwcGxl
dEVsZW1lbnQ6OmNvZGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZUF0
dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpzZXRDb2RlKGNvbnN0IFN0cmluZyAm
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvZGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmlu
ZyBIVE1MQXBwbGV0RWxlbWVudDo6Y29kZUJhc2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoY29kZWJhc2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0
Q29kZUJhc2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZWJh
c2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQXBwbGV0RWxlbWVudDo6aHNwYWNlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhzcGFjZUF0dHIpOwotfQotCi12b2lk
IEhUTUxBcHBsZXRFbGVtZW50OjpzZXRIc3BhY2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFwcGxl
dEVsZW1lbnQ6Om9iamVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShvYmpl
Y3RBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0T2JqZWN0KGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG9iamVjdEF0dHIsIHZhbHVlKTsKLX0K
LQotU3RyaW5nIEhUTUxBcHBsZXRFbGVtZW50Ojp2c3BhY2UoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUodnNwYWNlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6
OnNldFZzcGFjZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2c3Bh
Y2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEVtYmVkRWxl
bWVudDo6SFRNTEVtYmVkRWxlbWVudChEb2N1bWVudCAqZG9jKQotOiBIVE1MUGx1Z0luRWxlbWVu
dChlbWJlZFRhZywgZG9jKQotewotfQotCi1IVE1MRW1iZWRFbGVtZW50Ojp+SFRNTEVtYmVkRWxl
bWVudCgpCi17Ci0jaWYgX19BUFBMRV9fCi0gICAgLy8gbV9pbnN0YW5jZSBzaG91bGQgaGF2ZSBi
ZWVuIGNsZWFuZWQgdXAgaW4gZGV0YWNoKCkuCi0gICAgYXNzZXJ0KCFtX2luc3RhbmNlKTsKLSNl
bmRpZgotfQotCi0jaWYgX19BUFBMRV9fCi1LSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqSFRNTEVt
YmVkRWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAotewotICAgIEZyYW1lICpmcmFtZSA9IGRv
Y3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAobV9pbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7Ci0g
ICAgCi0gICAgUmVuZGVyT2JqZWN0ICpyID0gcmVuZGVyZXIoKTsKLSAgICBpZiAoIXIpIHsKLSAg
ICAgICAgTm9kZSAqcCA9IHBhcmVudE5vZGUoKTsKLSAgICAgICAgaWYgKHAgJiYgcC0+aGFzVGFn
TmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgciA9IHAtPnJlbmRlcmVyKCk7Ci0gICAgfQot
Ci0gICAgaWYgKHIgJiYgci0+aXNXaWRnZXQoKSl7Ci0gICAgICAgIGlmIChXaWRnZXQgKndpZGdl
dCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihyKS0+d2lkZ2V0KCkpIHsKLSAgICAgICAg
ICAgIC8vIENhbGwgaW50byB0aGUgZnJhbWUgKGFuZCBvdmVyIHRoZSBicmlkZ2UpIHRvIHB1bGwg
dGhlIEJpbmRpbmdzOjpJbnN0YW5jZQotICAgICAgICAgICAgLy8gZnJvbSB0aGUgZ3V0cyBvZiB0
aGUgSmF2YSBWTS4KLSAgICAgICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+Z2V0RW1iZWRJbnN0
YW5jZUZvcldpZGdldCh3aWRnZXQpOwotICAgICAgICAgICAgLy8gQXBwbGV0IG1heSBzcGVjaWZp
ZWQgd2l0aCA8ZW1iZWQ+IHRhZy4KLSAgICAgICAgICAgIGlmICghbV9pbnN0YW5jZSkKLSAgICAg
ICAgICAgICAgICBtX2luc3RhbmNlID0gZnJhbWUtPmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0
KHdpZGdldCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7
Ci19Ci0jZW5kaWYKLQotYm9vbCBIVE1MRW1iZWRFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25z
dAotewotICAgIGlmIChhdHRyTmFtZSA9PSBoaWRkZW5BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9
IGVVbml2ZXJzYWw7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgICAgIAotICAg
IHJldHVybiBIVE1MUGx1Z0luRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsK
LX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgRGVwcmVjYXRlZFN0cmluZyB2YWwgPSBhdHRyLT52YWx1
ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgCi0gICAgaW50IHBvczsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHNlcnZpY2VUeXBlID0gdmFsLmxvd2VyKCk7
Ci0gICAgICAgIHBvcyA9IHNlcnZpY2VUeXBlLmZpbmQoICI7IiApOwotICAgICAgICBpZiAoIHBv
cyE9LTEgKQotICAgICAgICAgICAgc2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KCBwb3Mg
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2RlQXR0ciB8fAotICAgICAgICAg
ICAgICAgYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpIHsKLSAgICAgICAgIHVybCA9IFdlYkNvcmU6
OnBhcnNlVVJMKGF0dHItPnZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBwbHVnaW5wYWdlQXR0ciB8fAotICAgICAgICAgICAgICAgYXR0
ci0+bmFtZSgpID09IHBsdWdpbnNwYWdlQXR0cikgewotICAgICAgICBwbHVnaW5QYWdlID0gdmFs
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhpZGRlbkF0dHIpIHsKLSAgICAgICAg
aWYgKHZhbC5sb3dlcigpPT0ieWVzIiB8fCB2YWwubG93ZXIoKT09InRydWUiKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogTm90IGR5bmFtaWMsIGJ1dCBpdCdzIG5vdCByZWFsbHkgaW1wb3J0YW50
IHRoYXQgc3VjaCBhIHJhcmVseS11c2VkCi0gICAgICAgICAgICAvLyBmZWF0dXJlIHdvcmsgZHlu
YW1pY2FsbHkuCi0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoIGF0dHIsIENTU19QUk9QX1dJRFRI
LCAiMCIgKTsKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aCggYXR0ciwgQ1NTX1BST1BfSEVJR0hU
LCAiMCIgKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVB
dHRyKSB7Ci0gICAgICAgIFN0cmluZyBuZXdOYW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7Ci0gICAg
ICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewot
ICAgICAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQg
Kj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBkb2MtPnJlbW92ZU5hbWVkSXRlbShvbGROYW1l
QXR0cik7Ci0gICAgICAgICAgICBkb2MtPmFkZE5hbWVkSXRlbShuZXdOYW1lQXR0cik7Ci0gICAg
ICAgIH0KLSAgICAgICAgb2xkTmFtZUF0dHIgPSBuZXdOYW1lQXR0cjsKLSAgICB9IGVsc2UKLSAg
ICAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQot
Ci1ib29sIEhUTUxFbWJlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0
eWxlKQotewotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSB8fCAhZnJhbWUtPnBsdWdpbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIE5vZGUgKnAgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKHAgJiYgcC0+aGFzVGFn
TmFtZShvYmplY3RUYWcpKSB7Ci0gICAgICAgIGFzc2VydChwLT5yZW5kZXJlcigpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1SZW5kZXJP
YmplY3QgKkhUTUxFbWJlZEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVu
YSwgUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJQ
YXJ0T2JqZWN0KHRoaXMpOwotfQotCi12b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmF0dGFjaCgpCi17
Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmF0dGFjaCgpOwotCi0gICAgaWYgKHJlbmRlcmVyKCkp
Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihyZW5kZXJlcigpKS0+dXBk
YXRlV2lkZ2V0KCk7Ci19Ci0KLXZvaWQgSFRNTEVtYmVkRWxlbWVudDo6ZGV0YWNoKCkKLXsKLSNp
ZiBfX0FQUExFX18KLSAgICBtX2luc3RhbmNlID0gMDsKLSNlbmRpZgotICAgIEhUTUxQbHVnSW5F
bGVtZW50OjpkZXRhY2goKTsKLX0KLQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCgpCi17Ci0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsK
LSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4o
ZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAg
ICB9Ci0KLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLX0K
LQotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsKLSAgICBp
ZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQg
KmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAg
ZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgIH0KLQotICAgIEhUTUxQbHVn
SW5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci19Ci0KLWJvb2wgSFRNTEVtYmVkRWxl
bWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAotewotICAgIHJldHVy
biBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cjsKLX0KLQotU3RyaW5nIEhUTUxFbWJlZEVsZW1lbnQ6
OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzcmNBdHRyKTsKLX0KLQot
dm9pZCBIVE1MRW1iZWRFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEVtYmVkRWxl
bWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTEVtYmVkRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLUhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChEb2N1bWVu
dCAqZG9jKSAKLTogSFRNTFBsdWdJbkVsZW1lbnQob2JqZWN0VGFnLCBkb2MpCi0sIG1faW1hZ2VM
b2FkZXIoMCkKLXsKLSAgICBuZWVkV2lkZ2V0VXBkYXRlID0gZmFsc2U7Ci0gICAgbV91c2VGYWxs
YmFja0NvbnRlbnQgPSBmYWxzZTsKLSAgICBtX2NvbXBsZXRlID0gZmFsc2U7Ci0gICAgbV9kb2NO
YW1lZEl0ZW0gPSB0cnVlOwotfQotCi1IVE1MT2JqZWN0RWxlbWVudDo6fkhUTUxPYmplY3RFbGVt
ZW50KCkKLXsKLSNpZiBfX0FQUExFX18KLSAgICAvLyBtX2luc3RhbmNlIHNob3VsZCBoYXZlIGJl
ZW4gY2xlYW5lZCB1cCBpbiBkZXRhY2goKS4KLSAgICBhc3NlcnQoIW1faW5zdGFuY2UpOwotI2Vu
ZGlmCi0gICAgCi0gICAgZGVsZXRlIG1faW1hZ2VMb2FkZXI7Ci19Ci0KLSNpZiBfX0FQUExFX18K
LUtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MT2JqZWN0RWxlbWVudDo6Z2V0SW5zdGFuY2Uo
KSBjb25zdAotewotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9pbnN0YW5jZSkKLSAg
ICAgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7Ci0KLSAgICBpZiAoUmVuZGVyT2JqZWN0ICpy
ID0gcmVuZGVyZXIoKSkgewotICAgICAgICBpZiAoci0+aXNXaWRnZXQoKSkgewotICAgICAgICAg
ICAgaWYgKFdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+KHIpLT53
aWRnZXQoKSkgewotICAgICAgICAgICAgICAgIC8vIENhbGwgaW50byB0aGUgZnJhbWUgKGFuZCBv
dmVyIHRoZSBicmlkZ2UpIHRvIHB1bGwgdGhlIEJpbmRpbmdzOjpJbnN0YW5jZQotICAgICAgICAg
ICAgICAgIC8vIGZyb20gdGhlIGd1dHMgb2YgdGhlIHBsdWdpbi4KLSAgICAgICAgICAgICAgICBt
X2luc3RhbmNlID0gZnJhbWUtPmdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7Ci0g
ICAgICAgICAgICAgICAgLy8gQXBwbGV0IG1heSBzcGVjaWZpZWQgd2l0aCA8b2JqZWN0PiB0YWcu
Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2luc3RhbmNlKQotICAgICAgICAgICAgICAgICAgICBt
X2luc3RhbmNlID0gZnJhbWUtPmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbV9pbnN0YW5jZS5n
ZXQoKTsKLX0KLSNlbmRpZgotCi1IVE1MRm9ybUVsZW1lbnQgKkhUTUxPYmplY3RFbGVtZW50Ojpm
b3JtKCkgY29uc3QKLXsKLSAgICBmb3IgKE5vZGUgKnAgPSBwYXJlbnROb2RlKCk7IHAgIT0gMDsg
cCA9IHAtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocC0+aGFzVGFnTmFtZShmb3JtVGFn
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQgKj4ocCk7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgU3Ry
aW5nIHZhbCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaW50IHBvczsKLSAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHNlcnZpY2VUeXBlID0gdmFsLmRlcHJlY2F0ZWRT
dHJpbmcoKS5sb3dlcigpOwotICAgICAgICBwb3MgPSBzZXJ2aWNlVHlwZS5maW5kKCAiOyIgKTsK
LSAgICAgICAgaWYgKCBwb3MhPS0xICkKLSAgICAgICAgICBzZXJ2aWNlVHlwZSA9IHNlcnZpY2VU
eXBlLmxlZnQoIHBvcyApOwotICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICBuZWVk
V2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFpc0ltYWdlVHlwZSgpICYmIG1faW1h
Z2VMb2FkZXIpIHsKLSAgICAgICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKLSAgICAgICAgICBt
X2ltYWdlTG9hZGVyID0gMDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGRhdGFBdHRyKSB7Ci0gICAgICAgIHVybCA9IFdlYkNvcmU6OnBhcnNlVVJMKHZhbCkuZGVw
cmVjYXRlZFN0cmluZygpOwotICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICBuZWVk
V2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgaXNJbWFnZVR5
cGUoKSkgewotICAgICAgICAgIGlmICghbV9pbWFnZUxvYWRlcikKLSAgICAgICAgICAgICAgbV9p
bWFnZUxvYWRlciA9IG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcyk7Ci0gICAgICAgICAgbV9pbWFn
ZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGNsYXNzaWRBdHRyKSB7Ci0gICAgICAgIGNsYXNzSWQgPSB2YWw7Ci0g
ICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICAgIG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVl
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubG9hZEF0dHIpIHsKLSAgICAgICAg
c2V0SFRNTEV2ZW50TGlzdGVuZXIobG9hZEV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVu
ZXIodW5sb2FkRXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5h
bWVBdHRyKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmV3TmFtZUF0dHIgPSBhdHRyLT52YWx1ZSgp
OwotICAgICAgICAgICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkgJiYgaW5Eb2N1bWVudCgpICYmIGRv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBIVE1MRG9jdW1l
bnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAg
ICAgICAgICAgICBkb2MtPnJlbW92ZU5hbWVkSXRlbShvbGROYW1lQXR0cik7Ci0gICAgICAgICAg
ICAgICAgZG9jLT5hZGROYW1lZEl0ZW0obmV3TmFtZUF0dHIpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgb2xkTmFtZUF0dHIgPSBuZXdOYW1lQXR0cjsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBpZEF0dHIpIHsKLSAgICAgICAgU3RyaW5nIG5ld0lkQXR0ciA9IGF0dHItPnZh
bHVlKCk7Ci0gICAgICAgIGlmIChpc0RvY05hbWVkSXRlbSgpICYmIGluRG9jdW1lbnQoKSAmJiBk
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRG9jdW1lbnQg
KmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAg
ICAgIGRvYy0+cmVtb3ZlRG9jRXh0cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAgICAg
IGRvYy0+YWRkRG9jRXh0cmFOYW1lZEl0ZW0obmV3SWRBdHRyKTsKLSAgICAgICAgfQotICAgICAg
ICBvbGRJZEF0dHIgPSBuZXdJZEF0dHI7Ci0gICAgICAgIC8vIGFsc28gY2FsbCBzdXBlcmNsYXNz
Ci0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOwotfQotCi1Eb2N1bWVudCogSFRNTE9iamVjdEVsZW1lbnQ6OmNvbnRlbnREb2N1
bWVudCgpIGNvbnN0Ci17Ci0gICAgLy8gIyMjCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSFRN
TE9iamVjdEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQotewot
ICAgIGlmIChtX3VzZUZhbGxiYWNrQ29udGVudCB8fCBpc0ltYWdlVHlwZSgpKQotICAgICAgICBy
ZXR1cm4gSFRNTFBsdWdJbkVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOwotCi0gICAg
RnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lIHx8ICFm
cmFtZS0+cGx1Z2luc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IHJldHVybiB0cnVlOwotfQotCi1SZW5kZXJPYmplY3QgKkhUTUxPYmplY3RFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAg
ICBpZiAobV91c2VGYWxsYmFja0NvbnRlbnQpCi0gICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6
OmNyZWF0ZU9iamVjdCh0aGlzLCBzdHlsZSk7Ci0gICAgaWYgKGlzSW1hZ2VUeXBlKCkpCi0gICAg
ICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbWFnZSh0aGlzKTsKLSAgICByZXR1cm4gbmV3
IChhcmVuYSkgUmVuZGVyUGFydE9iamVjdCh0aGlzKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6YXR0YWNoKCkKLXsKLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6YXR0YWNoKCk7Ci0KLSAg
ICBpZiAocmVuZGVyZXIoKSAmJiAhbV91c2VGYWxsYmFja0NvbnRlbnQpIHsKLSAgICAgICAgaWYg
KGlzSW1hZ2VUeXBlKCkpIHsKLSAgICAgICAgICAgIGlmICghbV9pbWFnZUxvYWRlcikKLSAgICAg
ICAgICAgICAgICBtX2ltYWdlTG9hZGVyID0gbmV3IEhUTUxJbWFnZUxvYWRlcih0aGlzKTsKLSAg
ICAgICAgICAgIG1faW1hZ2VMb2FkZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgICAg
ICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlckltYWdlKiBpbWFnZU9i
aiA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgaW1hZ2VPYmotPnNldENhY2hlZEltYWdlKG1faW1hZ2VMb2FkZXItPmltYWdlKCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG5lZWRXaWRnZXRV
cGRhdGUpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXQgbmVlZFdpZGdldFVwZGF0ZSB0byBmYWxz
ZSBiZWZvcmUgY2FsbGluZyB1cGRhdGVXaWRnZXQgYmVjYXVzZSB1cGRhdGVXaWRnZXQgbWF5IGNh
dXNlCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBtZXRob2Qgb3IgcmVjYWxjU3R5bGUgKHdoaWNo
IGFsc28gY2FsbHMgdXBkYXRlV2lkZ2V0KSB0byBiZSBjYWxsZWQuCi0gICAgICAgICAgICAgICAg
bmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlclBhcnRPYmplY3QqPihyZW5kZXJlcigpKS0+dXBkYXRlV2lkZ2V0KCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIHNldENoYW5nZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpCi17Ci0gICAg
Ly8gVGhlIHBhcnNlciBqdXN0IHJlYWNoZWQgPC9vYmplY3Q+LgotICAgIHNldENvbXBsZXRlKHRy
dWUpOwotICAgIAotICAgIEhUTUxQbHVnSW5FbGVtZW50OjpjbG9zZVJlbmRlcmVyKCk7Ci19Ci0K
LXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldENvbXBsZXRlKGJvb2wgY29tcGxldGUpCi17Ci0g
ICAgaWYgKGNvbXBsZXRlICE9IG1fY29tcGxldGUpIHsKLSAgICAgICAgbV9jb21wbGV0ZSA9IGNv
bXBsZXRlOwotICAgICAgICBpZiAoY29tcGxldGUgJiYgIW1fdXNlRmFsbGJhY2tDb250ZW50KSB7
Ci0gICAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChp
bkRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpkZXRhY2goKQotewotICAgIGlmIChh
dHRhY2hlZCgpICYmIHJlbmRlcmVyKCkgJiYgIW1fdXNlRmFsbGJhY2tDb250ZW50KSB7Ci0gICAg
ICAgIC8vIFVwZGF0ZSB0aGUgd2lkZ2V0IHRoZSBuZXh0IHRpbWUgd2UgYXR0YWNoIChkZXRhY2hp
bmcgZGVzdHJveXMgdGhlIHBsdWdpbikuCi0gICAgICAgIG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVl
OwotICAgIH0KLQotI2lmIF9fQVBQTEVfXwotICAgIG1faW5zdGFuY2UgPSAwOwotI2VuZGlmCi0g
ICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgaWYgKGlzRG9jTmFtZWRJdGVtKCkg
JiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQg
KmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKLSAgICAgICAg
ZG9jLT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgICAgICBkb2MtPmFkZERvY0V4dHJh
TmFtZWRJdGVtKG9sZElkQXR0cik7Ci0gICAgfQotCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIGlmIChpc0RvY05hbWVkSXRlbSgpICYmIGRvY3VtZW50
KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0
aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7Ci0gICAgICAgIGRvYy0+cmVtb3Zl
TmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAgZG9jLT5yZW1vdmVEb2NFeHRyYU5hbWVk
SXRlbShvbGRJZEF0dHIpOwotICAgIH0KLQotICAgIEhUTUxQbHVnSW5FbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlY2FsY1N0eWxl
KFN0eWxlQ2hhbmdlIGNoKQotewotICAgIGlmICghbV91c2VGYWxsYmFja0NvbnRlbnQgJiYgbmVl
ZFdpZGdldFVwZGF0ZSAmJiByZW5kZXJlcigpICYmICFpc0ltYWdlVHlwZSgpKSB7Ci0gICAgICAg
IGRldGFjaCgpOwotICAgICAgICBhdHRhY2goKTsKLSAgICB9Ci0gICAgSFRNTFBsdWdJbkVsZW1l
bnQ6OnJlY2FsY1N0eWxlKGNoKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKCkKLXsKLSAgICB1cGRhdGVEb2NOYW1lZEl0ZW0oKTsKLSAgICBpZiAoaW5Eb2N1
bWVudCgpICYmICFtX3VzZUZhbGxiYWNrQ29udGVudCkgewotICAgICAgICBuZWVkV2lkZ2V0VXBk
YXRlID0gdHJ1ZTsKLSAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgIH0KLX0KLQotYm9vbCBIVE1M
T2JqZWN0RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAotewot
ICAgIHJldHVybiAoYXR0ci0+bmFtZSgpID09IGRhdGFBdHRyIHx8IChhdHRyLT5uYW1lKCkgPT0g
dXNlbWFwQXR0ciAmJiBhdHRyLT52YWx1ZSgpLmRvbVN0cmluZygpWzBdICE9ICcjJykpOwotfQot
Ci1ib29sIEhUTUxPYmplY3RFbGVtZW50Ojppc0ltYWdlVHlwZSgpCi17Ci0gICAgaWYgKHNlcnZp
Y2VUeXBlLmlzRW1wdHkoKSAmJiB1cmwuc3RhcnRzV2l0aCgiZGF0YToiKSkgewotICAgICAgICAv
LyBFeHRyYWN0IHRoZSBNSU1FIHR5cGUgZnJvbSB0aGUgZGF0YSBVUkwuCi0gICAgICAgIGludCBp
bmRleCA9IHVybC5maW5kKCc7Jyk7Ci0gICAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAg
ICAgIGluZGV4ID0gdXJsLmZpbmQoJywnKTsKLSAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0g
ICAgICAgICAgICBpbnQgbGVuID0gaW5kZXggLSA1OwotICAgICAgICAgICAgaWYgKGxlbiA+IDAp
Ci0gICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSB1cmwubWlkKDUsIGxlbik7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSAidGV4dC9wbGFpbiI7IC8v
IERhdGEgVVJMcyB3aXRoIG5vIE1JTUUgdHlwZSBhcmUgY29uc2lkZXJlZCB0ZXh0L3BsYWluLgot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBJbWFnZTo6c3VwcG9ydHNUeXBlKHNl
cnZpY2VUeXBlKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyRmFsbGJhY2tD
b250ZW50KCkKLXsKLSAgICBpZiAobV91c2VGYWxsYmFja0NvbnRlbnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIE1hcmsgb3Vyc2VsdmVzIGFzIHVzaW5nIHRoZSBmYWxsYmFjayBjb250ZW50
LgotICAgIG1fdXNlRmFsbGJhY2tDb250ZW50ID0gdHJ1ZTsKLQotICAgIC8vIE5vdyBkbyBhIGRl
dGFjaCBhbmQgcmVhdHRhY2guICAgIAotICAgIC8vIEZJWE1FOiBTdHlsZSBnZXRzIHJlY2FsY3Vs
YXRlZCB3aGljaCBpcyBzdWJvcHRpbWFsLgotICAgIGRldGFjaCgpOwotICAgIGF0dGFjaCgpOwot
fQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50Ojp1cGRhdGVEb2NOYW1lZEl0ZW0oKQotewotICAg
IC8vIFRoZSBydWxlIGlzICI8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGNoaWxkcmVuIG90aGVy
IHRoYW4KLSAgICAvLyA8cGFyYW0+IGVsZW1lbnRzIGFuZCB3aGl0ZXNwYWNlIGNhbiBiZSBmb3Vu
ZCBieSBuYW1lIGluIGEKLSAgICAvLyBkb2N1bWVudCwgYW5kIG90aGVyIDxvYmplY3Q+IGVsZW1l
bnRzIGNhbm5vdC4iCi0gICAgYm9vbCB3YXNOYW1lZEl0ZW0gPSBtX2RvY05hbWVkSXRlbTsKLSAg
ICBib29sIGlzTmFtZWRJdGVtID0gdHJ1ZTsKLSAgICBOb2RlICpjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsKLSAgICB3aGlsZSAoY2hpbGQgJiYgaXNOYW1lZEl0ZW0pIHsKLSAgICAgICAgaWYgKGNoaWxk
LT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8RWxlbWVu
dCAqPihjaGlsZCktPmhhc1RhZ05hbWUocGFyYW1UYWcpKQotICAgICAgICAgICAgICAgIGlzTmFt
ZWRJdGVtID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkg
ewotICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxUZXh0ICo+KGNoaWxkKS0+Y29udGFpbnNP
bmx5V2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgICAgIGlzTmFtZWRJdGVtID0gZmFsc2U7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXNOYW1lZEl0ZW0gPSBmYWxzZTsKLSAgICAgICAg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gICAgaWYgKGlzTmFtZWRJdGVt
ICE9IHdhc05hbWVkSXRlbSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAg
ICAgIEhUTUxEb2N1bWVudCAqZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3Vt
ZW50KCkpOwotICAgICAgICBpZiAoaXNOYW1lZEl0ZW0pIHsKLSAgICAgICAgICAgIGRvYy0+YWRk
TmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+YWRkRG9jRXh0cmFOYW1l
ZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvYy0+cmVt
b3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlRG9jRXh0
cmFOYW1lZEl0ZW0ob2xkSWRBdHRyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX2RvY05hbWVk
SXRlbSA9IGlzTmFtZWRJdGVtOwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmNvZGUo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZUF0dHIpOwotfQotCi12b2lk
IEhUTUxPYmplY3RFbGVtZW50OjpzZXRDb2RlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAg
c2V0QXR0cmlidXRlKGNvZGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxl
bWVudDo6YXJjaGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmNoaXZl
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEFyY2hpdmUoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIsIHZhbHVlKTsKLX0K
LQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojpib3JkZXIoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoYm9yZGVyQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6
OnNldEJvcmRlcihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShib3Jk
ZXJBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6Y29kZUJhc2Uo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyKTsKLX0KLQot
dm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29kZUJhc2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBI
VE1MT2JqZWN0RWxlbWVudDo6Y29kZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoY29kZXR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29k
ZVR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZXR5cGVB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6ZGF0YSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShkYXRhQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OnNldERhdGEoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUoZGF0YUF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6ZGVj
bGFyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZGVjbGFyZUF0dHIpLmlz
TnVsbCgpOwotfQotCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXREZWNsYXJlKGJvb2wgZGVj
bGFyZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGVjbGFyZUF0dHIsIGRlY2xhcmUgPyAiIiA6IDAp
OwotfQotCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmhzcGFjZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShoc3BhY2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6c2V0SHNwYWNlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGhzcGFjZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50OjpzdGFu
ZGJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHN0YW5kYnlBdHRyKTsKLX0K
LQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0U3RhbmRieShjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShzdGFuZGJ5QXR0ciwgdmFsdWUpOwotfQotCi1pbnQgSFRN
TE9iamVjdEVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHRhYmluZGV4QXR0cikudG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6
c2V0VGFiSW5kZXgoaW50IHRhYkluZGV4KQotewotICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0
dHIsIFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxl
bWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhU
TUxPYmplY3RFbGVtZW50Ojp1c2VNYXAoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUodXNlbWFwQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldFVzZU1hcChj
b25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh1c2VtYXBBdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6dnNwYWNlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKHZzcGFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxPYmplY3RF
bGVtZW50OjpzZXRWc3BhY2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUodnNwYWNlQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxQ
YXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxF
bGVtZW50KHBhcmFtVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxQYXJhbUVsZW1lbnQ6On5IVE1MUGFy
YW1FbGVtZW50KCkKLXsKLX0KLQotdm9pZCBIVE1MUGFyYW1FbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBpZEF0dHIpIHsKLSAgICAgICAgLy8gTXVzdCBjYWxsIGJhc2UgY2xhc3Mgc28gdGhhdCBoYXNJ
RCBiaXQgZ2V0cyBzZXQuCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKLSAgICAgICAgaWYgKGRvY3VtZW50KCktPmh0bWxNb2RlKCkgIT0gRG9jdW1lbnQ6
OlhIdG1sKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX25hbWUgPSBhdHRyLT52YWx1
ZSgpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7Ci0gICAgICAg
IG1fbmFtZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
dmFsdWVBdHRyKSB7Ci0gICAgICAgIG1fdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwotICAgIH0gZWxz
ZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0K
LWJvb2wgSFRNTFBhcmFtRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBj
b25zdAotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIEF0
dHJpYnV0ZSAqYXR0ciA9IGF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lQXR0cik7
Ci0gICAgICAgIGlmIChhdHRyKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpLmRvbVN0cmluZygpLmxvd2VyKCk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPT0gInNy
YyIgfHwgdmFsdWUgPT0gIm1vdmllIiB8fCB2YWx1ZSA9PSAiZGF0YSIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxQYXJh
bUVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0
dHIpOwotfQotCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBI
VE1MUGFyYW1FbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNl
dEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxQYXJhbUVsZW1l
bnQ6OnZhbHVlVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2YWx1ZXR5
cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MUGFyYW1FbGVtZW50OjpzZXRWYWx1ZVR5cGUoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodmFsdWV0eXBlQXR0ciwgdmFsdWUp
OwotfQotCiB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAkocmV2aXNpb24gMTQyNTcpCisrKyByZW5kZXJp
bmcvUmVuZGVyQXBwbGV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsMTAgQEAKICNp
bmNsdWRlICJSZW5kZXJBcHBsZXQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTEFwcGxldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSmF2YUFwcGxldFdpZGdldC5oIgotI2lu
Y2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6
IHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVu
ZGVyX2ZyYW1lcy5jcHAJKHJldmlzaW9uIDE0MjU3KQorKysgcmVuZGVyaW5nL3JlbmRlcl9mcmFt
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMCBAQAogI2luY2x1ZGUgIlRleHQu
aCIKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2Jhc2VpbXBs
LmgiCi0jaW5jbHVkZSAiaHRtbF9vYmplY3RpbXBsLmgiCisjaW5jbHVkZSAiSFRNTEVtYmVkRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTFBhcmFtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUb2tl
bml6ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckNhbnZh
cy5oIgpAQCAtNzM1LDcgKzczNyw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lk
Z2V0KCkKICAgICAgIGlmICghby0+aXNDb21wbGV0ZSgpKQogICAgICAgICByZXR1cm47CiAgICAg
ICAvLyBDaGVjayBmb3IgYSBjaGlsZCBFTUJFRCB0YWcuCi0gICAgICBIVE1MRW1iZWRFbGVtZW50
ICplbWJlZCA9IDA7CisgICAgICBIVE1MRW1iZWRFbGVtZW50KiBlbWJlZCA9IDA7CiAgICAgICBm
b3IgKE5vZGUgKmNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgKSB7CiAgICAgICAgICAg
aWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgewogICAgICAgICAgICAgICBlbWJlZCA9
IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQgKj4oIGNoaWxkICk7CkBAIC03NzUsNyArNzc3
LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgTm9kZSAq
Y2hpbGQgPSBvLT5maXJzdENoaWxkKCk7CiAgICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0Vt
cHR5KCkgfHwgc2VydmljZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsKICAgICAgICAgICBp
ZiAoY2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpKSB7Ci0gICAgICAgICAgICAgIEhUTUxQYXJh
bUVsZW1lbnQgKnAgPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50ICo+KGNoaWxkKTsKKyAg
ICAgICAgICAgICAgSFRNTFBhcmFtRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVs
ZW1lbnQqPihjaGlsZCk7CiAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcC0+bmFtZSgpLmxv
d2VyKCk7CiAgICAgICAgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpICYmIChuYW1lID09ICJzcmMi
IHx8IG5hbWUgPT0gIm1vdmllIiB8fCBuYW1lID09ICJjb2RlIiB8fCBuYW1lID09ICJ1cmwiKSkK
ICAgICAgICAgICAgICAgICAgIHVybCA9IHAtPnZhbHVlKCk7CkluZGV4OiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDI1NykKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDE3LDcgKzQxNyw2IEBACiAJCTkzRjE5OEU5
MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2ltYWdlaW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNDUwMkRFNDM5NjAxODYzNUNBIC8qIGh0
bWxfaW1hZ2VpbXBsLmggKi87IH07CiAJCTkzRjE5OEVBMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1s
X2lubGluZWltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjQ3MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2lubGluZWltcGwuaCAqLzsgfTsK
IAkJOTNGMTk4RUIwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfbGlzdGltcGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQ5MDJERTQzOTYwMTg2
MzVDQSAvKiBodG1sX2xpc3RpbXBsLmggKi87IH07Ci0JCTkzRjE5OEVEMDgyNDVFNTkwMDFFOUFC
QyAvKiBodG1sX29iamVjdGltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY1MjNEMjREMDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX29iamVjdGltcGwu
aCAqLzsgfTsKIAkJOTNGMTk4RUUwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfdGFibGVpbXBsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0RjAy
REU0Mzk2MDE4NjM1Q0EgLyogaHRtbF90YWJsZWltcGwuaCAqLzsgfTsKIAkJOTNGMTk4RUYwODI0
NUU1OTAwMUU5QUJDIC8qIEhUTUxQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjUxMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MUGFyc2Vy
LmggKi87IH07CiAJCTkzRjE5OEYwMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MzAy
REU0Mzk2MDE4NjM1Q0EgLyogSFRNTFRva2VuaXplci5oICovOyB9OwpAQCAtNTE1LDcgKzUxNCw2
IEBACiAJCTkzRjE5QTk1MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2ltYWdlaW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0NDAyREU0
Mzk2MDE4NjM1Q0EgLyogaHRtbF9pbWFnZWltcGwuY3BwICovOyB9OwogCQk5M0YxOUE5NjA4MjQ1
RTU5MDAxRTlBQkMgLyogaHRtbF9pbmxpbmVpbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQ2MDJERTQzOTYwMTg2MzVDQSAvKiBodG1s
X2lubGluZWltcGwuY3BwICovOyB9OwogCQk5M0YxOUE5NzA4MjQ1RTU5MDAxRTlBQkMgLyogaHRt
bF9saXN0aW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNTIzRDI0ODAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9saXN0aW1wbC5jcHAgKi87IH07
Ci0JCTkzRjE5QTk5MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX29iamVjdGltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNEMwMkRFNDM5
NjAxODYzNUNBIC8qIGh0bWxfb2JqZWN0aW1wbC5jcHAgKi87IH07CiAJCTkzRjE5QTlBMDgyNDVF
NTkwMDFFOUFCQyAvKiBodG1sX3RhYmxlaW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0RTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF90
YWJsZWltcGwuY3BwICovOyB9OwogCQk5M0YxOUE5QjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTFBh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTFBhcnNlci5jcHAgKi87IH07CiAJCTkzRjE5
QTlDMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjUyMDJERTQzOTYwMTg2MzVDQSAv
KiBIVE1MVG9rZW5pemVyLmNwcCAqLzsgfTsKQEAgLTY0MCw2ICs2MzgsMTYgQEAKIAkJQTg2NjI5
RDIwOURBMkI0ODAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODY2MjlDQzA5REEyQjQ3MDA5NjMzQTUgLyog
SlNNb3VzZUV2ZW50LmNwcCAqLzsgfTsKIAkJQTg2NjI5RDMwOURBMkI0ODAwOTYzM0E1IC8qIEpT
S2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTg2NjI5Q0QwOURBMkI0NzAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5oICovOyB9
OwogCQlBODY2MjlENDA5REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNFMDlEQTJC
NDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3BwICovOyB9OworCQlBODcxRDQ1NjBBMTI3
Q0JDMDBCMTJBNjggLyogSFRNTFBsdWdJbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFENDRDMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1M
UGx1Z0luRWxlbWVudC5oICovOyB9OworCQlBODcxRDQ1NzBBMTI3Q0JDMDBCMTJBNjggLyogSFRN
TFBsdWdJbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg3MUQ0NEQwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQbHVnSW5FbGVtZW50LmNw
cCAqLzsgfTsKKwkJQTg3MUQ0NTgwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQYXJhbUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFENDRF
MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGFyYW1FbGVtZW50LmggKi87IH07CisJCUE4NzFENDU5
MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGFyYW1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFENDRGMEExMjdDQkMwMEIxMkE2OCAv
KiBIVE1MUGFyYW1FbGVtZW50LmNwcCAqLzsgfTsKKwkJQTg3MUQ0NUEwQTEyN0NCQzAwQjEyQTY4
IC8qIEhUTUxPYmplY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODcxRDQ1MDBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTE9iamVjdEVsZW1l
bnQuaCAqLzsgfTsKKwkJQTg3MUQ0NUIwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxPYmplY3RFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
NzFENDUxMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MT2JqZWN0RWxlbWVudC5jcHAgKi87IH07CisJ
CUE4NzFENDVDMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MRW1iZWRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcxRDQ1MjBBMTI3Q0JDMDBC
MTJBNjggLyogSFRNTEVtYmVkRWxlbWVudC5oICovOyB9OworCQlBODcxRDQ1RDBBMTI3Q0JDMDBC
MTJBNjggLyogSFRNTEFwcGxldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFENDUzMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MQXBwbGV0
RWxlbWVudC5oICovOyB9OworCQlBODcxRDQ1RTBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTEFwcGxl
dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTg3MUQ0NTQwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxBcHBsZXRFbGVtZW50LmNwcCAqLzsg
fTsKKwkJQTg3MUQ0NUYwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxFbWJlZEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3MUQ0NTUwQTEy
N0NCQzAwQjEyQTY4IC8qIEhUTUxFbWJlZEVsZW1lbnQuY3BwICovOyB9OwogCQlBODhBRDM4NjA5
NTI0ODZEMDAxREQxOTYgLyogS1JlbmRlcmluZ0RldmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI1NDA4OTcwMUY3MDBCQTUxMTQgLyog
S1JlbmRlcmluZ0RldmljZS5jcHAgKi87IH07CiAJCUE4OEFEMzg3MDk1MjQ4NkQwMDFERDE5NiAv
KiBLUmVuZGVyaW5nRGV2aWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEMwRkI1NTA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0RldmljZS5o
ICovOyB9OwogCQlBODhBRDM4ODA5NTI0ODZEMDAxREQxOTYgLyogS1JlbmRlcmluZ0ZpbGxQYWlu
dGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
QzBGQjU5MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nRmlsbFBhaW50ZXIuY3BwICovOyB9
OwpAQCAtMTk1OCw2ICsxOTY2LDE2IEBACiAJCUE4NjYyOUNDMDlEQTJCNDcwMDk2MzNBNSAvKiBK
U01vdXNlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
TW91c2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NjYyOUNEMDlE
QTJCNDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTS2V5Ym9hcmRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODY2MjlDRTA5REEyQjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0tleWJvYXJkRXZlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODcxRDQ0QzBBMTI3Q0JDMDBCMTJBNjggLyog
SFRNTFBsdWdJbkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhU
TUxQbHVnSW5FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4NzFENDRE
MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGx1Z0luRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFBsdWdJbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBODcxRDQ0RTBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBhcmFt
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBhcmFtRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODcxRDQ0RjBBMTI3Q0JDMDBC
MTJBNjggLyogSFRNTFBhcmFtRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSFRNTFBhcmFtRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE4NzFENDUwMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MT2JqZWN0RWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTE9iamVjdEVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg3MUQ0NTEwQTEyN0NCQzAwQjEyQTY4IC8qIEhU
TUxPYmplY3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIVE1MT2JqZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4
NzFENDUyMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MRW1iZWRFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRW1iZWRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUE4NzFENDUzMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MQXBwbGV0RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEFwcGxldEVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg3MUQ0NTQwQTEyN0NCQzAwQjEy
QTY4IC8qIEhUTUxBcHBsZXRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBIVE1MQXBwbGV0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE4NzFENDU1MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MRW1iZWRFbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRW1iZWRFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg4NDI4MzgwOTMwOEMxQzAwQjZENDYx
IC8qIFNWR05hbWVzV3JhcHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR05hbWVzV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBODg0MjgzOTA5MzA4
QzFDMDBCNkQ0NjEgLyogU1ZHRWxlbWVudEZhY3RvcnlXcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRWxlbWVudEZhY3Rv
cnlXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCUE4ODQyODNEMDkzMDhDMUMwMEI2RDQ2MSAvKiBET01MaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
QEAgLTI1NjYsOCArMjU4NCw2IEBACiAJCUY1MjNEMjQ3MDJERTQzOTYwMTg2MzVDQSAvKiBodG1s
X2lubGluZWltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gaHRtbF9pbmxpbmVpbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI0ODAyREU0Mzk2MDE4NjM1Q0EgLyog
aHRtbF9saXN0aW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBodG1sX2xpc3RpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjQ5MDJERTQzOTYwMTg2
MzVDQSAvKiBodG1sX2xpc3RpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IGh0bWxfbGlzdGltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMjRDMDJERTQzOTYwMTg2
MzVDQSAvKiBodG1sX29iamVjdGltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaHRtbF9vYmplY3RpbXBsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMjRE
MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX29iamVjdGltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaHRtbF9vYmplY3RpbXBsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIz
RDI0RTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF90YWJsZWltcGwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaHRtbF90YWJsZWltcGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJRjUyM0QyNEYwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfdGFibGVpbXBsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGh0bWxfdGFibGVp
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQlGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTFBhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MUGFy
c2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CkBAIC0zMTkxLDEwICszMjA3LDEwIEBACiAJCQkJRjUyM0QyNDcwMkRFNDM5NjAxODYz
NUNBIC8qIGh0bWxfaW5saW5laW1wbC5oICovLAogCQkJCUY1MjNEMjQ4MDJERTQzOTYwMTg2MzVD
QSAvKiBodG1sX2xpc3RpbXBsLmNwcCAqLywKIAkJCQlGNTIzRDI0OTAyREU0Mzk2MDE4NjM1Q0Eg
LyogaHRtbF9saXN0aW1wbC5oICovLAotCQkJCUY1MjNEMjRDMDJERTQzOTYwMTg2MzVDQSAvKiBo
dG1sX29iamVjdGltcGwuY3BwICovLAotCQkJCUY1MjNEMjREMDJERTQzOTYwMTg2MzVDQSAvKiBo
dG1sX29iamVjdGltcGwuaCAqLywKIAkJCQlGNTIzRDI0RTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRt
bF90YWJsZWltcGwuY3BwICovLAogCQkJCUY1MjNEMjRGMDJERTQzOTYwMTg2MzVDQSAvKiBodG1s
X3RhYmxlaW1wbC5oICovLAorCQkJCUE4NzFENDU0MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MQXBw
bGV0RWxlbWVudC5jcHAgKi8sCisJCQkJQTg3MUQ0NTMwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxB
cHBsZXRFbGVtZW50LmggKi8sCiAJCQkJQThERjNGQ0IwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxC
YXNlRm9udEVsZW1lbnQuY3BwICovLAogCQkJCUE4REYzRkNBMDk3RkEwRkIwMDUyOTgxQiAvKiBI
VE1MQmFzZUZvbnRFbGVtZW50LmggKi8sCiAJCQkJQTgxMzY5QjcwOTczNzRGNTAwRDc0NDYzIC8q
IEhUTUxCdXR0b25FbGVtZW50LmNwcCAqLywKQEAgLTMyMTAsNiArMzIyNiw4IEBACiAJCQkJRjUy
M0QyM0YwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmggKi8sCiAJCQkJQkNFRjM0MzIw
ODdCNTYzRTAwQkJGODMzIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi8sCiAJCQkJQkNFRjM0
MzMwODdCNTYzRTAwQkJGODMzIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5oICovLAorCQkJCUE4NzFE
NDU1MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MRW1iZWRFbGVtZW50LmNwcCAqLywKKwkJCQlBODcx
RDQ1MjBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTEVtYmVkRWxlbWVudC5oICovLAogCQkJCUE4MTM2
OUI5MDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MRmllbGRTZXRFbGVtZW50LmNwcCAqLywKIAkJCQlB
ODEzNjlCODA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTEZpZWxkU2V0RWxlbWVudC5oICovLAogCQkJ
CUE4REYzRkM3MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MRm9ybUNvbGxlY3Rpb24uY3BwICovLApA
QCAtMzIzMiwxNCArMzI1MCwyMCBAQAogCQkJCUE4REYzRkNDMDk3RkEwRkIwMDUyOTgxQiAvKiBI
VE1MTmFtZUNvbGxlY3Rpb24uaCAqLywKIAkJCQk1NTBBMEJDQjA4NUY2MDREMDA3MzUzRDYgLyog
SFRNTE5hbWVzLmNwcCAqLywKIAkJCQk1NTBBMEJDQzA4NUY2MDREMDA3MzUzRDYgLyogSFRNTE5h
bWVzLmggKi8sCisJCQkJQTg3MUQ0NTEwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxPYmplY3RFbGVt
ZW50LmNwcCAqLywKKwkJCQlBODcxRDQ1MDBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTE9iamVjdEVs
ZW1lbnQuaCAqLywKIAkJCQlBODEzNjlDMzA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTE9wdEdyb3Vw
RWxlbWVudC5jcHAgKi8sCiAJCQkJQTgxMzY5QzIwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxPcHRH
cm91cEVsZW1lbnQuaCAqLywKIAkJCQlBODEzNjlDMTA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTE9w
dGlvbkVsZW1lbnQuY3BwICovLAogCQkJCUE4MTM2OUMwMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
T3B0aW9uRWxlbWVudC5oICovLAogCQkJCTkzMjdBOTQxMDk5NjhEMUEwMDY4QTU0NiAvKiBIVE1M
T3B0aW9uc0NvbGxlY3Rpb24uY3BwICovLAogCQkJCUE4MTM2OUJFMDk3Mzc0RjUwMEQ3NDQ2MyAv
KiBIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCAqLywKKwkJCQlBODcxRDQ0RjBBMTI3Q0JDMDBCMTJB
NjggLyogSFRNTFBhcmFtRWxlbWVudC5jcHAgKi8sCisJCQkJQTg3MUQ0NEUwQTEyN0NCQzAwQjEy
QTY4IC8qIEhUTUxQYXJhbUVsZW1lbnQuaCAqLywKIAkJCQlGNTIzRDI1MDAyREU0Mzk2MDE4NjM1
Q0EgLyogSFRNTFBhcnNlci5jcHAgKi8sCiAJCQkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8q
IEhUTUxQYXJzZXIuaCAqLywKKwkJCQlBODcxRDQ0RDBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBs
dWdJbkVsZW1lbnQuY3BwICovLAorCQkJCUE4NzFENDRDMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1M
UGx1Z0luRWxlbWVudC5oICovLAogCQkJCUE4MTM2OUJEMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
U2VsZWN0RWxlbWVudC5jcHAgKi8sCiAJCQkJQTgxMzY5QkMwOTczNzRGNTAwRDc0NDYzIC8qIEhU
TUxTZWxlY3RFbGVtZW50LmggKi8sCiAJCQkJQTgxMzY5QkIwOTczNzRGNTAwRDc0NDYzIC8qIEhU
TUxUZXh0QXJlYUVsZW1lbnQuY3BwICovLApAQCAtNDQxMiw3ICs0NDM2LDYgQEAKIAkJCQk5M0Yx
OThFOTA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9pbWFnZWltcGwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzRjE5OEVBMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2lubGluZWltcGwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzRjE5OEVCMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2xpc3RpbXBsLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOThFRDA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9vYmpl
Y3RpbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFRTA4MjQ1RTU5MDAxRTlBQkMgLyog
aHRtbF90YWJsZWltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEVGMDgyNDVFNTkwMDFF
OUFCQyAvKiBIVE1MUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThGMDA4MjQ1RTU5
MDAxRTlBQkMgLyogSFRNTFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCkBAIC01MDAzLDYgKzUw
MjYsMTEgQEAKIAkJCQkxQTc2MkM3QTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1RDkzOEYwQTBCOUFDQzAwQjExMjFGIC8qIFhQYXRoUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY5MzE3NjBBMENENEZBMDBDMTI3RkUgLyogWFBh
dGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTg3MUQ0NTYwQTEyN0NCQzAwQjEyQTY4IC8q
IEhUTUxQbHVnSW5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBODcxRDQ1ODBBMTI3Q0JD
MDBCMTJBNjggLyogSFRNTFBhcmFtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTg3MUQ0
NUEwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxPYmplY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQlBODcxRDQ1QzBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTEVtYmVkRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTg3MUQ0NUQwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxBcHBsZXRFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTUyMTgsNyArNTI0Niw2IEBACiAJCQkJOTNGMTlBOTUw
ODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfaW1hZ2VpbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzRjE5QTk2MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2lubGluZWltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTlBOTcwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfbGlzdGltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBOTkwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfb2Jq
ZWN0aW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5QTA4MjQ1RTU5MDAxRTlBQkMg
LyogaHRtbF90YWJsZWltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOUIwODI0NUU1
OTAwMUU5QUJDIC8qIEhUTUxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOUMw
ODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01
NzQwLDYgKzU3NjcsMTEgQEAKIAkJCQk5MzZCREQxRDBBMDMxQUVCMDA0REY0QUIgLyogR3JhcGhp
Y3NDb250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRDEzMjAwQTBDMDAzMDAwMUFG
QThCIC8qIEZvbnREYXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2OTMxNzcwQTBDRDRGQTAw
QzEyN0ZFIC8qIFhQYXRoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTg3MUQ0NTcwQTEy
N0NCQzAwQjEyQTY4IC8qIEhUTUxQbHVnSW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUE4NzFENDU5MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGFyYW1FbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE4NzFENDVCMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MT2JqZWN0RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODcxRDQ1RTBBMTI3Q0JDMDBCMTJBNjggLyogSFRN
TEFwcGxldEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTg3MUQ0NUYwQTEyN0NCQzAw
QjEyQTY4IC8qIEhUTUxFbWJlZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBwYWdl
L0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTQyNTcp
CisrKyBwYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2lu
Y2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1
ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRE9N
V2luZG93LmgiCiAjaW5jbHVkZSAiRWRpdGluZ1RleHQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAi
SFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAj
aW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCkBAIC01OSw3ICs2MCw2IEBACiAjaW5jbHVkZSAi
Y3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1
ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbF9vYmplY3RpbXBsLmgiCiAjaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJranNfd2luZG93LmgiCiAjaW5jbHVkZSAi
bWFya3VwLmgiCkBAIC0yNDY5LDcgKzI0NjksNyBAQCB2b2lkIEZyYW1lOjpoYW5kbGVGYWxsYmFj
a0NvbnRlbnQoKQogICAgIEVsZW1lbnQqIG93bmVyID0gb3duZXJFbGVtZW50KCk7CiAgICAgaWYg
KCFvd25lciB8fCAhb3duZXItPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKICAgICAgICAgcmV0dXJu
OwotICAgIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50ICo+KG93bmVyKS0+cmVuZGVyRmFs
bGJhY2tDb250ZW50KCk7CisgICAgc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihvd25l
ciktPnJlbmRlckZhbGxiYWNrQ29udGVudCgpOwogfQogCiB2b2lkIEZyYW1lOjpzZXRTZXR0aW5n
cyhLSFRNTFNldHRpbmdzICpzZXR0aW5ncykK
</data>
<flag name="review"
          id="2300"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>