<?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>8925</bug_id>
          
          <creation_ts>2006-05-15 14:07:20 -0700</creation_ts>
          <short_desc>split render_list and html_listimpl into separate files (one per class)</short_desc>
          <delta_ts>2006-05-15 14:39:27 -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>42401</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 14:07:20 -0700</bug_when>
    <thetext>The world is a safer place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42402</commentid>
    <comment_count>1</comment_count>
      <attachid>8329</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 14:07:54 -0700</bug_when>
    <thetext>Created attachment 8329
do the splits! (ignoring whitespace changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42403</commentid>
    <comment_count>2</comment_count>
      <attachid>8329</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2006-05-15 14:11:26 -0700</bug_when>
    <thetext>Comment on attachment 8329
do the splits! (ignoring whitespace changes)

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8329</attachid>
            <date>2006-05-15 14:07:54 -0700</date>
            <delta_ts>2006-05-15 14:11:26 -0700</delta_ts>
            <desc>do the splits! (ignoring whitespace changes)</desc>
            <filename>split.patch</filename>
            <type>text/plain</type>
            <size>200914</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9q
cy9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgYmluZGluZ3MvanMva2pzX2h0bWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiSFRNTEJvZHlF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJSRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCdXR0
b25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTERMaXN0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxEaXJlY3RvcnlFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEVtYmVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGaWVsZFNldEVsZW1lbnQuaCIK
QEAgLTQzLDEwICs0NSwxNCBAQAogI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MTWVudUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWV0YUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTW9kRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE9MaXN0RWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
T3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIgpAQCAt
NjMsNiArNjksNyBAQAogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MVGl0bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFF1b3RlRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxVTGlzdEVsZW1lbnQuaCIKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTcwLDcgKzc3LDYg
QEAKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2Jsb2NraW1w
bC5oIgogI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbF9saXN0aW1w
bC5oIgogI2luY2x1ZGUgImtqc19jc3MuaCIKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAjaW5j
bHVkZSAia2pzX3Byb3h5LmgiCkluZGV4OiBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiAxNDM4MikKKysrIGJp
bmRpbmdzL29iamMvRE9NSFRNTC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQAog
I2ltcG9ydCAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MQlJFbGVtZW50LmgiCiAj
aW1wb3J0ICJIVE1MQnV0dG9uRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTERpcmVjdG9yeUVsZW1l
bnQuaCIKKyNpbXBvcnQgIkhUTUxETGlzdEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxEb2N1bWVu
dC5oIgogI2ltcG9ydCAiSFRNTEVtYmVkRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEZpZWxkU2V0
RWxlbWVudC5oIgpAQCAtNTAsOSArNTIsMTMgQEAKICNpbXBvcnQgIkhUTUxJc0luZGV4RWxlbWVu
dC5oIgogI2ltcG9ydCAiSFRNTExhYmVsRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTExlZ2VuZEVs
ZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxMSUVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxMaW5rRWxl
bWVudC5oIgorI2ltcG9ydCAiSFRNTE1lbnVFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTWV0YUVs
ZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAiSFRNTE9iamVjdEVsZW1l
bnQuaCIKKyNpbXBvcnQgIkhUTUxPTGlzdEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxPcHRHcm91
cEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1M
T3B0aW9uc0NvbGxlY3Rpb24uaCIKQEAgLTY4LDE2ICs3NCwxNiBAQAogI2ltcG9ydCAiSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNp
bXBvcnQgIkhUTUxUaXRsZUVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxVTGlzdEVsZW1lbnQuaCIK
ICNpbXBvcnQgIk5hbWVOb2RlTGlzdC5oIgogI2ltcG9ydCAiaHRtbF9ibG9ja2ltcGwuaCIKICNp
bXBvcnQgImh0bWxfaW1hZ2VpbXBsLmgiCi0jaW1wb3J0ICJodG1sX2xpc3RpbXBsLmgiCiAjaW1w
b3J0ICJtYXJrdXAuaCIKICNpbXBvcnQgIlJlbmRlclRleHRGaWVsZC5oIgogI2ltcG9ydCAiRnJh
bWVWaWV3LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU6OkhUTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIC8vIEZJWE1F
OiBUaGlzIGNvZGUgc2hvdWxkIGJlIHVzaW5nIHRoZSBpbXBsIG1ldGhvZHMgaW5zdGVhZCBvZiBk
b2luZyBzbyBtYW55IGdldC9zZXRBdHRyaWJ1dGUgY2FsbHMuCiAvLyBGSVhNRTogVGhpcyBjb2Rl
IHNob3VsZCBiZSBnZW5lcmF0ZWQuCkluZGV4OiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAxNDM4MikKKysr
IGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBA
QAogI2RlZmluZSBIVE1MX0hUTUxPcHRpb25FbGVtZW50SW1wbF9ICiAKICNpbmNsdWRlICJIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDUsNyArNDQsNyBAQAogCiAgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7
IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDI7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5l
d0NoaWxkLT5pc1RleHROb2RlKCkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
Y3JpcHRUYWcpOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0No
aWxkKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7CkluZGV4OiBodG1sL0hUTUxQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFBhcnNlci5jcHAJKHJldmlzaW9uIDE0Mzgy
KQorKysgaHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDEz
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxETGlzdEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRt
bEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSXNJbmRleEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dC5oIgpAQCAtNDUsNyArNDcsNiBAQAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiaHRtbF9ibG9ja2ltcGwuaCIKLSNpbmNsdWRlICJo
dG1sX2xpc3RpbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogaHRtbC9IVE1M
T3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCkBAIC0zOCw4ICszOSwx
MyBAQAogCiBIVE1MT3B0aW9uRWxlbWVudDo6SFRNTE9wdGlvbkVsZW1lbnQoRG9jdW1lbnQgKmRv
YywgSFRNTEZvcm1FbGVtZW50ICpmKQogICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudChvcHRp
b25UYWcsIGRvYywgZikKKyAgICAsIG1fc2VsZWN0ZWQoZmFsc2UpCiB7Ci0gICAgbV9zZWxlY3Rl
ZCA9IGZhbHNlOworfQorCitib29sIEhUTUxPcHRpb25FbGVtZW50OjpjaGVja0RURChjb25zdCBO
b2RlKiBuZXdDaGlsZCkKK3sKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShzY3JpcHRUYWcpOwogfQogCiBib29sIEhUTUxPcHRpb25FbGVt
ZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CkBAIC02NCw3ICs3MCw3IEBACiAgICAgICAgICAgICBy
ZXR1cm4gdGV4dDsKICAgICB9CiAKLSAgICBjb25zdCBOb2RlICpuID0gdGhpcy0+Zmlyc3RDaGls
ZCgpOworICAgIGNvbnN0IE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKG4pIHsK
ICAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gVEVYVF9OT0RFIHx8IG4tPm5vZGVUeXBlKCkg
PT0gQ0RBVEFfU0VDVElPTl9OT0RFKQogICAgICAgICAgICAgdGV4dCArPSBuLT5ub2RlVmFsdWUo
KTsKSW5kZXg6IGh0bWwvSFRNTERpcmVjdG9yeUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1s
L0hUTUxEaXJlY3RvcnlFbGVtZW50LmgJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MRGly
ZWN0b3J5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMzAgKzIxLDE3IEBACiAgKgog
ICovCiAKLSNpZm5kZWYgSFRNTF9MSVNUSU1QTF9ICi0jZGVmaW5lIEhUTUxfTElTVElNUExfSAot
Ci0vKgotICogd2UgaWdub3JlIHRoZSBkZXByZWNhdGVkIGNvbXBhY3QgYXR0cmlidXRlLiBOZXRz
Y2FwZSBkb2VzIHNvIHRvby4uLgotICovCisjaWZuZGVmIEhUTUxEaXJlY3RvcnlFbGVtZW50X0gK
KyNkZWZpbmUgSFRNTERpcmVjdG9yeUVsZW1lbnRfSAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUKLXsKLQotY2xh
c3MgSFRNTFVMaXN0RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAg
IEhUTUxVTGlzdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6
OnVsVGFnLCBkb2MpIHt9Ci0gICAgdmlydHVhbCB+SFRNTFVMaXN0RWxlbWVudCgpIHt9Ci0KLSAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gNTsgfQotCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
Kik7Ci0KLSAgICB2aXJ0dWFsIGludCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLQotICAg
IGJvb2wgY29tcGFjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKLQotICAg
IFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsK
LX07CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
SFRNTERpcmVjdG9yeUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKIHsKIHB1YmxpYzoKLSAg
ICBIVE1MRGlyZWN0b3J5RWxlbWVudChEb2N1bWVudCAqZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxO
YW1lczo6ZGlyVGFnLCBkb2MpIHt9Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgYm9vbCBj
b21wYWN0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwotfTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTWVudUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MTWVudUVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1M
RWxlbWVudChIVE1MTmFtZXM6Om1lbnVUYWcsIGRvYykge30KLQotICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVp
cmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9
Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxPTGlzdEVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MT0xpc3RFbGVtZW50KERvY3Vt
ZW50ICpkb2MpCi0gICAgICAgIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjpvbFRhZywgZG9jKSB7
IF9zdGFydCA9IDE7IH0KLSAgICAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgdmlydHVhbCBi
b29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKik7Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsK
LSAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci0KLSAgICBpbnQgc3RhcnQoKSBjb25zdCB7IHJl
dHVybiBfc3RhcnQ7IH0KLSAgICB2b2lkIHNldFN0YXJ0KGludCk7Ci0KLSAgICBTdHJpbmcgdHlw
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcgJik7Ci0KLXByaXZhdGU6
Ci0gICAgaW50IF9zdGFydDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRN
TExJRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxMSUVs
ZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6Omxp
VGFnLCBkb2MpIHsgaXNWYWx1ZWQgPSBmYWxzZTsgfQotICAgIHZpcnR1YWwgfkhUTUxMSUVsZW1l
bnQoKSB7fQotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0Vu
dHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLQotICAg
IFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsK
LQotICAgIGludCB2YWx1ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VmFsdWUoaW50KTsKLQotcHJp
dmF0ZToKLSAgICBib29sIGlzVmFsdWVkOwotICAgIGludCByZXF1ZXN0ZWRWYWx1ZTsKLX07Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTERMaXN0RWxlbWVudCA6IHB1YmxpYyBI
VE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxETGlzdEVsZW1lbnQoRG9jdW1lbnQgKmRv
YykgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6OmRsVGFnLCBkb2MpIHt9Ci0gICAgdmlydHVhbCB+
SFRNTERMaXN0RWxlbWVudCgpIHt9CisgICAgSFRNTERpcmVjdG9yeUVsZW1lbnQoRG9jdW1lbnQq
KTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiA1OyB9CkluZGV4OiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTQz
ODIpCisrKyBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGb3JtRGF0YUxp
c3QuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25z
Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclNlbGVjdC5oIgpAQCAtNDQsNyArNDUsMTEg
QEAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxTZWxlY3RFbGVtZW50OjpIVE1M
U2VsZWN0RWxlbWVudChEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCi0gICAgOiBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50KHNlbGVjdFRhZywgZG9jLCBmKSwgbV9taW53aWR0aCgwKSwg
bV9zaXplKDApLCBtX211bHRpcGxlKGZhbHNlKSwgbV9yZWNhbGNMaXN0SXRlbXMoZmFsc2UpCisg
ICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50KHNlbGVjdFRhZywgZG9jLCBmKQorICAgICwgbV9t
aW53aWR0aCgwKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX211bHRpcGxlKGZhbHNlKQorICAg
ICwgbV9yZWNhbGNMaXN0SXRlbXMoZmFsc2UpCiB7CiAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJG
b3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKIH0KSW5kZXg6IGh0bWwvSFRNTERpcmVjdG9yeUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw1OCArMjEsMTkgQEAKICAqCiAgKi8KICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJodG1sX2xpc3RpbXBsLmgiCisjaW5jbHVkZSAiSFRNTERpcmVjdG9yeUVsZW1l
bnQuaCIKIAotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NWYWx1
ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9saXN0LmgiCi0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWJvb2wgSFRNTFVMaXN0
RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gdHlw
ZUF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZVVub3JkZXJlZExpc3Q7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5
KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxVTGlzdEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IHR5cGVBdHRyKQotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9M
SVNUX1NUWUxFX1RZUEUsIGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UKLSAgICAgICAgSFRNTEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1ib29sIEhUTUxVTGlzdEVs
ZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBh
Y3RBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MVUxpc3RFbGVtZW50OjpzZXRDb21wYWN0
KGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDApOwot
fQotCi1TdHJpbmcgSFRNTFVMaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFVMaXN0RWxlbWVudDo6c2V0
VHlwZShjb25zdCBTdHJpbmcgJnZhbHVlKQorSFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJl
Y3RvcnlFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6
OmRpclRhZywgZG9jKQogewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwogfQog
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIGJvb2wgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OmNvbXBh
Y3QoKSBjb25zdAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051
bGwoKTsKQEAgLTgzLDE3MiArNDQsNCBAQAogICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwg
YiA/ICIiIDogMCk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBIVE1MTWVudUVs
ZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBh
Y3RBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MTWVudUVsZW1lbnQ6OnNldENvbXBhY3Qo
Ym9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBIVE1MT0xpc3RFbGVtZW50OjptYXBUb0Vu
dHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSB0eXBlQXR0cikgewotICAgICAg
ICByZXN1bHQgPSBlTGlzdEl0ZW07IC8vIFNoYXJlIHdpdGggPGxpPgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShh
dHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUo
KSA9PSB0eXBlQXR0cikgewotICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiYSIpCi0gICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENT
U19WQUxfTE9XRVJfQUxQSEEpOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJB
IikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVf
VFlQRSwgQ1NTX1ZBTF9VUFBFUl9BTFBIQSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVl
KCkgPT0gImkiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElT
VF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX1JPTUFOKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0
ci0+dmFsdWUoKSA9PSAiSSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfUk9NQU4pOwotICAgICAgICBlbHNl
IGlmIChhdHRyLT52YWx1ZSgpID09ICIxIikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9ERUNJTUFMKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzdGFydEF0dHIpIHsKLSAgICAgICAgX3N0YXJ0ID0gIWF0
dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogMTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1ib29s
IEhUTUxPTGlzdEVsZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0
cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MT0xpc3RFbGVtZW50
OjpzZXRDb21wYWN0KGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIg
PyAiIiA6IDApOwotfQotCi12b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGludCBzdGFy
dCkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBTdHJpbmc6Om51bWJlcihzdGFydCkp
OwotfQotCi1TdHJpbmcgSFRNTE9MaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9MaXN0RWxlbWVudDo6
c2V0VHlwZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgSFRNTExJRWxlbWVu
dDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gdHlwZUF0dHIp
IHsKLSAgICAgICAgcmVzdWx0ID0gZUxpc3RJdGVtOyAvLyBTaGFyZSB3aXRoIDxvbD4gc2luY2Ug
YWxsIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1
bHQpOwotfQotCi12b2lkIEhUTUxMSUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikg
ewotICAgICAgICBpc1ZhbHVlZCA9IHRydWU7Ci0gICAgICAgIHJlcXVlc3RlZFZhbHVlID0gIWF0
dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogMDsKLQotICAgICAgICBpZiAo
cmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgIFJl
bmRlckxpc3RJdGVtICpsaXN0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0gKj4ocmVuZGVy
ZXIoKSk7Ci0gICAgICAgICAgICAvLyAjIyMgd29yayBvdXQgd2hhdCB0byBkbyB3aGVuIGF0dHJp
YnV0ZSByZW1vdmVkIC0gdXNlIGRlZmF1bHQgb2Ygc29tZSBzb3J0PwotICAgICAgICAgICAgbGlz
dC0+c2V0VmFsdWUocmVxdWVzdGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0g
ImEiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlM
RV9UWVBFLCBDU1NfVkFMX0xPV0VSX0FMUEhBKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFs
dWUoKSA9PSAiQSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9M
SVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfQUxQSEEpOwotICAgICAgICBlbHNlIGlmIChh
dHRyLT52YWx1ZSgpID09ICJpIikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9ST01BTik7Ci0gICAgICAgIGVs
c2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkkiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHko
YXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQUEVSX1JPTUFOKTsKLSAg
ICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiMSIpCi0gICAgICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfREVDSU1BTCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X0xJU1RfU1RZTEVfVFlQRSwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhU
TUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotdm9pZCBIVE1MTElF
bGVtZW50OjphdHRhY2goKQotewotICAgIGFzc2VydCghYXR0YWNoZWQoKSk7Ci0KLSAgICBIVE1M
RWxlbWVudDo6YXR0YWNoKCk7Ci0KLSAgICBpZiAoIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+
c3R5bGUoKS0+ZGlzcGxheSgpID09IExJU1RfSVRFTSApIHsKLSAgICAgICAgUmVuZGVyTGlzdEl0
ZW0gKnJlbmRlciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtICo+KHJlbmRlcmVyKCkpOwot
ICAgICAgICAKLSAgICAgICAgLy8gRmluZCB0aGUgZW5jbG9zaW5nIGxpc3Qgbm9kZS4KLSAgICAg
ICAgTm9kZSAqbGlzdE5vZGUgPSAwOwotICAgICAgICBOb2RlICpuID0gdGhpczsKLSAgICAgICAg
d2hpbGUgKCFsaXN0Tm9kZSAmJiAobiA9IG4tPnBhcmVudE5vZGUoKSkpIHsKLSAgICAgICAgICAg
IGlmIChuLT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBuLT5oYXNUYWdOYW1lKG9sVGFnKSkKLSAgICAg
ICAgICAgICAgICBsaXN0Tm9kZSA9IG47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8v
IElmIHdlIGFyZSBub3QgaW4gYSBsaXN0LCB0ZWxsIHRoZSByZW5kZXJlciBzbyBpdCBjYW4gcG9z
aXRpb24gdXMgaW5zaWRlLgotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNoYW5nZSBvdXIg
c3R5bGUgdG8gc2F5ICJpbnNpZGUiIHNpbmNlIHRoYXQgd291bGQgYWZmZWN0IG5lc3RlZCBub2Rl
cy4KLSAgICAgICAgaWYgKCFsaXN0Tm9kZSkKLSAgICAgICAgICAgIHJlbmRlci0+c2V0Tm90SW5M
aXN0KHRydWUpOwotCi0gICAgICAgIC8vIElmIHdlIGhhZCBhIHZhbHVlIGF0dHIuCi0gICAgICAg
IGlmIChpc1ZhbHVlZCkKLSAgICAgICAgICAgIHJlbmRlci0+c2V0VmFsdWUocmVxdWVzdGVkVmFs
dWUpOwotICAgIH0KLX0KLQotU3RyaW5nIEhUTUxMSUVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxMSUVsZW1l
bnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlw
ZUF0dHIsIHZhbHVlKTsKLX0KLQotaW50IEhUTUxMSUVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbHVlQXR0cikudG9JbnQoKTsKLX0KLQotdm9pZCBI
VE1MTElFbGVtZW50OjpzZXRWYWx1ZShpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZh
bHVlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1ib29sIEhUTUxETGlzdEVsZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAotewotICAgIHJldHVy
biAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MRExp
c3RFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFj
dEF0dHIsIGIgPyAiIiA6IDApOwotfQotCiB9CkluZGV4OiBodG1sL0hUTUxNZW51RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTE1lbnVFbGVtZW50LmgJKHJldmlzaW9uIDE0MzgyKQor
KysgaHRtbC9IVE1MTWVudUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTMwICsyMSwx
NyBAQAogICoKICAqLwogCi0jaWZuZGVmIEhUTUxfTElTVElNUExfSAotI2RlZmluZSBIVE1MX0xJ
U1RJTVBMX0gKLQotLyoKLSAqIHdlIGlnbm9yZSB0aGUgZGVwcmVjYXRlZCBjb21wYWN0IGF0dHJp
YnV0ZS4gTmV0c2NhcGUgZG9lcyBzbyB0b28uLi4KLSAqLworI2lmbmRlZiBIVE1MTWVudUVsZW1l
bnRfSAorI2RlZmluZSBIVE1MTWVudUVsZW1lbnRfSAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUKLXsKLQotY2xh
c3MgSFRNTFVMaXN0RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAg
IEhUTUxVTGlzdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6
OnVsVGFnLCBkb2MpIHt9Ci0gICAgdmlydHVhbCB+SFRNTFVMaXN0RWxlbWVudCgpIHt9Ci0KLSAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gNTsgfQotCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
Kik7Ci0KLSAgICB2aXJ0dWFsIGludCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLQotICAg
IGJvb2wgY29tcGFjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKLQotICAg
IFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsK
LX07CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTERpcmVjdG9yeUVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRGlyZWN0b3J5RWxlbWVu
dChEb2N1bWVudCAqZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6ZGlyVGFnLCBkb2MpIHt9
Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRDb21wYWN0KGJvb2wpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTWVudUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MTWVudUVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1M
RWxlbWVudChIVE1MTmFtZXM6Om1lbnVUYWcsIGRvYykge30KLQotICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVp
cmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9
Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxPTGlzdEVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MT0xpc3RFbGVtZW50KERvY3Vt
ZW50ICpkb2MpCi0gICAgICAgIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjpvbFRhZywgZG9jKSB7
IF9zdGFydCA9IDE7IH0KLSAgICAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgdmlydHVhbCBi
b29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKik7Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsK
LSAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci0KLSAgICBpbnQgc3RhcnQoKSBjb25zdCB7IHJl
dHVybiBfc3RhcnQ7IH0KLSAgICB2b2lkIHNldFN0YXJ0KGludCk7Ci0KLSAgICBTdHJpbmcgdHlw
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcgJik7Ci0KLXByaXZhdGU6
Ci0gICAgaW50IF9zdGFydDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRN
TExJRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxMSUVs
ZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6Omxp
VGFnLCBkb2MpIHsgaXNWYWx1ZWQgPSBmYWxzZTsgfQotICAgIHZpcnR1YWwgfkhUTUxMSUVsZW1l
bnQoKSB7fQotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0Vu
dHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLQotICAg
IFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsK
LQotICAgIGludCB2YWx1ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VmFsdWUoaW50KTsKLQotcHJp
dmF0ZToKLSAgICBib29sIGlzVmFsdWVkOwotICAgIGludCByZXF1ZXN0ZWRWYWx1ZTsKLX07Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTERMaXN0RWxlbWVudCA6IHB1YmxpYyBI
VE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxETGlzdEVsZW1lbnQoRG9jdW1lbnQgKmRv
YykgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6OmRsVGFnLCBkb2MpIHt9Ci0gICAgdmlydHVhbCB+
SFRNTERMaXN0RWxlbWVudCgpIHt9CisgICAgSFRNTE1lbnVFbGVtZW50KERvY3VtZW50Kik7CiAK
ICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gNTsgfQpJbmRleDogaHRtbC9odG1sX2xpc3RpbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gaHRtbC9odG1sX2xpc3RpbXBsLmgJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9odG1s
X2xpc3RpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw
LAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgSFRN
TF9MSVNUSU1QTF9ICi0jZGVmaW5lIEhUTUxfTElTVElNUExfSAotCi0vKgotICogd2UgaWdub3Jl
IHRoZSBkZXByZWNhdGVkIGNvbXBhY3QgYXR0cmlidXRlLiBOZXRzY2FwZSBkb2VzIHNvIHRvby4u
LgotICovCi0KLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZQotewotCi1jbGFzcyBIVE1MVUxpc3RFbGVtZW50IDogcHVi
bGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTFVMaXN0RWxlbWVudChEb2N1bWVu
dCAqZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6dWxUYWcsIGRvYykge30KLSAgICB2aXJ0
dWFsIH5IVE1MVUxpc3RFbGVtZW50KCkge30KLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0g
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqKTsKLQotICAgIHZpcnR1YWwgaW50IHN0
YXJ0KCkgY29uc3QgeyByZXR1cm4gMTsgfQotCi0gICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAg
ICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nICYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1jbGFzcyBIVE1MRGlyZWN0b3J5RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewot
cHVibGljOgotICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50KERvY3VtZW50ICpkb2MpIDogSFRNTEVs
ZW1lbnQoSFRNTE5hbWVzOjpkaXJUYWcsIGRvYykge30KLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0K
LSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxNZW51RWxlbWVudCA6IHB1Ymxp
YyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxNZW51RWxlbWVudChEb2N1bWVudCAq
ZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6bWVudVRhZywgZG9jKSB7fQotCi0gICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDU7IH0KLQotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29t
cGFjdChib29sKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTE9MaXN0
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxPTGlzdEVs
ZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6Om9s
VGFnLCBkb2MpIHsgX3N0YXJ0ID0gMTsgfQotICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1
cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9
Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqKTsKLQotICAgIGJvb2wgY29tcGFj
dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKLQotICAgIGludCBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIF9zdGFydDsgfQotICAgIHZvaWQgc2V0U3RhcnQoaW50KTsKLQotICAg
IFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsK
LQotcHJpdmF0ZToKLSAgICBpbnQgX3N0YXJ0OwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1jbGFzcyBIVE1MTElFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0g
ICAgSFRNTExJRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgICAgICA6IEhUTUxFbGVtZW50KEhU
TUxOYW1lczo6bGlUYWcsIGRvYykgeyBpc1ZhbHVlZCA9IGZhbHNlOyB9Ci0gICAgdmlydHVhbCB+
SFRNTExJRWxlbWVudCgpIHt9Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQotICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQotCi0gICAgdmlydHVhbCBi
b29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFj
aCgpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29uc3Qg
U3RyaW5nICYpOwotCi0gICAgaW50IHZhbHVlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZShp
bnQpOwotCi1wcml2YXRlOgotICAgIGJvb2wgaXNWYWx1ZWQ7Ci0gICAgaW50IHJlcXVlc3RlZFZh
bHVlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MRExpc3RFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTERMaXN0RWxlbWVudChE
b2N1bWVudCAqZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6ZGxUYWcsIGRvYykge30KLSAg
ICB2aXJ0dWFsIH5IVE1MRExpc3RFbGVtZW50KCkge30KLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0K
LSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci19
OwotCi19IC8vbmFtZXNwYWNlCi0KLSNlbmRpZgpJbmRleDogaHRtbC9IVE1MT0xpc3RFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NDM4MikKKysrIGh0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDgyICsyMSwyMiBAQAogICoKICAqLwogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImh0
bWxfbGlzdGltcGwuaCIKKyNpbmNsdWRlICJIVE1MT0xpc3RFbGVtZW50LmgiCiAKICNpbmNsdWRl
ICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2lu
Y2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfbGlzdC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1ib29sIEhUTUxVTGlzdEVsZW1lbnQ6Om1hcFRvRW50
cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IHR5cGVBdHRyKSB7Ci0gICAgICAg
IHJlc3VsdCA9IGVVbm9yZGVyZWRMaXN0OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0
KTsKLX0KLQotdm9pZCBIVE1MVUxpc3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikK
LSAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBh
dHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotYm9vbCBIVE1MVUxpc3RFbGVtZW50Ojpjb21wYWN0KCkg
Y29uc3QKK0hUTUxPTGlzdEVsZW1lbnQ6OkhUTUxPTGlzdEVsZW1lbnQoRG9jdW1lbnQqIGRvYykK
KyAgICA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6b2xUYWcsIGRvYykKKyAgICAsIG1fc3RhcnQo
MSkKIHsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19
Ci0KLXZvaWQgSFRNTFVMaXN0RWxlbWVudDo6c2V0Q29tcGFjdChib29sIGIpCi17Ci0gICAgc2V0
QXR0cmlidXRlKGNvbXBhY3RBdHRyLCBiID8gIiIgOiAwKTsKLX0KLQotU3RyaW5nIEhUTUxVTGlz
dEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0
dHIpOwotfQotCi12b2lkIEhUTUxVTGlzdEVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKIH0KIAotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1ib29sIEhUTUxEaXJlY3RvcnlFbGVtZW50Ojpjb21wYWN0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19
Ci0KLXZvaWQgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQotewotICAg
IHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotYm9vbCBIVE1MTWVudUVsZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAotewotICAg
IHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBI
VE1MTWVudUVsZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShj
b21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogYm9v
bCBIVE1MT0xpc3RFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRy
TmFtZSA9PSB0eXBlQXR0cikgewpAQCAtMTIwLDkgKzYwLDkgQEAKICAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9S
T01BTik7CiAgICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIjEiKQogICAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFM
X0RFQ0lNQUwpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHN0YXJ0QXR0cikgewot
ICAgICAgICBfc3RhcnQgPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkg
OiAxOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHN0YXJ0QXR0
cikKKyAgICAgICAgbV9zdGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHItPnZhbHVlKCkudG9J
bnQoKSA6IDE7CisgICAgZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CiB9CiAKQEAgLTE1MCwxMDUgKzkwLDQgQEAKIHsKICAgICBzZXRBdHRyaWJ1
dGUodHlwZUF0dHIsIHZhbHVlKTsKIH0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIEhU
TUxMSUVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09
IHR5cGVBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVMaXN0SXRlbTsgLy8gU2hhcmUgd2l0aCA8
b2w+IHNpbmNlIGFsbCB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRy
TmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MTElFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB2
YWx1ZUF0dHIpIHsKLSAgICAgICAgaXNWYWx1ZWQgPSB0cnVlOwotICAgICAgICByZXF1ZXN0ZWRW
YWx1ZSA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHItPnZhbHVlKCkudG9JbnQoKSA6IDA7Ci0KLSAg
ICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNMaXN0SXRlbSgpKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJMaXN0SXRlbSAqbGlzdCA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVt
ICo+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgLy8gIyMjIHdvcmsgb3V0IHdoYXQgdG8gZG8g
d2hlbiBhdHRyaWJ1dGUgcmVtb3ZlZCAtIHVzZSBkZWZhdWx0IG9mIHNvbWUgc29ydD8KLSAgICAg
ICAgICAgIGxpc3QtPnNldFZhbHVlKHJlcXVlc3RlZFZhbHVlKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIGlmIChhdHRyLT52
YWx1ZSgpID09ICJhIikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9BTFBIQSk7Ci0gICAgICAgIGVsc2UgaWYg
KGF0dHItPnZhbHVlKCkgPT0gIkEiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQUEVSX0FMUEhBKTsKLSAgICAgICAg
ZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiaSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfTE9XRVJfUk9NQU4pOwot
ICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJJIikKLSAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9S
T01BTik7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIjEiKQotICAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFM
X0RFQ0lNQUwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZQot
ICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZv
aWQgSFRNTExJRWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBhc3NlcnQoIWF0dGFjaGVkKCkpOwot
Ci0gICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwotCi0gICAgaWYgKCByZW5kZXJlcigpICYmIHJl
bmRlcmVyKCktPnN0eWxlKCktPmRpc3BsYXkoKSA9PSBMSVNUX0lURU0gKSB7Ci0gICAgICAgIFJl
bmRlckxpc3RJdGVtICpyZW5kZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSAqPihyZW5k
ZXJlcigpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgdGhlIGVuY2xvc2luZyBsaXN0IG5v
ZGUuCi0gICAgICAgIE5vZGUgKmxpc3ROb2RlID0gMDsKLSAgICAgICAgTm9kZSAqbiA9IHRoaXM7
Ci0gICAgICAgIHdoaWxlICghbGlzdE5vZGUgJiYgKG4gPSBuLT5wYXJlbnROb2RlKCkpKSB7Ci0g
ICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZSh1bFRhZykgfHwgbi0+aGFzVGFnTmFtZShvbFRh
ZykpCi0gICAgICAgICAgICAgICAgbGlzdE5vZGUgPSBuOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGluIGEgbGlzdCwgdGVsbCB0aGUgcmVuZGVyZXIgc28g
aXQgY2FuIHBvc2l0aW9uIHVzIGluc2lkZS4KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBj
aGFuZ2Ugb3VyIHN0eWxlIHRvIHNheSAiaW5zaWRlIiBzaW5jZSB0aGF0IHdvdWxkIGFmZmVjdCBu
ZXN0ZWQgbm9kZXMuCi0gICAgICAgIGlmICghbGlzdE5vZGUpCi0gICAgICAgICAgICByZW5kZXIt
PnNldE5vdEluTGlzdCh0cnVlKTsKLQotICAgICAgICAvLyBJZiB3ZSBoYWQgYSB2YWx1ZSBhdHRy
LgotICAgICAgICBpZiAoaXNWYWx1ZWQpCi0gICAgICAgICAgICByZW5kZXItPnNldFZhbHVlKHJl
cXVlc3RlZFZhbHVlKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBIVE1MTElFbGVtZW50Ojp0eXBlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBI
VE1MTElFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLWludCBIVE1MTElFbGVtZW50Ojp2YWx1ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLnRvSW50KCk7Ci19
Ci0KLXZvaWQgSFRNTExJRWxlbWVudDo6c2V0VmFsdWUoaW50IHZhbHVlKQotewotICAgIHNldEF0
dHJpYnV0ZSh2YWx1ZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotYm9vbCBIVE1MRExpc3RFbGVtZW50Ojpjb21wYWN0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZv
aWQgSFRNTERMaXN0RWxlbWVudDo6c2V0Q29tcGFjdChib29sIGIpCi17Ci0gICAgc2V0QXR0cmli
dXRlKGNvbXBhY3RBdHRyLCBiID8gIiIgOiAwKTsKLX0KLQogfQpJbmRleDogaHRtbC9IVE1MTWVu
dUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTE1lbnVFbGVtZW50LmNwcAkocmV2
aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxNZW51RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDcwICsyMSwxOSBAQAogICoKICAqLwogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgImh0bWxfbGlzdGltcGwuaCIKKyNpbmNsdWRlICJIVE1MTWVudUVsZW1lbnQuaCIKIAotI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
Ci0jaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9saXN0LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWJvb2wgSFRNTFVMaXN0RWxlbWVudDo6bWFw
VG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50
cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gdHlwZUF0dHIpIHsKLSAg
ICAgICAgcmVzdWx0ID0gZVVub3JkZXJlZExpc3Q7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCBy
ZXN1bHQpOwotfQotCi12b2lkIEhUTUxVTGlzdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVB
dHRyKQotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZ
UEUsIGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1ib29sIEhUTUxVTGlzdEVsZW1lbnQ6OmNvbXBh
Y3QoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051
bGwoKTsKLX0KLQotdm9pZCBIVE1MVUxpc3RFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wgYikKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDApOwotfQotCi1TdHJpbmcg
SFRNTFVMaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFVMaXN0RWxlbWVudDo6c2V0VHlwZShjb25zdCBT
dHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OmNvbXBh
Y3QoKSBjb25zdAorSFRNTE1lbnVFbGVtZW50OjpIVE1MTWVudUVsZW1lbnQoRG9jdW1lbnQqIGRv
YykKKyAgICA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6bWVudVRhZywgZG9jKQogewotICAgIHJl
dHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1M
RGlyZWN0b3J5RWxlbWVudDo6c2V0Q29tcGFjdChib29sIGIpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGNvbXBhY3RBdHRyLCBiID8gIiIgOiAwKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBi
b29sIEhUTUxNZW51RWxlbWVudDo6Y29tcGFjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFnZXRB
dHRyaWJ1dGUoY29tcGFjdEF0dHIpLmlzTnVsbCgpOwpAQCAtOTUsMTYwICs0NCw0IEBACiAgICAg
c2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyLCBiID8gIiIgOiAwKTsKIH0KIAotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1ib29sIEhUTUxPTGlzdEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17
Ci0gICAgaWYgKGF0dHJOYW1lID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVMaXN0
SXRlbTsgLy8gU2hhcmUgd2l0aCA8bGk+Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQp
OwotfQotCi12b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7
Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJhIikKLSAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9BTFBI
QSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkEiKQotICAgICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQ
UEVSX0FMUEhBKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiaSIpCi0gICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENT
U19WQUxfTE9XRVJfUk9NQU4pOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJJ
IikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVf
VFlQRSwgQ1NTX1ZBTF9VUFBFUl9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVl
KCkgPT0gIjEiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElT
VF9TVFlMRV9UWVBFLCBDU1NfVkFMX0RFQ0lNQUwpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IHN0YXJ0QXR0cikgewotICAgICAgICBfc3RhcnQgPSAhYXR0ci0+aXNOdWxsKCkgPyBh
dHRyLT52YWx1ZSgpLnRvSW50KCkgOiAxOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLWJvb2wgSFRNTE9MaXN0RWxlbWVu
dDo6Y29tcGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29tcGFjdEF0
dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldENvbXBhY3QoYm9v
bCBiKQotewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0K
LXZvaWQgSFRNTE9MaXN0RWxlbWVudDo6c2V0U3RhcnQoaW50IHN0YXJ0KQotewotICAgIHNldEF0
dHJpYnV0ZShzdGFydEF0dHIsIFN0cmluZzo6bnVtYmVyKHN0YXJ0KSk7Ci19Ci0KLVN0cmluZyBI
VE1MT0xpc3RFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBIVE1MTElFbGVtZW50OjptYXBUb0VudHJ5KGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0
KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSB0eXBlQXR0cikgewotICAgICAgICByZXN1
bHQgPSBlTGlzdEl0ZW07IC8vIFNoYXJlIHdpdGggPG9sPiBzaW5jZSBhbGwgdGhlIHZhbHVlcyBh
cmUgdGhlIHNhbWUKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQg
SFRNTExJRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIGlzVmFs
dWVkID0gdHJ1ZTsKLSAgICAgICAgcmVxdWVzdGVkVmFsdWUgPSAhYXR0ci0+aXNOdWxsKCkgPyBh
dHRyLT52YWx1ZSgpLnRvSW50KCkgOiAwOwotCi0gICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJl
bmRlcmVyKCktPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICAgICAgUmVuZGVyTGlzdEl0ZW0gKmxp
c3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSAqPihyZW5kZXJlcigpKTsKLSAgICAgICAg
ICAgIC8vICMjIyB3b3JrIG91dCB3aGF0IHRvIGRvIHdoZW4gYXR0cmlidXRlIHJlbW92ZWQgLSB1
c2UgZGVmYXVsdCBvZiBzb21lIHNvcnQ/Ci0gICAgICAgICAgICBsaXN0LT5zZXRWYWx1ZShyZXF1
ZXN0ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0
eXBlQXR0cikgewotICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiYSIpCi0gICAgICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxf
TE9XRVJfQUxQSEEpOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJBIikKLSAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwg
Q1NTX1ZBTF9VUFBFUl9BTFBIQSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0g
ImkiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlM
RV9UWVBFLCBDU1NfVkFMX0xPV0VSX1JPTUFOKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFs
dWUoKSA9PSAiSSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9M
SVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfUk9NQU4pOwotICAgICAgICBlbHNlIGlmIChh
dHRyLT52YWx1ZSgpID09ICIxIikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9ERUNJTUFMKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBF
LCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi12b2lkIEhUTUxMSUVsZW1lbnQ6OmF0dGFjaCgp
Ci17Ci0gICAgYXNzZXJ0KCFhdHRhY2hlZCgpKTsKLQotICAgIEhUTUxFbGVtZW50OjphdHRhY2go
KTsKLQotICAgIGlmICggcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5kaXNwbGF5
KCkgPT0gTElTVF9JVEVNICkgewotICAgICAgICBSZW5kZXJMaXN0SXRlbSAqcmVuZGVyID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0gKj4ocmVuZGVyZXIoKSk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBGaW5kIHRoZSBlbmNsb3NpbmcgbGlzdCBub2RlLgotICAgICAgICBOb2RlICpsaXN0Tm9k
ZSA9IDA7Ci0gICAgICAgIE5vZGUgKm4gPSB0aGlzOwotICAgICAgICB3aGlsZSAoIWxpc3ROb2Rl
ICYmIChuID0gbi0+cGFyZW50Tm9kZSgpKSkgewotICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05h
bWUodWxUYWcpIHx8IG4tPmhhc1RhZ05hbWUob2xUYWcpKQotICAgICAgICAgICAgICAgIGxpc3RO
b2RlID0gbjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBp
biBhIGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUu
Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIG91ciBzdHlsZSB0byBzYXkgImlu
c2lkZSIgc2luY2UgdGhhdCB3b3VsZCBhZmZlY3QgbmVzdGVkIG5vZGVzLgotICAgICAgICBpZiAo
IWxpc3ROb2RlKQotICAgICAgICAgICAgcmVuZGVyLT5zZXROb3RJbkxpc3QodHJ1ZSk7Ci0KLSAg
ICAgICAgLy8gSWYgd2UgaGFkIGEgdmFsdWUgYXR0ci4KLSAgICAgICAgaWYgKGlzVmFsdWVkKQot
ICAgICAgICAgICAgcmVuZGVyLT5zZXRWYWx1ZShyZXF1ZXN0ZWRWYWx1ZSk7Ci0gICAgfQotfQot
Ci1TdHJpbmcgSFRNTExJRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExJRWxlbWVudDo6c2V0VHlwZShjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwot
fQotCi1pbnQgSFRNTExJRWxlbWVudDo6dmFsdWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUodmFsdWVBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxMSUVsZW1lbnQ6OnNl
dFZhbHVlKGludCB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBTdHJpbmc6
Om51bWJlcih2YWx1ZSkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgSFRNTERM
aXN0RWxlbWVudDo6Y29tcGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUo
Y29tcGFjdEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxETGlzdEVsZW1lbnQ6OnNldENv
bXBhY3QoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDog
MCk7Ci19Ci0KIH0KSW5kZXg6IGh0bWwvSFRNTFVMaXN0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGh0bWwvSFRNTFVMaXN0RWxlbWVudC5oCShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTFVM
aXN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwyOSArMjEsMjIgQEAKICAqCiAgKi8K
IAotI2lmbmRlZiBIVE1MX0xJU1RJTVBMX0gKLSNkZWZpbmUgSFRNTF9MSVNUSU1QTF9ICi0KLS8q
Ci0gKiB3ZSBpZ25vcmUgdGhlIGRlcHJlY2F0ZWQgY29tcGFjdCBhdHRyaWJ1dGUuIE5ldHNjYXBl
IGRvZXMgc28gdG9vLi4uCi0gKi8KKyNpZm5kZWYgSFRNTFVMaXN0RWxlbWVudF9ICisjZGVmaW5l
IEhUTUxVTGlzdEVsZW1lbnRfSAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKIAotbmFtZXNwYWNlIFdlYkNvcmUKLXsKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSFRNTFVMaXN0RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAogewogcHVi
bGljOgotICAgIEhUTUxVTGlzdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChI
VE1MTmFtZXM6OnVsVGFnLCBkb2MpIHt9Ci0gICAgdmlydHVhbCB+SFRNTFVMaXN0RWxlbWVudCgp
IHt9CisgICAgSFRNTFVMaXN0RWxlbWVudChEb2N1bWVudCopOwogCiAgICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVx
dWlyZWQ7IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50
cnkmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICopOwogCiAgICAgdmlydHVhbCBpbnQgc3RhcnQoKSBjb25zdCB7IHJldHVybiAx
OyB9CkBAIC01NSwxMDQgKzQ4LDYgQEAKICAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nICYp
OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MRGlyZWN0b3J5RWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxEaXJlY3RvcnlFbGVt
ZW50KERvY3VtZW50ICpkb2MpIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjpkaXJUYWcsIGRvYykg
e30KLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAg
ICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIEhUTUxNZW51RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAg
IEhUTUxNZW51RWxlbWVudChEb2N1bWVudCAqZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6
bWVudVRhZywgZG9jKSB7fQotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KLQotICAgIGJvb2wgY29tcGFj
dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKLX07Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotY2xhc3MgSFRNTE9MaXN0RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAot
ewotcHVibGljOgotICAgIEhUTUxPTGlzdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICAgICAg
OiBIVE1MRWxlbWVudChIVE1MTmFtZXM6Om9sVGFnLCBkb2MpIHsgX3N0YXJ0ID0gMTsgfQotICAg
IAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqKTsKLQotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29tcGFj
dChib29sKTsKLQotICAgIGludCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIF9zdGFydDsgfQotICAg
IHZvaWQgc2V0U3RhcnQoaW50KTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsKLQotcHJpdmF0ZToKLSAgICBpbnQgX3N0YXJ0Owot
fTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTElFbGVtZW50IDogcHVibGlj
IEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTExJRWxlbWVudChEb2N1bWVudCAqZG9j
KQotICAgICAgICA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6bGlUYWcsIGRvYykgeyBpc1ZhbHVl
ZCA9IGZhbHNlOyB9Ci0gICAgdmlydHVhbCB+SFRNTExJRWxlbWVudCgpIHt9Ci0KLSAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNPcHRpb25hbDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMzsgfQotCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
OwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25z
dDsKLSAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nICYpOwotCi0gICAgaW50IHZhbHVlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZShpbnQpOwotCi1wcml2YXRlOgotICAgIGJvb2wgaXNW
YWx1ZWQ7Ci0gICAgaW50IHJlcXVlc3RlZFZhbHVlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1jbGFzcyBIVE1MRExpc3RFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJs
aWM6Ci0gICAgSFRNTERMaXN0RWxlbWVudChEb2N1bWVudCAqZG9jKSA6IEhUTUxFbGVtZW50KEhU
TUxOYW1lczo6ZGxUYWcsIGRvYykge30KLSAgICB2aXJ0dWFsIH5IVE1MRExpc3RFbGVtZW50KCkg
e30KLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAg
ICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci19OwotCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJ
bmRleDogaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxV
TGlzdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTFVMaXN0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE4ICsyMSwyMCBAQAogICoKICAqLwogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImh0bWxfbGlzdGltcGwuaCIKKyNpbmNsdWRlICJIVE1M
VUxpc3RFbGVtZW50LmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVk
ZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfbGlzdC5o
IgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitIVE1M
VUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1M
RWxlbWVudChIVE1MTmFtZXM6OnVsVGFnLCBkb2MpCit7Cit9CisKIGJvb2wgSFRNTFVMaXN0RWxl
bWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gdHlwZUF0
dHIpIHsKQEAgLTcxLDE4NCArNzMsNCBAQAogICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFs
dWUpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgSFRNTERpcmVjdG9yeUVsZW1l
bnQ6OmNvbXBhY3QoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RB
dHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MRGlyZWN0b3J5RWxlbWVudDo6c2V0Q29tcGFj
dChib29sIGIpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyLCBiID8gIiIgOiAwKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIEhUTUxNZW51RWxlbWVudDo6Y29tcGFj
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIpLmlzTnVs
bCgpOwotfQotCi12b2lkIEhUTUxNZW51RWxlbWVudDo6c2V0Q29tcGFjdChib29sIGIpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyLCBiID8gIiIgOiAwKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1ib29sIEhUTUxPTGlzdEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0
Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVM
aXN0SXRlbTsgLy8gU2hhcmUgd2l0aCA8bGk+Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1
bHQpOwotfQotCi12b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRy
KSB7Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJhIikKLSAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9B
TFBIQSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkEiKQotICAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFM
X1VQUEVSX0FMUEhBKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiaSIpCi0g
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUs
IENTU19WQUxfTE9XRVJfUk9NQU4pOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09
ICJJIikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZ
TEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZh
bHVlKCkgPT0gIjEiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1Bf
TElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0RFQ0lNQUwpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IHN0YXJ0QXR0cikgewotICAgICAgICBfc3RhcnQgPSAhYXR0ci0+aXNOdWxsKCkg
PyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAxOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLWJvb2wgSFRNTE9MaXN0RWxl
bWVudDo6Y29tcGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29tcGFj
dEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldENvbXBhY3Qo
Ym9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19
Ci0KLXZvaWQgSFRNTE9MaXN0RWxlbWVudDo6c2V0U3RhcnQoaW50IHN0YXJ0KQotewotICAgIHNl
dEF0dHJpYnV0ZShzdGFydEF0dHIsIFN0cmluZzo6bnVtYmVyKHN0YXJ0KSk7Ci19Ci0KLVN0cmlu
ZyBIVE1MT0xpc3RFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRUeXBlKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBIVE1MTElFbGVtZW50OjptYXBUb0VudHJ5
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSB0eXBlQXR0cikgewotICAgICAgICBy
ZXN1bHQgPSBlTGlzdEl0ZW07IC8vIFNoYXJlIHdpdGggPG9sPiBzaW5jZSBhbGwgdGhlIHZhbHVl
cyBhcmUgdGhlIHNhbWUKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZv
aWQgSFRNTExJRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIGlz
VmFsdWVkID0gdHJ1ZTsKLSAgICAgICAgcmVxdWVzdGVkVmFsdWUgPSAhYXR0ci0+aXNOdWxsKCkg
PyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAwOwotCi0gICAgICAgIGlmIChyZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICAgICAgUmVuZGVyTGlzdEl0ZW0g
Kmxpc3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSAqPihyZW5kZXJlcigpKTsKLSAgICAg
ICAgICAgIC8vICMjIyB3b3JrIG91dCB3aGF0IHRvIGRvIHdoZW4gYXR0cmlidXRlIHJlbW92ZWQg
LSB1c2UgZGVmYXVsdCBvZiBzb21lIHNvcnQ/Ci0gICAgICAgICAgICBsaXN0LT5zZXRWYWx1ZShy
ZXF1ZXN0ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSB0eXBlQXR0cikgewotICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiYSIpCi0gICAgICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19W
QUxfTE9XRVJfQUxQSEEpOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJBIikK
LSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQ
RSwgQ1NTX1ZBTF9VUFBFUl9BTFBIQSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkg
PT0gImkiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9T
VFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX1JPTUFOKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+
dmFsdWUoKSA9PSAiSSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfUk9NQU4pOwotICAgICAgICBlbHNlIGlm
IChhdHRyLT52YWx1ZSgpID09ICIxIikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9ERUNJTUFMKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9U
WVBFLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi12b2lkIEhUTUxMSUVsZW1lbnQ6OmF0dGFj
aCgpCi17Ci0gICAgYXNzZXJ0KCFhdHRhY2hlZCgpKTsKLQotICAgIEhUTUxFbGVtZW50OjphdHRh
Y2goKTsKLQotICAgIGlmICggcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5kaXNw
bGF5KCkgPT0gTElTVF9JVEVNICkgewotICAgICAgICBSZW5kZXJMaXN0SXRlbSAqcmVuZGVyID0g
c3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0gKj4ocmVuZGVyZXIoKSk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBGaW5kIHRoZSBlbmNsb3NpbmcgbGlzdCBub2RlLgotICAgICAgICBOb2RlICpsaXN0
Tm9kZSA9IDA7Ci0gICAgICAgIE5vZGUgKm4gPSB0aGlzOwotICAgICAgICB3aGlsZSAoIWxpc3RO
b2RlICYmIChuID0gbi0+cGFyZW50Tm9kZSgpKSkgewotICAgICAgICAgICAgaWYgKG4tPmhhc1Rh
Z05hbWUodWxUYWcpIHx8IG4tPmhhc1RhZ05hbWUob2xUYWcpKQotICAgICAgICAgICAgICAgIGxp
c3ROb2RlID0gbjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gSWYgd2UgYXJlIG5v
dCBpbiBhIGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0IGNhbiBwb3NpdGlvbiB1cyBpbnNp
ZGUuCi0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIG91ciBzdHlsZSB0byBzYXkg
Imluc2lkZSIgc2luY2UgdGhhdCB3b3VsZCBhZmZlY3QgbmVzdGVkIG5vZGVzLgotICAgICAgICBp
ZiAoIWxpc3ROb2RlKQotICAgICAgICAgICAgcmVuZGVyLT5zZXROb3RJbkxpc3QodHJ1ZSk7Ci0K
LSAgICAgICAgLy8gSWYgd2UgaGFkIGEgdmFsdWUgYXR0ci4KLSAgICAgICAgaWYgKGlzVmFsdWVk
KQotICAgICAgICAgICAgcmVuZGVyLT5zZXRWYWx1ZShyZXF1ZXN0ZWRWYWx1ZSk7Ci0gICAgfQot
fQotCi1TdHJpbmcgSFRNTExJRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExJRWxlbWVudDo6c2V0VHlwZShj
b25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUp
OwotfQotCi1pbnQgSFRNTExJRWxlbWVudDo6dmFsdWUoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUodmFsdWVBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxMSUVsZW1lbnQ6
OnNldFZhbHVlKGludCB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBTdHJp
bmc6Om51bWJlcih2YWx1ZSkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgSFRN
TERMaXN0RWxlbWVudDo6Y29tcGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1
dGUoY29tcGFjdEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxETGlzdEVsZW1lbnQ6OnNl
dENvbXBhY3QoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIi
IDogMCk7Ci19Ci0KIH0KSW5kZXg6IGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBodG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysg
aHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw5
IEBACiAjaW5jbHVkZSAiSFRNTEJSRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRExp
c3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTERp
cmVjdG9yeUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lU2V0RWxlbWVudC5oIgpA
QCAtNDIsMTAgKzQ0LDE0IEBACiAjaW5jbHVkZSAiSFRNTElzSW5kZXhFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMZWdlbmRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTExJRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxNZW51RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZXRhRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxNb2RFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MT0xpc3RFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxP
cHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBhcmFtRWxlbWVudC5oIgpAQCAtNjAsOSAr
NjYsOSBAQAogI2luY2x1ZGUgIkhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
VGFibGVTZWN0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUaXRsZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MVUxpc3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFF1b3RlRWxlbWVudC5o
IgogI2luY2x1ZGUgImh0bWxfYmxvY2tpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbF9saXN0aW1wbC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IGh0bWwvSFRNTExJRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGh0bWwvSFRNTExJRWxlbWVudC5oCShyZXZpc2lvbiAxNDM4MikKKysrIGh0
bWwvSFRNTExJRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMDkgKzIxLDIzIEBACiAg
KgogICovCiAKLSNpZm5kZWYgSFRNTF9MSVNUSU1QTF9ICi0jZGVmaW5lIEhUTUxfTElTVElNUExf
SAotCi0vKgotICogd2UgaWdub3JlIHRoZSBkZXByZWNhdGVkIGNvbXBhY3QgYXR0cmlidXRlLiBO
ZXRzY2FwZSBkb2VzIHNvIHRvby4uLgotICovCisjaWZuZGVmIEhUTUxMSUVsZW1lbnRfSAorI2Rl
ZmluZSBIVE1MTElFbGVtZW50X0gKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlCi17Ci0KLWNsYXNzIEhUTUxVTGlz
dEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MVUxpc3RF
bGVtZW50KERvY3VtZW50ICpkb2MpIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjp1bFRhZywgZG9j
KSB7fQotICAgIHZpcnR1YWwgfkhUTUxVTGlzdEVsZW1lbnQoKSB7fQotCi0gICAgdmlydHVhbCBI
VE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVz
UmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IDU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICopOwotCi0gICAg
dmlydHVhbCBpbnQgc3RhcnQoKSBjb25zdCB7IHJldHVybiAxOyB9Ci0KLSAgICBib29sIGNvbXBh
Y3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci0KLSAgICBTdHJpbmcgdHlw
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcgJik7Ci19OwotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxEaXJlY3RvcnlFbGVtZW50IDogcHVibGljIEhU
TUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTERpcmVjdG9yeUVsZW1lbnQoRG9jdW1lbnQg
KmRvYykgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6OmRpclRhZywgZG9jKSB7fQotCi0gICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDU7IH0KLQotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29t
cGFjdChib29sKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTE1lbnVF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTE1lbnVFbGVt
ZW50KERvY3VtZW50ICpkb2MpIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjptZW51VGFnLCBkb2Mp
IHt9CiAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1j
bGFzcyBIVE1MT0xpc3RFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0g
ICAgSFRNTE9MaXN0RWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgICAgICA6IEhUTUxFbGVtZW50
KEhUTUxOYW1lczo6b2xUYWcsIGRvYykgeyBfc3RhcnQgPSAxOyB9Ci0gICAgCi0gICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICopOwotCi0g
ICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwotCi0g
ICAgaW50IHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gX3N0YXJ0OyB9Ci0gICAgdm9pZCBzZXRTdGFy
dChpbnQpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29u
c3QgU3RyaW5nICYpOwotCi1wcml2YXRlOgotICAgIGludCBfc3RhcnQ7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxMSUVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MTElFbGVtZW50KERvY3Vt
ZW50ICpkb2MpCi0gICAgICAgIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjpsaVRhZywgZG9jKSB7
IGlzVmFsdWVkID0gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIH5IVE1MTElFbGVtZW50KCkge30KKyAg
ICBIVE1MTElFbGVtZW50KERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMg
ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQog
ICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQogCi0gICAg
dmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgIHZpcnR1YWwgYm9v
bCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKIApAQCAtMTM0LDIzICs0OCw4
IEBACiAgICAgdm9pZCBzZXRWYWx1ZShpbnQpOwogCiBwcml2YXRlOgotICAgIGJvb2wgaXNWYWx1
ZWQ7Ci0gICAgaW50IHJlcXVlc3RlZFZhbHVlOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1jbGFzcyBIVE1MRExpc3RFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6
Ci0gICAgSFRNTERMaXN0RWxlbWVudChEb2N1bWVudCAqZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxO
YW1lczo6ZGxUYWcsIGRvYykge30KLSAgICB2aXJ0dWFsIH5IVE1MRExpc3RFbGVtZW50KCkge30K
LQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2
b2lkIHNldENvbXBhY3QoYm9vbCk7CisgICAgYm9vbCBtX2lzVmFsdWVkOworICAgIGludCBtX3Jl
cXVlc3RlZFZhbHVlOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogaHRtbC9IVE1MRExpc3RF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxETGlzdEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTERMaXN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDIyNiArMjEsMTkgQEAKICAqCiAgKi8KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJodG1sX2xpc3RpbXBsLmgiCisjaW5jbHVkZSAiSFRNTERMaXN0RWxlbWVudC5oIgogCi0j
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKLSNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpc3QuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotYm9vbCBIVE1MVUxpc3RFbGVtZW50Ojpt
YXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSB0eXBlQXR0cikgewot
ICAgICAgICByZXN1bHQgPSBlVW5vcmRlcmVkTGlzdDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUs
IHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTFVMaXN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlw
ZUF0dHIpCi0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVf
VFlQRSwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLWJvb2wgSFRNTFVMaXN0RWxlbWVudDo6Y29t
cGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIpLmlz
TnVsbCgpOwotfQotCi12b2lkIEhUTUxVTGlzdEVsZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQot
ewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KLVN0cmlu
ZyBIVE1MVUxpc3RFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MVUxpc3RFbGVtZW50OjpzZXRUeXBlKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBIVE1MRGlyZWN0b3J5RWxlbWVudDo6Y29t
cGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIpLmlz
TnVsbCgpOwotfQotCi12b2lkIEhUTUxEaXJlY3RvcnlFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wg
YikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDApOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgSFRNTE1lbnVFbGVtZW50Ojpjb21wYWN0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19
Ci0KLXZvaWQgSFRNTE1lbnVFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wgYikKLXsKLSAgICBzZXRB
dHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDApOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLWJvb2wgSFRNTE9MaXN0RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAg
ICBpZiAoYXR0ck5hbWUgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZUxpc3RJdGVt
OyAvLyBTaGFyZSB3aXRoIDxsaT4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19
Ci0KLXZvaWQgSFRNTE9MaXN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAg
ICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gImEiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX0FMUEhBKTsK
LSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiQSIpCi0gICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJf
QUxQSEEpOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJpIikKLSAgICAgICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZB
TF9MT1dFUl9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkkiKQot
ICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBF
LCBDU1NfVkFMX1VQUEVSX1JPTUFOKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9
PSAiMSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NU
WUxFX1RZUEUsIENTU19WQUxfREVDSU1BTCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gc3RhcnRBdHRyKSB7Ci0gICAgICAgIF9zdGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHIt
PnZhbHVlKCkudG9JbnQoKSA6IDE7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotYm9vbCBIVE1MT0xpc3RFbGVtZW50Ojpj
b21wYWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjb21wYWN0QXR0ciku
aXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTE9MaXN0RWxlbWVudDo6c2V0Q29tcGFjdChib29sIGIp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyLCBiID8gIiIgOiAwKTsKLX0KLQotdm9p
ZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRTdGFydChpbnQgc3RhcnQpCi17Ci0gICAgc2V0QXR0cmli
dXRlKHN0YXJ0QXR0ciwgU3RyaW5nOjpudW1iZXIoc3RhcnQpKTsKLX0KLQotU3RyaW5nIEhUTUxP
TGlzdEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlw
ZUF0dHIpOwotfQotCi12b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIEhUTUxMSUVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9
IGVMaXN0SXRlbTsgLy8gU2hhcmUgd2l0aCA8b2w+IHNpbmNlIGFsbCB0aGUgdmFsdWVzIGFyZSB0
aGUgc2FtZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBI
VE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1M
TElFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17
Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsKLSAgICAgICAgaXNWYWx1ZWQg
PSB0cnVlOwotICAgICAgICByZXF1ZXN0ZWRWYWx1ZSA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHIt
PnZhbHVlKCkudG9JbnQoKSA6IDA7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVy
ZXIoKS0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJMaXN0SXRlbSAqbGlzdCA9
IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtICo+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAg
Ly8gIyMjIHdvcmsgb3V0IHdoYXQgdG8gZG8gd2hlbiBhdHRyaWJ1dGUgcmVtb3ZlZCAtIHVzZSBk
ZWZhdWx0IG9mIHNvbWUgc29ydD8KLSAgICAgICAgICAgIGxpc3QtPnNldFZhbHVlKHJlcXVlc3Rl
ZFZhbHVlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVB
dHRyKSB7Ci0gICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJhIikKLSAgICAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dF
Ul9BTFBIQSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkEiKQotICAgICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1Nf
VkFMX1VQUEVSX0FMUEhBKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiaSIp
Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZ
UEUsIENTU19WQUxfTE9XRVJfUk9NQU4pOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgp
ID09ICJJIikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1Rf
U1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHIt
PnZhbHVlKCkgPT0gIjEiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BS
T1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0RFQ0lNQUwpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIGF0
dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTExJRWxlbWVudDo6YXR0YWNoKCkKLXsK
LSAgICBhc3NlcnQoIWF0dGFjaGVkKCkpOwotCi0gICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwot
Ci0gICAgaWYgKCByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmRpc3BsYXkoKSA9
PSBMSVNUX0lURU0gKSB7Ci0gICAgICAgIFJlbmRlckxpc3RJdGVtICpyZW5kZXIgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJMaXN0SXRlbSAqPihyZW5kZXJlcigpKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IEZpbmQgdGhlIGVuY2xvc2luZyBsaXN0IG5vZGUuCi0gICAgICAgIE5vZGUgKmxpc3ROb2RlID0g
MDsKLSAgICAgICAgTm9kZSAqbiA9IHRoaXM7Ci0gICAgICAgIHdoaWxlICghbGlzdE5vZGUgJiYg
KG4gPSBuLT5wYXJlbnROb2RlKCkpKSB7Ci0gICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZSh1
bFRhZykgfHwgbi0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAgICAgICAgICAgICAgbGlzdE5vZGUg
PSBuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGluIGEg
bGlzdCwgdGVsbCB0aGUgcmVuZGVyZXIgc28gaXQgY2FuIHBvc2l0aW9uIHVzIGluc2lkZS4KLSAg
ICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2Ugb3VyIHN0eWxlIHRvIHNheSAiaW5zaWRl
IiBzaW5jZSB0aGF0IHdvdWxkIGFmZmVjdCBuZXN0ZWQgbm9kZXMuCi0gICAgICAgIGlmICghbGlz
dE5vZGUpCi0gICAgICAgICAgICByZW5kZXItPnNldE5vdEluTGlzdCh0cnVlKTsKLQotICAgICAg
ICAvLyBJZiB3ZSBoYWQgYSB2YWx1ZSBhdHRyLgotICAgICAgICBpZiAoaXNWYWx1ZWQpCi0gICAg
ICAgICAgICByZW5kZXItPnNldFZhbHVlKHJlcXVlc3RlZFZhbHVlKTsKLSAgICB9Ci19Ci0KLVN0
cmluZyBIVE1MTElFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTElFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0K
LWludCBIVE1MTElFbGVtZW50Ojp2YWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZSh2YWx1ZUF0dHIpLnRvSW50KCk7Ci19Ci0KLXZvaWQgSFRNTExJRWxlbWVudDo6c2V0VmFs
dWUoaW50IHZhbHVlKQorSFRNTERMaXN0RWxlbWVudDo6SFRNTERMaXN0RWxlbWVudChEb2N1bWVu
dCogZG9jKQorICAgIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjpkbFRhZywgZG9jKQogewotICAg
IHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQogYm9vbCBIVE1MRExpc3RFbGVtZW50Ojpjb21wYWN0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Cklu
ZGV4OiBodG1sL0hUTUxPTGlzdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPTGlz
dEVsZW1lbnQuaAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxPTGlzdEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjEsMTM3ICsyMSwzNyBAQAogICoKICAqLwogCi0jaWZuZGVmIEhU
TUxfTElTVElNUExfSAotI2RlZmluZSBIVE1MX0xJU1RJTVBMX0gKLQotLyoKLSAqIHdlIGlnbm9y
ZSB0aGUgZGVwcmVjYXRlZCBjb21wYWN0IGF0dHJpYnV0ZS4gTmV0c2NhcGUgZG9lcyBzbyB0b28u
Li4KLSAqLworI2lmbmRlZiBIVE1MT0xpc3RFbGVtZW50X0gKKyNkZWZpbmUgSFRNTE9MaXN0RWxl
bWVudF9ICiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZQotewotCi1jbGFzcyBIVE1MVUxpc3RFbGVtZW50IDogcHVi
bGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTFVMaXN0RWxlbWVudChEb2N1bWVu
dCAqZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6dWxUYWcsIGRvYykge30KLSAgICB2aXJ0
dWFsIH5IVE1MVUxpc3RFbGVtZW50KCkge30KLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0g
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqKTsKLQotICAgIHZpcnR1YWwgaW50IHN0
YXJ0KCkgY29uc3QgeyByZXR1cm4gMTsgfQotCi0gICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAg
ICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nICYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1jbGFzcyBIVE1MRGlyZWN0b3J5RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewot
cHVibGljOgotICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50KERvY3VtZW50ICpkb2MpIDogSFRNTEVs
ZW1lbnQoSFRNTE5hbWVzOjpkaXJUYWcsIGRvYykge30KLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0K
LSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxNZW51RWxlbWVudCA6IHB1Ymxp
YyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxNZW51RWxlbWVudChEb2N1bWVudCAq
ZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxOYW1lczo6bWVudVRhZywgZG9jKSB7fQotCi0gICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDU7IH0KLQotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29t
cGFjdChib29sKTsKLX07CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK25hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSFRNTE9MaXN0RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAogewogcHVi
bGljOgotICAgIEhUTUxPTGlzdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICAgICAgOiBIVE1M
RWxlbWVudChIVE1MTmFtZXM6Om9sVGFnLCBkb2MpIHsgX3N0YXJ0ID0gMTsgfQorICAgIEhUTUxP
TGlzdEVsZW1lbnQoRG9jdW1lbnQqKTsKICAgICAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMg
ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQog
ICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCi0gICAg
dmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBtYXBU
b0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
Kik7CiAKICAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9v
bCk7CiAKLSAgICBpbnQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBfc3RhcnQ7IH0KKyAgICBpbnQg
c3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CiAgICAgdm9pZCBzZXRTdGFydChpbnQp
OwogCiAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICB2b2lkIHNldFR5cGUoY29uc3QgU3Ry
aW5nICYpOwogCiBwcml2YXRlOgotICAgIGludCBfc3RhcnQ7CisgICAgaW50IG1fc3RhcnQ7CiB9
OwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxMSUVsZW1lbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MTElFbGVtZW50KERvY3VtZW50ICpkb2Mp
Ci0gICAgICAgIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjpsaVRhZywgZG9jKSB7IGlzVmFsdWVk
ID0gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIH5IVE1MTElFbGVtZW50KCkge30KLQotICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c09wdGlvbmFsOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAzOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBpbnQgdmFsdWUoKSBj
b25zdDsKLSAgICB2b2lkIHNldFZhbHVlKGludCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc1Zh
bHVlZDsKLSAgICBpbnQgcmVxdWVzdGVkVmFsdWU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIEhUTUxETGlzdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1Ymxp
YzoKLSAgICBIVE1MRExpc3RFbGVtZW50KERvY3VtZW50ICpkb2MpIDogSFRNTEVsZW1lbnQoSFRN
TE5hbWVzOjpkbFRhZywgZG9jKSB7fQotICAgIHZpcnR1YWwgfkhUTUxETGlzdEVsZW1lbnQoKSB7
fQotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KLQotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwotICAg
IHZvaWQgc2V0Q29tcGFjdChib29sKTsKLX07CiAKIH0gLy9uYW1lc3BhY2UKIApJbmRleDogaHRt
bC9IVE1MTElFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxMSUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTExJRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDEzOCArMjEsMjMgQEAKICAqCiAgKi8KICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJodG1sX2xpc3RpbXBsLmgiCisjaW5jbHVkZSAiSFRNTExJRWxlbWVudC5oIgogCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKLSNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpc3QuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUmVuZGVyTGlzdEl0
ZW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1ib29sIEhUTUxVTGlzdEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAg
aWYgKGF0dHJOYW1lID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVVbm9yZGVyZWRM
aXN0OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBIVE1M
RWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MVUxp
c3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCitI
VE1MTElFbGVtZW50OjpIVE1MTElFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxl
bWVudChIVE1MTmFtZXM6OmxpVGFnLCBkb2MpCisgICAgLCBtX2lzVmFsdWVkKGZhbHNlKQogewot
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpCi0gICAgICAgIGFkZENTU1Byb3BlcnR5
KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAK
LWJvb2wgSFRNTFVMaXN0RWxlbWVudDo6Y29tcGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFn
ZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxVTGlzdEVs
ZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0
ciwgYiA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1MVUxpc3RFbGVtZW50Ojp0eXBlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1M
VUxpc3RFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9v
bCBIVE1MRGlyZWN0b3J5RWxlbWVudDo6Y29tcGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFn
ZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxEaXJlY3Rv
cnlFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFj
dEF0dHIsIGIgPyAiIiA6IDApOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgSFRN
TE1lbnVFbGVtZW50Ojpjb21wYWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0
ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTE1lbnVFbGVtZW50OjpzZXRD
b21wYWN0KGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6
IDApOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgSFRNTE9MaXN0RWxlbWVudDo6
bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gdHlwZUF0dHIpIHsK
LSAgICAgICAgcmVzdWx0ID0gZUxpc3RJdGVtOyAvLyBTaGFyZSB3aXRoIDxsaT4KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRv
RW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTE9MaXN0RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gImEi
KQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9U
WVBFLCBDU1NfVkFMX0xPV0VSX0FMUEhBKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUo
KSA9PSAiQSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNU
X1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfQUxQSEEpOwotICAgICAgICBlbHNlIGlmIChhdHRy
LT52YWx1ZSgpID09ICJpIikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9ST01BTik7Ci0gICAgICAgIGVsc2Ug
aWYgKGF0dHItPnZhbHVlKCkgPT0gIkkiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0
ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQUEVSX1JPTUFOKTsKLSAgICAg
ICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiMSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfREVDSU1BTCk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc3RhcnRBdHRyKSB7Ci0gICAgICAgIF9zdGFy
dCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7Ci0gICAgfSBl
bHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0K
LQotYm9vbCBIVE1MT0xpc3RFbGVtZW50Ojpjb21wYWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
IWdldEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTE9MaXN0
RWxlbWVudDo6c2V0Q29tcGFjdChib29sIGIpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvbXBhY3RB
dHRyLCBiID8gIiIgOiAwKTsKLX0KLQotdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRTdGFydChp
bnQgc3RhcnQpCi17Ci0gICAgc2V0QXR0cmlidXRlKHN0YXJ0QXR0ciwgU3RyaW5nOjpudW1iZXIo
c3RhcnQpKTsKLX0KLQotU3RyaW5nIEhUTUxPTGlzdEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxPTGlzdEVs
ZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
dHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBib29sIEhUTUxM
SUVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHJOYW1lID09IHR5
cGVBdHRyKSB7CkBAIC0xNjYsMTMgKzUxLDEzIEBACiB2b2lkIEhUTUxMSUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IHZhbHVlQXR0cikgewotICAgICAgICBpc1ZhbHVlZCA9IHRydWU7Ci0gICAgICAg
IHJlcXVlc3RlZFZhbHVlID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgp
IDogMDsKKyAgICAgICAgbV9pc1ZhbHVlZCA9IHRydWU7CisgICAgICAgIG1fcmVxdWVzdGVkVmFs
dWUgPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAwOwogCiAgICAg
ICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzTGlzdEl0ZW0oKSkgewogICAgICAg
ICAgICAgUmVuZGVyTGlzdEl0ZW0gKmxpc3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSAq
PihyZW5kZXJlcigpKTsKICAgICAgICAgICAgIC8vICMjIyB3b3JrIG91dCB3aGF0IHRvIGRvIHdo
ZW4gYXR0cmlidXRlIHJlbW92ZWQgLSB1c2UgZGVmYXVsdCBvZiBzb21lIHNvcnQ/Ci0gICAgICAg
ICAgICBsaXN0LT5zZXRWYWx1ZShyZXF1ZXN0ZWRWYWx1ZSk7CisgICAgICAgICAgICBsaXN0LT5z
ZXRWYWx1ZShtX3JlcXVlc3RlZFZhbHVlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7CiAgICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJh
IikKQEAgLTIxNCw4ICs5OSw4IEBACiAgICAgICAgICAgICByZW5kZXItPnNldE5vdEluTGlzdCh0
cnVlKTsKIAogICAgICAgICAvLyBJZiB3ZSBoYWQgYSB2YWx1ZSBhdHRyLgotICAgICAgICBpZiAo
aXNWYWx1ZWQpCi0gICAgICAgICAgICByZW5kZXItPnNldFZhbHVlKHJlcXVlc3RlZFZhbHVlKTsK
KyAgICAgICAgaWYgKG1faXNWYWx1ZWQpCisgICAgICAgICAgICByZW5kZXItPnNldFZhbHVlKG1f
cmVxdWVzdGVkVmFsdWUpOwogICAgIH0KIH0KIApAQCAtMjM5LDE2ICsxMjQsNCBAQAogICAgIHNl
dEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotYm9vbCBIVE1MRExpc3RFbGVtZW50Ojpjb21wYWN0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19Ci0K
LXZvaWQgSFRNTERMaXN0RWxlbWVudDo6c2V0Q29tcGFjdChib29sIGIpCi17Ci0gICAgc2V0QXR0
cmlidXRlKGNvbXBhY3RBdHRyLCBiID8gIiIgOiAwKTsKLX0KLQogfQpJbmRleDogaHRtbC9IVE1M
RExpc3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MRExpc3RFbGVtZW50LmgJKHJl
dmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MRExpc3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDEzMCArMjEsMTcgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBIVE1MX0xJU1RJTVBMX0gK
LSNkZWZpbmUgSFRNTF9MSVNUSU1QTF9ICi0KLS8qCi0gKiB3ZSBpZ25vcmUgdGhlIGRlcHJlY2F0
ZWQgY29tcGFjdCBhdHRyaWJ1dGUuIE5ldHNjYXBlIGRvZXMgc28gdG9vLi4uCi0gKi8KKyNpZm5k
ZWYgSFRNTERMaXN0RWxlbWVudF9ICisjZGVmaW5lIEhUTUxETGlzdEVsZW1lbnRfSAogCiAjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUKLXsKLQotY2xhc3MgSFRNTFVMaXN0RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVu
dAotewotcHVibGljOgotICAgIEhUTUxVTGlzdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1M
RWxlbWVudChIVE1MTmFtZXM6OnVsVGFnLCBkb2MpIHt9Ci0gICAgdmlydHVhbCB+SFRNTFVMaXN0
RWxlbWVudCgpIHt9Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgdmlydHVhbCBib29sIG1h
cFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKik7Ci0KLSAgICB2aXJ0dWFsIGludCBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuIDE7IH0KLQotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29t
cGFjdChib29sKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBl
KGNvbnN0IFN0cmluZyAmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRN
TERpcmVjdG9yeUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBI
VE1MRGlyZWN0b3J5RWxlbWVudChEb2N1bWVudCAqZG9jKSA6IEhUTUxFbGVtZW50KEhUTUxOYW1l
czo6ZGlyVGFnLCBkb2MpIHt9Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgYm9vbCBjb21w
YWN0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTWVudUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQK
LXsKLXB1YmxpYzoKLSAgICBIVE1MTWVudUVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1MRWxl
bWVudChIVE1MTmFtZXM6Om1lbnVUYWcsIGRvYykge30KLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0K
LSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci19
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxPTGlzdEVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MT0xpc3RFbGVtZW50KERvY3VtZW50
ICpkb2MpCi0gICAgICAgIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjpvbFRhZywgZG9jKSB7IF9z
dGFydCA9IDE7IH0KLSAgICAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKik7Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAg
ICB2b2lkIHNldENvbXBhY3QoYm9vbCk7Ci0KLSAgICBpbnQgc3RhcnQoKSBjb25zdCB7IHJldHVy
biBfc3RhcnQ7IH0KLSAgICB2b2lkIHNldFN0YXJ0KGludCk7Ci0KLSAgICBTdHJpbmcgdHlwZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcgJik7Ci0KLXByaXZhdGU6Ci0g
ICAgaW50IF9zdGFydDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTExJ
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxMSUVsZW1l
bnQoRG9jdW1lbnQgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6OmxpVGFn
LCBkb2MpIHsgaXNWYWx1ZWQgPSBmYWxzZTsgfQotICAgIHZpcnR1YWwgfkhUTUxMSUVsZW1lbnQo
KSB7fQotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLQotICAgIFN0
cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsKLQot
ICAgIGludCB2YWx1ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VmFsdWUoaW50KTsKLQotcHJpdmF0
ZToKLSAgICBib29sIGlzVmFsdWVkOwotICAgIGludCByZXF1ZXN0ZWRWYWx1ZTsKLX07CiAKLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTERMaXN0
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAogewogcHVibGljOgotICAgIEhUTUxETGlzdEVs
ZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6OmRsVGFnLCBkb2Mp
IHt9Ci0gICAgdmlydHVhbCB+SFRNTERMaXN0RWxlbWVudCgpIHt9CisgICAgSFRNTERMaXN0RWxl
bWVudChEb2N1bWVudCopOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KICAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KSW5kZXg6IGh0bWwvaHRtbF9s
aXN0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX2xpc3RpbXBsLmNwcAkocmV2aXNp
b24gMTQzODIpCisrKyBodG1sL2h0bWxfbGlzdGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI1NCArMCwwIEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KLSAqCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sX2xpc3RpbXBs
LmgiCi0KLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgotI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfbGlzdC5oIgotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwotCi1ib29sIEhUTUxVTGlzdEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9
IGVVbm9yZGVyZWRMaXN0OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQot
dm9pZCBIVE1MVUxpc3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikKLSAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBhdHRyLT52YWx1
ZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKLX0KLQotYm9vbCBIVE1MVUxpc3RFbGVtZW50Ojpjb21wYWN0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZv
aWQgSFRNTFVMaXN0RWxlbWVudDo6c2V0Q29tcGFjdChib29sIGIpCi17Ci0gICAgc2V0QXR0cmli
dXRlKGNvbXBhY3RBdHRyLCBiID8gIiIgOiAwKTsKLX0KLQotU3RyaW5nIEhUTUxVTGlzdEVsZW1l
bnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwot
fQotCi12b2lkIEhUTUxVTGlzdEVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1ib29sIEhUTUxEaXJlY3RvcnlFbGVtZW50Ojpjb21wYWN0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZv
aWQgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQotewotICAgIHNldEF0
dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotYm9vbCBIVE1MTWVudUVsZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAotewotICAgIHJldHVy
biAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MTWVu
dUVsZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0
QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBIVE1M
T0xpc3RFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBN
YXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9
PSB0eXBlQXR0cikgewotICAgICAgICByZXN1bHQgPSBlTGlzdEl0ZW07IC8vIFNoYXJlIHdpdGgg
PGxpPgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBIVE1M
RWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MT0xp
c3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17
Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikgewotICAgICAgICBpZiAoYXR0ci0+
dmFsdWUoKSA9PSAiYSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfTE9XRVJfQUxQSEEpOwotICAgICAgICBlbHNlIGlm
IChhdHRyLT52YWx1ZSgpID09ICJBIikKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9BTFBIQSk7Ci0gICAgICAg
IGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gImkiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX1JPTUFOKTsK
LSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiSSIpCi0gICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJf
Uk9NQU4pOwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICIxIikKLSAgICAgICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZB
TF9ERUNJTUFMKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzdGFydEF0dHIpIHsK
LSAgICAgICAgX3N0YXJ0ID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgp
IDogMTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOwotfQotCi1ib29sIEhUTUxPTGlzdEVsZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAot
ewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsKLX0KLQot
dm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wgYikKLXsKLSAgICBzZXRBdHRy
aWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDApOwotfQotCi12b2lkIEhUTUxPTGlzdEVsZW1l
bnQ6OnNldFN0YXJ0KGludCBzdGFydCkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBT
dHJpbmc6Om51bWJlcihzdGFydCkpOwotfQotCi1TdHJpbmcgSFRNTE9MaXN0RWxlbWVudDo6dHlw
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTE9MaXN0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWJvb2wgSFRNTExJRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAo
YXR0ck5hbWUgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZUxpc3RJdGVtOyAvLyBT
aGFyZSB3aXRoIDxvbD4gc2luY2UgYWxsIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBU
b0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxMSUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IHZhbHVlQXR0cikgewotICAgICAgICBpc1ZhbHVlZCA9IHRydWU7Ci0gICAgICAg
IHJlcXVlc3RlZFZhbHVlID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgp
IDogMDsKLQotICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0xpc3RJdGVt
KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0ID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyTGlzdEl0ZW0gKj4ocmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAvLyAjIyMgd29yayBvdXQg
d2hhdCB0byBkbyB3aGVuIGF0dHJpYnV0ZSByZW1vdmVkIC0gdXNlIGRlZmF1bHQgb2Ygc29tZSBz
b3J0PwotICAgICAgICAgICAgbGlzdC0+c2V0VmFsdWUocmVxdWVzdGVkVmFsdWUpOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAg
aWYgKGF0dHItPnZhbHVlKCkgPT0gImEiKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0
ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX0FMUEhBKTsKLSAgICAg
ICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiQSIpCi0gICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfQUxQSEEp
OwotICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJpIikKLSAgICAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dF
Ul9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkkiKQotICAgICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1Nf
VkFMX1VQUEVSX1JPTUFOKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiMSIp
Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZ
UEUsIENTU19WQUxfREVDSU1BTCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgYXR0ci0+dmFsdWUoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKLX0KLQotdm9pZCBIVE1MTElFbGVtZW50OjphdHRhY2goKQotewotICAgIGFzc2VydCghYXR0
YWNoZWQoKSk7Ci0KLSAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7Ci0KLSAgICBpZiAoIHJlbmRl
cmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlzcGxheSgpID09IExJU1RfSVRFTSApIHsK
LSAgICAgICAgUmVuZGVyTGlzdEl0ZW0gKnJlbmRlciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJ
dGVtICo+KHJlbmRlcmVyKCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRmluZCB0aGUgZW5jbG9z
aW5nIGxpc3Qgbm9kZS4KLSAgICAgICAgTm9kZSAqbGlzdE5vZGUgPSAwOwotICAgICAgICBOb2Rl
ICpuID0gdGhpczsKLSAgICAgICAgd2hpbGUgKCFsaXN0Tm9kZSAmJiAobiA9IG4tPnBhcmVudE5v
ZGUoKSkpIHsKLSAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBuLT5oYXNU
YWdOYW1lKG9sVGFnKSkKLSAgICAgICAgICAgICAgICBsaXN0Tm9kZSA9IG47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIC8vIElmIHdlIGFyZSBub3QgaW4gYSBsaXN0LCB0ZWxsIHRoZSBy
ZW5kZXJlciBzbyBpdCBjYW4gcG9zaXRpb24gdXMgaW5zaWRlLgotICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvIGNoYW5nZSBvdXIgc3R5bGUgdG8gc2F5ICJpbnNpZGUiIHNpbmNlIHRoYXQgd291
bGQgYWZmZWN0IG5lc3RlZCBub2Rlcy4KLSAgICAgICAgaWYgKCFsaXN0Tm9kZSkKLSAgICAgICAg
ICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRydWUpOwotCi0gICAgICAgIC8vIElmIHdlIGhhZCBh
IHZhbHVlIGF0dHIuCi0gICAgICAgIGlmIChpc1ZhbHVlZCkKLSAgICAgICAgICAgIHJlbmRlci0+
c2V0VmFsdWUocmVxdWVzdGVkVmFsdWUpOwotICAgIH0KLX0KLQotU3RyaW5nIEhUTUxMSUVsZW1l
bnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwot
fQotCi12b2lkIEhUTUxMSUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotaW50IEhUTUxMSUVsZW1l
bnQ6OnZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbHVlQXR0ciku
dG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MTElFbGVtZW50OjpzZXRWYWx1ZShpbnQgdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIEhUTUxETGlzdEVsZW1lbnQ6OmNvbXBhY3Qo
KSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwo
KTsKLX0KLQotdm9pZCBIVE1MRExpc3RFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wgYikKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDApOwotfQotCi19CkluZGV4OiBo
dG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxLZXlnZW5F
bGVtZW50LmNwcAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxLZXlnZW5FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIktXUUtTU0xLZXlHZW4uaCIK
ICNpbmNsdWRlICJUZXh0LmgiCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTQzODIpCisr
KyByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCisj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdENhY2hlLmgiIAogI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC0z
MywyNCArMzQsMjQgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkludFBvaW50QXJyYXkuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0
Q2FjaGUuaCIgCi0jaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCi0jaW5jbHVkZSAiUmVuZGVy
VGFibGVDb2wuaCIKLSNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgotI2luY2x1ZGUgIlJlbmRl
clRleHQuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiZG9tMl9l
dmVudHNpbXBsLmgiCisjaW5jbHVkZSAiS1dRVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgIktXUVdN
YXRyaXguaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ2FudmFzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNp
bmNsdWRlICJyZW5kZXJfbGlzdC5oIgorI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKKyNp
bmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIktXUVdNYXRyaXguaCIKLSNpbmNsdWRlICJL
V1FUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgorI2luY2x1ZGUg
ImRvbTJfZXZlbnRzaW1wbC5oIgorCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKSW5kZXg6IHJl
bmRlcmluZy9MaXN0TWFya2VyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvTGlzdE1h
cmtlckJveC5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgcmVuZGVyaW5nL0xpc3RNYXJrZXJCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3MjQgKzIyLDIxIEBACiAgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
InJlbmRlcl9saXN0LmgiCi0KLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVy
Q2FudmFzLmgiCi0jaW5jbHVkZSAiaHRtbF9saXN0aW1wbC5oIgorI2luY2x1ZGUgIkxpc3RNYXJr
ZXJCb3guaCIKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyNpbmNsdWRlICJSZW5kZXJMaXN0TWFy
a2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKLQotY29uc3QgaW50IGNNYXJrZXJQYWRkaW5nID0gNzsKLQotc3RhdGljIERlcHJlY2F0ZWRT
dHJpbmcgdG9Sb21hbihpbnQgbnVtYmVyLCBib29sIHVwcGVyKQotewotICAgIERlcHJlY2F0ZWRT
dHJpbmcgcm9tYW47Ci0gICAgY29uc3QgVUNoYXIgbGRpZ2l0c1tdID0geyAnaScsICd2JywgJ3gn
LCAnbCcsICdjJywgJ2QnLCAnbScgfTsKLSAgICBjb25zdCBVQ2hhciB1ZGlnaXRzW10gPSB7ICdJ
JywgJ1YnLCAnWCcsICdMJywgJ0MnLCAnRCcsICdNJyB9OwotICAgIGNvbnN0IFVDaGFyKiBkaWdp
dHMgPSB1cHBlciA/IHVkaWdpdHMgOiBsZGlnaXRzOwotICAgIGludCBkID0gMDsKLSAgICBkbyB7
Ci0gICAgICAgIGludCBudW0gPSBudW1iZXIgJSAxMDsKLSAgICAgICAgaWYgKG51bSAlIDUgPCA0
KQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG51bSAlIDU7IGkgPiAwOyBpLS0pCi0gICAgICAg
ICAgICAgICAgcm9tYW4uaW5zZXJ0KDAsIGRpZ2l0c1tkXSk7Ci0gICAgICAgIGlmIChudW0gPj0g
NCAmJiBudW0gPD0gOCkKLSAgICAgICAgICAgIHJvbWFuLmluc2VydCgwLCBkaWdpdHNbZCArIDFd
KTsKLSAgICAgICAgaWYgKG51bSA9PSA5KQotICAgICAgICAgICAgcm9tYW4uaW5zZXJ0KDAsIGRp
Z2l0c1tkICsgMl0pOwotICAgICAgICBpZiAobnVtICUgNSA9PSA0KQotICAgICAgICAgICAgcm9t
YW4uaW5zZXJ0KDAsIGRpZ2l0c1tkXSk7Ci0gICAgICAgIG51bWJlciAvPSAxMDsKLSAgICAgICAg
ZCArPSAyOwotICAgIH0gd2hpbGUgKG51bWJlcik7Ci0gICAgcmV0dXJuIHJvbWFuOwotfQotCi1z
dGF0aWMgRGVwcmVjYXRlZFN0cmluZyB0b0xldHRlclN0cmluZyhpbnQgbnVtYmVyLCBpbnQgbGV0
dGVyQSkKLXsKLSAgICBpZiAobnVtYmVyIDwgMikKLSAgICAgICAgcmV0dXJuIFFDaGFyKGxldHRl
ckEpOyAvLyBtYXRjaCBXaW5JRSAoQS4pIG5vdCBGaXJlRm94ICgwLikKLQotICAgIERlcHJlY2F0
ZWRTdHJpbmcgbGV0dGVyU3RyaW5nOwotICAgIHdoaWxlIChudW1iZXIgPiAwKSB7Ci0gICAgICAg
IGludCBvbmVzRGlnaXQgPSAobnVtYmVyIC0gMSkgJSAyNjsKLSAgICAgICAgbGV0dGVyU3RyaW5n
ID0gUUNoYXIobGV0dGVyQSArIG9uZXNEaWdpdCkgKyBsZXR0ZXJTdHJpbmc7Ci0gICAgICAgIG51
bWJlciAtPSBvbmVzRGlnaXQ7Ci0gICAgICAgIG51bWJlciAvPSAyNjsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbGV0dGVyU3RyaW5nOwotfQotCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyB0b0hlYnJl
dyhpbnQgbnVtYmVyKQotewotICAgIGNvbnN0IFFDaGFyIHRlbkRpZ2l0W10gPSB7MTQ5NywgMTQ5
OSwgMTUwMCwgMTUwMiwgMTUwNCwgMTUwNSwgMTUwNiwgMTUwOCwgMTUxMH07Ci0KLSAgICBEZXBy
ZWNhdGVkU3RyaW5nIGxldHRlcjsKLSAgICBpZiAobnVtYmVyID4gOTk5KSB7Ci0gICAgICAgIGxl
dHRlciA9IHRvSGVicmV3KG51bWJlciAvIDEwMDApICsgIiciOwotICAgICAgICBudW1iZXIgPSBu
dW1iZXIgJSAxMDAwOwotICAgIH0KLSAgICBpbnQgZm91ckh1bmRyZWRzID0gbnVtYmVyIC8gNDAw
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm91ckh1bmRyZWRzOyBpKyspCi0gICAgICAgIGxl
dHRlciArPSBRQ2hhcigxNTExICsgMyk7Ci0gICAgbnVtYmVyICU9IDQwMDsKLSAgICBpZiAobnVt
YmVyIC8gMTAwKQotICAgICAgICBsZXR0ZXIgKz0gUUNoYXIoMTUxMSArIChudW1iZXIgLyAxMDAp
IC0gMSk7Ci0gICAgbnVtYmVyICU9IDEwMDsKLSAgICBpZiAobnVtYmVyID09IDE1IHx8IG51bWJl
ciA9PSAxNikgewotICAgICAgICBsZXR0ZXIgKz0gUUNoYXIoMTQ4NyArIDkpOwotICAgICAgICBs
ZXR0ZXIgKz0gUUNoYXIoMTQ4NyArIG51bWJlciAtIDkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGludCB0ZW5zID0gbnVtYmVyIC8gMTA7Ci0gICAgICAgIGlmICh0ZW5zKQotICAgICAgICAgICAg
bGV0dGVyICs9IHRlbkRpZ2l0W3RlbnMgLSAxXTsKLSAgICAgICAgbnVtYmVyID0gbnVtYmVyICUg
MTA7Ci0gICAgICAgIGlmIChudW1iZXIpCi0gICAgICAgICAgICBsZXR0ZXIgKz0gUUNoYXIoMTQ4
NyArIG51bWJlcik7Ci0gICAgfQotICAgIHJldHVybiBsZXR0ZXI7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotUmVuZGVyTGlzdEl0ZW06OlJlbmRlckxpc3RJdGVtKFdlYkNvcmU6Ok5vZGUq
IG5vZGUpCi0gICAgOiBSZW5kZXJCbG9jayhub2RlKSwgcHJlZGVmVmFsKC0xKSwgbV9tYXJrZXIo
MCksIF9ub3RJbkxpc3QoZmFsc2UpLCBtX3ZhbHVlKC0xKQotewotICAgIC8vIGluaXQgUmVuZGVy
T2JqZWN0IGF0dHJpYnV0ZXMKLSAgICBzZXRJbmxpbmUoZmFsc2UpOyAvLyBvdXIgb2JqZWN0IGlz
IG5vdCBJbmxpbmUKLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6c2V0U3R5bGUoUmVuZGVyU3R5
bGUgKl9zdHlsZSkKLXsKLSAgICBSZW5kZXJCbG9jazo6c2V0U3R5bGUoX3N0eWxlKTsKLQotICAg
IGlmIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkgIT0gTE5PTkUgfHwKLSAgICAgICAgKHN0eWxl
KCktPmxpc3RTdHlsZUltYWdlKCkgJiYgIXN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzRXJy
b3JJbWFnZSgpKSkgewotICAgICAgICBSZW5kZXJTdHlsZSAqbmV3U3R5bGUgPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7Ci0gICAgICAgIG5ld1N0eWxlLT5yZWYoKTsKLSAgICAg
ICAgLy8gVGhlIG1hcmtlciBhbHdheXMgaW5oZXJpdHMgZnJvbSB0aGUgbGlzdCBpdGVtLCByZWdh
cmRsZXNzIG9mIHdoZXJlIGl0IG1pZ2h0IGVuZAotICAgICAgICAvLyB1cCAoZS5nLiwgaW4gc29t
ZSBkZWVwbHkgbmVzdGVkIGxpbmUgYm94KS4gIFNlZSBDU1MzIHNwZWMuCi0gICAgICAgIG5ld1N0
eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsgCi0gICAgICAgIGlmICghbV9tYXJrZXIpIHsKLSAg
ICAgICAgICAgIG1fbWFya2VyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJMaXN0TWFya2Vy
KGRvY3VtZW50KCkpOwotICAgICAgICAgICAgbV9tYXJrZXItPnNldFN0eWxlKG5ld1N0eWxlKTsK
LSAgICAgICAgICAgIG1fbWFya2VyLT5zZXRMaXN0SXRlbSh0aGlzKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBtX21hcmtlci0+c2V0U3R5bGUobmV3U3R5bGUpOwotICAgICAgICBuZXdT
dHlsZS0+ZGVyZWYocmVuZGVyQXJlbmEoKSk7Ci0gICAgfSBlbHNlIGlmIChtX21hcmtlcikgewot
ICAgICAgICBtX21hcmtlci0+ZGVzdHJveSgpOwotICAgICAgICBtX21hcmtlciA9IDA7Ci0gICAg
fQotfQotCi12b2lkIFJlbmRlckxpc3RJdGVtOjpkZXN0cm95KCkKLXsgICAgCi0gICAgaWYgKG1f
bWFya2VyKSB7Ci0gICAgICAgIG1fbWFya2VyLT5kZXN0cm95KCk7Ci0gICAgICAgIG1fbWFya2Vy
ID0gMDsKLSAgICB9Ci0gICAgUmVuZGVyQmxvY2s6OmRlc3Ryb3koKTsKLX0KLQotc3RhdGljIE5v
ZGUqIGVuY2xvc2luZ0xpc3QoTm9kZSogbm9kZSkKLXsKLSAgICBmb3IgKE5vZGUqIG4gPSBub2Rl
LT5wYXJlbnROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGlmIChuLT5o
YXNUYWdOYW1lKHVsVGFnKSB8fCBuLT5oYXNUYWdOYW1lKG9sVGFnKSkKLSAgICAgICAgICAgIHJl
dHVybiBuOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHByZXZp
b3VzTGlzdEl0ZW0oTm9kZSogbGlzdCwgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCi17Ci0gICAgaWYg
KCFsaXN0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBpdGVtLT5ub2Rl
KCktPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7IG4gIT0gbGlzdDsgbiA9IG4tPnRyYXZlcnNlUHJl
dmlvdXNOb2RlKCkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gbi0+cmVuZGVyZXIoKTsK
LSAgICAgICAgaWYgKG8gJiYgby0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBv
dGhlckxpc3QgPSBlbmNsb3NpbmdMaXN0KG4pOwotICAgICAgICAgICAgLy8gVGhpcyBpdGVtIGlz
IHBhcnQgb2Ygb3VyIGN1cnJlbnQgbGlzdCwgc28gaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9y
LgotICAgICAgICAgICAgaWYgKGxpc3QgPT0gb3RoZXJMaXN0KQotICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KG8pOwotICAgICAgICAgICAgLy8gV2Ug
Zm91bmQgb3Vyc2VsZiBpbnNpZGUgYW5vdGhlciBsaXN0OyBsZXRzIHNraXAgdGhlIHJlc3Qgb2Yg
aXQuCi0gICAgICAgICAgICBpZiAob3RoZXJMaXN0KQotICAgICAgICAgICAgICAgIG4gPSBvdGhl
ckxpc3Q7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgUmVuZGVy
TGlzdEl0ZW06OmNhbGNWYWx1ZSgpCi17Ci0gICAgaWYgKHByZWRlZlZhbCAhPSAtMSkKLSAgICAg
ICAgbV92YWx1ZSA9IHByZWRlZlZhbDsKLSAgICBlbHNlIHsKLSAgICAgICAgTm9kZSogbGlzdCA9
IGVuY2xvc2luZ0xpc3Qobm9kZSgpKTsKLSAgICAgICAgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBw
cmV2aW91c0xpc3RJdGVtKGxpc3QsIHRoaXMpOwotICAgICAgICBpZiAoaXRlbSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgcmVjdXJzZXMgdG8gYSBwb3NzaWJsZSBkZXB0aCBvZiB0aGUg
bGVuZ3RoIG9mIHRoZSBsaXN0LgotICAgICAgICAgICAgLy8gVGhhdCdzIG5vdCBnb29kIC0tIHdl
IG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gYW4gaXRlcmF0aXZlIGFsZ29yaXRobS4KLSAgICAgICAg
ICAgIGlmIChpdGVtLT52YWx1ZSgpID09IC0xKQotICAgICAgICAgICAgICAgIGl0ZW0tPmNhbGNW
YWx1ZSgpOwotICAgICAgICAgICAgbV92YWx1ZSA9IGl0ZW0tPnZhbHVlKCkgKyAxOwotICAgICAg
ICB9IGVsc2UgaWYgKGxpc3QgJiYgbGlzdC0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAgICAgICAg
ICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudCo+KGxpc3QpLT5zdGFydCgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZhbHVlID0gMTsKLSAgICB9Ci19Ci0KLWJv
b2wgUmVuZGVyTGlzdEl0ZW06OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBsYXN0Q2hp
bGQoKSA9PSBtX21hcmtlcjsKLX0KLQotc3RhdGljIFJlbmRlck9iamVjdCogZ2V0UGFyZW50T2ZG
aXJzdExpbmVCb3goUmVuZGVyT2JqZWN0KiBjdXJyLCBSZW5kZXJPYmplY3QqIG1hcmtlcikKLXsK
LSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBjdXJyLT5maXJzdENoaWxkKCk7Ci0gICAg
aWYgKCFmaXJzdENoaWxkKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCi0gICAgZm9yIChS
ZW5kZXJPYmplY3QqIGN1cnJDaGlsZCA9IGZpcnN0Q2hpbGQ7IGN1cnJDaGlsZDsgY3VyckNoaWxk
ID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjdXJyQ2hpbGQgPT0g
bWFya2VyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYg
KGN1cnJDaGlsZC0+aXNJbmxpbmUoKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyOwotICAgICAg
ICAKLSAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNGbG9hdGluZygpIHx8IGN1cnJDaGlsZC0+aXNQ
b3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAg
ICBpZiAoY3VyckNoaWxkLT5pc1RhYmxlKCkgfHwgIWN1cnJDaGlsZC0+aXNSZW5kZXJCbG9jaygp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VyckNoaWxkLT5z
dHlsZSgpLT5odG1sSGFja3MoKSAmJiBjdXJyQ2hpbGQtPmVsZW1lbnQoKSAmJgotICAgICAgICAg
ICAgKGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKHVsVGFnKXx8IGN1cnJDaGlsZC0+
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKG9sVGFnKSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0
TGluZUJveChjdXJyQ2hpbGQsIG1hcmtlcik7Ci0gICAgICAgIGlmIChsaW5lQm94KQotICAgICAg
ICAgICAgcmV0dXJuIGxpbmVCb3g7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwotfQotCi12
b2lkIFJlbmRlckxpc3RJdGVtOjpyZXNldFZhbHVlKCkKLXsKLSAgICBtX3ZhbHVlID0gLTE7Ci0g
ICAgaWYgKG1fbWFya2VyKQotICAgICAgICBtX21hcmtlci0+c2V0TmVlZHNMYXlvdXRBbmRNaW5N
YXhSZWNhbGMoKTsKLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTWFya2VyTG9jYXRp
b24oKQotewotICAgIC8vIFNhbml0eSBjaGVjayB0aGUgbG9jYXRpb24gb2Ygb3VyIG1hcmtlci4K
LSAgICBpZiAobV9tYXJrZXIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBtYXJrZXJQYXIgPSBt
X21hcmtlci0+cGFyZW50KCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbGluZUJveFBhcmVudCA9
IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KHRoaXMsIG1fbWFya2VyKTsKLSAgICAgICAgaWYgKCFs
aW5lQm94UGFyZW50KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgbWFya2VyIGlzIGN1cnJlbnRs
eSBjb250YWluZWQgaW5zaWRlIGFuIGFub255bW91cyBib3gsCi0gICAgICAgICAgICAvLyB0aGVu
IHdlIGFyZSB0aGUgb25seSBpdGVtIGluIHRoYXQgYW5vbnltb3VzIGJveCAoc2luY2Ugbm8gbGlu
ZSBib3gKLSAgICAgICAgICAgIC8vIHBhcmVudCB3YXMgZm91bmQpLiAgSXQncyBvayB0byBqdXN0
IGxlYXZlIHRoZSBtYXJrZXIgd2hlcmUgaXQgaXMKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2Fz
ZS4KLSAgICAgICAgICAgIGlmIChtYXJrZXJQYXIgJiYgbWFya2VyUGFyLT5pc0Fub255bW91c0Js
b2NrKCkpCi0gICAgICAgICAgICAgICAgbGluZUJveFBhcmVudCA9IG1hcmtlclBhcjsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5lQm94UGFyZW50ID0gdGhpczsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1hcmtlclBhciAhPSBsaW5lQm94UGFyZW50IHx8
ICFtX21hcmtlci0+bWluTWF4S25vd24oKSkgewotICAgICAgICAgICAgaWYgKG1hcmtlclBhcikK
LSAgICAgICAgICAgICAgICBtYXJrZXJQYXItPnJlbW92ZUNoaWxkKG1fbWFya2VyKTsKLSAgICAg
ICAgICAgIGlmICghbGluZUJveFBhcmVudCkKLSAgICAgICAgICAgICAgICBsaW5lQm94UGFyZW50
ID0gdGhpczsKLSAgICAgICAgICAgIGxpbmVCb3hQYXJlbnQtPmFkZENoaWxkKG1fbWFya2VyLCBs
aW5lQm94UGFyZW50LT5maXJzdENoaWxkKCkpOwotICAgICAgICAgICAgaWYgKCFtX21hcmtlci0+
bWluTWF4S25vd24oKSkKLSAgICAgICAgICAgICAgICBtX21hcmtlci0+Y2FsY01pbk1heFdpZHRo
KCk7Ci0gICAgICAgICAgICByZWNhbGNNaW5NYXhXaWR0aHMoKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6Y2FsY01pbk1heFdpZHRoKCkKLXsKLSAgICAvLyBN
YWtlIHN1cmUgb3VyIG1hcmtlciBpcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi4KLSAgICB1cGRh
dGVNYXJrZXJMb2NhdGlvbigpOwotICAgIGlmICghbWluTWF4S25vd24oKSkKLSAgICAgICAgUmVu
ZGVyQmxvY2s6OmNhbGNNaW5NYXhXaWR0aCgpOwotfQotCi12b2lkIFJlbmRlckxpc3RJdGVtOjps
YXlvdXQoKQotewotICAgIEtIVE1MQXNzZXJ0KG5lZWRzTGF5b3V0KCkpOwotICAgIEtIVE1MQXNz
ZXJ0KG1pbk1heEtub3duKCkpOwotICAgIAotICAgIHVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7ICAg
IAotICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6
cG9zaXRpb25MaXN0TWFya2VyKCkKLXsKLSAgICBpZiAobV9tYXJrZXIgJiYgIW1fbWFya2VyLT5p
c0luc2lkZSgpKSB7Ci0gICAgICAgIGludCBtYXJrZXJPbGRYID0gbV9tYXJrZXItPnhQb3MoKTsK
LSAgICAgICAgaW50IHlPZmZzZXQgPSAwOwotICAgICAgICBpbnQgeE9mZnNldCA9IDA7Ci0gICAg
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvID0gbV9tYXJrZXItPnBhcmVudCgpOyBvICE9IHRoaXM7
IG8gPSBvLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgeU9mZnNldCArPSBvLT55UG9zKCk7Ci0g
ICAgICAgICAgICB4T2Zmc2V0ICs9IG8tPnhQb3MoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgUm9vdElubGluZUJveCogcm9vdCA9IG1fbWFya2VyLT5pbmxpbmVCb3hXcmFwcGVyKCkt
PnJvb3QoKTsKLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAg
ICAgICAgICAgaW50IGxlZnRMaW5lT2Zmc2V0ID0gbGVmdFJlbE9mZnNldCh5T2Zmc2V0LCBsZWZ0
T2Zmc2V0KHlPZmZzZXQpKTsKLSAgICAgICAgICAgIGludCBtYXJrZXJYUG9zID0gbGVmdExpbmVP
ZmZzZXQgLSB4T2Zmc2V0IC0gcGFkZGluZ0xlZnQoKSAtIGJvcmRlckxlZnQoKSArIG1fbWFya2Vy
LT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICBtX21hcmtlci0+aW5saW5lQm94V3JhcHBlcigp
LT5hZGp1c3RQb3NpdGlvbihtYXJrZXJYUG9zIC0gbWFya2VyT2xkWCwgMCk7Ci0gICAgICAgICAg
ICBpZiAobWFya2VyWFBvcyA8IHJvb3QtPmxlZnRPdmVyZmxvdygpKSB7Ci0gICAgICAgICAgICAg
ICAgcm9vdC0+c2V0SG9yaXpvbnRhbE92ZXJmbG93UG9zaXRpb25zKG1hcmtlclhQb3MsIHJvb3Qt
PnJpZ2h0T3ZlcmZsb3coKSk7Ci0gICAgICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4o
bWFya2VyWFBvcywgbV9vdmVyZmxvd0xlZnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaW50IHJpZ2h0TGluZU9mZnNldCA9IHJpZ2h0UmVsT2Zmc2V0KHlP
ZmZzZXQsIHJpZ2h0T2Zmc2V0KHlPZmZzZXQpKTsKLSAgICAgICAgICAgIGludCBtYXJrZXJYUG9z
ID0gcmlnaHRMaW5lT2Zmc2V0IC0geE9mZnNldCArIHBhZGRpbmdSaWdodCgpICsgYm9yZGVyUmln
aHQoKSArIG1fbWFya2VyLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICBtX21hcmtlci0+aW5s
aW5lQm94V3JhcHBlcigpLT5hZGp1c3RQb3NpdGlvbihtYXJrZXJYUG9zIC0gbWFya2VyT2xkWCwg
MCk7Ci0gICAgICAgICAgICBpZiAobWFya2VyWFBvcyArIG1fbWFya2VyLT53aWR0aCgpID4gcm9v
dC0+cmlnaHRPdmVyZmxvdygpKSB7Ci0gICAgICAgICAgICAgICAgcm9vdC0+c2V0SG9yaXpvbnRh
bE92ZXJmbG93UG9zaXRpb25zKHJvb3QtPmxlZnRPdmVyZmxvdygpLCBtYXJrZXJYUG9zICsgbV9t
YXJrZXItPndpZHRoKCkpOwotICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heCht
YXJrZXJYUG9zICsgbV9tYXJrZXItPndpZHRoKCksIG1fb3ZlcmZsb3dMZWZ0KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6cGFpbnQo
UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQotewotICAgIGlmICghbV9oZWlnaHQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJsb2NrOjpwYWludChpLCBfdHgsIF90eSk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLVJlbmRlckxpc3RNYXJrZXI6OlJlbmRlckxpc3RNYXJrZXIoRG9jdW1lbnQq
IGRvY3VtZW50KQotICAgIDogUmVuZGVyQm94KGRvY3VtZW50KSwgbV9saXN0SW1hZ2UoMCksIG1f
c2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uTm9uZSkKLXsKLSAgICAvLyBpbml0IFJlbmRlck9iamVj
dCBhdHRyaWJ1dGVzCi0gICAgc2V0SW5saW5lKHRydWUpOyAgIC8vIG91ciBvYmplY3QgaXMgSW5s
aW5lCi0gICAgc2V0UmVwbGFjZWQodHJ1ZSk7IC8vIHByZXRlbmQgdG8gYmUgcmVwbGFjZWQKLX0K
LQotUmVuZGVyTGlzdE1hcmtlcjo6flJlbmRlckxpc3RNYXJrZXIoKQotewotICAgIGlmIChtX2xp
c3RJbWFnZSkKLSAgICAgICAgbV9saXN0SW1hZ2UtPmRlcmVmKHRoaXMpOwotfQotCi12b2lkIFJl
bmRlckxpc3RNYXJrZXI6OnNldFN0eWxlKFJlbmRlclN0eWxlICpzKQotewotICAgIGlmIChzICYm
IHN0eWxlKCkgJiYgcy0+bGlzdFN0eWxlUG9zaXRpb24oKSAhPSBzdHlsZSgpLT5saXN0U3R5bGVQ
b3NpdGlvbigpKQotICAgICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwotICAg
IAotICAgIFJlbmRlckJveDo6c2V0U3R5bGUocyk7Ci0KLSAgICBpZiAoIG1fbGlzdEltYWdlICE9
IHN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkgKSB7Ci0gICAgICAgIGlmIChtX2xpc3RJbWFnZSkK
LSAgICAgICAgICAgIG1fbGlzdEltYWdlLT5kZXJlZih0aGlzKTsKLSAgICAgICAgbV9saXN0SW1h
Z2UgPSBzdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpOwotICAgICAgICBpZiAobV9saXN0SW1hZ2Up
Ci0gICAgICAgICAgICBtX2xpc3RJbWFnZS0+cmVmKHRoaXMpOwotICAgIH0KLX0KLQotSW5saW5l
Qm94KiBSZW5kZXJMaXN0TWFya2VyOjpjcmVhdGVJbmxpbmVCb3goYm9vbCwgYm9vbCBpc1Jvb3RM
aW5lQm94LCBib29sKQotewotICAgIEtIVE1MQXNzZXJ0KCFpc1Jvb3RMaW5lQm94KTsKLSAgICBM
aXN0TWFya2VyQm94KiBib3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIExpc3RNYXJrZXJCb3godGhp
cyk7Ci0gICAgbV9pbmxpbmVCb3hXcmFwcGVyID0gYm94OwotICAgIHJldHVybiBib3g7Ci19Ci0K
LXZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQg
X3R5KQotewotICAgIGlmIChpLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IG1hcmtlciA9IGdldFJlbGF0aXZlTWFy
a2VyUmVjdCgpOwotICAgIG1hcmtlci5tb3ZlKF90eCwgX3R5KTsKLQotICAgIEludFJlY3QgYm94
KF90eCArIG1feCwgX3R5ICsgbV95LCBtX3dpZHRoLCBtX2hlaWdodCk7Ci0KLSAgICBpZiAoYm94
LnkoKSA+IGkuci5ib3R0b20oKSB8fCBib3gueSgpICsgYm94LmhlaWdodCgpIDwgaS5yLnkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVy
KCkpIAotICAgICAgICBwYWludEJveERlY29yYXRpb25zKGksIGJveC54KCksIGJveC55KCkpOwot
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBwID0gaS5wOwotICAgIHAtPnNldEZvbnQoc3R5bGUoKS0+
Zm9udCgpKTsKLQotICAgIGlmIChkb2N1bWVudCgpLT5wcmludGluZygpKSB7Ci0gICAgICAgIGlm
IChib3gueSgpIDwgaS5yLnkoKSkKLSAgICAgICAgICAgIC8vIFRoaXMgaGFzIGJlZW4gcHJpbnRl
ZCBhbHJlYWR5IHdlIHN1cHBvc2UuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICBSZW5kZXJDYW52YXMqIGMgPSBjYW52YXMoKTsKLSAgICAgICAgaWYgKGJveC55KCkgKyBi
b3guaGVpZ2h0KCkgKyBwYWRkaW5nQm90dG9tKCkgKyBib3JkZXJCb3R0b20oKSA+PSBjLT5wcmlu
dFJlY3QoKS5ib3R0b20oKSkgewotICAgICAgICAgICAgaWYgKGJveC55KCkgPCBjLT50cnVuY2F0
ZWRBdCgpKQotICAgICAgICAgICAgICAgIGMtPnNldEJlc3RUcnVuY2F0ZWRBdChib3gueSgpLCB0
aGlzKTsKLSAgICAgICAgICAgIC8vIExldCdzIHByaW50IHRoaXMgb24gdGhlIG5leHQgcGFnZS4K
LSAgICAgICAgICAgIHJldHVybjsgCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9saXN0
SW1hZ2UgJiYgIW1fbGlzdEltYWdlLT5pc0Vycm9ySW1hZ2UoKSkgewotICAgICAgICBwLT5kcmF3
SW1hZ2UobV9saXN0SW1hZ2UtPmltYWdlKCksIG1hcmtlci5sb2NhdGlvbigpKTsKLSAgICAgICAg
aWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkKLSAgICAgICAgICAgIHAtPmZp
bGxSZWN0KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQ29sb3IocCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0jaWZkZWYgQk9YX0RFQlVHCi0gICAgcC0+c2V0UGVuKCByZWQgKTsKLSAg
ICBwLT5kcmF3UmVjdChib3gueCgpLCBib3gueSgpLCBib3gud2lkdGgoKSwgYm94LmhlaWdodCgp
KTsKLSNlbmRpZgotCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkK
LSAgICAgICAgcC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgpLCBzZWxlY3Rpb25Db2xvcihwKSk7
Ci0KLSAgICBjb25zdCBDb2xvciBjb2xvciggc3R5bGUoKS0+Y29sb3IoKSApOwotICAgIHAtPnNl
dFBlbiggY29sb3IgKTsKLQotICAgIHN3aXRjaChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsK
LSAgICBjYXNlIERJU0M6Ci0gICAgICAgIHAtPnNldEZpbGxDb2xvcihjb2xvci5yZ2IoKSk7Ci0g
ICAgICAgIHAtPmRyYXdFbGxpcHNlKG1hcmtlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENJUkNMRToKLSAgICAgICAgcC0+c2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7Ci0g
ICAgICAgIHAtPmRyYXdFbGxpcHNlKG1hcmtlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IFNRVUFSRToKLSAgICAgICAgcC0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsKLSAgICAgICAg
cC0+ZHJhd1JlY3QobWFya2VyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTE5PTkU6Ci0g
ICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIW1faXRlbS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0g
ICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KG1faXRlbS51bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpOwotICAgICAgICAgICAgaWYgKHN0
eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICAgICAgICAgIGludCB3aWR0aCA9
IGZvbnQud2lkdGgodGV4dFJ1bik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1
biwgbWFya2VyLmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgIFVDaGFyIHBlcmlvZFNwYWNl
WzJdID0geyAnLicsICcgJyB9OwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KFRleHRSdW4o
cGVyaW9kU3BhY2UsIDIpLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgc3BhY2VQZXJpb2Rb
Ml0gPSB7ICcgJywgJy4nIH07Ci0gICAgICAgICAgICAgICAgVGV4dFJ1biBzcGFjZVBlcmlvZFJ1
bihzcGFjZVBlcmlvZCwgMik7Ci0gICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53aWR0
aChzcGFjZVBlcmlvZFJ1bik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoc3BhY2VQZXJp
b2RSdW4sIG1hcmtlci5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0
ZXh0UnVuLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpsYXlv
dXQoKQotewotICAgIEtIVE1MQXNzZXJ0KCBuZWVkc0xheW91dCgpICk7Ci0gICAgLy8gIyMjIEtI
VE1MQXNzZXJ0KCBtaW5NYXhLbm93bigpICk7Ci0gICAgaWYgKCAhbWluTWF4S25vd24oKSApCi0g
ICAgICAgIGNhbGNNaW5NYXhXaWR0aCgpOwotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKLX0K
LQotdm9pZCBSZW5kZXJMaXN0TWFya2VyOjppbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UgKm8pCi17
Ci0gICAgaWYgKG8gIT0gbV9saXN0SW1hZ2UpIHsKLSAgICAgICAgUmVuZGVyQm94OjppbWFnZUNo
YW5nZWQobyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV93aWR0aCAhPSBt
X2xpc3RJbWFnZS0+aW1hZ2VTaXplKCkud2lkdGgoKSB8fCBtX2hlaWdodCAhPSBtX2xpc3RJbWFn
ZS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkpCi0gICAgICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4
UmVjYWxjKCk7Ci0gICAgZWxzZQotICAgICAgICByZXBhaW50KCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGlzdE1hcmtlcjo6Y2FsY01pbk1heFdpZHRoKCkKLXsKLSAgICBLSFRNTEFzc2VydCggIW1pbk1h
eEtub3duKCkgKTsKLQotICAgIGlmIChtX2xpc3RJbWFnZSkgewotICAgICAgICBtX3dpZHRoID0g
bV9saXN0SW1hZ2UtPmltYWdlKCktPndpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gbV9saXN0
SW1hZ2UtPmltYWdlKCktPmhlaWdodCgpOwotICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0
aCA9IG1fd2lkdGg7Ci0gICAgICAgIHNldE1pbk1heEtub3duKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAobV9saXN0SXRlbS0+dmFsdWUoKSA8IDApIC8vIG5vdCB5ZXQgY2Fs
Y3VsYXRlZAotICAgICAgICBtX2xpc3RJdGVtLT5jYWxjVmFsdWUoKTsKLQotICAgIGNvbnN0IEZv
bnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgbV9oZWlnaHQgPSBmb250LmhlaWdodCgp
OwotCi0gICAgc3dpdGNoKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkKLSAgICB7Ci0gICAgY2Fz
ZSBESVNDOgotICAgIGNhc2UgQ0lSQ0xFOgotICAgIGNhc2UgU1FVQVJFOgotICAgICAgICBtX3dp
ZHRoID0gKGZvbnQuYXNjZW50KCkgKiAyIC8gMyArIDEpIC8gMiArIDI7Ci0gICAgICAgIGdvdG8g
ZW5kOwotICAgIGNhc2UgQVJNRU5JQU46Ci0gICAgY2FzZSBHRU9SR0lBTjoKLSAgICBjYXNlIENK
S19JREVPR1JBUEhJQzoKLSAgICBjYXNlIEhJUkFHQU5BOgotICAgIGNhc2UgS0FUQUtBTkE6Ci0g
ICAgY2FzZSBISVJBR0FOQV9JUk9IQToKLSAgICBjYXNlIEtBVEFLQU5BX0lST0hBOgotICAgIGNh
c2UgREVDSU1BTF9MRUFESU5HX1pFUk86Ci0gICAgICAgIC8vICMjIyB1bnN1cHBvcnRlZCwgd2Ug
dXNlIGRlY2ltYWwgaW5zdGVhZAotICAgIGNhc2UgTERFQ0lNQUw6Ci0gICAgICAgIG1faXRlbS5z
cHJpbnRmKCAiJWQiLCBtX2xpc3RJdGVtLT52YWx1ZSgpICk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTE9XRVJfUk9NQU46Ci0gICAgICAgIG1faXRlbSA9IHRvUm9tYW4oIG1fbGlzdEl0ZW0t
PnZhbHVlKCksIGZhbHNlICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBQRVJfUk9NQU46
Ci0gICAgICAgIG1faXRlbSA9IHRvUm9tYW4oIG1fbGlzdEl0ZW0tPnZhbHVlKCksIHRydWUgKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMT1dFUl9HUkVFSzoKLSAgICAgewotICAgICAgICBp
bnQgbnVtYmVyID0gbV9saXN0SXRlbS0+dmFsdWUoKSAtIDE7Ci0gICAgICAgIGludCBsID0gKG51
bWJlciAlIDI0KTsKLQotICAgICAgICBpZiAobD4xNikge2wrKzt9IC8vIFNraXAgR1JFRUsgU01B
TEwgTEVUVEVSIEZJTkFMIFNJR01BCi0KLSAgICAgICAgbV9pdGVtID0gUUNoYXIoOTQ1ICsgbCk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKG51bWJlciAvIDI0KTsgaSsrKSB7Ci0gICAg
ICAgICAgICBtX2l0ZW0gKz0gIiciOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICB9
Ci0gICAgY2FzZSBIRUJSRVc6Ci0gICAgICAgIG1faXRlbSA9IHRvSGVicmV3KCBtX2xpc3RJdGVt
LT52YWx1ZSgpICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTE9XRVJfQUxQSEE6Ci0gICAg
Y2FzZSBMT1dFUl9MQVRJTjoKLSAgICAgICAgbV9pdGVtID0gdG9MZXR0ZXJTdHJpbmcobV9saXN0
SXRlbS0+dmFsdWUoKSwgJ2EnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUFBFUl9BTFBI
QToKLSAgICBjYXNlIFVQUEVSX0xBVElOOgotICAgICAgICBtX2l0ZW0gPSB0b0xldHRlclN0cmlu
ZyhtX2xpc3RJdGVtLT52YWx1ZSgpLCAnQScpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExO
T05FOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGludCBpdGVtV2lk
dGggPSBmb250LndpZHRoKFRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1f
aXRlbS51bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpKTsKLSAgICAgICAgVUNoYXIgcGVyaW9k
U3BhY2VbMl0gPSB7ICcuJywgJyAnIH07Ci0gICAgICAgIGludCBwZXJpb2RTcGFjZVdpZHRoID0g
Zm9udC53aWR0aChUZXh0UnVuKHBlcmlvZFNwYWNlLCAyKSk7Ci0gICAgICAgIG1fd2lkdGggPSBp
dGVtV2lkdGggKyBwZXJpb2RTcGFjZVdpZHRoOwotICAgIH0KLQotZW5kOgotCi0gICAgbV9taW5X
aWR0aCA9IG1fd2lkdGg7Ci0gICAgbV9tYXhXaWR0aCA9IG1fd2lkdGg7Ci0KLSAgICBzZXRNaW5N
YXhLbm93bigpOwotfQotCi12b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNhbGNXaWR0aCgpCi17Ci0g
ICAgLy8gbV93aWR0aCBpcyBzZXQgaW4gY2FsY01pbk1heFdpZHRoKCkKLSAgICBib29sIGhhdmVJ
bWFnZSA9IG1fbGlzdEltYWdlICYmICFtX2xpc3RJbWFnZS0+aXNFcnJvckltYWdlKCk7Ci0gICAg
Y29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLQotICAgIGlmIChpc0luc2lkZSgp
KSB7Ci0gICAgICAgIGlmIChoYXZlSW1hZ2UpIHsKLSAgICAgICAgICAgIGlmIChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpIHsKLSAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOwot
ICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjTWFya2VyUGFkZGluZzsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gY01hcmtlclBhZGRp
bmc7Ci0gICAgICAgICAgICAgICAgbV9tYXJnaW5SaWdodCA9IDA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBzd2l0Y2ggKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewotICAgICAg
ICAgICAgY2FzZSBESVNDOgotICAgICAgICAgICAgY2FzZSBDSVJDTEU6Ci0gICAgICAgICAgICBj
YXNlIFNRVUFSRToKLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0g
TFRSKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IC0xOwotICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gZm9udC5hc2NlbnQoKSAtIG1fd2lkdGggKyAxOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVm
dCA9IGZvbnQuYXNjZW50KCkgLSBtX3dpZHRoICsgMTsKLSAgICAgICAgICAgICAgICAgICAgbV9t
YXJnaW5SaWdodCA9IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0g
MDsKLSAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gMDsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKLSAgICAg
ICAgICAgIGlmIChoYXZlSW1hZ2UpCi0gICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gLW1f
d2lkdGggLSBjTWFya2VyUGFkZGluZzsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIGludCBvZmZzZXQgPSBmb250LmFzY2VudCgpICogMiAvIDM7Ci0gICAgICAgICAgICAgICAg
c3dpdGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBESVNDOgotICAgICAgICAgICAgICAgICAgICBjYXNlIENJUkNMRToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxl
ZnQgPSAtb2Zmc2V0IC0gY01hcmtlclBhZGRpbmcgLSAxOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTE5PTkU6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX21hcmdpbkxlZnQgPSBtX2l0ZW0uaXNFbXB0eSgpID8gMCA6IC1tX3dpZHRoIC0gb2Zmc2V0
IC8gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoaGF2ZUltYWdlKQotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVm
dCA9IGNNYXJrZXJQYWRkaW5nOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aW50IG9mZnNldCA9IGZvbnQuYXNjZW50KCkgKiAyIC8gMzsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNl
IERJU0M6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ0lSQ0xFOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIFNRVUFSRToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9
IG9mZnNldCArIGNNYXJrZXJQYWRkaW5nICsgMSAtIG1fd2lkdGg7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBMTk9ORToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbWFyZ2luTGVmdCA9IG1faXRlbS5pc0VtcHR5KCkgPyAwIDogb2Zmc2V0IC8gMjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9t
YXJnaW5SaWdodCA9IC1tX21hcmdpbkxlZnQgLSBtX3dpZHRoOwotICAgIH0KLX0KLQotc2hvcnQg
UmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodChib29sLCBib29sKSBjb25zdAorTGlzdE1hcmtl
ckJveDo6TGlzdE1hcmtlckJveChSZW5kZXJPYmplY3QqIG9iaikKKyAgICA6IElubGluZUJveChv
YmopCiB7Ci0gICAgaWYgKCFtX2xpc3RJbWFnZSkKLSAgICAgICAgcmV0dXJuIG1fbGlzdEl0ZW0t
PmxpbmVIZWlnaHQoZmFsc2UsIHRydWUpOwotICAgIHJldHVybiBoZWlnaHQoKTsKLX0KLQotc2hv
cnQgUmVuZGVyTGlzdE1hcmtlcjo6YmFzZWxpbmVQb3NpdGlvbihib29sLCBib29sKSBjb25zdAot
ewotICAgIGlmICghbV9saXN0SW1hZ2UpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0
eWxlKCktPmZvbnQoKTsKLSAgICAgICAgcmV0dXJuIGZvbnQuYXNjZW50KCkgKyAobGluZUhlaWdo
dChmYWxzZSkgLSBmb250LmhlaWdodCgpKS8yOwotICAgIH0KLSAgICByZXR1cm4gaGVpZ2h0KCk7
Ci19Ci0KLWJvb2wgUmVuZGVyTGlzdE1hcmtlcjo6aXNJbnNpZGUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2xpc3RJdGVtLT5ub3RJbkxpc3QoKSB8fCBzdHlsZSgpLT5saXN0U3R5bGVQb3NpdGlv
bigpID09IElOU0lERTsKLX0KLQotSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2
ZU1hcmtlclJlY3QoKQotewotICAgIGlmIChtX2xpc3RJbWFnZSAmJiAhbV9saXN0SW1hZ2UtPmlz
RXJyb3JJbWFnZSgpKQotICAgICAgICByZXR1cm4gSW50UmVjdChtX3gsIG1feSwgIG1fbGlzdElt
YWdlLT5pbWFnZVNpemUoKS53aWR0aCgpLCBtX2xpc3RJbWFnZS0+aW1hZ2VTaXplKCkuaGVpZ2h0
KCkpOwotCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICBpbnQg
YXNjZW50ID0gZm9udC5hc2NlbnQoKTsKLSAgICAKLSAgICBzd2l0Y2ggKHN0eWxlKCktPmxpc3RT
dHlsZVR5cGUoKSkgewotICAgICAgICBjYXNlIERJU0M6Ci0gICAgICAgIGNhc2UgQ0lSQ0xFOgot
ICAgICAgICBjYXNlIFNRVUFSRTogewotICAgICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVzZSBw
YXJ0aWN1bGFyIHJvdW5kaW5nIHJ1bGVzIG5lY2Vzc2FyeT8KLSAgICAgICAgICAgIGludCBidWxs
ZXRXaWR0aCA9IChhc2NlbnQgKiAyIC8gMyArIDEpIC8gMjsKLSAgICAgICAgICAgIHJldHVybiBJ
bnRSZWN0KG1feCArIDEsIG1feSArIDMgKiAoYXNjZW50IC0gYXNjZW50ICogMiAvIDMpIC8gMiwg
YnVsbGV0V2lkdGgsIGJ1bGxldFdpZHRoKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIExOT05F
OgotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAgICAgY2FzZSBBUk1FTklBTjoK
LSAgICAgICAgY2FzZSBDSktfSURFT0dSQVBISUM6Ci0gICAgICAgIGNhc2UgREVDSU1BTF9MRUFE
SU5HX1pFUk86Ci0gICAgICAgIGNhc2UgR0VPUkdJQU46Ci0gICAgICAgIGNhc2UgSEVCUkVXOgot
ICAgICAgICBjYXNlIEhJUkFHQU5BOgotICAgICAgICBjYXNlIEhJUkFHQU5BX0lST0hBOgotICAg
ICAgICBjYXNlIEtBVEFLQU5BOgotICAgICAgICBjYXNlIEtBVEFLQU5BX0lST0hBOgotICAgICAg
ICBjYXNlIExERUNJTUFMOgotICAgICAgICBjYXNlIExPV0VSX0FMUEhBOgotICAgICAgICBjYXNl
IExPV0VSX0dSRUVLOgotICAgICAgICBjYXNlIExPV0VSX0xBVElOOgotICAgICAgICBjYXNlIExP
V0VSX1JPTUFOOgotICAgICAgICBjYXNlIFVQUEVSX0FMUEhBOgotICAgICAgICBjYXNlIFVQUEVS
X0xBVElOOgotICAgICAgICBjYXNlIFVQUEVSX1JPTUFOOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgaWYgKG1faXRlbS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0KLSAgICBpbnQgaXRlbVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIqPihtX2l0ZW0udW5pY29kZSgpKSwgbV9pdGVtLmxlbmd0aCgpKSk7
Ci0gICAgVUNoYXIgcGVyaW9kU3BhY2VbMl0gPSB7ICcuJywgJyAnIH07Ci0gICAgaW50IHBlcmlv
ZFNwYWNlV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4ocGVyaW9kU3BhY2UsIDIpKTsKLSAgICBy
ZXR1cm4gSW50UmVjdChtX3gsIG1feSArIGFzY2VudCwgaXRlbVdpZHRoICsgcGVyaW9kU3BhY2VX
aWR0aCwgZm9udC5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6c2V0U2Vs
ZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCi17Ci0gICAgbV9zZWxlY3Rpb25TdGF0
ZSA9IHN0YXRlOwotICAgIFJvb3RJbmxpbmVCb3gqIHJvb3QgPSBpbmxpbmVCb3hXcmFwcGVyKCkt
PnJvb3QoKTsKLSAgICBpZiAocm9vdCkKLSAgICAgICAgcm9vdC0+c2V0SGFzU2VsZWN0ZWRDaGls
ZHJlbihzdGF0ZSAhPSBTZWxlY3Rpb25Ob25lKTsKLSAgICBjb250YWluaW5nQmxvY2soKS0+c2V0
U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwotfQotCi1JbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OnNl
bGVjdGlvblJlY3QoKQotewotICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5v
bmUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpbnQgYWJzeCwgYWJzeTsKLSAg
ICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBjYi0+YWJzb2x1dGVQ
b3NpdGlvbihhYnN4LCBhYnN5KTsKLSAgICBpZiAoY2ItPmhhc092ZXJmbG93Q2xpcCgpKQotICAg
ICAgICBjYi0+bGF5ZXIoKS0+c3VidHJhY3RTY3JvbGxPZmZzZXQoYWJzeCwgYWJzeSk7Ci0KLSAg
ICBSb290SW5saW5lQm94KiByb290ID0gaW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7Ci0gICAg
cmV0dXJuIEludFJlY3QoYWJzeCArIHhQb3MoKSwgYWJzeSArIHJvb3QtPnNlbGVjdGlvblRvcCgp
LCB3aWR0aCgpLCByb290LT5zZWxlY3Rpb25IZWlnaHQoKSk7CiB9CiAKLUNvbG9yIFJlbmRlckxp
c3RNYXJrZXI6OnNlbGVjdGlvbkNvbG9yKEdyYXBoaWNzQ29udGV4dCogcCkgY29uc3QKK2Jvb2wg
TGlzdE1hcmtlckJveDo6aXNUZXh0KCkgY29uc3QKIHsKLSAgICBDb2xvciBjb2xvciA9IFJlbmRl
ckJveDo6c2VsZWN0aW9uQ29sb3IocCk7Ci0gICAgaWYgKCFtX2xpc3RJbWFnZSB8fCBtX2xpc3RJ
bWFnZS0+aXNFcnJvckltYWdlKCkpCi0gICAgICAgIHJldHVybiBjb2xvcjsKLSAgICAvLyBMaW1p
dCB0aGUgb3BhY2l0eSBzbyB0aGF0IG5vIHVzZXItc3BlY2lmaWVkIHNlbGVjdGlvbiBjb2xvciBj
YW4gb2JzY3VyZSBzZWxlY3RlZCBpbWFnZXMuCi0gICAgaWYgKGNvbG9yLmFscGhhKCkgPiBzZWxl
Y3Rpb25Db2xvckltYWdlT3ZlcmxheUFscGhhKQotICAgICAgICBjb2xvciA9IENvbG9yKGNvbG9y
LnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIHNlbGVjdGlvbkNvbG9ySW1hZ2VP
dmVybGF5QWxwaGEpOwotICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4gIXN0YXRpY19jYXN0
PFJlbmRlckxpc3RNYXJrZXIqPihvYmplY3QoKSktPmxpc3RJbWFnZSgpOwogfQogCiB9CkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
UmVuZGVyQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMTQzODIpCisrKyByZW5kZXJpbmcvUmVuZGVy
Q29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDExIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ29udGFpbmVyLmgiCiAKKyNpbmNsdWRlICJS
ZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGV4dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJDYW52YXMuaCIKLSNpbmNsdWRlICJyZW5kZXJfbGlzdC5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAKIC8vIEZvciBhY2Nlc3NpYmlsaXR5CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgJKHJl
dmlzaW9uIDE0MzgyKQorKysgcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIsMTMgKzIyLDExIEBACiAgKgogICovCiAKLSNpZm5kZWYgUkVOREVSX0xJU1Rf
SAotI2RlZmluZSBSRU5ERVJfTElTVF9ICisjaWZuZGVmIFJlbmRlckxpc3RNYXJrZXJfSAorI2Rl
ZmluZSBSZW5kZXJMaXN0TWFya2VyX0gKIAogI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIK
LSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgotCi0vLyAjIyMgbGlzdC1zdHlsZS1wb3NpdGlvbiwg
bGlzdC1zdHlsZS1pbWFnZSBpcyBzdGlsbCBtaXNzaW5nCisjaW5jbHVkZSAiUmVuZGVyQm94Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsMTYgKzM4LDE2IEBACiBjbGFzcyBSZW5k
ZXJMaXN0TWFya2VyIDogcHVibGljIFJlbmRlckJveAogewogcHVibGljOgotICAgIFJlbmRlckxp
c3RNYXJrZXIoV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICBSZW5kZXJMaXN0TWFy
a2VyKERvY3VtZW50Kik7CiAgICAgflJlbmRlckxpc3RNYXJrZXIoKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSAqc3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRT
dHlsZShSZW5kZXJTdHlsZSopOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1l
KCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxpc3RNYXJrZXIiOyB9CiAgICAgLy8gc28gdGhlIG1h
cmtlciBnZXRzIHRvIGxheW91dCBpdHNlbGYuIE9ubHkgbmVlZGVkIGZvcgogICAgIC8vIGxpc3Qt
c3R5bGUtcG9zaXRpb246IGluc2lkZQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYgaSwgaW50IHhvZmYsIGludCB5b2ZmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgaW50IHhvZmYsIGludCB5b2ZmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCApOwog
ICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKIApAQCAtODgsNTIgKzg2LDYgQEAK
ICAgICBTZWxlY3Rpb25TdGF0ZSBtX3NlbGVjdGlvblN0YXRlOwogfTsKIAotY2xhc3MgTGlzdE1h
cmtlckJveCA6IHB1YmxpYyBJbmxpbmVCb3gKLXsKLXB1YmxpYzoKLSAgICBMaXN0TWFya2VyQm94
KFJlbmRlck9iamVjdCogb2JqKSA6SW5saW5lQm94KG9iaikge30KLSAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0KCkgY29uc3QgeyByZXR1cm4gIXN0YXRpY19jYXN0PFJlbmRlckxpc3RNYXJrZXIqPihv
YmplY3QoKSktPmxpc3RJbWFnZSgpOyB9Ci19OwotCi1jbGFzcyBSZW5kZXJMaXN0SXRlbSA6IHB1
YmxpYyBSZW5kZXJCbG9jawotewotcHVibGljOgotICAgIFJlbmRlckxpc3RJdGVtKFdlYkNvcmU6
Ok5vZGUqKTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotCi0gICAgdmlydHVh
bCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxpc3RJdGVt
IjsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlICpzdHlsZSk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAg
ICAKLSAgICBpbnQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgdm9pZCBz
ZXRWYWx1ZShpbnQgdikgeyBwcmVkZWZWYWwgPSB2OyB9Ci0gICAgdm9pZCBjYWxjVmFsdWUoKTsK
LSAgICB2b2lkIHJlc2V0VmFsdWUoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgaSwgaW50IHhvZmYsIGludCB5
b2ZmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoICk7Ci0gICAgdmlydHVhbCB2b2lkIGNh
bGNNaW5NYXhXaWR0aCgpOwotCi0gICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uTGlzdE1hcmtlcigp
OwotICAgIHZvaWQgdXBkYXRlTWFya2VyTG9jYXRpb24oKTsKLSAgICAKLSAgICB2b2lkIHNldE5v
dEluTGlzdChib29sIG5vdEluTGlzdCkgeyBfbm90SW5MaXN0ID0gbm90SW5MaXN0OyB9Ci0gICAg
Ym9vbCBub3RJbkxpc3QoKSBjb25zdCB7IHJldHVybiBfbm90SW5MaXN0OyB9Ci0KLSAgICBEZXBy
ZWNhdGVkU3RyaW5nIG1hcmtlclN0cmluZ1ZhbHVlKCkgeyByZXR1cm4gbV9tYXJrZXIgPyBtX21h
cmtlci0+dGV4dCgpIDogIiI7IH0KLQotcHJpdmF0ZToKLSAgICBpbnQgcHJlZGVmVmFsOwotICAg
IFJlbmRlckxpc3RNYXJrZXIgKm1fbWFya2VyOwotICAgIGJvb2wgX25vdEluTGlzdDsKLSAgICBp
bnQgbV92YWx1ZTsKLX07Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0
SXRlbS5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTUgKzIyLDEzIEBACiAgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KICAqCiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInJl
bmRlcl9saXN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKIAogI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJDYW52YXMuaCIKLSNpbmNsdWRlICJodG1sX2xpc3Rp
bXBsLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9MaXN0RWxlbWVu
dC5oIgorI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIApAQCAtMzgsODIgKzM2LDEyIEBACiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LWNvbnN0IGludCBjTWFya2VyUGFkZGluZyA9IDc7Ci0KLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5n
IHRvUm9tYW4oaW50IG51bWJlciwgYm9vbCB1cHBlcikKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5n
IHJvbWFuOwotICAgIGNvbnN0IFVDaGFyIGxkaWdpdHNbXSA9IHsgJ2knLCAndicsICd4JywgJ2wn
LCAnYycsICdkJywgJ20nIH07Ci0gICAgY29uc3QgVUNoYXIgdWRpZ2l0c1tdID0geyAnSScsICdW
JywgJ1gnLCAnTCcsICdDJywgJ0QnLCAnTScgfTsKLSAgICBjb25zdCBVQ2hhciogZGlnaXRzID0g
dXBwZXIgPyB1ZGlnaXRzIDogbGRpZ2l0czsKLSAgICBpbnQgZCA9IDA7Ci0gICAgZG8gewotICAg
ICAgICBpbnQgbnVtID0gbnVtYmVyICUgMTA7Ci0gICAgICAgIGlmIChudW0gJSA1IDwgNCkKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSBudW0gJSA1OyBpID4gMDsgaS0tKQotICAgICAgICAgICAg
ICAgIHJvbWFuLmluc2VydCgwLCBkaWdpdHNbZF0pOwotICAgICAgICBpZiAobnVtID49IDQgJiYg
bnVtIDw9IDgpCi0gICAgICAgICAgICByb21hbi5pbnNlcnQoMCwgZGlnaXRzW2QgKyAxXSk7Ci0g
ICAgICAgIGlmIChudW0gPT0gOSkKLSAgICAgICAgICAgIHJvbWFuLmluc2VydCgwLCBkaWdpdHNb
ZCArIDJdKTsKLSAgICAgICAgaWYgKG51bSAlIDUgPT0gNCkKLSAgICAgICAgICAgIHJvbWFuLmlu
c2VydCgwLCBkaWdpdHNbZF0pOwotICAgICAgICBudW1iZXIgLz0gMTA7Ci0gICAgICAgIGQgKz0g
MjsKLSAgICB9IHdoaWxlIChudW1iZXIpOwotICAgIHJldHVybiByb21hbjsKLX0KLQotc3RhdGlj
IERlcHJlY2F0ZWRTdHJpbmcgdG9MZXR0ZXJTdHJpbmcoaW50IG51bWJlciwgaW50IGxldHRlckEp
Ci17Ci0gICAgaWYgKG51bWJlciA8IDIpCi0gICAgICAgIHJldHVybiBRQ2hhcihsZXR0ZXJBKTsg
Ly8gbWF0Y2ggV2luSUUgKEEuKSBub3QgRmlyZUZveCAoMC4pCi0KLSAgICBEZXByZWNhdGVkU3Ry
aW5nIGxldHRlclN0cmluZzsKLSAgICB3aGlsZSAobnVtYmVyID4gMCkgewotICAgICAgICBpbnQg
b25lc0RpZ2l0ID0gKG51bWJlciAtIDEpICUgMjY7Ci0gICAgICAgIGxldHRlclN0cmluZyA9IFFD
aGFyKGxldHRlckEgKyBvbmVzRGlnaXQpICsgbGV0dGVyU3RyaW5nOwotICAgICAgICBudW1iZXIg
LT0gb25lc0RpZ2l0OwotICAgICAgICBudW1iZXIgLz0gMjY7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGxldHRlclN0cmluZzsKLX0KLQotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgdG9IZWJyZXcoaW50
IG51bWJlcikKLXsKLSAgICBjb25zdCBRQ2hhciB0ZW5EaWdpdFtdID0gezE0OTcsIDE0OTksIDE1
MDAsIDE1MDIsIDE1MDQsIDE1MDUsIDE1MDYsIDE1MDgsIDE1MTB9OwotCi0gICAgRGVwcmVjYXRl
ZFN0cmluZyBsZXR0ZXI7Ci0gICAgaWYgKG51bWJlciA+IDk5OSkgewotICAgICAgICBsZXR0ZXIg
PSB0b0hlYnJldyhudW1iZXIgLyAxMDAwKSArICInIjsKLSAgICAgICAgbnVtYmVyID0gbnVtYmVy
ICUgMTAwMDsKLSAgICB9Ci0gICAgaW50IGZvdXJIdW5kcmVkcyA9IG51bWJlciAvIDQwMDsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGZvdXJIdW5kcmVkczsgaSsrKQotICAgICAgICBsZXR0ZXIg
Kz0gUUNoYXIoMTUxMSArIDMpOwotICAgIG51bWJlciAlPSA0MDA7Ci0gICAgaWYgKG51bWJlciAv
IDEwMCkKLSAgICAgICAgbGV0dGVyICs9IFFDaGFyKDE1MTEgKyAobnVtYmVyIC8gMTAwKSAtIDEp
OwotICAgIG51bWJlciAlPSAxMDA7Ci0gICAgaWYgKG51bWJlciA9PSAxNSB8fCBudW1iZXIgPT0g
MTYpIHsKLSAgICAgICAgbGV0dGVyICs9IFFDaGFyKDE0ODcgKyA5KTsKLSAgICAgICAgbGV0dGVy
ICs9IFFDaGFyKDE0ODcgKyBudW1iZXIgLSA5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnQg
dGVucyA9IG51bWJlciAvIDEwOwotICAgICAgICBpZiAodGVucykKLSAgICAgICAgICAgIGxldHRl
ciArPSB0ZW5EaWdpdFt0ZW5zIC0gMV07Ci0gICAgICAgIG51bWJlciA9IG51bWJlciAlIDEwOwot
ICAgICAgICBpZiAobnVtYmVyKQotICAgICAgICAgICAgbGV0dGVyICs9IFFDaGFyKDE0ODcgKyBu
dW1iZXIpOwotICAgIH0KLSAgICByZXR1cm4gbGV0dGVyOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLVJlbmRlckxpc3RJdGVtOjpSZW5kZXJMaXN0SXRlbShXZWJDb3JlOjpOb2RlKiBub2Rl
KQotICAgIDogUmVuZGVyQmxvY2sobm9kZSksIHByZWRlZlZhbCgtMSksIG1fbWFya2VyKDApLCBf
bm90SW5MaXN0KGZhbHNlKSwgbV92YWx1ZSgtMSkKK1JlbmRlckxpc3RJdGVtOjpSZW5kZXJMaXN0
SXRlbShOb2RlKiBub2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKKyAgICAsIG1fcHJlZGVm
VmFsKC0xKQorICAgICwgbV9tYXJrZXIoMCkKKyAgICAsIG1fbm90SW5MaXN0KGZhbHNlKQorICAg
ICwgbV92YWx1ZSgtMSkKIHsKICAgICAvLyBpbml0IFJlbmRlck9iamVjdCBhdHRyaWJ1dGVzCiAg
ICAgc2V0SW5saW5lKGZhbHNlKTsgLy8gb3VyIG9iamVjdCBpcyBub3QgSW5saW5lCkBAIC0xODEs
OCArMTA5LDggQEAKIAogdm9pZCBSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKCkKIHsKLSAgICBp
ZiAocHJlZGVmVmFsICE9IC0xKQotICAgICAgICBtX3ZhbHVlID0gcHJlZGVmVmFsOworICAgIGlm
IChtX3ByZWRlZlZhbCAhPSAtMSkKKyAgICAgICAgbV92YWx1ZSA9IG1fcHJlZGVmVmFsOwogICAg
IGVsc2UgewogICAgICAgICBOb2RlKiBsaXN0ID0gZW5jbG9zaW5nTGlzdChub2RlKCkpOwogICAg
ICAgICBSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHByZXZpb3VzTGlzdEl0ZW0obGlzdCwgdGhpcyk7
CkBAIC0zMjksNDE3ICsyNTcsOSBAQAogICAgIFJlbmRlckJsb2NrOjpwYWludChpLCBfdHgsIF90
eSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLVJlbmRlckxpc3RNYXJrZXI6OlJlbmRlckxpc3RNYXJrZXIoRG9j
dW1lbnQqIGRvY3VtZW50KQotICAgIDogUmVuZGVyQm94KGRvY3VtZW50KSwgbV9saXN0SW1hZ2Uo
MCksIG1fc2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uTm9uZSkKLXsKLSAgICAvLyBpbml0IFJlbmRl
ck9iamVjdCBhdHRyaWJ1dGVzCi0gICAgc2V0SW5saW5lKHRydWUpOyAgIC8vIG91ciBvYmplY3Qg
aXMgSW5saW5lCi0gICAgc2V0UmVwbGFjZWQodHJ1ZSk7IC8vIHByZXRlbmQgdG8gYmUgcmVwbGFj
ZWQKLX0KLQotUmVuZGVyTGlzdE1hcmtlcjo6flJlbmRlckxpc3RNYXJrZXIoKQotewotICAgIGlm
IChtX2xpc3RJbWFnZSkKLSAgICAgICAgbV9saXN0SW1hZ2UtPmRlcmVmKHRoaXMpOwotfQotCi12
b2lkIFJlbmRlckxpc3RNYXJrZXI6OnNldFN0eWxlKFJlbmRlclN0eWxlICpzKQotewotICAgIGlm
IChzICYmIHN0eWxlKCkgJiYgcy0+bGlzdFN0eWxlUG9zaXRpb24oKSAhPSBzdHlsZSgpLT5saXN0
U3R5bGVQb3NpdGlvbigpKQotICAgICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygp
OwotICAgIAotICAgIFJlbmRlckJveDo6c2V0U3R5bGUocyk7Ci0KLSAgICBpZiAoIG1fbGlzdElt
YWdlICE9IHN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkgKSB7Ci0gICAgICAgIGlmIChtX2xpc3RJ
bWFnZSkKLSAgICAgICAgICAgIG1fbGlzdEltYWdlLT5kZXJlZih0aGlzKTsKLSAgICAgICAgbV9s
aXN0SW1hZ2UgPSBzdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpOwotICAgICAgICBpZiAobV9saXN0
SW1hZ2UpCi0gICAgICAgICAgICBtX2xpc3RJbWFnZS0+cmVmKHRoaXMpOwotICAgIH0KLX0KLQot
SW5saW5lQm94KiBSZW5kZXJMaXN0TWFya2VyOjpjcmVhdGVJbmxpbmVCb3goYm9vbCwgYm9vbCBp
c1Jvb3RMaW5lQm94LCBib29sKQotewotICAgIEtIVE1MQXNzZXJ0KCFpc1Jvb3RMaW5lQm94KTsK
LSAgICBMaXN0TWFya2VyQm94KiBib3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIExpc3RNYXJrZXJC
b3godGhpcyk7Ci0gICAgbV9pbmxpbmVCb3hXcmFwcGVyID0gYm94OwotICAgIHJldHVybiBib3g7
Ci19Ci0KLXZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgX3R4
LCBpbnQgX3R5KQotewotICAgIGlmIChpLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IG1hcmtlciA9IGdldFJlbGF0
aXZlTWFya2VyUmVjdCgpOwotICAgIG1hcmtlci5tb3ZlKF90eCwgX3R5KTsKLQotICAgIEludFJl
Y3QgYm94KF90eCArIG1feCwgX3R5ICsgbV95LCBtX3dpZHRoLCBtX2hlaWdodCk7Ci0KLSAgICBp
ZiAoYm94LnkoKSA+IGkuci5ib3R0b20oKSB8fCBib3gueSgpICsgYm94LmhlaWdodCgpIDwgaS5y
LnkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9y
Qm9yZGVyKCkpIAotICAgICAgICBwYWludEJveERlY29yYXRpb25zKGksIGJveC54KCksIGJveC55
KCkpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBwID0gaS5wOwotICAgIHAtPnNldEZvbnQoc3R5
bGUoKS0+Zm9udCgpKTsKLQotICAgIGlmIChkb2N1bWVudCgpLT5wcmludGluZygpKSB7Ci0gICAg
ICAgIGlmIChib3gueSgpIDwgaS5yLnkoKSkKLSAgICAgICAgICAgIC8vIFRoaXMgaGFzIGJlZW4g
cHJpbnRlZCBhbHJlYWR5IHdlIHN1cHBvc2UuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgICAgICBSZW5kZXJDYW52YXMqIGMgPSBjYW52YXMoKTsKLSAgICAgICAgaWYgKGJveC55
KCkgKyBib3guaGVpZ2h0KCkgKyBwYWRkaW5nQm90dG9tKCkgKyBib3JkZXJCb3R0b20oKSA+PSBj
LT5wcmludFJlY3QoKS5ib3R0b20oKSkgewotICAgICAgICAgICAgaWYgKGJveC55KCkgPCBjLT50
cnVuY2F0ZWRBdCgpKQotICAgICAgICAgICAgICAgIGMtPnNldEJlc3RUcnVuY2F0ZWRBdChib3gu
eSgpLCB0aGlzKTsKLSAgICAgICAgICAgIC8vIExldCdzIHByaW50IHRoaXMgb24gdGhlIG5leHQg
cGFnZS4KLSAgICAgICAgICAgIHJldHVybjsgCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
bV9saXN0SW1hZ2UgJiYgIW1fbGlzdEltYWdlLT5pc0Vycm9ySW1hZ2UoKSkgewotICAgICAgICBw
LT5kcmF3SW1hZ2UobV9saXN0SW1hZ2UtPmltYWdlKCksIG1hcmtlci5sb2NhdGlvbigpKTsKLSAg
ICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkKLSAgICAgICAgICAg
IHAtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQ29sb3IocCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0jaWZkZWYgQk9YX0RFQlVHCi0gICAgcC0+c2V0UGVuKCByZWQg
KTsKLSAgICBwLT5kcmF3UmVjdChib3gueCgpLCBib3gueSgpLCBib3gud2lkdGgoKSwgYm94Lmhl
aWdodCgpKTsKLSNlbmRpZgotCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9u
Tm9uZSkKLSAgICAgICAgcC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgpLCBzZWxlY3Rpb25Db2xv
cihwKSk7Ci0KLSAgICBjb25zdCBDb2xvciBjb2xvciggc3R5bGUoKS0+Y29sb3IoKSApOwotICAg
IHAtPnNldFBlbiggY29sb3IgKTsKLQotICAgIHN3aXRjaChzdHlsZSgpLT5saXN0U3R5bGVUeXBl
KCkpIHsKLSAgICBjYXNlIERJU0M6Ci0gICAgICAgIHAtPnNldEZpbGxDb2xvcihjb2xvci5yZ2Io
KSk7Ci0gICAgICAgIHAtPmRyYXdFbGxpcHNlKG1hcmtlcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIENJUkNMRToKLSAgICAgICAgcC0+c2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVu
dCk7Ci0gICAgICAgIHAtPmRyYXdFbGxpcHNlKG1hcmtlcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIFNRVUFSRToKLSAgICAgICAgcC0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsKLSAg
ICAgICAgcC0+ZHJhd1JlY3QobWFya2VyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTE5P
TkU6Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIW1faXRlbS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250
KCk7Ci0gICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
Q2hhcio+KG1faXRlbS51bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpOwotICAgICAgICAgICAg
aWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICAgICAgICAgIGludCB3
aWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQo
dGV4dFJ1biwgbWFya2VyLmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgIFVDaGFyIHBlcmlv
ZFNwYWNlWzJdID0geyAnLicsICcgJyB9OwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KFRl
eHRSdW4ocGVyaW9kU3BhY2UsIDIpLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgs
IDApKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgc3BhY2VQ
ZXJpb2RbMl0gPSB7ICcgJywgJy4nIH07Ci0gICAgICAgICAgICAgICAgVGV4dFJ1biBzcGFjZVBl
cmlvZFJ1bihzcGFjZVBlcmlvZCwgMik7Ci0gICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9u
dC53aWR0aChzcGFjZVBlcmlvZFJ1bik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoc3Bh
Y2VQZXJpb2RSdW4sIG1hcmtlci5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3
VGV4dCh0ZXh0UnVuLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMaXN0TWFya2Vy
OjpsYXlvdXQoKQotewotICAgIEtIVE1MQXNzZXJ0KCBuZWVkc0xheW91dCgpICk7Ci0gICAgLy8g
IyMjIEtIVE1MQXNzZXJ0KCBtaW5NYXhLbm93bigpICk7Ci0gICAgaWYgKCAhbWluTWF4S25vd24o
KSApCi0gICAgICAgIGNhbGNNaW5NYXhXaWR0aCgpOwotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNl
KTsKLX0KLQotdm9pZCBSZW5kZXJMaXN0TWFya2VyOjppbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2Ug
Km8pCi17Ci0gICAgaWYgKG8gIT0gbV9saXN0SW1hZ2UpIHsKLSAgICAgICAgUmVuZGVyQm94Ojpp
bWFnZUNoYW5nZWQobyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV93aWR0
aCAhPSBtX2xpc3RJbWFnZS0+aW1hZ2VTaXplKCkud2lkdGgoKSB8fCBtX2hlaWdodCAhPSBtX2xp
c3RJbWFnZS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkpCi0gICAgICAgIHNldE5lZWRzTGF5b3V0QW5k
TWluTWF4UmVjYWxjKCk7Ci0gICAgZWxzZQotICAgICAgICByZXBhaW50KCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGlzdE1hcmtlcjo6Y2FsY01pbk1heFdpZHRoKCkKLXsKLSAgICBLSFRNTEFzc2VydCgg
IW1pbk1heEtub3duKCkgKTsKLQotICAgIGlmIChtX2xpc3RJbWFnZSkgewotICAgICAgICBtX3dp
ZHRoID0gbV9saXN0SW1hZ2UtPmltYWdlKCktPndpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0g
bV9saXN0SW1hZ2UtPmltYWdlKCktPmhlaWdodCgpOwotICAgICAgICBtX21pbldpZHRoID0gbV9t
YXhXaWR0aCA9IG1fd2lkdGg7Ci0gICAgICAgIHNldE1pbk1heEtub3duKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9saXN0SXRlbS0+dmFsdWUoKSA8IDApIC8vIG5vdCB5
ZXQgY2FsY3VsYXRlZAotICAgICAgICBtX2xpc3RJdGVtLT5jYWxjVmFsdWUoKTsKLQotICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgbV9oZWlnaHQgPSBmb250Lmhl
aWdodCgpOwotCi0gICAgc3dpdGNoKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkKLSAgICB7Ci0g
ICAgY2FzZSBESVNDOgotICAgIGNhc2UgQ0lSQ0xFOgotICAgIGNhc2UgU1FVQVJFOgotICAgICAg
ICBtX3dpZHRoID0gKGZvbnQuYXNjZW50KCkgKiAyIC8gMyArIDEpIC8gMiArIDI7Ci0gICAgICAg
IGdvdG8gZW5kOwotICAgIGNhc2UgQVJNRU5JQU46Ci0gICAgY2FzZSBHRU9SR0lBTjoKLSAgICBj
YXNlIENKS19JREVPR1JBUEhJQzoKLSAgICBjYXNlIEhJUkFHQU5BOgotICAgIGNhc2UgS0FUQUtB
TkE6Ci0gICAgY2FzZSBISVJBR0FOQV9JUk9IQToKLSAgICBjYXNlIEtBVEFLQU5BX0lST0hBOgot
ICAgIGNhc2UgREVDSU1BTF9MRUFESU5HX1pFUk86Ci0gICAgICAgIC8vICMjIyB1bnN1cHBvcnRl
ZCwgd2UgdXNlIGRlY2ltYWwgaW5zdGVhZAotICAgIGNhc2UgTERFQ0lNQUw6Ci0gICAgICAgIG1f
aXRlbS5zcHJpbnRmKCAiJWQiLCBtX2xpc3RJdGVtLT52YWx1ZSgpICk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgTE9XRVJfUk9NQU46Ci0gICAgICAgIG1faXRlbSA9IHRvUm9tYW4oIG1fbGlz
dEl0ZW0tPnZhbHVlKCksIGZhbHNlICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBQRVJf
Uk9NQU46Ci0gICAgICAgIG1faXRlbSA9IHRvUm9tYW4oIG1fbGlzdEl0ZW0tPnZhbHVlKCksIHRy
dWUgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMT1dFUl9HUkVFSzoKLSAgICAgewotICAg
ICAgICBpbnQgbnVtYmVyID0gbV9saXN0SXRlbS0+dmFsdWUoKSAtIDE7Ci0gICAgICAgIGludCBs
ID0gKG51bWJlciAlIDI0KTsKLQotICAgICAgICBpZiAobD4xNikge2wrKzt9IC8vIFNraXAgR1JF
RUsgU01BTEwgTEVUVEVSIEZJTkFMIFNJR01BCi0KLSAgICAgICAgbV9pdGVtID0gUUNoYXIoOTQ1
ICsgbCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKG51bWJlciAvIDI0KTsgaSsrKSB7
Ci0gICAgICAgICAgICBtX2l0ZW0gKz0gIiciOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICB9Ci0gICAgY2FzZSBIRUJSRVc6Ci0gICAgICAgIG1faXRlbSA9IHRvSGVicmV3KCBtX2xp
c3RJdGVtLT52YWx1ZSgpICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTE9XRVJfQUxQSEE6
Ci0gICAgY2FzZSBMT1dFUl9MQVRJTjoKLSAgICAgICAgbV9pdGVtID0gdG9MZXR0ZXJTdHJpbmco
bV9saXN0SXRlbS0+dmFsdWUoKSwgJ2EnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUFBF
Ul9BTFBIQToKLSAgICBjYXNlIFVQUEVSX0xBVElOOgotICAgICAgICBtX2l0ZW0gPSB0b0xldHRl
clN0cmluZyhtX2xpc3RJdGVtLT52YWx1ZSgpLCAnQScpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIExOT05FOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGludCBp
dGVtV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hh
cio+KG1faXRlbS51bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpKTsKLSAgICAgICAgVUNoYXIg
cGVyaW9kU3BhY2VbMl0gPSB7ICcuJywgJyAnIH07Ci0gICAgICAgIGludCBwZXJpb2RTcGFjZVdp
ZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHBlcmlvZFNwYWNlLCAyKSk7Ci0gICAgICAgIG1fd2lk
dGggPSBpdGVtV2lkdGggKyBwZXJpb2RTcGFjZVdpZHRoOwotICAgIH0KLQotZW5kOgotCi0gICAg
bV9taW5XaWR0aCA9IG1fd2lkdGg7Ci0gICAgbV9tYXhXaWR0aCA9IG1fd2lkdGg7Ci0KLSAgICBz
ZXRNaW5NYXhLbm93bigpOwotfQotCi12b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNhbGNXaWR0aCgp
Ci17Ci0gICAgLy8gbV93aWR0aCBpcyBzZXQgaW4gY2FsY01pbk1heFdpZHRoKCkKLSAgICBib29s
IGhhdmVJbWFnZSA9IG1fbGlzdEltYWdlICYmICFtX2xpc3RJbWFnZS0+aXNFcnJvckltYWdlKCk7
Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLQotICAgIGlmIChpc0lu
c2lkZSgpKSB7Ci0gICAgICAgIGlmIChoYXZlSW1hZ2UpIHsKLSAgICAgICAgICAgIGlmIChzdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKLSAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQg
PSAwOwotICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjTWFya2VyUGFkZGluZzsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gY01hcmtl
clBhZGRpbmc7Ci0gICAgICAgICAgICAgICAgbV9tYXJnaW5SaWdodCA9IDA7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBzd2l0Y2ggKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewot
ICAgICAgICAgICAgY2FzZSBESVNDOgotICAgICAgICAgICAgY2FzZSBDSVJDTEU6Ci0gICAgICAg
ICAgICBjYXNlIFNRVUFSRToKLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IC0xOwotICAg
ICAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gZm9udC5hc2NlbnQoKSAtIG1fd2lkdGgg
KyAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWFy
Z2luTGVmdCA9IGZvbnQuYXNjZW50KCkgLSBtX3dpZHRoICsgMTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9tYXJnaW5SaWdodCA9IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9tYXJnaW5M
ZWZ0ID0gMDsKLSAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gMDsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsK
LSAgICAgICAgICAgIGlmIChoYXZlSW1hZ2UpCi0gICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0
ID0gLW1fd2lkdGggLSBjTWFya2VyUGFkZGluZzsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIGludCBvZmZzZXQgPSBmb250LmFzY2VudCgpICogMiAvIDM7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBESVNDOgotICAgICAgICAgICAgICAgICAgICBjYXNlIENJUkNMRToKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21h
cmdpbkxlZnQgPSAtb2Zmc2V0IC0gY01hcmtlclBhZGRpbmcgLSAxOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTE5PTkU6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX21hcmdpbkxlZnQgPSBtX2l0ZW0uaXNFbXB0eSgpID8gMCA6IC1tX3dpZHRoIC0g
b2Zmc2V0IC8gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaGF2ZUltYWdlKQotICAgICAgICAgICAgICAgIG1fbWFy
Z2luTGVmdCA9IGNNYXJrZXJQYWRkaW5nOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaW50IG9mZnNldCA9IGZvbnQuYXNjZW50KCkgKiAyIC8gMzsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjYXNlIERJU0M6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ0lSQ0xFOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFNRVUFSRToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFyZ2lu
TGVmdCA9IG9mZnNldCArIGNNYXJrZXJQYWRkaW5nICsgMSAtIG1fd2lkdGg7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBMTk9ORToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1faXRlbS5pc0VtcHR5KCkgPyAwIDogb2Zmc2V0
IC8gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9tYXJnaW5SaWdodCA9IC1tX21hcmdpbkxlZnQgLSBtX3dpZHRoOwotICAgIH0KLX0KLQot
c2hvcnQgUmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodChib29sLCBib29sKSBjb25zdAotewot
ICAgIGlmICghbV9saXN0SW1hZ2UpCi0gICAgICAgIHJldHVybiBtX2xpc3RJdGVtLT5saW5lSGVp
Z2h0KGZhbHNlLCB0cnVlKTsKLSAgICByZXR1cm4gaGVpZ2h0KCk7Ci19Ci0KLXNob3J0IFJlbmRl
ckxpc3RNYXJrZXI6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fbGlzdEltYWdlKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5m
b250KCk7Ci0gICAgICAgIHJldHVybiBmb250LmFzY2VudCgpICsgKGxpbmVIZWlnaHQoZmFsc2Up
IC0gZm9udC5oZWlnaHQoKSkvMjsKLSAgICB9Ci0gICAgcmV0dXJuIGhlaWdodCgpOwotfQotCi1i
b29sIFJlbmRlckxpc3RNYXJrZXI6OmlzSW5zaWRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9s
aXN0SXRlbS0+bm90SW5MaXN0KCkgfHwgc3R5bGUoKS0+bGlzdFN0eWxlUG9zaXRpb24oKSA9PSBJ
TlNJREU7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXJrZXJS
ZWN0KCkKLXsKLSAgICBpZiAobV9saXN0SW1hZ2UgJiYgIW1fbGlzdEltYWdlLT5pc0Vycm9ySW1h
Z2UoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QobV94LCBtX3ksICBtX2xpc3RJbWFnZS0+aW1h
Z2VTaXplKCkud2lkdGgoKSwgbV9saXN0SW1hZ2UtPmltYWdlU2l6ZSgpLmhlaWdodCgpKTsKLQot
ICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgaW50IGFzY2VudCA9
IGZvbnQuYXNjZW50KCk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBl
KCkpIHsKLSAgICAgICAgY2FzZSBESVNDOgotICAgICAgICBjYXNlIENJUkNMRToKLSAgICAgICAg
Y2FzZSBTUVVBUkU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlc2UgcGFydGljdWxh
ciByb3VuZGluZyBydWxlcyBuZWNlc3Nhcnk/Ci0gICAgICAgICAgICBpbnQgYnVsbGV0V2lkdGgg
PSAoYXNjZW50ICogMiAvIDMgKyAxKSAvIDI7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCht
X3ggKyAxLCBtX3kgKyAzICogKGFzY2VudCAtIGFzY2VudCAqIDIgLyAzKSAvIDIsIGJ1bGxldFdp
ZHRoLCBidWxsZXRXaWR0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBMTk9ORToKLSAgICAg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgICAgIGNhc2UgQVJNRU5JQU46Ci0gICAgICAg
IGNhc2UgQ0pLX0lERU9HUkFQSElDOgotICAgICAgICBjYXNlIERFQ0lNQUxfTEVBRElOR19aRVJP
OgotICAgICAgICBjYXNlIEdFT1JHSUFOOgotICAgICAgICBjYXNlIEhFQlJFVzoKLSAgICAgICAg
Y2FzZSBISVJBR0FOQToKLSAgICAgICAgY2FzZSBISVJBR0FOQV9JUk9IQToKLSAgICAgICAgY2Fz
ZSBLQVRBS0FOQToKLSAgICAgICAgY2FzZSBLQVRBS0FOQV9JUk9IQToKLSAgICAgICAgY2FzZSBM
REVDSU1BTDoKLSAgICAgICAgY2FzZSBMT1dFUl9BTFBIQToKLSAgICAgICAgY2FzZSBMT1dFUl9H
UkVFSzoKLSAgICAgICAgY2FzZSBMT1dFUl9MQVRJTjoKLSAgICAgICAgY2FzZSBMT1dFUl9ST01B
TjoKLSAgICAgICAgY2FzZSBVUFBFUl9BTFBIQToKLSAgICAgICAgY2FzZSBVUFBFUl9MQVRJTjoK
LSAgICAgICAgY2FzZSBVUFBFUl9ST01BTjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGlmIChtX2l0ZW0uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0g
ICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihyZWludGVycHJldF9jYXN0PGNv
bnN0IFVDaGFyKj4obV9pdGVtLnVuaWNvZGUoKSksIG1faXRlbS5sZW5ndGgoKSkpOwotICAgIFVD
aGFyIHBlcmlvZFNwYWNlWzJdID0geyAnLicsICcgJyB9OwotICAgIGludCBwZXJpb2RTcGFjZVdp
ZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHBlcmlvZFNwYWNlLCAyKSk7Ci0gICAgcmV0dXJuIElu
dFJlY3QobV94LCBtX3kgKyBhc2NlbnQsIGl0ZW1XaWR0aCArIHBlcmlvZFNwYWNlV2lkdGgsIGZv
bnQuaGVpZ2h0KCkpOwotfQotCi12b2lkIFJlbmRlckxpc3RNYXJrZXI6OnNldFNlbGVjdGlvblN0
YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQotewotICAgIG1fc2VsZWN0aW9uU3RhdGUgPSBzdGF0
ZTsKLSAgICBSb290SW5saW5lQm94KiByb290ID0gaW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7
Ci0gICAgaWYgKHJvb3QpCi0gICAgICAgIHJvb3QtPnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3Rh
dGUgIT0gU2VsZWN0aW9uTm9uZSk7Ci0gICAgY29udGFpbmluZ0Jsb2NrKCktPnNldFNlbGVjdGlv
blN0YXRlKHN0YXRlKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25S
ZWN0KCkKLXsKLSAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaW50IGFic3gsIGFic3k7Ci0gICAgUmVuZGVy
QmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgY2ItPmFic29sdXRlUG9zaXRpb24o
YWJzeCwgYWJzeSk7Ci0gICAgaWYgKGNiLT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgY2It
PmxheWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KGFic3gsIGFic3kpOwotCi0gICAgUm9vdElu
bGluZUJveCogcm9vdCA9IGlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwotICAgIHJldHVybiBJ
bnRSZWN0KGFic3ggKyB4UG9zKCksIGFic3kgKyByb290LT5zZWxlY3Rpb25Ub3AoKSwgd2lkdGgo
KSwgcm9vdC0+c2VsZWN0aW9uSGVpZ2h0KCkpOwotfQotCi1Db2xvciBSZW5kZXJMaXN0TWFya2Vy
OjpzZWxlY3Rpb25Db2xvcihHcmFwaGljc0NvbnRleHQqIHApIGNvbnN0CitEZXByZWNhdGVkU3Ry
aW5nIFJlbmRlckxpc3RJdGVtOjptYXJrZXJTdHJpbmdWYWx1ZSgpCiB7Ci0gICAgQ29sb3IgY29s
b3IgPSBSZW5kZXJCb3g6OnNlbGVjdGlvbkNvbG9yKHApOwotICAgIGlmICghbV9saXN0SW1hZ2Ug
fHwgbV9saXN0SW1hZ2UtPmlzRXJyb3JJbWFnZSgpKQotICAgICAgICByZXR1cm4gY29sb3I7Ci0g
ICAgLy8gTGltaXQgdGhlIG9wYWNpdHkgc28gdGhhdCBubyB1c2VyLXNwZWNpZmllZCBzZWxlY3Rp
b24gY29sb3IgY2FuIG9ic2N1cmUgc2VsZWN0ZWQgaW1hZ2VzLgotICAgIGlmIChjb2xvci5hbHBo
YSgpID4gc2VsZWN0aW9uQ29sb3JJbWFnZU92ZXJsYXlBbHBoYSkKLSAgICAgICAgY29sb3IgPSBD
b2xvcihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCBzZWxlY3Rpb25D
b2xvckltYWdlT3ZlcmxheUFscGhhKTsKLSAgICByZXR1cm4gY29sb3I7CisgICAgcmV0dXJuIG1f
bWFya2VyID8gbV9tYXJrZXItPnRleHQoKSA6ICIiOwogfQogCiB9CkluZGV4OiByZW5kZXJpbmcv
TGlzdE1hcmtlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9MaXN0TWFya2VyQm94LmgJ
KHJldmlzaW9uIDE0MzgyKQorKysgcmVuZGVyaW5nL0xpc3RNYXJrZXJCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtMjIsMTE2ICsyMiwxOCBAQAogICoKICAqLwogCi0jaWZuZGVmIFJFTkRFUl9MSVNU
X0gKLSNkZWZpbmUgUkVOREVSX0xJU1RfSAorI2lmbmRlZiBMaXN0TWFya2VyQm94X0gKKyNkZWZp
bmUgTGlzdE1hcmtlckJveF9ICiAKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKLQotLy8gIyMjIGxpc3Qtc3R5bGUtcG9zaXRpb24sIGxpc3Qt
c3R5bGUtaW1hZ2UgaXMgc3RpbGwgbWlzc2luZworI2luY2x1ZGUgIklubGluZUJveC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRlckxpc3RJdGVtOwotCi0vKiB1c2VkIHRv
IHJlbmRlciB0aGUgbGlzdHMgbWFya2VyLgotICAgICBUaGlzIGNsYXNzIGFsd2F5cyBoYXMgdG8g
YmUgYSBkaXJlY3QgY2hpbGQgb2YgYSBSZW5kZXJMaXN0SXRlbSEKLSovCi1jbGFzcyBSZW5kZXJM
aXN0TWFya2VyIDogcHVibGljIFJlbmRlckJveAotewotcHVibGljOgotICAgIFJlbmRlckxpc3RN
YXJrZXIoV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50KTsKLSAgICB+UmVuZGVyTGlzdE1hcmtl
cigpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlICpzdHlsZSk7Ci0K
LSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyTGlzdE1hcmtlciI7IH0KLSAgICAvLyBzbyB0aGUgbWFya2VyIGdldHMgdG8gbGF5b3V0IGl0
c2VsZi4gT25seSBuZWVkZWQgZm9yCi0gICAgLy8gbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRl
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgeG9mZiwgaW50IHlv
ZmYpOwotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoICk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNN
aW5NYXhXaWR0aCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFn
ZSopOwotCi0gICAgdmlydHVhbCB2b2lkIGNhbGNXaWR0aCgpOwotCi0gICAgdmlydHVhbCBJbmxp
bmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sLCBib29sLCBib29sKTsKLQotICAgIHZpcnR1YWwg
c2hvcnQgbGluZUhlaWdodChib29sIGIsIGJvb2wgaXNSb290TGluZUJveD1mYWxzZSkgY29uc3Q7
Ci0gICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgYiwgYm9vbCBpc1Jvb3RM
aW5lQm94PWZhbHNlKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RNYXJrZXIoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi0gICAgQ2FjaGVkSW1hZ2UqIGxpc3RJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGlzdEltYWdlOyB9Ci0gICAgCi0gICAgUmVuZGVyTGlzdEl0ZW0q
IGxpc3RJdGVtKCkgeyByZXR1cm4gbV9saXN0SXRlbTsgfQotICAgIHZvaWQgc2V0TGlzdEl0ZW0o
UmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtKSB7IG1fbGlzdEl0ZW0gPSBsaXN0SXRlbTsgfQotICAg
IAotICAgIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX2l0
ZW07IH0KLQotICAgIGJvb2wgaXNJbnNpZGUoKSBjb25zdDsKLSAgICAKLSAgICBJbnRSZWN0IGdl
dFJlbGF0aXZlTWFya2VyUmVjdCgpOwotICAgIAotICAgIHZpcnR1YWwgU2VsZWN0aW9uU3RhdGUg
c2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKTsKLSAgICB2aXJ0
dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdCgpOwotICAgIHZpcnR1YWwgQ29sb3Igc2VsZWN0aW9u
Q29sb3IoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGNhbkJlU2Vs
ZWN0aW9uTGVhZigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotcHJpdmF0ZToKLSAgICBEZXBy
ZWNhdGVkU3RyaW5nIG1faXRlbTsKLSAgICBDYWNoZWRJbWFnZSAqbV9saXN0SW1hZ2U7Ci0gICAg
UmVuZGVyTGlzdEl0ZW0qIG1fbGlzdEl0ZW07Ci0gICAgU2VsZWN0aW9uU3RhdGUgbV9zZWxlY3Rp
b25TdGF0ZTsKLX07Ci0KIGNsYXNzIExpc3RNYXJrZXJCb3ggOiBwdWJsaWMgSW5saW5lQm94CiB7
CiBwdWJsaWM6Ci0gICAgTGlzdE1hcmtlckJveChSZW5kZXJPYmplY3QqIG9iaikgOklubGluZUJv
eChvYmopIHt9Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuICFzdGF0
aWNfY2FzdDxSZW5kZXJMaXN0TWFya2VyKj4ob2JqZWN0KCkpLT5saXN0SW1hZ2UoKTsgfQotfTsK
LQotY2xhc3MgUmVuZGVyTGlzdEl0ZW0gOiBwdWJsaWMgUmVuZGVyQmxvY2sKLXsKLXB1YmxpYzoK
LSAgICBSZW5kZXJMaXN0SXRlbShXZWJDb3JlOjpOb2RlKik7Ci0gICAgCi0gICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3koKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJMaXN0SXRlbSI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRT
dHlsZShSZW5kZXJTdHlsZSAqc3R5bGUpOwotCi0gICAgdmlydHVhbCBib29sIGlzTGlzdEl0ZW0o
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi0gICAgaW50IHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0VmFsdWUoaW50IHYpIHsgcHJlZGVmVmFsID0g
djsgfQotICAgIHZvaWQgY2FsY1ZhbHVlKCk7Ci0gICAgdm9pZCByZXNldFZhbHVlKCk7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mIGksIGludCB4b2ZmLCBpbnQgeW9mZik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCApOwotICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBwb3NpdGlvbkxpc3RNYXJrZXIoKTsKLSAgICB2b2lkIHVwZGF0ZU1hcmtlckxvY2F0
aW9uKCk7Ci0gICAgCi0gICAgdm9pZCBzZXROb3RJbkxpc3QoYm9vbCBub3RJbkxpc3QpIHsgX25v
dEluTGlzdCA9IG5vdEluTGlzdDsgfQotICAgIGJvb2wgbm90SW5MaXN0KCkgY29uc3QgeyByZXR1
cm4gX25vdEluTGlzdDsgfQotCi0gICAgRGVwcmVjYXRlZFN0cmluZyBtYXJrZXJTdHJpbmdWYWx1
ZSgpIHsgcmV0dXJuIG1fbWFya2VyID8gbV9tYXJrZXItPnRleHQoKSA6ICIiOyB9Ci0KLXByaXZh
dGU6Ci0gICAgaW50IHByZWRlZlZhbDsKLSAgICBSZW5kZXJMaXN0TWFya2VyICptX21hcmtlcjsK
LSAgICBib29sIF9ub3RJbkxpc3Q7Ci0gICAgaW50IG1fdmFsdWU7CisgICAgTGlzdE1hcmtlckJv
eChSZW5kZXJPYmplY3QqKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0KCkgY29uc3Q7CiB9Owog
CiB9IC8vbmFtZXNwYWNlCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgcmVu
ZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NDUgKzAsMCBAQAot
LyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
Ci0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcgV2VsbGluZ3RvbiAocHJvdG9uQHdp
cmV0YXBwZWQubmV0KQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicmVuZGVyX2xpc3Qu
aCIKLQotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJDYW52YXMuaCIKLSNp
bmNsdWRlICJodG1sX2xpc3RpbXBsLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotY29uc3QgaW50
IGNNYXJrZXJQYWRkaW5nID0gNzsKLQotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgdG9Sb21hbihp
bnQgbnVtYmVyLCBib29sIHVwcGVyKQotewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcm9tYW47Ci0g
ICAgY29uc3QgVUNoYXIgbGRpZ2l0c1tdID0geyAnaScsICd2JywgJ3gnLCAnbCcsICdjJywgJ2Qn
LCAnbScgfTsKLSAgICBjb25zdCBVQ2hhciB1ZGlnaXRzW10gPSB7ICdJJywgJ1YnLCAnWCcsICdM
JywgJ0MnLCAnRCcsICdNJyB9OwotICAgIGNvbnN0IFVDaGFyKiBkaWdpdHMgPSB1cHBlciA/IHVk
aWdpdHMgOiBsZGlnaXRzOwotICAgIGludCBkID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIGludCBu
dW0gPSBudW1iZXIgJSAxMDsKLSAgICAgICAgaWYgKG51bSAlIDUgPCA0KQotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IG51bSAlIDU7IGkgPiAwOyBpLS0pCi0gICAgICAgICAgICAgICAgcm9tYW4u
aW5zZXJ0KDAsIGRpZ2l0c1tkXSk7Ci0gICAgICAgIGlmIChudW0gPj0gNCAmJiBudW0gPD0gOCkK
LSAgICAgICAgICAgIHJvbWFuLmluc2VydCgwLCBkaWdpdHNbZCArIDFdKTsKLSAgICAgICAgaWYg
KG51bSA9PSA5KQotICAgICAgICAgICAgcm9tYW4uaW5zZXJ0KDAsIGRpZ2l0c1tkICsgMl0pOwot
ICAgICAgICBpZiAobnVtICUgNSA9PSA0KQotICAgICAgICAgICAgcm9tYW4uaW5zZXJ0KDAsIGRp
Z2l0c1tkXSk7Ci0gICAgICAgIG51bWJlciAvPSAxMDsKLSAgICAgICAgZCArPSAyOwotICAgIH0g
d2hpbGUgKG51bWJlcik7Ci0gICAgcmV0dXJuIHJvbWFuOwotfQotCi1zdGF0aWMgRGVwcmVjYXRl
ZFN0cmluZyB0b0xldHRlclN0cmluZyhpbnQgbnVtYmVyLCBpbnQgbGV0dGVyQSkKLXsKLSAgICBp
ZiAobnVtYmVyIDwgMikKLSAgICAgICAgcmV0dXJuIFFDaGFyKGxldHRlckEpOyAvLyBtYXRjaCBX
aW5JRSAoQS4pIG5vdCBGaXJlRm94ICgwLikKLQotICAgIERlcHJlY2F0ZWRTdHJpbmcgbGV0dGVy
U3RyaW5nOwotICAgIHdoaWxlIChudW1iZXIgPiAwKSB7Ci0gICAgICAgIGludCBvbmVzRGlnaXQg
PSAobnVtYmVyIC0gMSkgJSAyNjsKLSAgICAgICAgbGV0dGVyU3RyaW5nID0gUUNoYXIobGV0dGVy
QSArIG9uZXNEaWdpdCkgKyBsZXR0ZXJTdHJpbmc7Ci0gICAgICAgIG51bWJlciAtPSBvbmVzRGln
aXQ7Ci0gICAgICAgIG51bWJlciAvPSAyNjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGV0dGVyU3Ry
aW5nOwotfQotCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyB0b0hlYnJldyhpbnQgbnVtYmVyKQot
ewotICAgIGNvbnN0IFFDaGFyIHRlbkRpZ2l0W10gPSB7MTQ5NywgMTQ5OSwgMTUwMCwgMTUwMiwg
MTUwNCwgMTUwNSwgMTUwNiwgMTUwOCwgMTUxMH07Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIGxl
dHRlcjsKLSAgICBpZiAobnVtYmVyID4gOTk5KSB7Ci0gICAgICAgIGxldHRlciA9IHRvSGVicmV3
KG51bWJlciAvIDEwMDApICsgIiciOwotICAgICAgICBudW1iZXIgPSBudW1iZXIgJSAxMDAwOwot
ICAgIH0KLSAgICBpbnQgZm91ckh1bmRyZWRzID0gbnVtYmVyIC8gNDAwOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZm91ckh1bmRyZWRzOyBpKyspCi0gICAgICAgIGxldHRlciArPSBRQ2hhcigx
NTExICsgMyk7Ci0gICAgbnVtYmVyICU9IDQwMDsKLSAgICBpZiAobnVtYmVyIC8gMTAwKQotICAg
ICAgICBsZXR0ZXIgKz0gUUNoYXIoMTUxMSArIChudW1iZXIgLyAxMDApIC0gMSk7Ci0gICAgbnVt
YmVyICU9IDEwMDsKLSAgICBpZiAobnVtYmVyID09IDE1IHx8IG51bWJlciA9PSAxNikgewotICAg
ICAgICBsZXR0ZXIgKz0gUUNoYXIoMTQ4NyArIDkpOwotICAgICAgICBsZXR0ZXIgKz0gUUNoYXIo
MTQ4NyArIG51bWJlciAtIDkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCB0ZW5zID0gbnVt
YmVyIC8gMTA7Ci0gICAgICAgIGlmICh0ZW5zKQotICAgICAgICAgICAgbGV0dGVyICs9IHRlbkRp
Z2l0W3RlbnMgLSAxXTsKLSAgICAgICAgbnVtYmVyID0gbnVtYmVyICUgMTA7Ci0gICAgICAgIGlm
IChudW1iZXIpCi0gICAgICAgICAgICBsZXR0ZXIgKz0gUUNoYXIoMTQ4NyArIG51bWJlcik7Ci0g
ICAgfQotICAgIHJldHVybiBsZXR0ZXI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVu
ZGVyTGlzdEl0ZW06OlJlbmRlckxpc3RJdGVtKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCi0gICAgOiBS
ZW5kZXJCbG9jayhub2RlKSwgcHJlZGVmVmFsKC0xKSwgbV9tYXJrZXIoMCksIF9ub3RJbkxpc3Qo
ZmFsc2UpLCBtX3ZhbHVlKC0xKQotewotICAgIC8vIGluaXQgUmVuZGVyT2JqZWN0IGF0dHJpYnV0
ZXMKLSAgICBzZXRJbmxpbmUoZmFsc2UpOyAvLyBvdXIgb2JqZWN0IGlzIG5vdCBJbmxpbmUKLX0K
LQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgKl9zdHlsZSkKLXsK
LSAgICBSZW5kZXJCbG9jazo6c2V0U3R5bGUoX3N0eWxlKTsKLQotICAgIGlmIChzdHlsZSgpLT5s
aXN0U3R5bGVUeXBlKCkgIT0gTE5PTkUgfHwKLSAgICAgICAgKHN0eWxlKCktPmxpc3RTdHlsZUlt
YWdlKCkgJiYgIXN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzRXJyb3JJbWFnZSgpKSkgewot
ICAgICAgICBSZW5kZXJTdHlsZSAqbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRl
clN0eWxlKCk7Ci0gICAgICAgIG5ld1N0eWxlLT5yZWYoKTsKLSAgICAgICAgLy8gVGhlIG1hcmtl
ciBhbHdheXMgaW5oZXJpdHMgZnJvbSB0aGUgbGlzdCBpdGVtLCByZWdhcmRsZXNzIG9mIHdoZXJl
IGl0IG1pZ2h0IGVuZAotICAgICAgICAvLyB1cCAoZS5nLiwgaW4gc29tZSBkZWVwbHkgbmVzdGVk
IGxpbmUgYm94KS4gIFNlZSBDU1MzIHNwZWMuCi0gICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJv
bShzdHlsZSgpKTsgCi0gICAgICAgIGlmICghbV9tYXJrZXIpIHsKLSAgICAgICAgICAgIG1fbWFy
a2VyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJMaXN0TWFya2VyKGRvY3VtZW50KCkpOwot
ICAgICAgICAgICAgbV9tYXJrZXItPnNldFN0eWxlKG5ld1N0eWxlKTsKLSAgICAgICAgICAgIG1f
bWFya2VyLT5zZXRMaXN0SXRlbSh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X21hcmtlci0+c2V0U3R5bGUobmV3U3R5bGUpOwotICAgICAgICBuZXdTdHlsZS0+ZGVyZWYocmVu
ZGVyQXJlbmEoKSk7Ci0gICAgfSBlbHNlIGlmIChtX21hcmtlcikgewotICAgICAgICBtX21hcmtl
ci0+ZGVzdHJveSgpOwotICAgICAgICBtX21hcmtlciA9IDA7Ci0gICAgfQotfQotCi12b2lkIFJl
bmRlckxpc3RJdGVtOjpkZXN0cm95KCkKLXsgICAgCi0gICAgaWYgKG1fbWFya2VyKSB7Ci0gICAg
ICAgIG1fbWFya2VyLT5kZXN0cm95KCk7Ci0gICAgICAgIG1fbWFya2VyID0gMDsKLSAgICB9Ci0g
ICAgUmVuZGVyQmxvY2s6OmRlc3Ryb3koKTsKLX0KLQotc3RhdGljIE5vZGUqIGVuY2xvc2luZ0xp
c3QoTm9kZSogbm9kZSkKLXsKLSAgICBmb3IgKE5vZGUqIG4gPSBub2RlLT5wYXJlbnROb2RlKCk7
IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKHVsVGFn
KSB8fCBuLT5oYXNUYWdOYW1lKG9sVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBuOwotICAgIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3VzTGlzdEl0ZW0oTm9k
ZSogbGlzdCwgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKCFsaXN0KQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBpdGVtLT5ub2RlKCktPnRyYXZlcnNlUHJl
dmlvdXNOb2RlKCk7IG4gIT0gbGlzdDsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gbi0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKG8g
JiYgby0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBvdGhlckxpc3QgPSBlbmNs
b3NpbmdMaXN0KG4pOwotICAgICAgICAgICAgLy8gVGhpcyBpdGVtIGlzIHBhcnQgb2Ygb3VyIGN1
cnJlbnQgbGlzdCwgc28gaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLgotICAgICAgICAgICAg
aWYgKGxpc3QgPT0gb3RoZXJMaXN0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxSZW5kZXJMaXN0SXRlbSo+KG8pOwotICAgICAgICAgICAgLy8gV2UgZm91bmQgb3Vyc2VsZiBp
bnNpZGUgYW5vdGhlciBsaXN0OyBsZXRzIHNraXAgdGhlIHJlc3Qgb2YgaXQuCi0gICAgICAgICAg
ICBpZiAob3RoZXJMaXN0KQotICAgICAgICAgICAgICAgIG4gPSBvdGhlckxpc3Q7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgUmVuZGVyTGlzdEl0ZW06OmNhbGNW
YWx1ZSgpCi17Ci0gICAgaWYgKHByZWRlZlZhbCAhPSAtMSkKLSAgICAgICAgbV92YWx1ZSA9IHBy
ZWRlZlZhbDsKLSAgICBlbHNlIHsKLSAgICAgICAgTm9kZSogbGlzdCA9IGVuY2xvc2luZ0xpc3Qo
bm9kZSgpKTsKLSAgICAgICAgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBwcmV2aW91c0xpc3RJdGVt
KGxpc3QsIHRoaXMpOwotICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IFRoaXMgcmVjdXJzZXMgdG8gYSBwb3NzaWJsZSBkZXB0aCBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBs
aXN0LgotICAgICAgICAgICAgLy8gVGhhdCdzIG5vdCBnb29kIC0tIHdlIG5lZWQgdG8gY2hhbmdl
IHRoaXMgdG8gYW4gaXRlcmF0aXZlIGFsZ29yaXRobS4KLSAgICAgICAgICAgIGlmIChpdGVtLT52
YWx1ZSgpID09IC0xKQotICAgICAgICAgICAgICAgIGl0ZW0tPmNhbGNWYWx1ZSgpOwotICAgICAg
ICAgICAgbV92YWx1ZSA9IGl0ZW0tPnZhbHVlKCkgKyAxOwotICAgICAgICB9IGVsc2UgaWYgKGxp
c3QgJiYgbGlzdC0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAgICAgICAgICBtX3ZhbHVlID0gc3Rh
dGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudCo+KGxpc3QpLT5zdGFydCgpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX3ZhbHVlID0gMTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGlzdEl0
ZW06OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBsYXN0Q2hpbGQoKSA9PSBtX21hcmtl
cjsKLX0KLQotc3RhdGljIFJlbmRlck9iamVjdCogZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goUmVu
ZGVyT2JqZWN0KiBjdXJyLCBSZW5kZXJPYmplY3QqIG1hcmtlcikKLXsKLSAgICBSZW5kZXJPYmpl
Y3QqIGZpcnN0Q2hpbGQgPSBjdXJyLT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKCFmaXJzdENoaWxk
KQotICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnJDaGlsZCA9IGZpcnN0Q2hpbGQ7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxkLT5u
ZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjdXJyQ2hpbGQgPT0gbWFya2VyKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNJ
bmxpbmUoKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyOwotICAgICAgICAKLSAgICAgICAgaWYg
KGN1cnJDaGlsZC0+aXNGbG9hdGluZygpIHx8IGN1cnJDaGlsZC0+aXNQb3NpdGlvbmVkKCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoY3VyckNoaWxk
LT5pc1RhYmxlKCkgfHwgIWN1cnJDaGlsZC0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VyckNoaWxkLT5zdHlsZSgpLT5odG1sSGFj
a3MoKSAmJiBjdXJyQ2hpbGQtPmVsZW1lbnQoKSAmJgotICAgICAgICAgICAgKGN1cnJDaGlsZC0+
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKHVsVGFnKXx8IGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5oYXNU
YWdOYW1lKG9sVGFnKSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBSZW5kZXJPYmplY3QqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChjdXJyQ2hp
bGQsIG1hcmtlcik7Ci0gICAgICAgIGlmIChsaW5lQm94KQotICAgICAgICAgICAgcmV0dXJuIGxp
bmVCb3g7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwotfQotCi12b2lkIFJlbmRlckxpc3RJ
dGVtOjpyZXNldFZhbHVlKCkKLXsKLSAgICBtX3ZhbHVlID0gLTE7Ci0gICAgaWYgKG1fbWFya2Vy
KQotICAgICAgICBtX21hcmtlci0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKLX0K
LQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTWFya2VyTG9jYXRpb24oKQotewotICAgIC8v
IFNhbml0eSBjaGVjayB0aGUgbG9jYXRpb24gb2Ygb3VyIG1hcmtlci4KLSAgICBpZiAobV9tYXJr
ZXIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBtYXJrZXJQYXIgPSBtX21hcmtlci0+cGFyZW50
KCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbGluZUJveFBhcmVudCA9IGdldFBhcmVudE9mRmly
c3RMaW5lQm94KHRoaXMsIG1fbWFya2VyKTsKLSAgICAgICAgaWYgKCFsaW5lQm94UGFyZW50KSB7
Ci0gICAgICAgICAgICAvLyBJZiB0aGUgbWFya2VyIGlzIGN1cnJlbnRseSBjb250YWluZWQgaW5z
aWRlIGFuIGFub255bW91cyBib3gsCi0gICAgICAgICAgICAvLyB0aGVuIHdlIGFyZSB0aGUgb25s
eSBpdGVtIGluIHRoYXQgYW5vbnltb3VzIGJveCAoc2luY2Ugbm8gbGluZSBib3gKLSAgICAgICAg
ICAgIC8vIHBhcmVudCB3YXMgZm91bmQpLiAgSXQncyBvayB0byBqdXN0IGxlYXZlIHRoZSBtYXJr
ZXIgd2hlcmUgaXQgaXMKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZS4KLSAgICAgICAgICAg
IGlmIChtYXJrZXJQYXIgJiYgbWFya2VyUGFyLT5pc0Fub255bW91c0Jsb2NrKCkpCi0gICAgICAg
ICAgICAgICAgbGluZUJveFBhcmVudCA9IG1hcmtlclBhcjsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsaW5lQm94UGFyZW50ID0gdGhpczsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKG1hcmtlclBhciAhPSBsaW5lQm94UGFyZW50IHx8ICFtX21hcmtlci0+bWlu
TWF4S25vd24oKSkgewotICAgICAgICAgICAgaWYgKG1hcmtlclBhcikKLSAgICAgICAgICAgICAg
ICBtYXJrZXJQYXItPnJlbW92ZUNoaWxkKG1fbWFya2VyKTsKLSAgICAgICAgICAgIGlmICghbGlu
ZUJveFBhcmVudCkKLSAgICAgICAgICAgICAgICBsaW5lQm94UGFyZW50ID0gdGhpczsKLSAgICAg
ICAgICAgIGxpbmVCb3hQYXJlbnQtPmFkZENoaWxkKG1fbWFya2VyLCBsaW5lQm94UGFyZW50LT5m
aXJzdENoaWxkKCkpOwotICAgICAgICAgICAgaWYgKCFtX21hcmtlci0+bWluTWF4S25vd24oKSkK
LSAgICAgICAgICAgICAgICBtX21hcmtlci0+Y2FsY01pbk1heFdpZHRoKCk7Ci0gICAgICAgICAg
ICByZWNhbGNNaW5NYXhXaWR0aHMoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5k
ZXJMaXN0SXRlbTo6Y2FsY01pbk1heFdpZHRoKCkKLXsKLSAgICAvLyBNYWtlIHN1cmUgb3VyIG1h
cmtlciBpcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi4KLSAgICB1cGRhdGVNYXJrZXJMb2NhdGlv
bigpOwotICAgIGlmICghbWluTWF4S25vd24oKSkKLSAgICAgICAgUmVuZGVyQmxvY2s6OmNhbGNN
aW5NYXhXaWR0aCgpOwotfQotCi12b2lkIFJlbmRlckxpc3RJdGVtOjpsYXlvdXQoKQotewotICAg
IEtIVE1MQXNzZXJ0KG5lZWRzTGF5b3V0KCkpOwotICAgIEtIVE1MQXNzZXJ0KG1pbk1heEtub3du
KCkpOwotICAgIAotICAgIHVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7ICAgIAotICAgIFJlbmRlckJs
b2NrOjpsYXlvdXQoKTsKLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFy
a2VyKCkKLXsKLSAgICBpZiAobV9tYXJrZXIgJiYgIW1fbWFya2VyLT5pc0luc2lkZSgpKSB7Ci0g
ICAgICAgIGludCBtYXJrZXJPbGRYID0gbV9tYXJrZXItPnhQb3MoKTsKLSAgICAgICAgaW50IHlP
ZmZzZXQgPSAwOwotICAgICAgICBpbnQgeE9mZnNldCA9IDA7Ci0gICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBvID0gbV9tYXJrZXItPnBhcmVudCgpOyBvICE9IHRoaXM7IG8gPSBvLT5wYXJlbnQo
KSkgewotICAgICAgICAgICAgeU9mZnNldCArPSBvLT55UG9zKCk7Ci0gICAgICAgICAgICB4T2Zm
c2V0ICs9IG8tPnhQb3MoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUm9vdElubGlu
ZUJveCogcm9vdCA9IG1fbWFya2VyLT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKLSAgICAg
ICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICAgICAgaW50IGxl
ZnRMaW5lT2Zmc2V0ID0gbGVmdFJlbE9mZnNldCh5T2Zmc2V0LCBsZWZ0T2Zmc2V0KHlPZmZzZXQp
KTsKLSAgICAgICAgICAgIGludCBtYXJrZXJYUG9zID0gbGVmdExpbmVPZmZzZXQgLSB4T2Zmc2V0
IC0gcGFkZGluZ0xlZnQoKSAtIGJvcmRlckxlZnQoKSArIG1fbWFya2VyLT5tYXJnaW5MZWZ0KCk7
Ci0gICAgICAgICAgICBtX21hcmtlci0+aW5saW5lQm94V3JhcHBlcigpLT5hZGp1c3RQb3NpdGlv
bihtYXJrZXJYUG9zIC0gbWFya2VyT2xkWCwgMCk7Ci0gICAgICAgICAgICBpZiAobWFya2VyWFBv
cyA8IHJvb3QtPmxlZnRPdmVyZmxvdygpKSB7Ci0gICAgICAgICAgICAgICAgcm9vdC0+c2V0SG9y
aXpvbnRhbE92ZXJmbG93UG9zaXRpb25zKG1hcmtlclhQb3MsIHJvb3QtPnJpZ2h0T3ZlcmZsb3co
KSk7Ci0gICAgICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQgPSBtaW4obWFya2VyWFBvcywgbV9v
dmVyZmxvd0xlZnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaW50IHJpZ2h0TGluZU9mZnNldCA9IHJpZ2h0UmVsT2Zmc2V0KHlPZmZzZXQsIHJpZ2h0T2Zm
c2V0KHlPZmZzZXQpKTsKLSAgICAgICAgICAgIGludCBtYXJrZXJYUG9zID0gcmlnaHRMaW5lT2Zm
c2V0IC0geE9mZnNldCArIHBhZGRpbmdSaWdodCgpICsgYm9yZGVyUmlnaHQoKSArIG1fbWFya2Vy
LT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICBtX21hcmtlci0+aW5saW5lQm94V3JhcHBlcigp
LT5hZGp1c3RQb3NpdGlvbihtYXJrZXJYUG9zIC0gbWFya2VyT2xkWCwgMCk7Ci0gICAgICAgICAg
ICBpZiAobWFya2VyWFBvcyArIG1fbWFya2VyLT53aWR0aCgpID4gcm9vdC0+cmlnaHRPdmVyZmxv
dygpKSB7Ci0gICAgICAgICAgICAgICAgcm9vdC0+c2V0SG9yaXpvbnRhbE92ZXJmbG93UG9zaXRp
b25zKHJvb3QtPmxlZnRPdmVyZmxvdygpLCBtYXJrZXJYUG9zICsgbV9tYXJrZXItPndpZHRoKCkp
OwotICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1heChtYXJrZXJYUG9zICsgbV9t
YXJrZXItPndpZHRoKCksIG1fb3ZlcmZsb3dMZWZ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBp
bnQgX3R4LCBpbnQgX3R5KQotewotICAgIGlmICghbV9oZWlnaHQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlbmRlckJsb2NrOjpwYWludChpLCBfdHgsIF90eSk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJl
bmRlckxpc3RNYXJrZXI6OlJlbmRlckxpc3RNYXJrZXIoRG9jdW1lbnQqIGRvY3VtZW50KQotICAg
IDogUmVuZGVyQm94KGRvY3VtZW50KSwgbV9saXN0SW1hZ2UoMCksIG1fc2VsZWN0aW9uU3RhdGUo
U2VsZWN0aW9uTm9uZSkKLXsKLSAgICAvLyBpbml0IFJlbmRlck9iamVjdCBhdHRyaWJ1dGVzCi0g
ICAgc2V0SW5saW5lKHRydWUpOyAgIC8vIG91ciBvYmplY3QgaXMgSW5saW5lCi0gICAgc2V0UmVw
bGFjZWQodHJ1ZSk7IC8vIHByZXRlbmQgdG8gYmUgcmVwbGFjZWQKLX0KLQotUmVuZGVyTGlzdE1h
cmtlcjo6flJlbmRlckxpc3RNYXJrZXIoKQotewotICAgIGlmIChtX2xpc3RJbWFnZSkKLSAgICAg
ICAgbV9saXN0SW1hZ2UtPmRlcmVmKHRoaXMpOwotfQotCi12b2lkIFJlbmRlckxpc3RNYXJrZXI6
OnNldFN0eWxlKFJlbmRlclN0eWxlICpzKQotewotICAgIGlmIChzICYmIHN0eWxlKCkgJiYgcy0+
bGlzdFN0eWxlUG9zaXRpb24oKSAhPSBzdHlsZSgpLT5saXN0U3R5bGVQb3NpdGlvbigpKQotICAg
ICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwotICAgIAotICAgIFJlbmRlckJv
eDo6c2V0U3R5bGUocyk7Ci0KLSAgICBpZiAoIG1fbGlzdEltYWdlICE9IHN0eWxlKCktPmxpc3RT
dHlsZUltYWdlKCkgKSB7Ci0gICAgICAgIGlmIChtX2xpc3RJbWFnZSkKLSAgICAgICAgICAgIG1f
bGlzdEltYWdlLT5kZXJlZih0aGlzKTsKLSAgICAgICAgbV9saXN0SW1hZ2UgPSBzdHlsZSgpLT5s
aXN0U3R5bGVJbWFnZSgpOwotICAgICAgICBpZiAobV9saXN0SW1hZ2UpCi0gICAgICAgICAgICBt
X2xpc3RJbWFnZS0+cmVmKHRoaXMpOwotICAgIH0KLX0KLQotSW5saW5lQm94KiBSZW5kZXJMaXN0
TWFya2VyOjpjcmVhdGVJbmxpbmVCb3goYm9vbCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sKQot
ewotICAgIEtIVE1MQXNzZXJ0KCFpc1Jvb3RMaW5lQm94KTsKLSAgICBMaXN0TWFya2VyQm94KiBi
b3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIExpc3RNYXJrZXJCb3godGhpcyk7Ci0gICAgbV9pbmxp
bmVCb3hXcmFwcGVyID0gYm94OwotICAgIHJldHVybiBib3g7Ci19Ci0KLXZvaWQgUmVuZGVyTGlz
dE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQotewotICAgIGlm
IChpLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJbnRSZWN0IG1hcmtlciA9IGdldFJlbGF0aXZlTWFya2VyUmVjdCgpOwotICAg
IG1hcmtlci5tb3ZlKF90eCwgX3R5KTsKLQotICAgIEludFJlY3QgYm94KF90eCArIG1feCwgX3R5
ICsgbV95LCBtX3dpZHRoLCBtX2hlaWdodCk7Ci0KLSAgICBpZiAoYm94LnkoKSA+IGkuci5ib3R0
b20oKSB8fCBib3gueSgpICsgYm94LmhlaWdodCgpIDwgaS5yLnkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkpIAotICAgICAgICBw
YWludEJveERlY29yYXRpb25zKGksIGJveC54KCksIGJveC55KCkpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0KiBwID0gaS5wOwotICAgIHAtPnNldEZvbnQoc3R5bGUoKS0+Zm9udCgpKTsKLQotICAg
IGlmIChkb2N1bWVudCgpLT5wcmludGluZygpKSB7Ci0gICAgICAgIGlmIChib3gueSgpIDwgaS5y
LnkoKSkKLSAgICAgICAgICAgIC8vIFRoaXMgaGFzIGJlZW4gcHJpbnRlZCBhbHJlYWR5IHdlIHN1
cHBvc2UuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBSZW5kZXJDYW52
YXMqIGMgPSBjYW52YXMoKTsKLSAgICAgICAgaWYgKGJveC55KCkgKyBib3guaGVpZ2h0KCkgKyBw
YWRkaW5nQm90dG9tKCkgKyBib3JkZXJCb3R0b20oKSA+PSBjLT5wcmludFJlY3QoKS5ib3R0b20o
KSkgewotICAgICAgICAgICAgaWYgKGJveC55KCkgPCBjLT50cnVuY2F0ZWRBdCgpKQotICAgICAg
ICAgICAgICAgIGMtPnNldEJlc3RUcnVuY2F0ZWRBdChib3gueSgpLCB0aGlzKTsKLSAgICAgICAg
ICAgIC8vIExldCdzIHByaW50IHRoaXMgb24gdGhlIG5leHQgcGFnZS4KLSAgICAgICAgICAgIHJl
dHVybjsgCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9saXN0SW1hZ2UgJiYgIW1fbGlz
dEltYWdlLT5pc0Vycm9ySW1hZ2UoKSkgewotICAgICAgICBwLT5kcmF3SW1hZ2UobV9saXN0SW1h
Z2UtPmltYWdlKCksIG1hcmtlci5sb2NhdGlvbigpKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkKLSAgICAgICAgICAgIHAtPmZpbGxSZWN0KHNlbGVjdGlv
blJlY3QoKSwgc2VsZWN0aW9uQ29sb3IocCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0j
aWZkZWYgQk9YX0RFQlVHCi0gICAgcC0+c2V0UGVuKCByZWQgKTsKLSAgICBwLT5kcmF3UmVjdChi
b3gueCgpLCBib3gueSgpLCBib3gud2lkdGgoKSwgYm94LmhlaWdodCgpKTsKLSNlbmRpZgotCi0g
ICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkKLSAgICAgICAgcC0+Zmls
bFJlY3Qoc2VsZWN0aW9uUmVjdCgpLCBzZWxlY3Rpb25Db2xvcihwKSk7Ci0KLSAgICBjb25zdCBD
b2xvciBjb2xvciggc3R5bGUoKS0+Y29sb3IoKSApOwotICAgIHAtPnNldFBlbiggY29sb3IgKTsK
LQotICAgIHN3aXRjaChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKLSAgICBjYXNlIERJU0M6
Ci0gICAgICAgIHAtPnNldEZpbGxDb2xvcihjb2xvci5yZ2IoKSk7Ci0gICAgICAgIHAtPmRyYXdF
bGxpcHNlKG1hcmtlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENJUkNMRToKLSAgICAg
ICAgcC0+c2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7Ci0gICAgICAgIHAtPmRyYXdF
bGxpcHNlKG1hcmtlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFNRVUFSRToKLSAgICAg
ICAgcC0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsKLSAgICAgICAgcC0+ZHJhd1JlY3QobWFy
a2VyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTE5PTkU6Ci0gICAgICAgIHJldHVybjsK
LSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIW1faXRlbS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgICAgICAgICBUZXh0
UnVuIHRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1faXRlbS51bmljb2Rl
KCkpLCBtX2l0ZW0ubGVuZ3RoKCkpOwotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUikgewotICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgodGV4
dFJ1bik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgbWFya2VyLmxvY2F0
aW9uKCkpOwotICAgICAgICAgICAgICAgIFVDaGFyIHBlcmlvZFNwYWNlWzJdID0geyAnLicsICcg
JyB9OwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KFRleHRSdW4ocGVyaW9kU3BhY2UsIDIp
LCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgc3BhY2VQZXJpb2RbMl0gPSB7ICcgJywgJy4n
IH07Ci0gICAgICAgICAgICAgICAgVGV4dFJ1biBzcGFjZVBlcmlvZFJ1bihzcGFjZVBlcmlvZCwg
Mik7Ci0gICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53aWR0aChzcGFjZVBlcmlvZFJ1
bik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoc3BhY2VQZXJpb2RSdW4sIG1hcmtlci5s
b2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBtYXJrZXIu
bG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpsYXlvdXQoKQotewotICAgIEtI
VE1MQXNzZXJ0KCBuZWVkc0xheW91dCgpICk7Ci0gICAgLy8gIyMjIEtIVE1MQXNzZXJ0KCBtaW5N
YXhLbm93bigpICk7Ci0gICAgaWYgKCAhbWluTWF4S25vd24oKSApCi0gICAgICAgIGNhbGNNaW5N
YXhXaWR0aCgpOwotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKLX0KLQotdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjppbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UgKm8pCi17Ci0gICAgaWYgKG8gIT0g
bV9saXN0SW1hZ2UpIHsKLSAgICAgICAgUmVuZGVyQm94OjppbWFnZUNoYW5nZWQobyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV93aWR0aCAhPSBtX2xpc3RJbWFnZS0+aW1h
Z2VTaXplKCkud2lkdGgoKSB8fCBtX2hlaWdodCAhPSBtX2xpc3RJbWFnZS0+aW1hZ2VTaXplKCku
aGVpZ2h0KCkpCi0gICAgICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXBhaW50KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y2Fs
Y01pbk1heFdpZHRoKCkKLXsKLSAgICBLSFRNTEFzc2VydCggIW1pbk1heEtub3duKCkgKTsKLQot
ICAgIGlmIChtX2xpc3RJbWFnZSkgewotICAgICAgICBtX3dpZHRoID0gbV9saXN0SW1hZ2UtPmlt
YWdlKCktPndpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gbV9saXN0SW1hZ2UtPmltYWdlKCkt
PmhlaWdodCgpOwotICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IG1fd2lkdGg7Ci0g
ICAgICAgIHNldE1pbk1heEtub3duKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAobV9saXN0SXRlbS0+dmFsdWUoKSA8IDApIC8vIG5vdCB5ZXQgY2FsY3VsYXRlZAotICAgICAg
ICBtX2xpc3RJdGVtLT5jYWxjVmFsdWUoKTsKLQotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHls
ZSgpLT5mb250KCk7Ci0gICAgbV9oZWlnaHQgPSBmb250LmhlaWdodCgpOwotCi0gICAgc3dpdGNo
KHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkKLSAgICB7Ci0gICAgY2FzZSBESVNDOgotICAgIGNh
c2UgQ0lSQ0xFOgotICAgIGNhc2UgU1FVQVJFOgotICAgICAgICBtX3dpZHRoID0gKGZvbnQuYXNj
ZW50KCkgKiAyIC8gMyArIDEpIC8gMiArIDI7Ci0gICAgICAgIGdvdG8gZW5kOwotICAgIGNhc2Ug
QVJNRU5JQU46Ci0gICAgY2FzZSBHRU9SR0lBTjoKLSAgICBjYXNlIENKS19JREVPR1JBUEhJQzoK
LSAgICBjYXNlIEhJUkFHQU5BOgotICAgIGNhc2UgS0FUQUtBTkE6Ci0gICAgY2FzZSBISVJBR0FO
QV9JUk9IQToKLSAgICBjYXNlIEtBVEFLQU5BX0lST0hBOgotICAgIGNhc2UgREVDSU1BTF9MRUFE
SU5HX1pFUk86Ci0gICAgICAgIC8vICMjIyB1bnN1cHBvcnRlZCwgd2UgdXNlIGRlY2ltYWwgaW5z
dGVhZAotICAgIGNhc2UgTERFQ0lNQUw6Ci0gICAgICAgIG1faXRlbS5zcHJpbnRmKCAiJWQiLCBt
X2xpc3RJdGVtLT52YWx1ZSgpICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTE9XRVJfUk9N
QU46Ci0gICAgICAgIG1faXRlbSA9IHRvUm9tYW4oIG1fbGlzdEl0ZW0tPnZhbHVlKCksIGZhbHNl
ICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBQRVJfUk9NQU46Ci0gICAgICAgIG1faXRl
bSA9IHRvUm9tYW4oIG1fbGlzdEl0ZW0tPnZhbHVlKCksIHRydWUgKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBMT1dFUl9HUkVFSzoKLSAgICAgewotICAgICAgICBpbnQgbnVtYmVyID0gbV9s
aXN0SXRlbS0+dmFsdWUoKSAtIDE7Ci0gICAgICAgIGludCBsID0gKG51bWJlciAlIDI0KTsKLQot
ICAgICAgICBpZiAobD4xNikge2wrKzt9IC8vIFNraXAgR1JFRUsgU01BTEwgTEVUVEVSIEZJTkFM
IFNJR01BCi0KLSAgICAgICAgbV9pdGVtID0gUUNoYXIoOTQ1ICsgbCk7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgKG51bWJlciAvIDI0KTsgaSsrKSB7Ci0gICAgICAgICAgICBtX2l0ZW0g
Kz0gIiciOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICB9Ci0gICAgY2FzZSBIRUJS
RVc6Ci0gICAgICAgIG1faXRlbSA9IHRvSGVicmV3KCBtX2xpc3RJdGVtLT52YWx1ZSgpICk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTE9XRVJfQUxQSEE6Ci0gICAgY2FzZSBMT1dFUl9MQVRJ
TjoKLSAgICAgICAgbV9pdGVtID0gdG9MZXR0ZXJTdHJpbmcobV9saXN0SXRlbS0+dmFsdWUoKSwg
J2EnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUFBFUl9BTFBIQToKLSAgICBjYXNlIFVQ
UEVSX0xBVElOOgotICAgICAgICBtX2l0ZW0gPSB0b0xldHRlclN0cmluZyhtX2xpc3RJdGVtLT52
YWx1ZSgpLCAnQScpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExOT05FOgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGludCBpdGVtV2lkdGggPSBmb250LndpZHRo
KFRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1faXRlbS51bmljb2RlKCkp
LCBtX2l0ZW0ubGVuZ3RoKCkpKTsKLSAgICAgICAgVUNoYXIgcGVyaW9kU3BhY2VbMl0gPSB7ICcu
JywgJyAnIH07Ci0gICAgICAgIGludCBwZXJpb2RTcGFjZVdpZHRoID0gZm9udC53aWR0aChUZXh0
UnVuKHBlcmlvZFNwYWNlLCAyKSk7Ci0gICAgICAgIG1fd2lkdGggPSBpdGVtV2lkdGggKyBwZXJp
b2RTcGFjZVdpZHRoOwotICAgIH0KLQotZW5kOgotCi0gICAgbV9taW5XaWR0aCA9IG1fd2lkdGg7
Ci0gICAgbV9tYXhXaWR0aCA9IG1fd2lkdGg7Ci0KLSAgICBzZXRNaW5NYXhLbm93bigpOwotfQot
Ci12b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNhbGNXaWR0aCgpCi17Ci0gICAgLy8gbV93aWR0aCBp
cyBzZXQgaW4gY2FsY01pbk1heFdpZHRoKCkKLSAgICBib29sIGhhdmVJbWFnZSA9IG1fbGlzdElt
YWdlICYmICFtX2xpc3RJbWFnZS0+aXNFcnJvckltYWdlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCktPmZvbnQoKTsKLQotICAgIGlmIChpc0luc2lkZSgpKSB7Ci0gICAgICAgIGlm
IChoYXZlSW1hZ2UpIHsKLSAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFIpIHsKLSAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOwotICAgICAgICAgICAgICAg
IG1fbWFyZ2luUmlnaHQgPSBjTWFya2VyUGFkZGluZzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gY01hcmtlclBhZGRpbmc7Ci0gICAgICAgICAg
ICAgICAgbV9tYXJnaW5SaWdodCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBz
d2l0Y2ggKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBESVND
OgotICAgICAgICAgICAgY2FzZSBDSVJDTEU6Ci0gICAgICAgICAgICBjYXNlIFNRVUFSRToKLSAg
ICAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICBtX21h
cmdpblJpZ2h0ID0gZm9udC5hc2NlbnQoKSAtIG1fd2lkdGggKyAxOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IGZvbnQuYXNjZW50
KCkgLSBtX3dpZHRoICsgMTsKLSAgICAgICAgICAgICAgICAgICAgbV9tYXJnaW5SaWdodCA9IC0x
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gMDsKLSAgICAgICAgICAg
ICAgICBtX21hcmdpblJpZ2h0ID0gMDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKLSAgICAgICAgICAgIGlmIChoYXZl
SW1hZ2UpCi0gICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gLW1fd2lkdGggLSBjTWFya2Vy
UGFkZGluZzsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGludCBvZmZzZXQg
PSBmb250LmFzY2VudCgpICogMiAvIDM7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzdHlsZSgp
LT5saXN0U3R5bGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBESVNDOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIENJUkNMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBT
UVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAtb2Zmc2V0IC0g
Y01hcmtlclBhZGRpbmcgLSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgTE5PTkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21h
cmdpbkxlZnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQg
PSBtX2l0ZW0uaXNFbXB0eSgpID8gMCA6IC1tX3dpZHRoIC0gb2Zmc2V0IC8gMjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoaGF2ZUltYWdlKQotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IGNNYXJrZXJQYWRk
aW5nOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IGZv
bnQuYXNjZW50KCkgKiAyIC8gMzsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlKCktPmxp
c3RTdHlsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIERJU0M6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgQ0lSQ0xFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNRVUFS
RToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG9mZnNldCArIGNNYXJr
ZXJQYWRkaW5nICsgMSAtIG1fd2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBMTk9ORToKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fbWFyZ2luTGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFyZ2lu
TGVmdCA9IG1faXRlbS5pc0VtcHR5KCkgPyAwIDogb2Zmc2V0IC8gMjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9tYXJnaW5SaWdodCA9IC1t
X21hcmdpbkxlZnQgLSBtX3dpZHRoOwotICAgIH0KLX0KLQotc2hvcnQgUmVuZGVyTGlzdE1hcmtl
cjo6bGluZUhlaWdodChib29sLCBib29sKSBjb25zdAotewotICAgIGlmICghbV9saXN0SW1hZ2Up
Ci0gICAgICAgIHJldHVybiBtX2xpc3RJdGVtLT5saW5lSGVpZ2h0KGZhbHNlLCB0cnVlKTsKLSAg
ICByZXR1cm4gaGVpZ2h0KCk7Ci19Ci0KLXNob3J0IFJlbmRlckxpc3RNYXJrZXI6OmJhc2VsaW5l
UG9zaXRpb24oYm9vbCwgYm9vbCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbGlzdEltYWdlKSB7Ci0g
ICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgICAgIHJldHVy
biBmb250LmFzY2VudCgpICsgKGxpbmVIZWlnaHQoZmFsc2UpIC0gZm9udC5oZWlnaHQoKSkvMjsK
LSAgICB9Ci0gICAgcmV0dXJuIGhlaWdodCgpOwotfQotCi1ib29sIFJlbmRlckxpc3RNYXJrZXI6
OmlzSW5zaWRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9saXN0SXRlbS0+bm90SW5MaXN0KCkg
fHwgc3R5bGUoKS0+bGlzdFN0eWxlUG9zaXRpb24oKSA9PSBJTlNJREU7Ci19Ci0KLUludFJlY3Qg
UmVuZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXJrZXJSZWN0KCkKLXsKLSAgICBpZiAobV9s
aXN0SW1hZ2UgJiYgIW1fbGlzdEltYWdlLT5pc0Vycm9ySW1hZ2UoKSkKLSAgICAgICAgcmV0dXJu
IEludFJlY3QobV94LCBtX3ksICBtX2xpc3RJbWFnZS0+aW1hZ2VTaXplKCkud2lkdGgoKSwgbV9s
aXN0SW1hZ2UtPmltYWdlU2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBzdHlsZSgpLT5mb250KCk7Ci0gICAgaW50IGFzY2VudCA9IGZvbnQuYXNjZW50KCk7Ci0gICAg
Ci0gICAgc3dpdGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBE
SVNDOgotICAgICAgICBjYXNlIENJUkNMRToKLSAgICAgICAgY2FzZSBTUVVBUkU6IHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlc2UgcGFydGljdWxhciByb3VuZGluZyBydWxlcyBuZWNl
c3Nhcnk/Ci0gICAgICAgICAgICBpbnQgYnVsbGV0V2lkdGggPSAoYXNjZW50ICogMiAvIDMgKyAx
KSAvIDI7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdChtX3ggKyAxLCBtX3kgKyAzICogKGFz
Y2VudCAtIGFzY2VudCAqIDIgLyAzKSAvIDIsIGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBMTk9ORToKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0gICAgICAgIGNhc2UgQVJNRU5JQU46Ci0gICAgICAgIGNhc2UgQ0pLX0lERU9HUkFQSElD
OgotICAgICAgICBjYXNlIERFQ0lNQUxfTEVBRElOR19aRVJPOgotICAgICAgICBjYXNlIEdFT1JH
SUFOOgotICAgICAgICBjYXNlIEhFQlJFVzoKLSAgICAgICAgY2FzZSBISVJBR0FOQToKLSAgICAg
ICAgY2FzZSBISVJBR0FOQV9JUk9IQToKLSAgICAgICAgY2FzZSBLQVRBS0FOQToKLSAgICAgICAg
Y2FzZSBLQVRBS0FOQV9JUk9IQToKLSAgICAgICAgY2FzZSBMREVDSU1BTDoKLSAgICAgICAgY2Fz
ZSBMT1dFUl9BTFBIQToKLSAgICAgICAgY2FzZSBMT1dFUl9HUkVFSzoKLSAgICAgICAgY2FzZSBM
T1dFUl9MQVRJTjoKLSAgICAgICAgY2FzZSBMT1dFUl9ST01BTjoKLSAgICAgICAgY2FzZSBVUFBF
Ul9BTFBIQToKLSAgICAgICAgY2FzZSBVUFBFUl9MQVRJTjoKLSAgICAgICAgY2FzZSBVUFBFUl9S
T01BTjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChtX2l0ZW0uaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaW50IGl0ZW1XaWR0aCA9IGZv
bnQud2lkdGgoVGV4dFJ1bihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obV9pdGVtLnVu
aWNvZGUoKSksIG1faXRlbS5sZW5ndGgoKSkpOwotICAgIFVDaGFyIHBlcmlvZFNwYWNlWzJdID0g
eyAnLicsICcgJyB9OwotICAgIGludCBwZXJpb2RTcGFjZVdpZHRoID0gZm9udC53aWR0aChUZXh0
UnVuKHBlcmlvZFNwYWNlLCAyKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobV94LCBtX3kgKyBhc2Nl
bnQsIGl0ZW1XaWR0aCArIHBlcmlvZFNwYWNlV2lkdGgsIGZvbnQuaGVpZ2h0KCkpOwotfQotCi12
b2lkIFJlbmRlckxpc3RNYXJrZXI6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0
YXRlKQotewotICAgIG1fc2VsZWN0aW9uU3RhdGUgPSBzdGF0ZTsKLSAgICBSb290SW5saW5lQm94
KiByb290ID0gaW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7Ci0gICAgaWYgKHJvb3QpCi0gICAg
ICAgIHJvb3QtPnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3RhdGUgIT0gU2VsZWN0aW9uTm9uZSk7
Ci0gICAgY29udGFpbmluZ0Jsb2NrKCktPnNldFNlbGVjdGlvblN0YXRlKHN0YXRlKTsKLX0KLQot
SW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25SZWN0KCkKLXsKLSAgICBpZiAoc2Vs
ZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQotICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwotCi0gICAgaW50IGFic3gsIGFic3k7Ci0gICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmlu
Z0Jsb2NrKCk7Ci0gICAgY2ItPmFic29sdXRlUG9zaXRpb24oYWJzeCwgYWJzeSk7Ci0gICAgaWYg
KGNiLT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgY2ItPmxheWVyKCktPnN1YnRyYWN0U2Ny
b2xsT2Zmc2V0KGFic3gsIGFic3kpOwotCi0gICAgUm9vdElubGluZUJveCogcm9vdCA9IGlubGlu
ZUJveFdyYXBwZXIoKS0+cm9vdCgpOwotICAgIHJldHVybiBJbnRSZWN0KGFic3ggKyB4UG9zKCks
IGFic3kgKyByb290LT5zZWxlY3Rpb25Ub3AoKSwgd2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVp
Z2h0KCkpOwotfQotCi1Db2xvciBSZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25Db2xvcihHcmFw
aGljc0NvbnRleHQqIHApIGNvbnN0Ci17Ci0gICAgQ29sb3IgY29sb3IgPSBSZW5kZXJCb3g6OnNl
bGVjdGlvbkNvbG9yKHApOwotICAgIGlmICghbV9saXN0SW1hZ2UgfHwgbV9saXN0SW1hZ2UtPmlz
RXJyb3JJbWFnZSgpKQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgLy8gTGltaXQgdGhlIG9w
YWNpdHkgc28gdGhhdCBubyB1c2VyLXNwZWNpZmllZCBzZWxlY3Rpb24gY29sb3IgY2FuIG9ic2N1
cmUgc2VsZWN0ZWQgaW1hZ2VzLgotICAgIGlmIChjb2xvci5hbHBoYSgpID4gc2VsZWN0aW9uQ29s
b3JJbWFnZU92ZXJsYXlBbHBoYSkKLSAgICAgICAgY29sb3IgPSBDb2xvcihjb2xvci5yZWQoKSwg
Y29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCBzZWxlY3Rpb25Db2xvckltYWdlT3ZlcmxheUFs
cGhhKTsKLSAgICByZXR1cm4gY29sb3I7Ci19Ci0KLX0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAJKHJldmlzaW9uIDE0MzgyKQorKysgcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiwyMiArMjIsMjAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgogICoKICAqLwotCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicmVuZGVy
X2xpc3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAKICNpbmNsdWRlICJDYWNo
ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiTGlzdE1hcmtlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlckNhbnZh
cy5oIgotI2luY2x1ZGUgImh0bWxfbGlzdGltcGwuaCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0SXRl
bS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KIGNvbnN0IGludCBjTWFya2VyUGFkZGluZyA9IDc7
CiAKIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHRvUm9tYW4oaW50IG51bWJlciwgYm9vbCB1cHBl
cikKQEAgLTExMCwyMjkgKzEwOCwxMCBAQAogICAgIHJldHVybiBsZXR0ZXI7CiB9CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotUmVuZGVyTGlzdEl0ZW06OlJlbmRlckxpc3RJdGVtKFdlYkNvcmU6
Ok5vZGUqIG5vZGUpCi0gICAgOiBSZW5kZXJCbG9jayhub2RlKSwgcHJlZGVmVmFsKC0xKSwgbV9t
YXJrZXIoMCksIF9ub3RJbkxpc3QoZmFsc2UpLCBtX3ZhbHVlKC0xKQotewotICAgIC8vIGluaXQg
UmVuZGVyT2JqZWN0IGF0dHJpYnV0ZXMKLSAgICBzZXRJbmxpbmUoZmFsc2UpOyAvLyBvdXIgb2Jq
ZWN0IGlzIG5vdCBJbmxpbmUKLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6c2V0U3R5bGUoUmVu
ZGVyU3R5bGUgKl9zdHlsZSkKLXsKLSAgICBSZW5kZXJCbG9jazo6c2V0U3R5bGUoX3N0eWxlKTsK
LQotICAgIGlmIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkgIT0gTE5PTkUgfHwKLSAgICAgICAg
KHN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkgJiYgIXN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkt
PmlzRXJyb3JJbWFnZSgpKSkgewotICAgICAgICBSZW5kZXJTdHlsZSAqbmV3U3R5bGUgPSBuZXcg
KHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7Ci0gICAgICAgIG5ld1N0eWxlLT5yZWYoKTsK
LSAgICAgICAgLy8gVGhlIG1hcmtlciBhbHdheXMgaW5oZXJpdHMgZnJvbSB0aGUgbGlzdCBpdGVt
LCByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IG1pZ2h0IGVuZAotICAgICAgICAvLyB1cCAoZS5nLiwg
aW4gc29tZSBkZWVwbHkgbmVzdGVkIGxpbmUgYm94KS4gIFNlZSBDU1MzIHNwZWMuCi0gICAgICAg
IG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsgCi0gICAgICAgIGlmICghbV9tYXJrZXIp
IHsKLSAgICAgICAgICAgIG1fbWFya2VyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJMaXN0
TWFya2VyKGRvY3VtZW50KCkpOwotICAgICAgICAgICAgbV9tYXJrZXItPnNldFN0eWxlKG5ld1N0
eWxlKTsKLSAgICAgICAgICAgIG1fbWFya2VyLT5zZXRMaXN0SXRlbSh0aGlzKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtX21hcmtlci0+c2V0U3R5bGUobmV3U3R5bGUpOwotICAgICAg
ICBuZXdTdHlsZS0+ZGVyZWYocmVuZGVyQXJlbmEoKSk7Ci0gICAgfSBlbHNlIGlmIChtX21hcmtl
cikgewotICAgICAgICBtX21hcmtlci0+ZGVzdHJveSgpOwotICAgICAgICBtX21hcmtlciA9IDA7
Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxpc3RJdGVtOjpkZXN0cm95KCkKLXsgICAgCi0gICAg
aWYgKG1fbWFya2VyKSB7Ci0gICAgICAgIG1fbWFya2VyLT5kZXN0cm95KCk7Ci0gICAgICAgIG1f
bWFya2VyID0gMDsKLSAgICB9Ci0gICAgUmVuZGVyQmxvY2s6OmRlc3Ryb3koKTsKLX0KLQotc3Rh
dGljIE5vZGUqIGVuY2xvc2luZ0xpc3QoTm9kZSogbm9kZSkKLXsKLSAgICBmb3IgKE5vZGUqIG4g
PSBub2RlLT5wYXJlbnROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGlm
IChuLT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBuLT5oYXNUYWdOYW1lKG9sVGFnKSkKLSAgICAgICAg
ICAgIHJldHVybiBuOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgUmVuZGVyTGlzdEl0ZW0q
IHByZXZpb3VzTGlzdEl0ZW0oTm9kZSogbGlzdCwgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCi17Ci0g
ICAgaWYgKCFsaXN0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBpdGVt
LT5ub2RlKCktPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7IG4gIT0gbGlzdDsgbiA9IG4tPnRyYXZl
cnNlUHJldmlvdXNOb2RlKCkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gbi0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgaWYgKG8gJiYgby0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgICAgICBO
b2RlKiBvdGhlckxpc3QgPSBlbmNsb3NpbmdMaXN0KG4pOwotICAgICAgICAgICAgLy8gVGhpcyBp
dGVtIGlzIHBhcnQgb2Ygb3VyIGN1cnJlbnQgbGlzdCwgc28gaXQncyB3aGF0IHdlJ3JlIGxvb2tp
bmcgZm9yLgotICAgICAgICAgICAgaWYgKGxpc3QgPT0gb3RoZXJMaXN0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KG8pOwotICAgICAgICAgICAg
Ly8gV2UgZm91bmQgb3Vyc2VsZiBpbnNpZGUgYW5vdGhlciBsaXN0OyBsZXRzIHNraXAgdGhlIHJl
c3Qgb2YgaXQuCi0gICAgICAgICAgICBpZiAob3RoZXJMaXN0KQotICAgICAgICAgICAgICAgIG4g
PSBvdGhlckxpc3Q7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
UmVuZGVyTGlzdEl0ZW06OmNhbGNWYWx1ZSgpCi17Ci0gICAgaWYgKHByZWRlZlZhbCAhPSAtMSkK
LSAgICAgICAgbV92YWx1ZSA9IHByZWRlZlZhbDsKLSAgICBlbHNlIHsKLSAgICAgICAgTm9kZSog
bGlzdCA9IGVuY2xvc2luZ0xpc3Qobm9kZSgpKTsKLSAgICAgICAgUmVuZGVyTGlzdEl0ZW0qIGl0
ZW0gPSBwcmV2aW91c0xpc3RJdGVtKGxpc3QsIHRoaXMpOwotICAgICAgICBpZiAoaXRlbSkgewot
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgcmVjdXJzZXMgdG8gYSBwb3NzaWJsZSBkZXB0aCBv
ZiB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0LgotICAgICAgICAgICAgLy8gVGhhdCdzIG5vdCBnb29k
IC0tIHdlIG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gYW4gaXRlcmF0aXZlIGFsZ29yaXRobS4KLSAg
ICAgICAgICAgIGlmIChpdGVtLT52YWx1ZSgpID09IC0xKQotICAgICAgICAgICAgICAgIGl0ZW0t
PmNhbGNWYWx1ZSgpOwotICAgICAgICAgICAgbV92YWx1ZSA9IGl0ZW0tPnZhbHVlKCkgKyAxOwot
ICAgICAgICB9IGVsc2UgaWYgKGxpc3QgJiYgbGlzdC0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAg
ICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudCo+KGxpc3QpLT5z
dGFydCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZhbHVlID0gMTsKLSAgICB9Ci19
Ci0KLWJvb2wgUmVuZGVyTGlzdEl0ZW06OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBs
YXN0Q2hpbGQoKSA9PSBtX21hcmtlcjsKLX0KLQotc3RhdGljIFJlbmRlck9iamVjdCogZ2V0UGFy
ZW50T2ZGaXJzdExpbmVCb3goUmVuZGVyT2JqZWN0KiBjdXJyLCBSZW5kZXJPYmplY3QqIG1hcmtl
cikKLXsKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBjdXJyLT5maXJzdENoaWxkKCk7
Ci0gICAgaWYgKCFmaXJzdENoaWxkKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCi0gICAg
Zm9yIChSZW5kZXJPYmplY3QqIGN1cnJDaGlsZCA9IGZpcnN0Q2hpbGQ7IGN1cnJDaGlsZDsgY3Vy
ckNoaWxkID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjdXJyQ2hp
bGQgPT0gbWFya2VyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgaWYgKGN1cnJDaGlsZC0+aXNJbmxpbmUoKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNGbG9hdGluZygpIHx8IGN1cnJDaGls
ZC0+aXNQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAot
ICAgICAgICBpZiAoY3VyckNoaWxkLT5pc1RhYmxlKCkgfHwgIWN1cnJDaGlsZC0+aXNSZW5kZXJC
bG9jaygpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VyckNo
aWxkLT5zdHlsZSgpLT5odG1sSGFja3MoKSAmJiBjdXJyQ2hpbGQtPmVsZW1lbnQoKSAmJgotICAg
ICAgICAgICAgKGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKHVsVGFnKXx8IGN1cnJD
aGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKG9sVGFnKSkpCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIGxpbmVCb3ggPSBnZXRQYXJlbnRP
ZkZpcnN0TGluZUJveChjdXJyQ2hpbGQsIG1hcmtlcik7Ci0gICAgICAgIGlmIChsaW5lQm94KQot
ICAgICAgICAgICAgcmV0dXJuIGxpbmVCb3g7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwot
fQotCi12b2lkIFJlbmRlckxpc3RJdGVtOjpyZXNldFZhbHVlKCkKLXsKLSAgICBtX3ZhbHVlID0g
LTE7Ci0gICAgaWYgKG1fbWFya2VyKQotICAgICAgICBtX21hcmtlci0+c2V0TmVlZHNMYXlvdXRB
bmRNaW5NYXhSZWNhbGMoKTsKLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTWFya2Vy
TG9jYXRpb24oKQotewotICAgIC8vIFNhbml0eSBjaGVjayB0aGUgbG9jYXRpb24gb2Ygb3VyIG1h
cmtlci4KLSAgICBpZiAobV9tYXJrZXIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBtYXJrZXJQ
YXIgPSBtX21hcmtlci0+cGFyZW50KCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbGluZUJveFBh
cmVudCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KHRoaXMsIG1fbWFya2VyKTsKLSAgICAgICAg
aWYgKCFsaW5lQm94UGFyZW50KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgbWFya2VyIGlzIGN1
cnJlbnRseSBjb250YWluZWQgaW5zaWRlIGFuIGFub255bW91cyBib3gsCi0gICAgICAgICAgICAv
LyB0aGVuIHdlIGFyZSB0aGUgb25seSBpdGVtIGluIHRoYXQgYW5vbnltb3VzIGJveCAoc2luY2Ug
bm8gbGluZSBib3gKLSAgICAgICAgICAgIC8vIHBhcmVudCB3YXMgZm91bmQpLiAgSXQncyBvayB0
byBqdXN0IGxlYXZlIHRoZSBtYXJrZXIgd2hlcmUgaXQgaXMKLSAgICAgICAgICAgIC8vIGluIHRo
aXMgY2FzZS4KLSAgICAgICAgICAgIGlmIChtYXJrZXJQYXIgJiYgbWFya2VyUGFyLT5pc0Fub255
bW91c0Jsb2NrKCkpCi0gICAgICAgICAgICAgICAgbGluZUJveFBhcmVudCA9IG1hcmtlclBhcjsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5lQm94UGFyZW50ID0gdGhpczsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1hcmtlclBhciAhPSBsaW5lQm94UGFy
ZW50IHx8ICFtX21hcmtlci0+bWluTWF4S25vd24oKSkgewotICAgICAgICAgICAgaWYgKG1hcmtl
clBhcikKLSAgICAgICAgICAgICAgICBtYXJrZXJQYXItPnJlbW92ZUNoaWxkKG1fbWFya2VyKTsK
LSAgICAgICAgICAgIGlmICghbGluZUJveFBhcmVudCkKLSAgICAgICAgICAgICAgICBsaW5lQm94
UGFyZW50ID0gdGhpczsKLSAgICAgICAgICAgIGxpbmVCb3hQYXJlbnQtPmFkZENoaWxkKG1fbWFy
a2VyLCBsaW5lQm94UGFyZW50LT5maXJzdENoaWxkKCkpOwotICAgICAgICAgICAgaWYgKCFtX21h
cmtlci0+bWluTWF4S25vd24oKSkKLSAgICAgICAgICAgICAgICBtX21hcmtlci0+Y2FsY01pbk1h
eFdpZHRoKCk7Ci0gICAgICAgICAgICByZWNhbGNNaW5NYXhXaWR0aHMoKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6Y2FsY01pbk1heFdpZHRoKCkKLXsKLSAg
ICAvLyBNYWtlIHN1cmUgb3VyIG1hcmtlciBpcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi4KLSAg
ICB1cGRhdGVNYXJrZXJMb2NhdGlvbigpOwotICAgIGlmICghbWluTWF4S25vd24oKSkKLSAgICAg
ICAgUmVuZGVyQmxvY2s6OmNhbGNNaW5NYXhXaWR0aCgpOwotfQotCi12b2lkIFJlbmRlckxpc3RJ
dGVtOjpsYXlvdXQoKQotewotICAgIEtIVE1MQXNzZXJ0KG5lZWRzTGF5b3V0KCkpOwotICAgIEtI
VE1MQXNzZXJ0KG1pbk1heEtub3duKCkpOwotICAgIAotICAgIHVwZGF0ZU1hcmtlckxvY2F0aW9u
KCk7ICAgIAotICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKLX0KLQotdm9pZCBSZW5kZXJMaXN0
SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKCkKLXsKLSAgICBpZiAobV9tYXJrZXIgJiYgIW1fbWFy
a2VyLT5pc0luc2lkZSgpKSB7Ci0gICAgICAgIGludCBtYXJrZXJPbGRYID0gbV9tYXJrZXItPnhQ
b3MoKTsKLSAgICAgICAgaW50IHlPZmZzZXQgPSAwOwotICAgICAgICBpbnQgeE9mZnNldCA9IDA7
Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvID0gbV9tYXJrZXItPnBhcmVudCgpOyBvICE9
IHRoaXM7IG8gPSBvLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgeU9mZnNldCArPSBvLT55UG9z
KCk7Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9IG8tPnhQb3MoKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgUm9vdElubGluZUJveCogcm9vdCA9IG1fbWFya2VyLT5pbmxpbmVCb3hXcmFw
cGVyKCktPnJvb3QoKTsKLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikg
ewotICAgICAgICAgICAgaW50IGxlZnRMaW5lT2Zmc2V0ID0gbGVmdFJlbE9mZnNldCh5T2Zmc2V0
LCBsZWZ0T2Zmc2V0KHlPZmZzZXQpKTsKLSAgICAgICAgICAgIGludCBtYXJrZXJYUG9zID0gbGVm
dExpbmVPZmZzZXQgLSB4T2Zmc2V0IC0gcGFkZGluZ0xlZnQoKSAtIGJvcmRlckxlZnQoKSArIG1f
bWFya2VyLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICBtX21hcmtlci0+aW5saW5lQm94V3Jh
cHBlcigpLT5hZGp1c3RQb3NpdGlvbihtYXJrZXJYUG9zIC0gbWFya2VyT2xkWCwgMCk7Ci0gICAg
ICAgICAgICBpZiAobWFya2VyWFBvcyA8IHJvb3QtPmxlZnRPdmVyZmxvdygpKSB7Ci0gICAgICAg
ICAgICAgICAgcm9vdC0+c2V0SG9yaXpvbnRhbE92ZXJmbG93UG9zaXRpb25zKG1hcmtlclhQb3Ms
IHJvb3QtPnJpZ2h0T3ZlcmZsb3coKSk7Ci0gICAgICAgICAgICAgICAgbV9vdmVyZmxvd0xlZnQg
PSBtaW4obWFya2VyWFBvcywgbV9vdmVyZmxvd0xlZnQpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaW50IHJpZ2h0TGluZU9mZnNldCA9IHJpZ2h0UmVsT2Zm
c2V0KHlPZmZzZXQsIHJpZ2h0T2Zmc2V0KHlPZmZzZXQpKTsKLSAgICAgICAgICAgIGludCBtYXJr
ZXJYUG9zID0gcmlnaHRMaW5lT2Zmc2V0IC0geE9mZnNldCArIHBhZGRpbmdSaWdodCgpICsgYm9y
ZGVyUmlnaHQoKSArIG1fbWFya2VyLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICBtX21hcmtl
ci0+aW5saW5lQm94V3JhcHBlcigpLT5hZGp1c3RQb3NpdGlvbihtYXJrZXJYUG9zIC0gbWFya2Vy
T2xkWCwgMCk7Ci0gICAgICAgICAgICBpZiAobWFya2VyWFBvcyArIG1fbWFya2VyLT53aWR0aCgp
ID4gcm9vdC0+cmlnaHRPdmVyZmxvdygpKSB7Ci0gICAgICAgICAgICAgICAgcm9vdC0+c2V0SG9y
aXpvbnRhbE92ZXJmbG93UG9zaXRpb25zKHJvb3QtPmxlZnRPdmVyZmxvdygpLCBtYXJrZXJYUG9z
ICsgbV9tYXJrZXItPndpZHRoKCkpOwotICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9
IG1heChtYXJrZXJYUG9zICsgbV9tYXJrZXItPndpZHRoKCksIG1fb3ZlcmZsb3dMZWZ0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMaXN0SXRlbTo6
cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQotewotICAgIGlmICghbV9oZWln
aHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJsb2NrOjpwYWludChpLCBfdHgsIF90
eSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KIFJlbmRlckxpc3RNYXJrZXI6OlJlbmRlckxpc3RNYXJrZXIoRG9j
dW1lbnQqIGRvY3VtZW50KQotICAgIDogUmVuZGVyQm94KGRvY3VtZW50KSwgbV9saXN0SW1hZ2Uo
MCksIG1fc2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uTm9uZSkKKyAgICA6IFJlbmRlckJveChkb2N1
bWVudCkKKyAgICAsIG1fbGlzdEltYWdlKDApCisgICAgLCBtX3NlbGVjdGlvblN0YXRlKFNlbGVj
dGlvbk5vbmUpCiB7CiAgICAgLy8gaW5pdCBSZW5kZXJPYmplY3QgYXR0cmlidXRlcwogICAgIHNl
dElubGluZSh0cnVlKTsgICAvLyBvdXIgb2JqZWN0IGlzIElubGluZQpJbmRleDogcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAkocmV2aXNpb24gMTQzODIpCisrKyByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJSb290SW5saW5lQm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJGbG93LmgiCi0jaW5j
bHVkZSAicmVuZGVyX2xpc3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
TGlzdEl0ZW0uaAkocmV2aXNpb24gMTQzODIpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
aAkod29ya2luZyBjb3B5KQpAQCAtMjIsOTkgKzIyLDM1IEBACiAgKgogICovCiAKLSNpZm5kZWYg
UkVOREVSX0xJU1RfSAotI2RlZmluZSBSRU5ERVJfTElTVF9ICisjaWZuZGVmIFJlbmRlckxpc3RJ
dGVtX0gKKyNkZWZpbmUgUmVuZGVyTGlzdEl0ZW1fSAogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0
cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAKLS8vICMjIyBsaXN0LXN0eWxlLXBv
c2l0aW9uLCBsaXN0LXN0eWxlLWltYWdlIGlzIHN0aWxsIG1pc3NpbmcKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBSZW5kZXJMaXN0SXRlbTsKLQotLyogdXNlZCB0byByZW5kZXIgdGhl
IGxpc3RzIG1hcmtlci4KLSAgICAgVGhpcyBjbGFzcyBhbHdheXMgaGFzIHRvIGJlIGEgZGlyZWN0
IGNoaWxkIG9mIGEgUmVuZGVyTGlzdEl0ZW0hCi0qLwotY2xhc3MgUmVuZGVyTGlzdE1hcmtlciA6
IHB1YmxpYyBSZW5kZXJCb3gKLXsKLXB1YmxpYzoKLSAgICBSZW5kZXJMaXN0TWFya2VyKFdlYkNv
cmU6OkRvY3VtZW50KiBkb2N1bWVudCk7Ci0gICAgflJlbmRlckxpc3RNYXJrZXIoKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSAqc3R5bGUpOwotCi0gICAgdmlydHVh
bCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxpc3RNYXJr
ZXIiOyB9Ci0gICAgLy8gc28gdGhlIG1hcmtlciBnZXRzIHRvIGxheW91dCBpdHNlbGYuIE9ubHkg
bmVlZGVkIGZvcgotICAgIC8vIGxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZQotCi0gICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgaSwgaW50IHhvZmYsIGludCB5b2ZmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCApOwotICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgo
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBjYWxjV2lkdGgoKTsKLQotICAgIHZpcnR1YWwgSW5saW5lQm94KiBjcmVh
dGVJbmxpbmVCb3goYm9vbCwgYm9vbCwgYm9vbCk7Ci0KLSAgICB2aXJ0dWFsIHNob3J0IGxpbmVI
ZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3g9ZmFsc2UpIGNvbnN0OwotICAgIHZpcnR1
YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveD1mYWxz
ZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0TWFya2VyKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIAotICAgIENhY2hlZEltYWdlKiBsaXN0SW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2xpc3RJbWFnZTsgfQotICAgIAotICAgIFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSgp
IHsgcmV0dXJuIG1fbGlzdEl0ZW07IH0KLSAgICB2b2lkIHNldExpc3RJdGVtKFJlbmRlckxpc3RJ
dGVtKiBsaXN0SXRlbSkgeyBtX2xpc3RJdGVtID0gbGlzdEl0ZW07IH0KLSAgICAKLSAgICBjb25z
dCBEZXByZWNhdGVkU3RyaW5nJiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtOyB9Ci0KLSAg
ICBib29sIGlzSW5zaWRlKCkgY29uc3Q7Ci0gICAgCi0gICAgSW50UmVjdCBnZXRSZWxhdGl2ZU1h
cmtlclJlY3QoKTsKLSAgICAKLSAgICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7Ci0gICAgdmlydHVhbCBJbnRSZWN0
IHNlbGVjdGlvblJlY3QoKTsKLSAgICB2aXJ0dWFsIENvbG9yIHNlbGVjdGlvbkNvbG9yKEdyYXBo
aWNzQ29udGV4dCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgRGVwcmVjYXRlZFN0cmlu
ZyBtX2l0ZW07Ci0gICAgQ2FjaGVkSW1hZ2UgKm1fbGlzdEltYWdlOwotICAgIFJlbmRlckxpc3RJ
dGVtKiBtX2xpc3RJdGVtOwotICAgIFNlbGVjdGlvblN0YXRlIG1fc2VsZWN0aW9uU3RhdGU7Ci19
OwotCi1jbGFzcyBMaXN0TWFya2VyQm94IDogcHVibGljIElubGluZUJveAotewotcHVibGljOgot
ICAgIExpc3RNYXJrZXJCb3goUmVuZGVyT2JqZWN0KiBvYmopIDpJbmxpbmVCb3gob2JqKSB7fQot
ICAgIHZpcnR1YWwgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiAhc3RhdGljX2Nhc3Q8UmVu
ZGVyTGlzdE1hcmtlcio+KG9iamVjdCgpKS0+bGlzdEltYWdlKCk7IH0KLX07CitjbGFzcyBSZW5k
ZXJMaXN0TWFya2VyOwogCiBjbGFzcyBSZW5kZXJMaXN0SXRlbSA6IHB1YmxpYyBSZW5kZXJCbG9j
awogewogcHVibGljOgotICAgIFJlbmRlckxpc3RJdGVtKFdlYkNvcmU6Ok5vZGUqKTsKKyAgICBS
ZW5kZXJMaXN0SXRlbShOb2RlKik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsK
IAogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJMaXN0SXRlbSI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHls
ZSAqc3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogCiAg
ICAgdmlydHVhbCBib29sIGlzTGlzdEl0ZW0oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
CiAgICAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0
VmFsdWUoaW50IHYpIHsgcHJlZGVmVmFsID0gdjsgfQorICAgIHZvaWQgc2V0VmFsdWUoaW50IHYp
IHsgbV9wcmVkZWZWYWwgPSB2OyB9CiAgICAgdm9pZCBjYWxjVmFsdWUoKTsKICAgICB2b2lkIHJl
c2V0VmFsdWUoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgaSwgaW50IHhvZmYsIGludCB5b2ZmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHhvZmYsIGludCB5b2ZmKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoICk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0
aCgpOwpAQCAtMTIyLDE4ICs1OCwxOSBAQAogICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbkxpc3RN
YXJrZXIoKTsKICAgICB2b2lkIHVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7CiAgICAgCi0gICAgdm9p
ZCBzZXROb3RJbkxpc3QoYm9vbCBub3RJbkxpc3QpIHsgX25vdEluTGlzdCA9IG5vdEluTGlzdDsg
fQotICAgIGJvb2wgbm90SW5MaXN0KCkgY29uc3QgeyByZXR1cm4gX25vdEluTGlzdDsgfQorICAg
IHZvaWQgc2V0Tm90SW5MaXN0KGJvb2wgbm90SW5MaXN0KSB7IG1fbm90SW5MaXN0ID0gbm90SW5M
aXN0OyB9CisgICAgYm9vbCBub3RJbkxpc3QoKSBjb25zdCB7IHJldHVybiBtX25vdEluTGlzdDsg
fQogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBtYXJrZXJTdHJpbmdWYWx1ZSgpIHsgcmV0dXJuIG1f
bWFya2VyID8gbV9tYXJrZXItPnRleHQoKSA6ICIiOyB9CisgICAgRGVwcmVjYXRlZFN0cmluZyBt
YXJrZXJTdHJpbmdWYWx1ZSgpOwogCiBwcml2YXRlOgotICAgIGludCBwcmVkZWZWYWw7CisgICAg
aW50IG1fcHJlZGVmVmFsOwogICAgIFJlbmRlckxpc3RNYXJrZXIgKm1fbWFya2VyOwotICAgIGJv
b2wgX25vdEluTGlzdDsKKyAgICBib29sIG1fbm90SW5MaXN0OwogICAgIGludCBtX3ZhbHVlOwog
fTsKIAorCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9s
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9saXN0LmgJKHJldmlzaW9uIDE0
MzgyKQorKysgcmVuZGVyaW5nL3JlbmRlcl9saXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM5
ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0
aW9uIGZvciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KLSAqCi0gKi8KLQotI2lmbmRlZiBSRU5ERVJfTElTVF9ICi0jZGVmaW5lIFJFTkRFUl9MSVNU
X0gKLQotI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9j
ay5oIgotCi0vLyAjIyMgbGlzdC1zdHlsZS1wb3NpdGlvbiwgbGlzdC1zdHlsZS1pbWFnZSBpcyBz
dGlsbCBtaXNzaW5nCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyTGlzdEl0
ZW07Ci0KLS8qIHVzZWQgdG8gcmVuZGVyIHRoZSBsaXN0cyBtYXJrZXIuCi0gICAgIFRoaXMgY2xh
c3MgYWx3YXlzIGhhcyB0byBiZSBhIGRpcmVjdCBjaGlsZCBvZiBhIFJlbmRlckxpc3RJdGVtIQot
Ki8KLWNsYXNzIFJlbmRlckxpc3RNYXJrZXIgOiBwdWJsaWMgUmVuZGVyQm94Ci17Ci1wdWJsaWM6
Ci0gICAgUmVuZGVyTGlzdE1hcmtlcihXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1lbnQpOwotICAg
IH5SZW5kZXJMaXN0TWFya2VyKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVy
U3R5bGUgKnN0eWxlKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJMaXN0TWFya2VyIjsgfQotICAgIC8vIHNvIHRoZSBtYXJrZXIg
Z2V0cyB0byBsYXlvdXQgaXRzZWxmLiBPbmx5IG5lZWRlZCBmb3IKLSAgICAvLyBsaXN0LXN0eWxl
LXBvc2l0aW9uOiBpbnNpZGUKLQotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mIGks
IGludCB4b2ZmLCBpbnQgeW9mZik7Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCggKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VD
aGFuZ2VkKENhY2hlZEltYWdlKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7Ci0K
LSAgICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5lQm94KGJvb2wsIGJvb2wsIGJvb2wp
OwotCi0gICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5l
Qm94PWZhbHNlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHNob3J0IGJhc2VsaW5lUG9zaXRpb24oYm9v
bCBiLCBib29sIGlzUm9vdExpbmVCb3g9ZmFsc2UpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29s
IGlzTGlzdE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAgICBDYWNoZWRJ
bWFnZSogbGlzdEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9saXN0SW1hZ2U7IH0KLSAgICAKLSAg
ICBSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0oKSB7IHJldHVybiBtX2xpc3RJdGVtOyB9Ci0gICAg
dm9pZCBzZXRMaXN0SXRlbShSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0pIHsgbV9saXN0SXRlbSA9
IGxpc3RJdGVtOyB9Ci0gICAgCi0gICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgdGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1faXRlbTsgfQotCi0gICAgYm9vbCBpc0luc2lkZSgpIGNvbnN0OwotICAg
IAotICAgIEludFJlY3QgZ2V0UmVsYXRpdmVNYXJrZXJSZWN0KCk7Ci0gICAgCi0gICAgdmlydHVh
bCBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uU3RhdGU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9u
U3RhdGUpOwotICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCk7Ci0gICAgdmlydHVh
bCBDb2xvciBzZWxlY3Rpb25Db2xvcihHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi1w
cml2YXRlOgotICAgIERlcHJlY2F0ZWRTdHJpbmcgbV9pdGVtOwotICAgIENhY2hlZEltYWdlICpt
X2xpc3RJbWFnZTsKLSAgICBSZW5kZXJMaXN0SXRlbSogbV9saXN0SXRlbTsKLSAgICBTZWxlY3Rp
b25TdGF0ZSBtX3NlbGVjdGlvblN0YXRlOwotfTsKLQotY2xhc3MgTGlzdE1hcmtlckJveCA6IHB1
YmxpYyBJbmxpbmVCb3gKLXsKLXB1YmxpYzoKLSAgICBMaXN0TWFya2VyQm94KFJlbmRlck9iamVj
dCogb2JqKSA6SW5saW5lQm94KG9iaikge30KLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0KCkgY29u
c3QgeyByZXR1cm4gIXN0YXRpY19jYXN0PFJlbmRlckxpc3RNYXJrZXIqPihvYmplY3QoKSktPmxp
c3RJbWFnZSgpOyB9Ci19OwotCi1jbGFzcyBSZW5kZXJMaXN0SXRlbSA6IHB1YmxpYyBSZW5kZXJC
bG9jawotewotcHVibGljOgotICAgIFJlbmRlckxpc3RJdGVtKFdlYkNvcmU6Ok5vZGUqKTsKLSAg
ICAKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFy
ICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxpc3RJdGVtIjsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlICpzdHlsZSk7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAgICBpbnQg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgdm9pZCBzZXRWYWx1ZShpbnQg
dikgeyBwcmVkZWZWYWwgPSB2OyB9Ci0gICAgdm9pZCBjYWxjVmFsdWUoKTsKLSAgICB2b2lkIHJl
c2V0VmFsdWUoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgaSwgaW50IHhvZmYsIGludCB5b2ZmKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoICk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0
aCgpOwotCi0gICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uTGlzdE1hcmtlcigpOwotICAgIHZvaWQg
dXBkYXRlTWFya2VyTG9jYXRpb24oKTsKLSAgICAKLSAgICB2b2lkIHNldE5vdEluTGlzdChib29s
IG5vdEluTGlzdCkgeyBfbm90SW5MaXN0ID0gbm90SW5MaXN0OyB9Ci0gICAgYm9vbCBub3RJbkxp
c3QoKSBjb25zdCB7IHJldHVybiBfbm90SW5MaXN0OyB9Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5n
IG1hcmtlclN0cmluZ1ZhbHVlKCkgeyByZXR1cm4gbV9tYXJrZXIgPyBtX21hcmtlci0+dGV4dCgp
IDogIiI7IH0KLQotcHJpdmF0ZToKLSAgICBpbnQgcHJlZGVmVmFsOwotICAgIFJlbmRlckxpc3RN
YXJrZXIgKm1fbWFya2VyOwotICAgIGJvb2wgX25vdEluTGlzdDsKLSAgICBpbnQgbV92YWx1ZTsK
LX07Ci0KLX0gLy9uYW1lc3BhY2UKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxNDM4MikKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw2IEBACiAJCTkzRjE5OEU1MDgyNDVF
NTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNDMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1l
bnQuaCAqLzsgfTsKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRjAy
REU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgfTsKIAkJOTNGMTk4RTkwODI0NUU1
OTAwMUU5QUJDIC8qIGh0bWxfaW1hZ2VpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0NTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9pbWFn
ZWltcGwuaCAqLzsgfTsKLQkJOTNGMTk4RUIwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfbGlzdGlt
cGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNE
MjQ5MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2xpc3RpbXBsLmggKi87IH07CiAJCTkzRjE5OEVG
MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTFBh
cnNlci5oICovOyB9OwogCQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTFRva2VuaXpl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qy
NTMwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxUb2tlbml6ZXIuaCAqLzsgfTsKIAkJOTNGMTk4RjYw
ODI0NUU1OTAwMUU5QUJDIC8qIERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc5MDJERTQzRDcwMTg2MzVDQSAvKiBEZWNvZGVyLmgg
Ki87IH07CkBAIC01MTcsNyArNTE2LDYgQEAKIAkJOTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTIzRDIzQjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLzsg
fTsKIAkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYw
MTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAgKi87IH07CiAJCTkzRjE5QTk1MDgyNDVFNTkwMDFF
OUFCQyAvKiBodG1sX2ltYWdlaW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0NDAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9pbWFnZWlt
cGwuY3BwICovOyB9OwotCQk5M0YxOUE5NzA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9saXN0aW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIz
RDI0ODAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9saXN0aW1wbC5jcHAgKi87IH07CiAJCTkzRjE5
QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjUwMDJERTQzOTYwMTg2MzVDQSAvKiBI
VE1MUGFyc2VyLmNwcCAqLzsgfTsKIAkJOTNGMTlBOUMwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxU
b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjUyM0QyNTIwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxUb2tlbml6ZXIuY3BwICovOyB9Owog
CQk5M0YxOUE5RDA4MjQ1RTU5MDAxRTlBQkMgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI3ODAyREU0M0Q3MDE4NjM1Q0Eg
LyogRGVjb2Rlci5jcHAgKi87IH07CkBAIC0xMTIwLDYgKzExMTgsMjQgQEAKIAkJQThFQTczRDQw
QTE5MDBFMzAwQThFRjVGIC8qIFJlbmRlckxhYmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3M0MwMEExOTAwRTMwMEE4RUY1RiAvKiBSZW5k
ZXJMYWJlbC5jcHAgKi87IH07CiAJCUE4RUE3M0Q1MEExOTAwRTMwMEE4RUY1RiAvKiBSZW5kZXJT
bGlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThFQTczQzEwQTE5MDBFMzAwQThFRjVGIC8qIFJlbmRlclNsaWRlci5jcHAgKi87IH07CiAJCUE4
RUE3M0Q2MEExOTAwRTMwMEE4RUY1RiAvKiBSZW5kZXJTZWxlY3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3M0MyMEExOTAwRTMwMEE4RUY1RiAv
KiBSZW5kZXJTZWxlY3QuaCAqLzsgfTsKKwkJQThFQTc5RjEwQTE5MTZERjAwQThFRjVGIC8qIEhU
TUxPTGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4RUE3OUU1MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MT0xpc3RFbGVtZW50LmggKi87
IH07CisJCUE4RUE3OUYyMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MVUxpc3RFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBNzlFNjBBMTkx
NkRGMDBBOEVGNUYgLyogSFRNTFVMaXN0RWxlbWVudC5oICovOyB9OworCQlBOEVBNzlGMzBBMTkx
NkRGMDBBOEVGNUYgLyogSFRNTFVMaXN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBNzlFNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRN
TFVMaXN0RWxlbWVudC5jcHAgKi87IH07CisJCUE4RUE3OUY0MEExOTE2REYwMEE4RUY1RiAvKiBI
VE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4RUE3OUU4MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MTWVudUVsZW1lbnQuaCAqLzsg
fTsKKwkJQThFQTc5RjUwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTc5RTkwQTE5
MTZERjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuY3BwICovOyB9OworCQlBOEVBNzlGNjBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTExJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTc5RUEwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxM
SUVsZW1lbnQuaCAqLzsgfTsKKwkJQThFQTc5RjcwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxETGlz
dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4RUE3OUVCMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50LmggKi87IH07CisJ
CUE4RUE3OUY4MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MTWVudUVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTc5RUMwQTE5MTZERjAw
QThFRjVGIC8qIEhUTUxNZW51RWxlbWVudC5jcHAgKi87IH07CisJCUE4RUE3OUY5MEExOTE2REYw
MEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBNzlFRDBBMTkxNkRGMDBBOEVGNUYgLyogSFRN
TERpcmVjdG9yeUVsZW1lbnQuY3BwICovOyB9OworCQlBOEVBNzlGQTBBMTkxNkRGMDBBOEVGNUYg
LyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4RUE3OUVFMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5
RWxlbWVudC5oICovOyB9OworCQlBOEVBNzlGQjBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTE9MaXN0
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEVBNzlFRjBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTE9MaXN0RWxlbWVudC5jcHAgKi87IH07
CisJCUE4RUE3OUZDMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MTElFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3OUYwMEExOTE2REYw
MEE4RUY1RiAvKiBIVE1MTElFbGVtZW50LmNwcCAqLzsgfTsKKwkJQThFQTdBNEUwQTE5MUE1MjAw
QThFRjVGIC8qIFJlbmRlckxpc3RJdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3QTQ4MEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0
SXRlbS5jcHAgKi87IH07CisJCUE4RUE3QTRGMEExOTFBNTIwMEE4RUY1RiAvKiBMaXN0TWFya2Vy
Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVB
N0E0OTBBMTkxQTUyMDBBOEVGNUYgLyogTGlzdE1hcmtlckJveC5oICovOyB9OworCQlBOEVBN0E1
MDBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdE1hcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTdBNEEwQTE5MUE1MjAwQThFRjVGIC8q
IFJlbmRlckxpc3RNYXJrZXIuaCAqLzsgfTsKKwkJQThFQTdBNTEwQTE5MUE1MjAwQThFRjVGIC8q
IFJlbmRlckxpc3RNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThFQTdBNEIwQTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxpc3RNYXJrZXIu
Y3BwICovOyB9OworCQlBOEVBN0E1MjBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdEl0ZW0u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3QTRD
MEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0SXRlbS5oICovOyB9OworCQlBOEVBN0E1MzBB
MTkxQTUyMDBBOEVGNUYgLyogTGlzdE1hcmtlckJveC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBN0E0RDBBMTkxQTUyMDBBOEVGNUYgLyogTGlz
dE1hcmtlckJveC5jcHAgKi87IH07CiAJCUE4RkQ4Qjg2MDg3Q0I0NEMwMERDMzcwNyAvKiBLV1FX
TWF0cml4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4NUQ3QThDMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4LmNwcCAqLzsgfTsKIAkJQThG
RDhCODcwODdDQjQ1NzAwREMzNzA3IC8qIEtXUVdNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NUQ3QThEMDg3OUVDNjQwMDZBOTE3MiAvKiBL
V1FXTWF0cml4LmggKi87IH07CiAJCUE4RkVGQjBBMDk3OUY0NzIwMDU4MzlGRCAvKiBSZW5kZXJG
b3JlaWduT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEZFRkIwODA5NzlGNDcyMDA1ODM5RkQgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5oICov
OyB9OwpAQCAtMTI2MCw4ICsxMjc2LDYgQEAKIAkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlcklubGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNFQTQ4MzkwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oICovOyB9Owog
CQlCQ0VBNDg3OTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4M0EwOTdEOTMwMjAwOTRD
OUU0IC8qIFJlbmRlckxheWVyLmNwcCAqLzsgfTsKIAkJQkNFQTQ4N0EwOTdEOTMwMjAwOTRDOUU0
IC8qIFJlbmRlckxheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0VBNDgzQjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCAqLzsgfTsK
LQkJQkNFQTQ4N0QwOTdEOTMwMjAwOTRDOUU0IC8qIHJlbmRlcl9saXN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODNFMDk3RDkzMDIwMDk0
QzlFNCAvKiByZW5kZXJfbGlzdC5jcHAgKi87IH07Ci0JCUJDRUE0ODdFMDk3RDkzMDIwMDk0QzlF
NCAvKiByZW5kZXJfbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNFQTQ4M0YwOTdEOTMwMjAwOTRDOUU0IC8qIHJlbmRlcl9saXN0LmggKi87IH07
CiAJCUJDRUE0ODdGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4NDAwOTdEOTMwMjAw
OTRDOUU0IC8qIFJlbmRlck9iamVjdC5jcHAgKi87IH07CiAJCUJDRUE0ODgwMDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRUE0ODQxMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCAq
LzsgfTsKIAkJQkNFQTQ4ODMwOTdEOTMwMjAwOTRDOUU0IC8qIHJlbmRlcl9zdHlsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0NDA5N0Q5
MzAyMDA5NEM5RTQgLyogcmVuZGVyX3N0eWxlLmNwcCAqLzsgfTsKQEAgLTI1NTUsNiArMjU2OSwy
NCBAQAogCQlBOEVBNzNDMDBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyTGFiZWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxhYmVsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThFQTczQzEwQTE5MDBFMzAwQThFRjVGIC8qIFJlbmRl
clNsaWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
U2xpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThFQTczQzIwQTE5MDBF
MzAwQThFRjVGIC8qIFJlbmRlclNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE3
OUU1MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MT0xpc3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MT0xpc3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE4RUE3OUU2MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MVUxpc3RFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MVUxpc3RFbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE3OUU3MEExOTE2REYwMEE4RUY1RiAv
KiBIVE1MVUxpc3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBIVE1MVUxpc3RFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QThFQTc5RTgwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxNZW51RWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTE1lbnVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUE4RUE3OUU5MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRExpc3RF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTc5RUEwQTE5MTZE
RjAwQThFRjVGIC8qIEhUTUxMSUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEhUTUxMSUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThF
QTc5RUIwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxETGlzdEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQThFQTc5RUMwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxNZW51RWxlbWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTE1lbnVFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTc5RUQwQTE5MTZERjAw
QThFRjVGIC8qIEhUTUxEaXJlY3RvcnlFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVE1MRGlyZWN0b3J5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUE4RUE3OUVFMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTERpcmVjdG9y
eUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTc5RUYwQTE5MTZE
RjAwQThFRjVGIC8qIEhUTUxPTGlzdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEhUTUxPTGlzdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOEVBNzlGMDBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTExJRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTExJRWxlbWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE3QTQ4MEExOTFBNTIwMEE4RUY1RiAv
KiBSZW5kZXJMaXN0SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyTGlzdEl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEVB
N0E0OTBBMTkxQTUyMDBBOEVGNUYgLyogTGlzdE1hcmtlckJveC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGlzdE1hcmtlckJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBOEVBN0E0QTBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdE1hcmtlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGlzdE1hcmtlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEVBN0E0QjBBMTkxQTUyMDBBOEVGNUYgLyogUmVu
ZGVyTGlzdE1hcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyTGlzdE1hcmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE3
QTRDMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0SXRlbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGlzdEl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQThFQTdBNEQwQTE5MUE1MjAwQThFRjVGIC8qIExpc3RNYXJrZXJCb3guY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpc3RNYXJrZXJCb3guY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEZFRkIwODA5NzlGNDcyMDA1ODM5RkQgLyog
UmVuZGVyRm9yZWlnbk9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyRm9yZWlnbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEZF
RkIwOTA5NzlGNDcyMDA1ODM5RkQgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RkVGQjJGMDk3OUY0RjYwMDU4MzlGRCAvKiBT
VkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjcwNyw4ICsyNzM5LDYgQEAKIAkJQkNFQTQ4MzkwOTdEOTMwMjAwOTRDOUU0
IC8qIFJlbmRlcklubGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVySW5saW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0ODNBMDk3RDkz
MDIwMDk0QzlFNCAvKiBSZW5kZXJMYXllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyTGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0VBNDgzQjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUJDRUE0ODNFMDk3RDkzMDIwMDk0QzlFNCAvKiByZW5kZXJfbGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcmVuZGVyX2xpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0VBNDgzRjA5N0Q5MzAyMDA5NEM5RTQgLyogcmVu
ZGVyX2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHJlbmRlcl9saXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0ODQwMDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlck9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0
ODQxMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlck9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0VBNDg0NDA5N0Q5MzAyMDA5NEM5RTQgLyogcmVuZGVyX3N0eWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSByZW5kZXJfc3R5bGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc2OCw4ICsyNzk4LDYgQEAKIAkJRjUyM0QyM0YwMkRF
NDM5NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI0NDAyREU0Mzk2
MDE4NjM1Q0EgLyogaHRtbF9pbWFnZWltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaHRtbF9pbWFnZWltcGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0Qy
NDUwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaW1hZ2VpbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGh0bWxfaW1hZ2VpbXBsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTIz
RDI0ODAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9saXN0aW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBodG1sX2xpc3RpbXBsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
Ci0JCUY1MjNEMjQ5MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2xpc3RpbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGh0bWxfbGlzdGltcGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUY1MjNEMjUwMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MUGFyc2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxQYXJzZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxQYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
RjUyM0QyNTIwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxUb2tlbml6ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRva2VuaXpl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwpAQCAtMzM5MSw4ICszNDE5LDYgQEAKIAkJCQlGNTIzRDIzQTAyREU0Mzk2MDE4NjM1Q0Eg
LyogaHRtbF9ibG9ja2ltcGwuaCAqLywKIAkJCQlGNTIzRDI0NDAyREU0Mzk2MDE4NjM1Q0EgLyog
aHRtbF9pbWFnZWltcGwuY3BwICovLAogCQkJCUY1MjNEMjQ1MDJERTQzOTYwMTg2MzVDQSAvKiBo
dG1sX2ltYWdlaW1wbC5oICovLAotCQkJCUY1MjNEMjQ4MDJERTQzOTYwMTg2MzVDQSAvKiBodG1s
X2xpc3RpbXBsLmNwcCAqLywKLQkJCQlGNTIzRDI0OTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9s
aXN0aW1wbC5oICovLAogCQkJCUE4Q0ZGNzlBMEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MQW5jaG9y
RWxlbWVudC5jcHAgKi8sCiAJCQkJQThDRkY3QTEwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxBbmNo
b3JFbGVtZW50LmggKi8sCiAJCQkJQTg3MUQ0NTQwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxBcHBs
ZXRFbGVtZW50LmNwcCAqLywKQEAgLTM0MTIsNiArMzQzOCwxMCBAQAogCQkJCTkzOEU2NjI1MDlG
MDk5NTYwMDhBNDhFQyAvKiBIVE1MQ2FudmFzRWxlbWVudC5pZGwgKi8sCiAJCQkJQThERjNGQzkw
OTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uLmNwcCAqLywKIAkJCQlBOERGM0ZDODA5
N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb24uaCAqLywKKwkJCQlBOEVBNzlFRDBBMTkx
NkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwICovLAorCQkJCUE4RUE3OUVF
MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oICovLAorCQkJCUE4RUE3
OUU5MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50LmNwcCAqLywKKwkJCQlBOEVB
NzlFQjBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0RWxlbWVudC5oICovLAogCQkJCUY1MjNE
MjNCMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuY3BwICovLAogCQkJCUY1MjNEMjND
MDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAqLywKIAkJCQkxQTQ5NEUyOTBBMTIz
NTQzMDBGREFGQzEgLyogSFRNTERvY3VtZW50LmlkbCAqLywKQEAgLTM0NTIsOCArMzQ4MiwxMiBA
QAogCQkJCUE4MTM2OUM2MDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MTGFiZWxFbGVtZW50LmggKi8s
CiAJCQkJQTgxMzY5QzUwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxMZWdlbmRFbGVtZW50LmNwcCAq
LywKIAkJCQlBODEzNjlDNDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTExlZ2VuZEVsZW1lbnQuaCAq
LywKKwkJCQlBOEVBNzlGMDBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTExJRWxlbWVudC5jcHAgKi8s
CisJCQkJQThFQTc5RUEwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxMSUVsZW1lbnQuaCAqLywKIAkJ
CQlBODcxREMxNTBBMTUyMDU3MDBCMTJBNjggLyogSFRNTExpbmtFbGVtZW50LmNwcCAqLywKIAkJ
CQlBODcxREMxNDBBMTUyMDU3MDBCMTJBNjggLyogSFRNTExpbmtFbGVtZW50LmggKi8sCisJCQkJ
QThFQTc5RUMwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxNZW51RWxlbWVudC5jcHAgKi8sCisJCQkJ
QThFQTc5RTgwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxNZW51RWxlbWVudC5oICovLAogCQkJCUE4
NzFEQzFCMEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTWV0YUVsZW1lbnQuY3BwICovLAogCQkJCUE4
NzFEQzE4MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTWV0YUVsZW1lbnQuaCAqLywKIAkJCQlBOENG
Rjc5RjBBMTU2OTc4MDAwQTQyMzQgLyogSFRNTE1vZEVsZW1lbnQuY3BwICovLApAQCAtMzQ2NCw2
ICszNDk4LDggQEAKIAkJCQk1NTBBMEJDQzA4NUY2MDREMDA3MzUzRDYgLyogSFRNTE5hbWVzLmgg
Ki8sCiAJCQkJQTg3MUQ0NTEwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxPYmplY3RFbGVtZW50LmNw
cCAqLywKIAkJCQlBODcxRDQ1MDBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTE9iamVjdEVsZW1lbnQu
aCAqLywKKwkJCQlBOEVBNzlFRjBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTE9MaXN0RWxlbWVudC5j
cHAgKi8sCisJCQkJQThFQTc5RTUwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxPTGlzdEVsZW1lbnQu
aCAqLywKIAkJCQlBODEzNjlDMzA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTE9wdEdyb3VwRWxlbWVu
dC5jcHAgKi8sCiAJCQkJQTgxMzY5QzIwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxPcHRHcm91cEVs
ZW1lbnQuaCAqLywKIAkJCQlBODEzNjlDMTA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTE9wdGlvbkVs
ZW1lbnQuY3BwICovLApAQCAtMzUwNiw2ICszNTQyLDggQEAKIAkJCQlBODcxREMxQzBBMTUyMDU3
MDBCMTJBNjggLyogSFRNTFRpdGxlRWxlbWVudC5oICovLAogCQkJCUY1MjNEMjUyMDJERTQzOTYw
MTg2MzVDQSAvKiBIVE1MVG9rZW5pemVyLmNwcCAqLywKIAkJCQlGNTIzRDI1MzAyREU0Mzk2MDE4
NjM1Q0EgLyogSFRNTFRva2VuaXplci5oICovLAorCQkJCUE4RUE3OUU3MEExOTE2REYwMEE4RUY1
RiAvKiBIVE1MVUxpc3RFbGVtZW50LmNwcCAqLywKKwkJCQlBOEVBNzlFNjBBMTkxNkRGMDBBOEVG
NUYgLyogSFRNTFVMaXN0RWxlbWVudC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBodG1sOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ0NDgsOCArNDQ4Niw4IEBACiAJCQkJQkNFQTQ4
MUEwOTdEOTMwMjAwOTRDOUU0IC8qIElubGluZVRleHRCb3guY3BwICovLAogCQkJCUJDRUE0ODFC
MDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmggKi8sCiAJCQkJOTM1QzQ3NjAwOUFD
NENEMTAwQTZBQUI0IC8qIExlbmd0aC5oICovLAotCQkJCUJDRUE0ODNFMDk3RDkzMDIwMDk0QzlF
NCAvKiByZW5kZXJfbGlzdC5jcHAgKi8sCi0JCQkJQkNFQTQ4M0YwOTdEOTMwMjAwOTRDOUU0IC8q
IHJlbmRlcl9saXN0LmggKi8sCisJCQkJQThFQTdBNEQwQTE5MUE1MjAwQThFRjVGIC8qIExpc3RN
YXJrZXJCb3guY3BwICovLAorCQkJCUE4RUE3QTQ5MEExOTFBNTIwMEE4RUY1RiAvKiBMaXN0TWFy
a2VyQm94LmggKi8sCiAJCQkJQkNFQTQ4NDQwOTdEOTMwMjAwOTRDOUU0IC8qIHJlbmRlcl9zdHls
ZS5jcHAgKi8sCiAJCQkJQkNFQTQ4NDUwOTdEOTMwMjAwOTRDOUU0IC8qIHJlbmRlcl9zdHlsZS5o
ICovLAogCQkJCUJDRUE0ODFDMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJBcHBsZXQuY3BwICov
LApAQCAtNDUwMCw2ICs0NTM4LDEwIEBACiAJCQkJQThFQTczQkQwQTE5MDBFMzAwQThFRjVGIC8q
IFJlbmRlckxlZ2VuZC5oICovLAogCQkJCUE4RUE3M0JFMEExOTAwRTMwMEE4RUY1RiAvKiBSZW5k
ZXJMaW5lRWRpdC5jcHAgKi8sCiAJCQkJQThFQTczQjEwQTE5MDBFMzAwQThFRjVGIC8qIFJlbmRl
ckxpbmVFZGl0LmggKi8sCisJCQkJQThFQTdBNDgwQTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxp
c3RJdGVtLmNwcCAqLywKKwkJCQlBOEVBN0E0QzBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlz
dEl0ZW0uaCAqLywKKwkJCQlBOEVBN0E0QjBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdE1h
cmtlci5jcHAgKi8sCisJCQkJQThFQTdBNEEwQTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxpc3RN
YXJrZXIuaCAqLywKIAkJCQlCQ0VBNDg0MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0
LmNwcCAqLywKIAkJCQlCQ0VBNDg0MTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0Lmgg
Ki8sCiAJCQkJQTg3MURFQzgwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlclBhcnQuY3BwICovLApA
QCAtNDcwOCw3ICs0NzUwLDYgQEAKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRN
TERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNjA4MjQ1RTU5MDAxRTlBQkMg
LyogSFRNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEU5MDgyNDVFNTkwMDFF
OUFCQyAvKiBodG1sX2ltYWdlaW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTNGMTk4RUIwODI0
NUU1OTAwMUU5QUJDIC8qIGh0bWxfbGlzdGltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5
OEVGMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0YxOThGMDA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNGMTk4RjYwODI0NUU1OTAwMUU5QUJDIC8qIERlY29kZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtNTA1Miw3ICs1MDkzLDYgQEAKIAkJCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODdBMDk3RDkzMDIw
MDk0QzlFNCAvKiBSZW5kZXJMYXllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNFQTQ4N0UwOTdE
OTMwMjAwOTRDOUU0IC8qIHJlbmRlcl9saXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg4
MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VBNDg4NDA5N0Q5MzAyMDA5NEM5RTQgLyogcmVuZGVyX3N0eWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0VBNDg4NzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCBpbiBIZWFk
ZXJzICovLApAQCAtNTM1Miw2ICs1MzkyLDE1IEBACiAJCQkJQThFQTczQ0UwQTE5MDBFMzAwQThF
RjVGIC8qIFJlbmRlclRleHRBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzNEMTBBMTkw
MEUzMDBBOEVGNUYgLyogUmVuZGVyTGVnZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzNE
NjBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyU2VsZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlB
OEVBNzlGMTBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTE9MaXN0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQThFQTc5RjIwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxVTGlzdEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCUE4RUE3OUY0MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MTWVudUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4RUE3OUY2MEExOTE2REYwMEE4RUY1RiAvKiBI
VE1MTElFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVG
NUYgLyogSFRNTERMaXN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThFQTc5RkEwQTE5
MTZERjAwQThFRjVGIC8qIEhUTUxEaXJlY3RvcnlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBOEVBN0E0RjBBMTkxQTUyMDBBOEVGNUYgLyogTGlzdE1hcmtlckJveC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQThFQTdBNTAwQTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxpc3RNYXJrZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUE4RUE3QTUyMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0
SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC01NTY2LDcgKzU2MTUsNiBAQAogCQkJCTkzRjE5QTkx
MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzRjE5QTk1MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2ltYWdlaW1wbC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk5M0YxOUE5NzA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9saXN0aW1w
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5QjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRN
TFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5QzA4MjQ1RTU5MDAxRTlBQkMg
LyogSFRNTFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5RDA4MjQ1RTU5
MDAxRTlBQkMgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU4NjMsNyArNTkxMSw2
IEBACiAJCQkJQkNFQTQ4NzUwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDRUE0ODc3MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4NzkwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRl
ckxheWVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDRUE0ODdEMDk3RDkzMDIwMDk0QzlFNCAv
KiByZW5kZXJfbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDg3RjA5N0Q5MzAyMDA5
NEM5RTQgLyogUmVuZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODgzMDk3
RDkzMDIwMDk0QzlFNCAvKiByZW5kZXJfc3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNF
QTQ4ODgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFjLm1tIGluIFNvdXJjZXMgKi8s
CkBAIC02MTQwLDYgKzYxODcsMTUgQEAKIAkJCQlBOEVBNzNEMzBBMTkwMEUzMDBBOEVGNUYgLyog
UmVuZGVyRm9ybUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTczRDQwQTE5MDBF
MzAwQThFRjVGIC8qIFJlbmRlckxhYmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE3M0Q1
MEExOTAwRTMwMEE4RUY1RiAvKiBSZW5kZXJTbGlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QThFQTc5RjMwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxVTGlzdEVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQThFQTc5RjUwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThFQTc5RjgwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxN
ZW51RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEVBNzlGOTBBMTkxNkRGMDBBOEVG
NUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThFQTc5
RkIwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxPTGlzdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQThFQTc5RkMwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxMSUVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQThFQTdBNEUwQTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxpc3RJdGVt
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4RUE3QTUxMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5k
ZXJMaXN0TWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4RUE3QTUzMEExOTFBNTIwMEE4
RUY1RiAvKiBMaXN0TWFya2VyQm94LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gMTQzODcpCisrKyBDaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4OSBAQAorMjAwNi0wNS0xNSAgRXJpYyBTZWlkZWwg
IDxlc2VpZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTcGxpdCByZW5kZXJfbGlzdC4qIGFuZCBodG1sX2xpc3RpbXBsLiogaW50
byBzZXBhcmF0ZSBmaWxlcyAob25lIHBlciBjbGFzcykuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2h0bWwu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NSFRNTC5tbToKKyAgICAgICAgKiBicmlk
Z2UvbWFjL0ZyYW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OmF0dHJpYnV0
ZWRTdHJpbmcpOgorICAgICAgICAqIGh0bWwvSFRNTERMaXN0RWxlbWVudC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudDo6SFRNTERMaXN0RWxlbWVudCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRExpc3RFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwv
SFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxE
aXJlY3RvcnlFbGVtZW50OjpIVE1MRGlyZWN0b3J5RWxlbWVudCk6CisgICAgICAgICogaHRtbC9I
VE1MRGlyZWN0b3J5RWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50
RmFjdG9yeS5jcHA6CisgICAgICAgICogaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHA6CisgICAg
ICAgICogaHRtbC9IVE1MTElFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MTElFbGVtZW50OjpIVE1MTElFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMSUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMSUVs
ZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTElFbGVtZW50OjpzZXRUeXBl
KToKKyAgICAgICAgKiBodG1sL0hUTUxMSUVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgICogaHRt
bC9IVE1MTWVudUVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZW51
RWxlbWVudDo6SFRNTE1lbnVFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxNZW51RWxlbWVu
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQ6OkhUTUxPTGlzdEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudDo6c2V0VHlwZSk6CisgICAgICAg
ICogaHRtbC9IVE1MT0xpc3RFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9MaXN0RWxlbWVudDo6c3RhcnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpjaGVja0RURCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6c2V0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudDo6Z2V0U2VsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50OjpzZXRMYWJlbCk6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6SFRNTFNl
bGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFVMaXN0RWxlbWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudDo6SFRNTFVMaXN0RWxlbWVudCk6
CisgICAgICAgICogaHRtbC9IVE1MVUxpc3RFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGh0
bWwvaHRtbF9saXN0aW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9odG1sX2xpc3Rp
bXBsLmg6IFJlbW92ZWQuCisgICAgICAgICoga3dxL1dlYkNvcmVBWE9iamVjdC5tbToKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL0xp
c3RNYXJrZXJCb3guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxpc3RNYXJrZXJCb3g6
Okxpc3RNYXJrZXJCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGlzdE1hcmtlckJveDo6aXNUZXh0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGlzdE1hcmtlckJveC5oOiBBZGRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0
ZUxpc3RNYXJrZXJOdW1iZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvbnRhaW5lcjo6
YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjpyZW1vdmVDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQm94ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjpwb3NpdGlvbkZvckNvb3JkaW5h
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvbnRhaW5lcjo6bGluZUJveFJlY3RzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpSZW5kZXJMaXN0SXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0SXRlbTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGlzdEl0ZW06OmNhbGNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6
bWFya2VyU3RyaW5nVmFsdWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpyZW5kZXJOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpzZXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6c2V0Tm90SW5MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RJdGVtOjpub3RJbkxpc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2Vy
OjpSZW5kZXJMaXN0TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6
OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmxheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpjYWxjTWluTWF4V2lkdGgpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdE1hcmtlcjo6cmVuZGVyTmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuaDogUmVtb3ZlZC4KKwogMjAwNi0wNS0x
NSAgU2FtIFdlaW5pZyAgPHNhbS53ZWluaWdAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IGVzZWlkZWwuCkluZGV4OiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDE0MzgyKQorKysgV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjA2NywxMSArMjA2NywyOCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxyZW5kZXJpbmdccmVuZGVyX2xp
c3QuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJlbmRlcmluZ1xMaXN0TWFya2VyQm94
LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHJlbmRlcmluZ1xyZW5kZXJfbGlzdC5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHJlbmRlcmluZ1xMaXN0TWFya2VyQm94LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorDQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxyZW5kZXJpbmdcUmVuZGVyTGlzdEl0ZW0u
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5ccmVuZGVyaW5nXFJlbmRlckxpc3RJdGVtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxyZW5kZXJpbmdcUmVuZGVyTGlzdE1h
cmtlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxyZW5kZXJpbmdcUmVuZGVyTGlzdE1hcmtlci5oIg0KIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQpAQCAtMzIyNywxMSArMzI0NCw1MSBAQAogCQkJCT4NCiAJCQk8L0Zp
bGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxodG1sXGh0bWxfbGlzdGlt
cGwuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTERpcmVjdG9yeUVsZW1l
bnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5caHRtbFxIVE1MRGlyZWN0b3J5RWxlbWVudC5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
PgkNCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTE9MaXN0RWxl
bWVudC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxodG1sXEhUTUxPTGlzdEVsZW1lbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTE1lbnVFbGVtZW50
LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGh0bWxcSFRNTE1lbnVFbGVtZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxodG1sXEhUTUxVTGlzdEVsZW1lbnQuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caHRtbFxIVE1MVUxpc3RFbGVtZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxodG1sXEhUTUxETGlzdEVsZW1lbnQuY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aHRtbFxIVE1MRExpc3RFbGVtZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxodG1sXEhUTUxMSUVsZW1lbnQuY3BwIg0KIAkJCQk+
DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caHRtbFxo
dG1sX2xpc3RpbXBsLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caHRtbFxIVE1MTElFbGVt
ZW50LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogICAgICAgPEZpbGUNCkluZGV4OiBicmlkZ2Uv
bWFjL0ZyYW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvRnJhbWVNYWMubW0JKHJl
dmlzaW9uIDE0MzgyKQorKysgYnJpZGdlL21hYy9GcmFtZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTYsNiArNTYsNyBAQAogI2ltcG9ydCAiUmVndWxhckV4cHJlc3Npb24uaCIKICNpbXBvcnQg
IlJlbmRlckNhbnZhcy5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKKyNpbXBvcnQgIlJlbmRl
ckxpc3RJdGVtLmgiCiAjaW1wb3J0ICJSZW5kZXJQYXJ0LmgiCiAjaW1wb3J0ICJSZW5kZXJUYWJs
ZUNlbGwuaCIKICNpbXBvcnQgIlJlbmRlclRoZW1lLmgiCkBAIC02Niw3ICs2Nyw2IEBACiAjaW1w
b3J0ICJXZWJEYXNoYm9hcmRSZWdpb24uaCIKICNpbXBvcnQgImNzc2hlbHBlci5oIgogI2ltcG9y
dCAia2pzX3dpbmRvdy5oIgotI2ltcG9ydCAicmVuZGVyX2xpc3QuaCIKICNpbXBvcnQgInZpc2li
bGVfdW5pdHMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL05QX2pzb2JqZWN0Lmg+CiAjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+CkluZGV4OiBrd3Ev
V2ViQ29yZUFYT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9XZWJDb3JlQVhPYmplY3QubW0J
KHJldmlzaW9uIDE0MzgyKQorKysga3dxL1dlYkNvcmVBWE9iamVjdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJSZW5k
ZXJDYW52YXMuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCisjaW1wb3J0ICJSZW5kZXJMaXN0
TWFya2VyLmgiCiAjaW1wb3J0ICJSZW5kZXJUaGVtZS5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0
LmgiCiAjaW1wb3J0ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC01MCw3ICs1MSw2IEBACiAj
aW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKICNpbXBvcnQgImh0bWxfaW1hZ2VpbXBsLmgi
CiAjaW1wb3J0ICJranNfaHRtbC5oIgotI2ltcG9ydCAicmVuZGVyX2xpc3QuaCIKICNpbXBvcnQg
InZpc2libGVfdW5pdHMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cg==
</data>
<flag name="review"
          id="2345"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>