<?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>21989</bug_id>
          
          <creation_ts>2008-10-30 16:11:24 -0700</creation_ts>
          <short_desc>Merge PropertyMap and StructureID</short_desc>
          <delta_ts>2008-10-30 17:13:09 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>97187</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-30 16:11:24 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97188</commentid>
    <comment_count>1</comment_count>
      <attachid>24785</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-30 16:17:01 -0700</bug_when>
    <thetext>Created attachment 24785
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97189</commentid>
    <comment_count>2</comment_count>
      <attachid>24785</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-30 16:23:53 -0700</bug_when>
    <thetext>Comment on attachment 24785
patch

You have an extra newline at the beginning of StructureID.h.

Other than that, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97191</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-30 16:29:17 -0700</bug_when>
    <thetext>I don&apos;t think the rename to &quot;checkConsistencyOfPropertyMapHashTable&quot; is an improvement. Other than that, r=me.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97195</commentid>
    <comment_count>4</comment_count>
      <attachid>24785</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-30 17:09:00 -0700</bug_when>
    <thetext>Comment on attachment 24785
patch

I should actually set the review flag, but I agree with Geoff&apos;s comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97198</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-30 17:13:09 -0700</bug_when>
    <thetext>Landed in r38016.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24785</attachid>
            <date>2008-10-30 16:17:01 -0700</date>
            <delta_ts>2008-10-30 17:09:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>merger.diff</filename>
            <type>text/plain</type>
            <size>77359</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4MDEy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMDgtMTAt
MzAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTk4OQorICAgICAgICBNZXJnZSBQcm9wZXJ0eU1hcCBhbmQgU3Ry
dWN0dXJlSUQKKworICAgICAgICAtIE1vdmUgUHJvcGVydHlNYXAgY29kZSBpbnRvIFN0cnVjdHVy
ZUlEIGluIHByZXBhcmF0aW9uIGZvciBsYXppbHkKKyAgICAgICAgICBjcmVhdGluZyB0aGUgbWFw
IG9uIGdldHMuCisgICAgICAgIC0gTWFrZSByZW1vdmUgd2l0aCB0cmFuc2l0aW9uIGV4cGxpY2l0
IGJ5IGFkZGluZyByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24uCisgICAgICAgIC0gTWFrZSB0aGUg
cHV0L3JlbW92ZSB3aXRob3V0IHRyYW5zaXRpb24gZXhwbGljaXQuCisgICAgICAgIC0gTWFrZSBj
YWNoZSBpbnZhbGlkYXRpb24gcGFydCBvZiBwdXQvcmVtb3ZlIHdpdGhvdXQgdHJhbnNpdGlvbi4K
KworICAgICAgICAxJSBzcGVlZHVwIG9uIFN1blNwaWRlcjsgMC41JSBzcGVlZHVwIG9uIHY4IHN1
aXRlLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnByaToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBranMvQWxsSW5PbmVGaWxl
LmNwcDoKKyAgICAgICAgKiBranMvaWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cmVtb3ZlRGlyZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJl
Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXAuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvcGVydHlNYXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL1By
b3BlcnR5TWFwSGFzaFRhYmxlLmg6IENvcGllZCBmcm9tIHJ1bnRpbWUvUHJvcGVydHlNYXAuaC4K
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlELmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlSUQ6OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OlN0cnVj
dHVyZUlEKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6On5TdHJ1Y3R1cmVJRCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZUlEOjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZUlEOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVJRDo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlSUQ6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVJRDo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUlEOjpnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlSUQ6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJRDo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OlByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXI6On5Qcm9wZXJ0eU1hcFN0YXRpc3RpY3NF
eGl0TG9nZ2VyKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OmNoZWNrQ29uc2lzdGVuY3lP
ZlByb3BlcnR5TWFwSGFzaFRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OmNvcHlQ
cm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OmdldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUlEOjpwdXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6cmVt
b3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6Omluc2VydEludG9Qcm9wZXJ0eU1hcEhh
c2hUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjpleHBhbmRQcm9wZXJ0eU1hcEhh
c2hUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGVQcm9wZXJ0eU1hcEhh
c2hUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjpyZWhhc2hQcm9wZXJ0eU1hcEhh
c2hUYWJsZSk6CisgICAgICAgIChKU0M6OmNvbXBhcmVQcm9wZXJ0eU1hcEVudHJ5SW5kaWNlcyk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lc0lu
dGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlELmg6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZUlEOjpwcm9wZXJ0eVN0b3JhZ2VTaXplKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlSUQ6OmlzRW1wdHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6Z2V0KToKKwogMjAw
OC0xMC0zMCAgQ2FtZXJvbiBad2FyaWNoICA8endhcmljaEBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBHTlVtYWtlZmlsZS5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBHTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzc5ODUpCisrKyBHTlVtYWtlZmlsZS5hbQko
d29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIxOCw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmggXAogCUphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaCBcCiAJSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RQcm90b3R5cGUuaCBcCi0JSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eU1hcC5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxl
LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmggXAogCUphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlRnVuY3Rpb24uaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9QdXRQcm9wZXJ0eVNsb3QuaCBcCkBAIC0zNzUsNyArMzc1LDYgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUu
Y3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcCBcCiAJ
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwIFwKLQlKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVNsb3QuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZUZ1bmN0
aW9uLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAg
XApJbmRleDogSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
LmV4cAkocmV2aXNpb24gMzc5ODkpCisrKyBKYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSw4ICsxMDksNiBAQCBfX1pOM0pTQzExSlNJbW1lZGlhdGU4dG9TdHJpbmdFUE5T
XzdKU1ZhCiBfX1pOM0pTQzExSlNJbW1lZGlhdGU5cHJvdG90eXBlRVBOU183SlNWYWx1ZUVQTlNf
OUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTFQcm9maWxlTm9kZTRzb3J0RVBGYlJLTjNXVEY2UmVmUHRy
SVMwX0VFUzVfRQogX19aTjNKU0MxMVByb2dyYW1Ob2RlNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERh
dGFFUE5TXzE0U291cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySU5TXzEwSWRlbnRp
ZmllckVqRUxtMTZFRUVQTlM2X0lOUzVfNlJlZlB0cklOU18xMkZ1bmNEZWNsTm9kZUVFRUxtMTZF
RUVSS05TXzEwU291cmNlQ29kZUVqaQotX19aTjNKU0MxMVByb3BlcnR5TWFwM3B1dEVSS05TXzEw
SWRlbnRpZmllckVqCi1fX1pOM0pTQzExUHJvcGVydHlNYXBEMUV2CiBfX1pOM0pTQzExU3RydWN0
dXJlSUQxN3N0b3BJZ25vcmluZ0xlYWtzRXYKIF9fWk4zSlNDMTFTdHJ1Y3R1cmVJRDE4c3RhcnRJ
Z25vcmluZ0xlYWtzRXYKIF9fWk4zSlNDMTFTdHJ1Y3R1cmVJRDIxYWRkUHJvcGVydHlUcmFuc2l0
aW9uRVBTMF9SS05TXzEwSWRlbnRpZmllckVqUm0KQEAgLTExOCw2ICsxMTYsNyBAQCBfX1pOM0pT
QzExU3RydWN0dXJlSUQyMWNsZWFyRW51bWVyYXRpb25DCiBfX1pOM0pTQzExU3RydWN0dXJlSUQy
NGZyb21EaWN0aW9uYXJ5VHJhbnNpdGlvbkVQUzBfCiBfX1pOM0pTQzExU3RydWN0dXJlSUQyNWNo
YW5nZVByb3RvdHlwZVRyYW5zaXRpb25FUFMwX1BOU183SlNWYWx1ZUUKIF9fWk4zSlNDMTFTdHJ1
Y3R1cmVJRDI3Z3Jvd1Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5RXYKK19fWk4zSlNDMTFTdHJ1Y3R1
cmVJRDI4YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbkVSS05TXzEwSWRlbnRpZmllckVqCiBf
X1pOM0pTQzExU3RydWN0dXJlSURDMUVQTlNfN0pTVmFsdWVFUktOU184VHlwZUluZm9FCiBfX1pO
M0pTQzExU3RydWN0dXJlSUREMUV2CiBfX1pOM0pTQzEyRGF0ZUluc3RhbmNlNGluZm9FCkBAIC0z
MDMsNyArMzAyLDcgQEAgX19aTjNXVEY4Q29sbGF0b3IxOHNldE9yZGVyTG93ZXJGaXJzdEViCiBf
X1pOM1dURjhDb2xsYXRvckMxRVBLYwogX19aTjNXVEY4Q29sbGF0b3JEMUV2CiBfX1pOM1dURjhm
YXN0RnJlZUVQdgotX19aTkszSlNDMTFQcm9wZXJ0eU1hcDNnZXRFUktOU18xMElkZW50aWZpZXJF
UmoKK19fWk5LM0pTQzExU3RydWN0dXJlSUQzZ2V0RVJLTlNfMTBJZGVudGlmaWVyRVJqCiBfX1pO
SzNKU0MxMkRhdGVJbnN0YW5jZTdnZXRUaW1lRVJkUmkKIF9fWk5LM0pTQzEyU3RyaW5nT2JqZWN0
MTJ0b1RoaXNTdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0MxMlN0cmluZ09iamVjdDh0
b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKSW5kZXg6IEphdmFTY3JpcHRDb3JlLnByaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5wcmkJKHJldmlzaW9uIDM3OTczKQorKysgSmF2YVNjcmlw
dENvcmUucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDYgQEAgU09VUkNFUyArPSBc
CiAgICAgcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwIFwKICAgICBranMvb3BlcmF0aW9ucy5j
cHAgXAogICAgIGtqcy9QYXJzZXIuY3BwIFwKLSAgICBydW50aW1lL1Byb3BlcnR5TWFwLmNwcCBc
CiAgICAga2pzL1Byb3BlcnR5TmFtZUFycmF5LmNwcCBcCiAgICAgcnVudGltZS9Qcm9wZXJ0eVNs
b3QuY3BwIFwKICAgICBydW50aW1lL1Byb3RvdHlwZUZ1bmN0aW9uLmNwcCBcCkluZGV4OiBKYXZh
U2NyaXB0Q29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlU291cmNl
cy5ia2wJKHJldmlzaW9uIDM3OTczKQorKysgSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw2IEBAIFNvdXJjZSBmaWxlcyBmb3IgSlNDb3JlLgog
ICAgICAgICBranMvT2JqZWN0UHJvdG90eXBlLmNwcAogICAgICAgICBranMvb3BlcmF0aW9ucy5j
cHAKICAgICAgICAga2pzL1BhcnNlci5jcHAKLSAgICAgICAga2pzL1Byb3BlcnR5TWFwLmNwcAog
ICAgICAgICBranMvUHJvcGVydHlOYW1lQXJyYXkuY3BwCiAgICAgICAgIGtqcy9Qcm9wZXJ0eVNs
b3QuY3BwCiAgICAgICAgIGtqcy9Qcm90b3R5cGVGdW5jdGlvbi5jcHAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvagkocmV2aXNpb24gMzc5ODUpCisrKyBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NDks
MTEgKzc0OSw3IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUHJvcGVydHlNYXAuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxl
Pg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQcm9wZXJ0eU1h
cC5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUHJvcGVydHlNYXBIYXNoVGFi
bGUuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KSW5kZXg6IEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzc5ODUpCisrKyBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEs
NyArMjMxLDYgQEAKIAkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1NzQyRjY0MEREMTFG
NUEwMDA5MTdGQiAvKiBQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NUFCODM1
NTBEQTQzQjQ0MDBCQzgzRjMgLyogUHJvZmlsZU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ1MjBFMTZGNUNEMDBCMzQ0NjAgLyog
UHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk1QUI4MzJGMERBNDJDQUQwMEJDODNGMyAvKiBQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDMThDNDUzMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBQcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjY5MkE4N0EwMjU1NTk3RDAxRkY2MEY3IC8qIFByb3BlcnR5TWFwLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NTQwRTE2
RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5TmFtZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQwMEMxMDBBNjlCQUYyMDA1MDk4ODcgLyogUHJv
cGVydHlOYW1lQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQzE4QzQ1NTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvcGVydHlTbG90LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTYyMUU2QzA4OUU4
NTk3MDA3NjBGMzUgLyogUHJvcGVydHlTbG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIHByb3Rl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QzAy
RkJCMDYzNzQ2MkEwMDNFN0VFNiAvKiBwcm90ZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4Myw2ICsyODIsNyBAQAogCQlCQzc1NkZDOTBF
MjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzU2RkM3MEUyMDMxQjIwMERFN0Qx
MiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oICovOyB9OwogCQlCQzdGOEZCOTBFMTlEMUMz
MDA4NjMyQzAgLyogSlNOdW1iZXJDZWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzdGOEZCODBFMTlEMUMzMDA4NjMyQzAgLyogSlNOdW1iZXJDZWxs
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM5
MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZUlEVHJhbnNpdGlvblRhYmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzkwNDE0NzBFQjky
NTA5MDBGRTI2RkEgLyogU3RydWN0dXJlSURUcmFuc2l0aW9uVGFibGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzk1NDM3RDBFQkE3MEZEMDA3
MkI2RDMgLyogUHJvcGVydHlNYXBIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOTU0MzdDMEVCQTcwRkQwMDcyQjZEMyAvKiBQcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oICovOyB9OwogCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVn
RXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRDIwMkJFMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oICov
OyB9OwogCQlCQ0QyMDJDNDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QyMDJDMDBFMTcw
NkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggKi87IH07CiAJCUJDRDIwMkQ2MEUxNzA3
MDgwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDIwMkQ1MEUxNzA3MDgwMDJDN0U4MiAvKiBS
ZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKQEAgLTY1Niw2ICs2NTYsNyBAQAogCQlCQzdG
OEZCQTBFMTlEMUVGMDA4NjMyQzAgLyogSlNDZWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQ2VsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDOEYzQ0NGMERBRjE3QkEwMDU3N0E4MCAvKiBDb25zdHJ1Y3REYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cnVjdERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkM5MDQxNDcwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZUlEVHJhbnNp
dGlvblRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlE
VHJhbnNpdGlvblRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOTU0MzdD
MEVCQTcwRkQwMDcyQjZEMyAvKiBQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5j
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcm5hbEZ1
bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBNjJERkUwRTI4MjYy
MzAwMDRGMzBEIC8qIENhbGxEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENhbGxEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBNjJE
RkYwRTI4MjYzMTAwMDRGMzBEIC8qIENvbnN0cnVjdERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RydWN0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03MjgsOCArNzI5LDYgQEAKIAkJRjY5MkE4NzEwMjU1NTk3RDAxRkY2MEY3
IC8qIE51bWJlck9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOdW1iZXJPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB9OwogCQlGNjkyQTg3NzAyNTU1OTdEMDFGRjYwRjcgLyogb3BlcmF0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBvcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9
OwogCQlGNjkyQTg3ODAyNTU1OTdEMDFGRjYwRjcgLyogb3BlcmF0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBvcGVyYXRpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKLQkJRjY5MkE4NzkwMjU1NTk3
RDAxRkY2MEY3IC8qIFByb3BlcnR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5TWFwLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwotCQlGNjkyQTg3QTAyNTU1OTdEMDFGRjYwRjcg
LyogUHJvcGVydHlNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHJvcGVydHlNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB9OwogCQlGNjkyQTg3QjAyNTU1OTdEMDFGRjYwRjcgLyogUmVnRXhwT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZ0V4cE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
fTsKIAkJRjY5MkE4N0MwMjU1NTk3RDAxRkY2MEY3IC8qIFJlZ0V4cE9iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBPYmplY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNjkyQTg3RDAy
NTU1OTdEMDFGRjYwRjcgLyogcmVnZXhwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHJlZ2V4cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgfTsKQEAgLTEyNDUsOCArMTI0NCw3IEBACiAJCQkJQkMyNjgw
QzcwRTE2RDRFOTAwQTA2RTkyIC8qIE9iamVjdENvbnN0cnVjdG9yLmggKi8sCiAJCQkJQkMyNjgw
QzgwRTE2RDRFOTAwQTA2RTkyIC8qIE9iamVjdFByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMyNjgw
QzkwRTE2RDRFOTAwQTA2RTkyIC8qIE9iamVjdFByb3RvdHlwZS5oICovLAotCQkJCUY2OTJBODc5
MDI1NTU5N0QwMUZGNjBGNyAvKiBQcm9wZXJ0eU1hcC5jcHAgKi8sCi0JCQkJRjY5MkE4N0EwMjU1
NTk3RDAxRkY2MEY3IC8qIFByb3BlcnR5TWFwLmggKi8sCisJCQkJQkM5NTQzN0MwRUJBNzBGRDAw
NzJCNkQzIC8qIFByb3BlcnR5TWFwSGFzaFRhYmxlLmggKi8sCiAJCQkJNjU2MjFFNkIwODlFODU5
NzAwNzYwRjM1IC8qIFByb3BlcnR5U2xvdC5jcHAgKi8sCiAJCQkJNjU2MjFFNkMwODlFODU5NzAw
NzYwRjM1IC8qIFByb3BlcnR5U2xvdC5oICovLAogCQkJCUJDMjU3REYxMEUxRjUzNzQwMDE2QjZD
OSAvKiBQcm90b3R5cGVGdW5jdGlvbi5jcHAgKi8sCkBAIC0xNDYyLDcgKzE0NjAsNiBAQAogCQkJ
CUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDUyMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQkMxOEM0NTMwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5TWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ1NDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvcGVydHlOYW1lQXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9w
ZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBwcm90ZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTE1NTEsNiArMTU0OCw3IEBACiAJCQkJODY5
RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0RjM0ODhGMEU5NUVGOEEwMDM2NDhCQyAvKiBDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVJRFRy
YW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM5NTQzN0QwRUJBNzBGRDAwNzJC
NkQzIC8qIFByb3BlcnR5TWFwSGFzaFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGtqcy9B
bGxJbk9uZUZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9BbGxJbk9uZUZpbGUuY3BwCShyZXZp
c2lvbiAzNzk3MykKKysrIGtqcy9BbGxJbk9uZUZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw2IEBACiAjaW5jbHVkZSAicnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwIgogI2lu
Y2x1ZGUgIm9wZXJhdGlvbnMuY3BwIgogI2luY2x1ZGUgIlBhcnNlci5jcHAiCi0jaW5jbHVkZSAi
cnVudGltZS9Qcm9wZXJ0eU1hcC5jcHAiCiAjaW5jbHVkZSAicnVudGltZS9Qcm9wZXJ0eVNsb3Qu
Y3BwIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmNwcCIKICNpbmNsdWRlICJyZWdleHAu
Y3BwIgpJbmRleDoga2pzL2lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvaWRlbnRpZmll
ci5oCShyZXZpc2lvbiAzNzk3MykKKysrIGtqcy9pZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwog
CiAgICAgY2xhc3MgSWRlbnRpZmllciB7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eU1h
cDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZUlEOwogICAgIHB1YmxpYzoKICAgICAg
ICAgSWRlbnRpZmllcigpIHsgfQogCkluZGV4OiBydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMzc5ODkpCisrKyBydW50aW1l
L0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY3LDE2ICs0NjcsMTMgQEAgdm9pZCBK
U09iamVjdDo6cmVtb3ZlRGlyZWN0KGNvbnN0IElkZW50aQogewogICAgIHNpemVfdCBvZmZzZXQ7
CiAgICAgaWYgKG1fc3RydWN0dXJlSUQtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIG9mZnNl
dCA9IG1fc3RydWN0dXJlSUQtPnJlbW92ZShwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAob2Zm
c2V0ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgb2Zmc2V0ID0gbV9zdHJ1Y3R1cmVJRC0+
cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihwcm9wZXJ0eU5hbWUpOworICAgICAgICBp
ZiAob2Zmc2V0ICE9IFdURjo6bm90Rm91bmQpCiAgICAgICAgICAgICBtX3Byb3BlcnR5U3RvcmFn
ZVtvZmZzZXRdID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIG1fc3RydWN0dXJlSUQtPmNs
ZWFyRW51bWVyYXRpb25DYWNoZSgpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQ6OnRv
RGljdGlvbmFyeVRyYW5zaXRpb24obV9zdHJ1Y3R1cmVJRCk7Ci0gICAgb2Zmc2V0ID0gc3RydWN0
dXJlSUQtPnJlbW92ZShwcm9wZXJ0eU5hbWUpOworICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gc3Ry
dWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRDo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKG1fc3RydWN0
dXJlSUQsIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKICAgICBpZiAob2Zmc2V0ICE9IFdURjo6bm90
Rm91bmQpCiAgICAgICAgIG1fcHJvcGVydHlTdG9yYWdlW29mZnNldF0gPSBqc1VuZGVmaW5lZCgp
OwogICAgIHNldFN0cnVjdHVyZUlEKHN0cnVjdHVyZUlELnJlbGVhc2UoKSk7CkluZGV4OiBydW50
aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAzNzk4OSkKKysrIHJ1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDE1
ICszOTksMTMgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChjb25zdCBJZAogICAg
ICAgICB9CiAKICAgICAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IG1fc3RydWN0dXJlSUQt
PnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCk7Ci0gICAgICAgIG9mZnNldCA9IG1fc3RydWN0dXJl
SUQtPnB1dChwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAobV9zdHJ1Y3R1
cmVJRC0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpID4gbV9zdHJ1Y3R1cmVJRC0+cHJvcGVydHlTdG9y
YWdlQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgbV9zdHJ1Y3R1cmVJRC0+Z3Jvd1Byb3BlcnR5
U3RvcmFnZUNhcGFjaXR5KCk7CisgICAgICAgIG9mZnNldCA9IG1fc3RydWN0dXJlSUQtPmFkZFBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24ocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICAg
ICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBtX3N0cnVjdHVyZUlELT5wcm9wZXJ0eVN0b3JhZ2VD
YXBhY2l0eSgpKQogICAgICAgICAgICAgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoY3VycmVudENh
cGFjaXR5LCBtX3N0cnVjdHVyZUlELT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAg
ICAgfQogCisgICAgICAgIEFTU0VSVChvZmZzZXQgPCBtX3N0cnVjdHVyZUlELT5wcm9wZXJ0eVN0
b3JhZ2VDYXBhY2l0eSgpKTsKICAgICAgICAgbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XSA9IHZh
bHVlOwogICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgICAg
IG1fc3RydWN0dXJlSUQtPmNsZWFyRW51bWVyYXRpb25DYWNoZSgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkluZGV4OiBydW50aW1lL1Byb3BlcnR5TWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
dW50aW1lL1Byb3BlcnR5TWFwLmNwcAkocmV2aXNpb24gMzc5ODkpCisrKyBydW50aW1lL1Byb3Bl
cnR5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NDUgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlByb3BlcnR5TWFwLmgiCi0KLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIlBy
b3BlcnR5TmFtZUFycmF5LmgiCi0jaW5jbHVkZSAicHJvdGVjdC5oIgotI2luY2x1ZGUgPGFsZ29y
aXRobT4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotdXNpbmcgc3RkOjptYXg7Ci11c2luZyBXVEY6OmRvdWJsZUhhc2g7Ci0KLSNpZm5kZWYg
TkRFQlVHCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSyAwCi0jZWxzZQot
I2RlZmluZSBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2VuZGlmCi0KLW5hbWVz
cGFjZSBKU0MgewotCi0vLyBDaG9vc2UgYSBudW1iZXIgZm9yIHRoZSBmb2xsb3dpbmcgc28gdGhh
dCBtb3N0IHByb3BlcnR5IG1hcHMgYXJlIHNtYWxsZXIsCi0vLyBidXQgaXQncyBub3QgZ29pbmcg
dG8gYmxvdyBvdXQgdGhlIHN0YWNrIHRvIGFsbG9jYXRlIHRoaXMgbnVtYmVyIG9mIHBvaW50ZXJz
Lgotc3RhdGljIGNvbnN0IGludCBzbWFsbE1hcFRocmVzaG9sZCA9IDEwMjQ7Ci0KLS8vIFRoZSBw
b2ludCBhdCB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCBvZiB0aGUgcXNvcnQgaW1w
bGVtZW50YXRpb24KLS8vIGJlY29tZXMgc21hbGwgY29tcGFyZWQgdG8gdGhlIGluZWZmaWNpZW5j
eSBvZiBpbnNlcnRpb24gc29ydC4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCB0aW55TWFwVGhyZXNo
b2xkID0gMjA7Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0KLXN0YXRpYyBpbnQgbnVt
UHJvYmVzOwotc3RhdGljIGludCBudW1Db2xsaXNpb25zOwotc3RhdGljIGludCBudW1SZWhhc2hl
czsKLXN0YXRpYyBpbnQgbnVtUmVtb3ZlczsKLQotc3RydWN0IFByb3BlcnR5TWFwU3RhdGlzdGlj
c0V4aXRMb2dnZXIgewotICAgIH5Qcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyKCk7Ci19
OwotCi1zdGF0aWMgUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlciBsb2dnZXI7Ci0KLVBy
b3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXI6On5Qcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0
TG9nZ2VyKCkKLXsKLSAgICBwcmludGYoIlxuSlNDOjpQcm9wZXJ0eU1hcCBzdGF0aXN0aWNzXG5c
biIpOwotICAgIHByaW50ZigiJWQgcHJvYmVzXG4iLCBudW1Qcm9iZXMpOwotICAgIHByaW50Zigi
JWQgY29sbGlzaW9ucyAoJS4xZiUlKVxuIiwgbnVtQ29sbGlzaW9ucywgMTAwLjAgKiBudW1Db2xs
aXNpb25zIC8gbnVtUHJvYmVzKTsKLSAgICBwcmludGYoIiVkIHJlaGFzaGVzXG4iLCBudW1SZWhh
c2hlcyk7Ci0gICAgcHJpbnRmKCIlZCByZW1vdmVzXG4iLCBudW1SZW1vdmVzKTsKLX0KLQotI2Vu
ZGlmCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWxldGVkU2VudGluZWxJbmRleCA9IDE7Ci0K
LSNpZiAhRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCi0KLWlubGluZSB2b2lkIFByb3Bl
cnR5TWFwOjpjaGVja0NvbnNpc3RlbmN5KCkKLXsKLX0KLQotI2VuZGlmCi0KLVByb3BlcnR5TWFw
JiBQcm9wZXJ0eU1hcDo6b3BlcmF0b3I9KGNvbnN0IFByb3BlcnR5TWFwJiBvdGhlcikKLXsKLSAg
ICBpZiAob3RoZXIubV90YWJsZSkgewotICAgICAgICBzaXplX3QgdGFibGVTaXplID0gVGFibGU6
OmFsbG9jYXRpb25TaXplKG90aGVyLm1fdGFibGUtPnNpemUpOwotICAgICAgICBtX3RhYmxlID0g
c3RhdGljX2Nhc3Q8VGFibGUqPihmYXN0TWFsbG9jKHRhYmxlU2l6ZSkpOwotICAgICAgICBtZW1j
cHkobV90YWJsZSwgb3RoZXIubV90YWJsZSwgdGFibGVTaXplKTsKLQotICAgICAgICB1bnNpZ25l
ZCBlbnRyeUNvdW50ID0gbV90YWJsZS0+a2V5Q291bnQgKyBtX3RhYmxlLT5kZWxldGVkU2VudGlu
ZWxDb3VudDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBlbnRyeUNvdW50OyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChVU3RyaW5nOjpSZXAqIGtleSA9IG1fdGFibGUtPmVudHJp
ZXMoKVtpXS5rZXkpCi0gICAgICAgICAgICAgICAga2V5LT5yZWYoKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1fZGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzOwotICAg
IHJldHVybiAqdGhpczsKLX0KLQotUHJvcGVydHlNYXA6On5Qcm9wZXJ0eU1hcCgpCi17Ci0gICAg
aWYgKCFtX3RhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBlbnRyeUNvdW50
ID0gbV90YWJsZS0+a2V5Q291bnQgKyBtX3RhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IGVudHJ5Q291bnQ7IGkrKykgewotICAgICAgICBp
ZiAoVVN0cmluZzo6UmVwKiBrZXkgPSBtX3RhYmxlLT5lbnRyaWVzKClbaV0ua2V5KQotICAgICAg
ICAgICAga2V5LT5kZXJlZigpOwotICAgIH0KLSAgICBmYXN0RnJlZShtX3RhYmxlKTsKLX0KLQot
c2l6ZV90IFByb3BlcnR5TWFwOjpwdXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQotewotICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzTnVsbCgp
KTsKLSAgICBBU1NFUlQoZ2V0KHByb3BlcnR5TmFtZSkgPT0gV1RGOjpub3RGb3VuZCk7Ci0KLSAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBVU3RyaW5nOjpSZXAqIHJlcCA9IHByb3BlcnR5
TmFtZS5fdXN0cmluZy5yZXAoKTsKLQotICAgIGlmICghbV90YWJsZSkKLSAgICAgICAgY3JlYXRl
VGFibGUoKTsKLQotICAgIC8vIEZJWE1FOiBDb25zaWRlciBhIGZhc3QgY2FzZSBmb3IgdGFibGVz
IHdpdGggbm8gZGVsZXRlZCBzZW50aW5lbHMuCi0KLSAgICB1bnNpZ25lZCBpID0gcmVwLT5jb21w
dXRlZEhhc2goKTsKLSAgICB1bnNpZ25lZCBrID0gMDsKLSAgICBib29sIGZvdW5kRGVsZXRlZEVs
ZW1lbnQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBkZWxldGVkRWxlbWVudEluZGV4ID0gMDsgLy8g
aW5pdGlhbGl6ZSB0byBtYWtlIHRoZSBjb21waWxlciBoYXBweQotCi0jaWYgRFVNUF9QUk9QRVJU
WU1BUF9TVEFUUwotICAgICsrbnVtUHJvYmVzOwotI2VuZGlmCi0KLSAgICB3aGlsZSAoMSkgewot
ICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV90YWJsZS0+ZW50cnlJbmRpY2VzW2kgJiBt
X3RhYmxlLT5zaXplTWFza107Ci0gICAgICAgIGlmIChlbnRyeUluZGV4ID09IGVtcHR5RW50cnlJ
bmRleCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChlbnRyeUluZGV4ID09IGRl
bGV0ZWRTZW50aW5lbEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBmaW5kIGEgZGVsZXRl
ZC1lbGVtZW50IHNlbnRpbmVsLCByZW1lbWJlciBpdCBmb3IgdXNlIGxhdGVyLgotICAgICAgICAg
ICAgaWYgKCFmb3VuZERlbGV0ZWRFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgZm91bmREZWxl
dGVkRWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRJbmRleCA9
IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoayA9PSAwKSB7Ci0g
ICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2gocmVwLT5jb21wdXRlZEhhc2goKSk7Ci0jaWYg
RFVNUF9QUk9QRVJUWU1BUF9TVEFUUwotICAgICAgICAgICAgKytudW1Db2xsaXNpb25zOwotI2Vu
ZGlmCi0gICAgICAgIH0KLQotICAgICAgICBpICs9IGs7Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQ
X1NUQVRTCi0gICAgICAgICsrbnVtUmVoYXNoZXM7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBG
aWd1cmUgb3V0IHdoaWNoIGVudHJ5IHRvIHVzZS4KLSAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0g
bV90YWJsZS0+a2V5Q291bnQgKyBtX3RhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudCArIDI7Ci0g
ICAgaWYgKGZvdW5kRGVsZXRlZEVsZW1lbnQpIHsKLSAgICAgICAgaSA9IGRlbGV0ZWRFbGVtZW50
SW5kZXg7Ci0gICAgICAgIC0tbV90YWJsZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQ7Ci0KLSAgICAg
ICAgLy8gU2luY2Ugd2UncmUgbm90IG1ha2luZyB0aGUgdGFibGUgYmlnZ2VyLCB3ZSBjYW4ndCB1
c2UgdGhlIGVudHJ5IG9uZSBwYXN0Ci0gICAgICAgIC8vIHRoZSBlbmQgdGhhdCB3ZSB3ZXJlIHBs
YW5uaW5nIG9uIHVzaW5nLCBzbyBzZWFyY2ggYmFja3dhcmRzIGZvciB0aGUgZW1wdHkKLSAgICAg
ICAgLy8gc2xvdCB0aGF0IHdlIGNhbiB1c2UuIFdlIGtub3cgaXQgd2lsbCBiZSB0aGVyZSBiZWNh
dXNlIHdlIGRpZCBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gZGVsZXRpb24gaW4gdGhlIHBhc3Qg
dGhhdCBsZWZ0IGFuIGVudHJ5IGVtcHR5LgotICAgICAgICB3aGlsZSAobV90YWJsZS0+ZW50cmll
cygpWy0tZW50cnlJbmRleCAtIDFdLmtleSkgeyB9Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEg
bmV3IGhhc2ggdGFibGUgZW50cnkuCi0gICAgbV90YWJsZS0+ZW50cnlJbmRpY2VzW2kgJiBtX3Rh
YmxlLT5zaXplTWFza10gPSBlbnRyeUluZGV4OwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGhhc2gg
dGFibGUgZW50cnkuCi0gICAgcmVwLT5yZWYoKTsKLSAgICBtX3RhYmxlLT5lbnRyaWVzKClbZW50
cnlJbmRleCAtIDFdLmtleSA9IHJlcDsKLSAgICBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRl
eCAtIDFdLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwotICAgIG1fdGFibGUtPmVudHJpZXMoKVtl
bnRyeUluZGV4IC0gMV0uaW5kZXggPSArK21fdGFibGUtPmxhc3RJbmRleFVzZWQ7Ci0KLSAgICB1
bnNpZ25lZCBuZXdPZmZzZXQ7Ci0gICAgaWYgKCFtX2RlbGV0ZWRPZmZzZXRzLmlzRW1wdHkoKSkg
ewotICAgICAgICBuZXdPZmZzZXQgPSBtX2RlbGV0ZWRPZmZzZXRzLmxhc3QoKTsKLSAgICAgICAg
bV9kZWxldGVkT2Zmc2V0cy5yZW1vdmVMYXN0KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG5ld09m
ZnNldCA9IG1fdGFibGUtPmtleUNvdW50OwotICAgIG1fdGFibGUtPmVudHJpZXMoKVtlbnRyeUlu
ZGV4IC0gMV0ub2Zmc2V0ID0gbmV3T2Zmc2V0OwotCi0gICAgKyttX3RhYmxlLT5rZXlDb3VudDsK
LQotICAgIGlmICgobV90YWJsZS0+a2V5Q291bnQgKyBtX3RhYmxlLT5kZWxldGVkU2VudGluZWxD
b3VudCkgKiAyID49IG1fdGFibGUtPnNpemUpCi0gICAgICAgIGV4cGFuZCgpOwotCi0gICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBuZXdPZmZzZXQ7Ci19Ci0KLXNpemVfdCBQcm9w
ZXJ0eU1hcDo6cmVtb3ZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKLXsKLSAgICBB
U1NFUlQoIXByb3BlcnR5TmFtZS5pc051bGwoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7
Ci0KLSAgICBVU3RyaW5nOjpSZXAqIHJlcCA9IHByb3BlcnR5TmFtZS5fdXN0cmluZy5yZXAoKTsK
LQotICAgIGlmICghbV90YWJsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7Ci0KLSNp
ZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytudW1Qcm9iZXM7Ci0gICAgKytudW1SZW1v
dmVzOwotI2VuZGlmCi0KLSAgICAvLyBGaW5kIHRoZSB0aGluZyB0byByZW1vdmUuCi0gICAgdW5z
aWduZWQgaSA9IHJlcC0+Y29tcHV0ZWRIYXNoKCk7Ci0gICAgdW5zaWduZWQgayA9IDA7Ci0gICAg
dW5zaWduZWQgZW50cnlJbmRleDsKLSAgICBVU3RyaW5nOjpSZXAqIGtleSA9IDA7Ci0gICAgd2hp
bGUgKDEpIHsKLSAgICAgICAgZW50cnlJbmRleCA9IG1fdGFibGUtPmVudHJ5SW5kaWNlc1tpICYg
bV90YWJsZS0+c2l6ZU1hc2tdOwotICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBlbXB0eUVudHJ5
SW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpub3RGb3VuZDsKLQotICAgICAgICBrZXkg
PSBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtleTsKLSAgICAgICAgaWYgKHJl
cCA9PSBrZXkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoayA9PSAwKSB7Ci0g
ICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2gocmVwLT5jb21wdXRlZEhhc2goKSk7Ci0jaWYg
RFVNUF9QUk9QRVJUWU1BUF9TVEFUUwotICAgICAgICAgICAgKytudW1Db2xsaXNpb25zOwotI2Vu
ZGlmCi0gICAgICAgIH0KLQotICAgICAgICBpICs9IGs7Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQ
X1NUQVRTCi0gICAgICAgICsrbnVtUmVoYXNoZXM7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBS
ZXBsYWNlIHRoaXMgb25lIGVsZW1lbnQgd2l0aCB0aGUgZGVsZXRlZCBzZW50aW5lbC4gQWxzbyBj
bGVhciBvdXQKLSAgICAvLyB0aGUgZW50cnkgc28gd2UgY2FuIGl0ZXJhdGUgYWxsIHRoZSBlbnRy
aWVzIGFzIG5lZWRlZC4KLSAgICBtX3RhYmxlLT5lbnRyeUluZGljZXNbaSAmIG1fdGFibGUtPnNp
emVNYXNrXSA9IGRlbGV0ZWRTZW50aW5lbEluZGV4OwotCi0gICAgc2l6ZV90IG9mZnNldCA9IG1f
dGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ub2Zmc2V0OwotCi0gICAga2V5LT5kZXJl
ZigpOwotICAgIG1fdGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5ID0gMDsKLSAg
ICBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmF0dHJpYnV0ZXMgPSAwOwotICAg
IG1fdGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ub2Zmc2V0ID0gMDsKLSAgICBtX2Rl
bGV0ZWRPZmZzZXRzLmFwcGVuZChvZmZzZXQpOwotCi0gICAgQVNTRVJUKG1fdGFibGUtPmtleUNv
dW50ID49IDEpOwotICAgIC0tbV90YWJsZS0+a2V5Q291bnQ7Ci0gICAgKyttX3RhYmxlLT5kZWxl
dGVkU2VudGluZWxDb3VudDsKLQotICAgIGlmIChtX3RhYmxlLT5kZWxldGVkU2VudGluZWxDb3Vu
dCAqIDQgPj0gbV90YWJsZS0+c2l6ZSkKLSAgICAgICAgcmVoYXNoKCk7Ci0KLSAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQotc2l6ZV90IFByb3BlcnR5TWFw
OjpnZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRl
cykgY29uc3QKLXsKLSAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc051bGwoKSk7Ci0KLSAgICBp
ZiAoIW1fdGFibGUpCi0gICAgICAgIHJldHVybiBXVEY6Om5vdEZvdW5kOwotCi0gICAgVVN0cmlu
Zzo6UmVwKiByZXAgPSBwcm9wZXJ0eU5hbWUuX3VzdHJpbmcucmVwKCk7Ci0KLSAgICB1bnNpZ25l
ZCBpID0gcmVwLT5jb21wdXRlZEhhc2goKTsKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMK
LSAgICArK251bVByb2JlczsKLSNlbmRpZgotCi0gICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1f
dGFibGUtPmVudHJ5SW5kaWNlc1tpICYgbV90YWJsZS0+c2l6ZU1hc2tdOwotICAgIGlmIChlbnRy
eUluZGV4ID09IGVtcHR5RW50cnlJbmRleCkKLSAgICAgICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7
Ci0KLSAgICBpZiAocmVwID09IG1fdGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5
KSB7Ci0gICAgICAgIGF0dHJpYnV0ZXMgPSBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAt
IDFdLmF0dHJpYnV0ZXM7Ci0gICAgICAgIHJldHVybiBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJ
bmRleCAtIDFdLm9mZnNldDsKLSAgICB9Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0g
ICAgKytudW1Db2xsaXNpb25zOwotI2VuZGlmCi0KLSAgICB1bnNpZ25lZCBrID0gMSB8IGRvdWJs
ZUhhc2gocmVwLT5jb21wdXRlZEhhc2goKSk7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBp
ICs9IGs7Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgICAgICsrbnVtUmVoYXNo
ZXM7Ci0jZW5kaWYKLQotICAgICAgICBlbnRyeUluZGV4ID0gbV90YWJsZS0+ZW50cnlJbmRpY2Vz
W2kgJiBtX3RhYmxlLT5zaXplTWFza107Ci0gICAgICAgIGlmIChlbnRyeUluZGV4ID09IGVtcHR5
RW50cnlJbmRleCkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om5vdEZvdW5kOwotCi0gICAgICAg
IGlmIChyZXAgPT0gbV90YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5rZXkpIHsKLSAg
ICAgICAgICAgIGF0dHJpYnV0ZXMgPSBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFd
LmF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICByZXR1cm4gbV90YWJsZS0+ZW50cmllcygpW2VudHJ5
SW5kZXggLSAxXS5vZmZzZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUHJvcGVydHlN
YXA6Omluc2VydChjb25zdCBFbnRyeSYgZW50cnkpCi17Ci0gICAgQVNTRVJUKG1fdGFibGUpOwot
Ci0gICAgdW5zaWduZWQgaSA9IGVudHJ5LmtleS0+Y29tcHV0ZWRIYXNoKCk7Ci0gICAgdW5zaWdu
ZWQgayA9IDA7Ci0KLSNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCi0gICAgKytudW1Qcm9iZXM7
Ci0jZW5kaWYKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXgg
PSBtX3RhYmxlLT5lbnRyeUluZGljZXNbaSAmIG1fdGFibGUtPnNpemVNYXNrXTsKLSAgICAgICAg
aWYgKGVudHJ5SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4KQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgaWYgKGsgPT0gMCkgewotICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGVu
dHJ5LmtleS0+Y29tcHV0ZWRIYXNoKCkpOwotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAg
ICAgICAgICAgICsrbnVtQ29sbGlzaW9uczsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAg
aSArPSBrOwotCi0jaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwotICAgICAgICArK251bVJlaGFz
aGVzOwotI2VuZGlmCi0gICAgfQotCi0gICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1fdGFibGUt
PmtleUNvdW50ICsgMjsKLSAgICBtX3RhYmxlLT5lbnRyeUluZGljZXNbaSAmIG1fdGFibGUtPnNp
emVNYXNrXSA9IGVudHJ5SW5kZXg7Ci0gICAgbV90YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXgg
LSAxXSA9IGVudHJ5OwotCi0gICAgKyttX3RhYmxlLT5rZXlDb3VudDsKLX0KLQotdm9pZCBQcm9w
ZXJ0eU1hcDo6ZXhwYW5kKCkKLXsKLSAgICBBU1NFUlQobV90YWJsZSk7Ci0gICAgcmVoYXNoKG1f
dGFibGUtPnNpemUgKiAyKTsKLX0KLQotdm9pZCBQcm9wZXJ0eU1hcDo6Y3JlYXRlVGFibGUoKQot
ewotICAgIGNvbnN0IHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSA9IDE2OwotCi0gICAgQVNTRVJUKCFt
X3RhYmxlKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIG1fdGFibGUgPSBzdGF0
aWNfY2FzdDxUYWJsZSo+KGZhc3RaZXJvZWRNYWxsb2MoVGFibGU6OmFsbG9jYXRpb25TaXplKG5l
d1RhYmxlU2l6ZSkpKTsKLSAgICBtX3RhYmxlLT5zaXplID0gbmV3VGFibGVTaXplOwotICAgIG1f
dGFibGUtPnNpemVNYXNrID0gbmV3VGFibGVTaXplIC0gMTsKLQotICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKLX0KLQotdm9pZCBQcm9wZXJ0eU1hcDo6cmVoYXNoKCkKLXsKLSAgICBBU1NFUlQobV90
YWJsZSk7Ci0gICAgQVNTRVJUKG1fdGFibGUtPnNpemUpOwotICAgIHJlaGFzaChtX3RhYmxlLT5z
aXplKTsKLX0KLQotdm9pZCBQcm9wZXJ0eU1hcDo6cmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6
ZSkKLXsKLSAgICBBU1NFUlQobV90YWJsZSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0K
LSAgICBUYWJsZSogb2xkVGFibGUgPSBtX3RhYmxlOwotCi0gICAgbV90YWJsZSA9IHN0YXRpY19j
YXN0PFRhYmxlKj4oZmFzdFplcm9lZE1hbGxvYyhUYWJsZTo6YWxsb2NhdGlvblNpemUobmV3VGFi
bGVTaXplKSkpOwotICAgIG1fdGFibGUtPnNpemUgPSBuZXdUYWJsZVNpemU7Ci0gICAgbV90YWJs
ZS0+c2l6ZU1hc2sgPSBuZXdUYWJsZVNpemUgLSAxOwotCi0gICAgdW5zaWduZWQgbGFzdEluZGV4
VXNlZCA9IDA7Ci0gICAgdW5zaWduZWQgZW50cnlDb3VudCA9IG9sZFRhYmxlLT5rZXlDb3VudCAr
IG9sZFRhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDw9IGVudHJ5Q291bnQ7ICsraSkgewotICAgICAgICBpZiAob2xkVGFibGUtPmVudHJpZXMo
KVtpXS5rZXkpIHsKLSAgICAgICAgICAgIGxhc3RJbmRleFVzZWQgPSBtYXgob2xkVGFibGUtPmVu
dHJpZXMoKVtpXS5pbmRleCwgbGFzdEluZGV4VXNlZCk7Ci0gICAgICAgICAgICBpbnNlcnQob2xk
VGFibGUtPmVudHJpZXMoKVtpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV90YWJsZS0+bGFz
dEluZGV4VXNlZCA9IGxhc3RJbmRleFVzZWQ7Ci0KLSAgICBmYXN0RnJlZShvbGRUYWJsZSk7Ci0K
LSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLXN0YXRpYyBpbnQgY29tcGFyZVByb3BlcnR5
TWFwRW50cnlJbmRpY2VzKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCi17Ci0gICAgdW5z
aWduZWQgaWEgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eU1hcEVudHJ5KiBjb25zdCo+KGEpWzBdLT5p
bmRleDsKLSAgICB1bnNpZ25lZCBpYiA9IHN0YXRpY19jYXN0PFByb3BlcnR5TWFwRW50cnkqIGNv
bnN0Kj4oYilbMF0tPmluZGV4OwotICAgIGlmIChpYSA8IGliKQotICAgICAgICByZXR1cm4gLTE7
Ci0gICAgaWYgKGlhID4gaWIpCi0gICAgICAgIHJldHVybiArMTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBQcm9wZXJ0eU1hcDo6Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3RhYmxlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV90YWJsZS0+a2V5Q291bnQgPCB0aW55TWFwVGhyZXNo
b2xkKSB7Ci0gICAgICAgIEVudHJ5KiBhW3RpbnlNYXBUaHJlc2hvbGRdOwotICAgICAgICBpbnQg
aSA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVudHJ5Q291bnQgPSBtX3RhYmxlLT5rZXlDb3VudCAr
IG1fdGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGsg
PSAxOyBrIDw9IGVudHJ5Q291bnQ7IGsrKykgewotICAgICAgICAgICAgaWYgKG1fdGFibGUtPmVu
dHJpZXMoKVtrXS5rZXkgJiYgIShtX3RhYmxlLT5lbnRyaWVzKClba10uYXR0cmlidXRlcyAmIERv
bnRFbnVtKSkgewotICAgICAgICAgICAgICAgIEVudHJ5KiB2YWx1ZSA9ICZtX3RhYmxlLT5lbnRy
aWVzKClba107Ci0gICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgZm9yIChq
ID0gaSAtIDE7IGogPj0gMCAmJiBhW2pdLT5pbmRleCA+IHZhbHVlLT5pbmRleDsgLS1qKQotICAg
ICAgICAgICAgICAgICAgICBhW2ogKyAxXSA9IGFbal07Ci0gICAgICAgICAgICAgICAgYVtqICsg
MV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICArK2k7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWVzLnNpemUoKSkgewotICAgICAgICAgICAgZm9y
IChpbnQgayA9IDA7IGsgPCBpOyArK2spCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGRLbm93blVuaXF1ZShhW2tdLT5rZXkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Zm9yIChpbnQgayA9IDA7IGsgPCBpOyArK2spCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoYVtrXS0+a2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciB0byB1c2UgdG8gc29ydCB0aGUga2V5cy4KLSAgICBW
ZWN0b3I8RW50cnkqLCBzbWFsbE1hcFRocmVzaG9sZD4gc29ydGVkRW51bWVyYWJsZXMobV90YWJs
ZS0+a2V5Q291bnQpOwotCi0gICAgLy8gR2V0IHBvaW50ZXJzIHRvIHRoZSBlbnVtZXJhYmxlIGVu
dHJpZXMgaW4gdGhlIGJ1ZmZlci4KLSAgICBFbnRyeSoqIHAgPSBzb3J0ZWRFbnVtZXJhYmxlcy5k
YXRhKCk7Ci0gICAgdW5zaWduZWQgZW50cnlDb3VudCA9IG1fdGFibGUtPmtleUNvdW50ICsgbV90
YWJsZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQ7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
PSBlbnRyeUNvdW50OyBpKyspIHsKLSAgICAgICAgaWYgKG1fdGFibGUtPmVudHJpZXMoKVtpXS5r
ZXkgJiYgIShtX3RhYmxlLT5lbnRyaWVzKClbaV0uYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAg
ICAgICAgICAgICpwKysgPSAmbV90YWJsZS0+ZW50cmllcygpW2ldOwotICAgIH0KLQotICAgIHNp
emVfdCBlbnVtZXJhYmxlQ291bnQgPSBwIC0gc29ydGVkRW51bWVyYWJsZXMuZGF0YSgpOwotICAg
IC8vIFNvcnQgdGhlIGVudHJpZXMgYnkgaW5kZXguCi0gICAgcXNvcnQoc29ydGVkRW51bWVyYWJs
ZXMuZGF0YSgpLCBlbnVtZXJhYmxlQ291bnQsIHNpemVvZihFbnRyeSopLCBjb21wYXJlUHJvcGVy
dHlNYXBFbnRyeUluZGljZXMpOwotICAgIHNvcnRlZEVudW1lcmFibGVzLnJlc2l6ZShlbnVtZXJh
YmxlQ291bnQpOwotCi0gICAgLy8gUHV0IHRoZSBrZXlzIG9mIHRoZSBzb3J0ZWQgZW50cmllcyBp
bnRvIHRoZSBsaXN0LgotICAgIGlmICghcHJvcGVydHlOYW1lcy5zaXplKCkpIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3J0ZWRFbnVtZXJhYmxlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkS25vd25VbmlxdWUoc29ydGVkRW51bWVyYWJsZXNb
aV0tPmtleSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
b3J0ZWRFbnVtZXJhYmxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKHNvcnRlZEVudW1lcmFibGVzW2ldLT5rZXkpOwotICAgIH0KLX0KLQotI2lmIERPX1BST1BF
UlRZTUFQX0NPTlNURU5DWV9DSEVDSwotCi12b2lkIFByb3BlcnR5TWFwOjpjaGVja0NvbnNpc3Rl
bmN5KCkKLXsKLSAgICBpZiAoIW1fdGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChtX3RhYmxlLT5zaXplID49IDE2KTsKLSAgICBBU1NFUlQobV90YWJsZS0+c2l6ZU1hc2spOwot
ICAgIEFTU0VSVChtX3RhYmxlLT5zaXplID09IG1fdGFibGUtPnNpemVNYXNrICsgMSk7Ci0gICAg
QVNTRVJUKCEobV90YWJsZS0+c2l6ZSAmIG1fdGFibGUtPnNpemVNYXNrKSk7Ci0KLSAgICBBU1NF
UlQobV90YWJsZS0+a2V5Q291bnQgPD0gbV90YWJsZS0+c2l6ZSAvIDIpOwotICAgIEFTU0VSVCht
X3RhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudCA8PSBtX3RhYmxlLT5zaXplIC8gNCk7Ci0KLSAg
ICBBU1NFUlQobV90YWJsZS0+a2V5Q291bnQgKyBtX3RhYmxlLT5kZWxldGVkU2VudGluZWxDb3Vu
dCA8PSBtX3RhYmxlLT5zaXplIC8gMik7Ci0KLSAgICB1bnNpZ25lZCBpbmRleENvdW50ID0gMDsK
LSAgICB1bnNpZ25lZCBkZWxldGVkSW5kZXhDb3VudCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBh
ID0gMDsgYSAhPSBtX3RhYmxlLT5zaXplOyArK2EpIHsKLSAgICAgICAgdW5zaWduZWQgZW50cnlJ
bmRleCA9IG1fdGFibGUtPmVudHJ5SW5kaWNlc1thXTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXgg
PT0gZW1wdHlFbnRyeUluZGV4KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChl
bnRyeUluZGV4ID09IGRlbGV0ZWRTZW50aW5lbEluZGV4KSB7Ci0gICAgICAgICAgICArK2RlbGV0
ZWRJbmRleENvdW50OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKGVudHJ5SW5kZXggPiBkZWxldGVkU2VudGluZWxJbmRleCk7Ci0gICAgICAgIEFTU0VS
VChlbnRyeUluZGV4IC0gMSA8PSBtX3RhYmxlLT5rZXlDb3VudCArIG1fdGFibGUtPmRlbGV0ZWRT
ZW50aW5lbENvdW50KTsKLSAgICAgICAgKytpbmRleENvdW50OwotCi0gICAgICAgIGZvciAodW5z
aWduZWQgYiA9IGEgKyAxOyBiICE9IG1fdGFibGUtPnNpemU7ICsrYikKLSAgICAgICAgICAgIEFT
U0VSVChtX3RhYmxlLT5lbnRyeUluZGljZXNbYl0gIT0gZW50cnlJbmRleCk7Ci0gICAgfQotICAg
IEFTU0VSVChpbmRleENvdW50ID09IG1fdGFibGUtPmtleUNvdW50KTsKLSAgICBBU1NFUlQoZGVs
ZXRlZEluZGV4Q291bnQgPT0gbV90YWJsZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQpOwotCi0gICAg
QVNTRVJUKG1fdGFibGUtPmVudHJpZXMoKVswXS5rZXkgPT0gMCk7Ci0KLSAgICB1bnNpZ25lZCBu
b25FbXB0eUVudHJ5Q291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgYyA9IDE7IGMgPD0gbV90
YWJsZS0+a2V5Q291bnQgKyBtX3RhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudDsgKytjKSB7Ci0g
ICAgICAgIFVTdHJpbmc6OlJlcCogcmVwID0gbV90YWJsZS0+ZW50cmllcygpW2NdLmtleTsKLSAg
ICAgICAgaWYgKCFyZXApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgKytub25FbXB0
eUVudHJ5Q291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSByZXAtPmNvbXB1dGVkSGFzaCgpOwot
ICAgICAgICB1bnNpZ25lZCBrID0gMDsKLSAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleDsKLSAg
ICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGVudHJ5SW5kZXggPSBtX3RhYmxlLT5lbnRy
eUluZGljZXNbaSAmIG1fdGFibGUtPnNpemVNYXNrXTsKLSAgICAgICAgICAgIEFTU0VSVChlbnRy
eUluZGV4ICE9IGVtcHR5RW50cnlJbmRleCk7Ci0gICAgICAgICAgICBpZiAocmVwID09IG1fdGFi
bGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJs
ZUhhc2gocmVwLT5jb21wdXRlZEhhc2goKSk7Ci0gICAgICAgICAgICBpICs9IGs7Ci0gICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKGVudHJ5SW5kZXggPT0gYyArIDEpOwotICAgIH0KLQotICAgIEFT
U0VSVChub25FbXB0eUVudHJ5Q291bnQgPT0gbV90YWJsZS0+a2V5Q291bnQpOwotfQotCi0jZW5k
aWYgLy8gRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCi0KLX0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogcnVudGltZS9Qcm9wZXJ0eU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJ1bnRpbWUvUHJv
cGVydHlNYXAuaAkocmV2aXNpb24gMzc5ODkpCisrKyBydW50aW1lL1Byb3BlcnR5TWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpZm5kZWYgUHJvcGVydHlNYXBfaAotI2RlZmluZSBQcm9wZXJ0eU1h
cF9oCi0KLSNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKLSNpbmNsdWRlICJpZGVudGlmaWVyLmgi
Ci0jaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+
Ci0KLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMgMAotI2Vs
c2UKLSNkZWZpbmUgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUyAwCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLSAgICBjbGFzcyBKU09iamVjdDsKLSAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJh
eTsKLQotICAgIHR5cGVkZWYgSlNWYWx1ZSoqIFByb3BlcnR5U3RvcmFnZTsKLQotICAgIHN0cnVj
dCBQcm9wZXJ0eU1hcEVudHJ5IHsKLSAgICAgICAgVVN0cmluZzo6UmVwKiBrZXk7Ci0gICAgICAg
IHVuc2lnbmVkIG9mZnNldDsKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAg
dW5zaWduZWQgaW5kZXg7Ci0KLSAgICAgICAgUHJvcGVydHlNYXBFbnRyeShVU3RyaW5nOjpSZXAq
IGssIGludCBhKQotICAgICAgICAgICAgOiBrZXkoaykKLSAgICAgICAgICAgICwgb2Zmc2V0KDAp
Ci0gICAgICAgICAgICAsIGF0dHJpYnV0ZXMoYSkKLSAgICAgICAgICAgICwgaW5kZXgoMCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIGxhc3RJbmRleFVzZWQgaXMgYW4g
ZXZlci1pbmNyZWFzaW5nIGluZGV4IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG9yZGVyIGl0ZW1zCi0g
ICAgLy8gd2VyZSBpbnNlcnRlZCBpbnRvIHRoZSBwcm9wZXJ0eSBtYXAuIEl0J3MgcmVxdWlyZWQg
dGhhdCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcwotICAgIC8vIHJldHVybiB0aGUgcHJvcGVy
dGllcyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGgg
b3RoZXIKLSAgICAvLyBicm93c2VycycgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbnMuCi0gICAg
c3RydWN0IFByb3BlcnR5TWFwSGFzaFRhYmxlIHsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2s7
Ci0gICAgICAgIHVuc2lnbmVkIHNpemU7Ci0gICAgICAgIHVuc2lnbmVkIGtleUNvdW50OwotICAg
ICAgICB1bnNpZ25lZCBkZWxldGVkU2VudGluZWxDb3VudDsKLSAgICAgICAgdW5zaWduZWQgbGFz
dEluZGV4VXNlZDsKLSAgICAgICAgdW5zaWduZWQgZW50cnlJbmRpY2VzWzFdOwotCi0gICAgICAg
IFByb3BlcnR5TWFwRW50cnkqIGVudHJpZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBU
aGUgZW50cmllcyB2ZWN0b3IgY29tZXMgYWZ0ZXIgdGhlIGluZGljZXMgdmVjdG9yLgotICAgICAg
ICAgICAgLy8gVGhlIDB0aCBpdGVtIGluIHRoZSBlbnRyaWVzIHZlY3RvciBpcyBub3QgcmVhbGx5
IHVzZWQ7IGl0IGhhcyB0bwotICAgICAgICAgICAgLy8gaGF2ZSBhIDAgaW4gaXRzIGtleSB0byBh
bGxvdyB0aGUgaGFzaCB0YWJsZSBsb29rdXAgdG8gaGFuZGxlIGRlbGV0ZWQKLSAgICAgICAgICAg
IC8vIHNlbnRpbmVscyB3aXRob3V0IGFueSBzcGVjaWFsLWNhc2UgY29kZSwgYnV0IHRoZSBvdGhl
ciBmaWVsZHMgYXJlIHVudXNlZC4KLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFByb3BlcnR5TWFwRW50cnkqPigmZW50cnlJbmRpY2VzW3NpemVdKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgc2l6ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gV2UgbmV2ZXIgbGV0IGEgaGFzaCB0YWJsZSBnZXQgbW9yZSB0
aGFuIGhhbGYgZnVsbCwKLSAgICAgICAgICAgIC8vIFNvIHRoZSBudW1iZXIgb2YgaW5kaWNlcyB3
ZSBuZWVkIGlzIHRoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlLgotICAgICAgICAgICAgLy8gQnV0
IHRoZSBudW1iZXIgb2YgZW50cmllcyBpcyBoYWxmIHRoYXQgKHBsdXMgb25lIGZvciB0aGUgZGVs
ZXRlZCBzZW50aW5lbCkuCi0gICAgICAgICAgICByZXR1cm4gc2l6ZW9mKFByb3BlcnR5TWFwSGFz
aFRhYmxlKQotICAgICAgICAgICAgICAgICsgKHNpemUgLSAxKSAqIHNpemVvZih1bnNpZ25lZCkK
LSAgICAgICAgICAgICAgICArICgxICsgc2l6ZSAvIDIpICogc2l6ZW9mKFByb3BlcnR5TWFwRW50
cnkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGNsYXNzIFByb3BlcnR5TWFwIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIFByb3BlcnR5TWFwKCk7Ci0gICAgICAgIH5Qcm9wZXJ0eU1hcCgpOwot
Ci0gICAgICAgIFByb3BlcnR5TWFwJiBvcGVyYXRvcj0oY29uc3QgUHJvcGVydHlNYXAmKTsKLQot
ICAgICAgICBzaXplX3QgZ2V0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3Q7
Ci0gICAgICAgIHNpemVfdCBnZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCYgYXR0cmlidXRlcykgY29uc3Q7Ci0gICAgICAgIHNpemVfdCBwdXQoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgc2l6ZV90
IHJlbW92ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotCi0gICAgICAgIHZvaWQg
Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoUHJvcGVydHlOYW1lQXJyYXkmKSBjb25zdDsKLQot
ICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV90YWJsZTsgfQotICAgICAg
ICB1bnNpZ25lZCBzdG9yYWdlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUgPyBtX3RhYmxl
LT5rZXlDb3VudCArIG1fZGVsZXRlZE9mZnNldHMuc2l6ZSgpIDogMDsgfQotCi0gICAgICAgIHNp
emVfdCBwcm9wZXJ0eU1hcFNpemUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gc2l6ZW9mKFByb3BlcnR5TWFwKSArIChtX3RhYmxlID8gUHJvcGVydHlNYXBIYXNoVGFibGU6
OmFsbG9jYXRpb25TaXplKG1fdGFibGUtPnNpemUpIDogMCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZW1wdHlFbnRyeUluZGV4ID0gMDsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIHR5cGVkZWYgUHJvcGVydHlNYXBFbnRyeSBFbnRyeTsKLSAgICAgICAgdHlw
ZWRlZiBQcm9wZXJ0eU1hcEhhc2hUYWJsZSBUYWJsZTsKLQotICAgICAgICB2b2lkIGV4cGFuZCgp
OwotICAgICAgICB2b2lkIHJlaGFzaCgpOwotICAgICAgICB2b2lkIHJlaGFzaCh1bnNpZ25lZCBu
ZXdUYWJsZVNpemUpOwotICAgICAgICB2b2lkIGNyZWF0ZVRhYmxlKCk7Ci0KLSAgICAgICAgdm9p
ZCBpbnNlcnQoY29uc3QgRW50cnkmKTsKLQotICAgICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3ko
KTsKLQotICAgICAgICBUYWJsZSogbV90YWJsZTsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBt
X2RlbGV0ZWRPZmZzZXRzOwotICAgIH07Ci0KLSAgICBpbmxpbmUgUHJvcGVydHlNYXA6OlByb3Bl
cnR5TWFwKCkgCi0gICAgICAgIDogbV90YWJsZSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgc2l6ZV90IFByb3BlcnR5TWFwOjpnZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNOdWxsKCkpOwot
Ci0gICAgICAgIGlmICghbV90YWJsZSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om5vdEZvdW5k
OwotCi0gICAgICAgIFVTdHJpbmc6OlJlcCogcmVwID0gcHJvcGVydHlOYW1lLl91c3RyaW5nLnJl
cCgpOwotCi0gICAgICAgIHVuc2lnbmVkIGkgPSByZXAtPmNvbXB1dGVkSGFzaCgpOwotCi0jaWYg
RFVNUF9QUk9QRVJUWU1BUF9TVEFUUwotICAgICAgICArK251bVByb2JlczsKLSNlbmRpZgotCi0g
ICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX3RhYmxlLT5lbnRyeUluZGljZXNbaSAmIG1f
dGFibGUtPnNpemVNYXNrXTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZW1wdHlFbnRyeUlu
ZGV4KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7Ci0KLSAgICAgICAgaWYgKHJl
cCA9PSBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtleSkKLSAgICAgICAgICAg
IHJldHVybiBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLm9mZnNldDsKLQotI2lm
IERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAgICAgICAgKytudW1Db2xsaXNpb25zOwotI2VuZGlm
Ci0KLSAgICAgICAgdW5zaWduZWQgayA9IDEgfCBXVEY6OmRvdWJsZUhhc2gocmVwLT5jb21wdXRl
ZEhhc2goKSk7Ci0KLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGkgKz0gazsKLQot
I2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAgICAgICAgICAgICsrbnVtUmVoYXNoZXM7Ci0j
ZW5kaWYKLQotICAgICAgICAgICAgZW50cnlJbmRleCA9IG1fdGFibGUtPmVudHJ5SW5kaWNlc1tp
ICYgbV90YWJsZS0+c2l6ZU1hc2tdOwotICAgICAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZW1w
dHlFbnRyeUluZGV4KQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om5vdEZvdW5kOwotCi0g
ICAgICAgICAgICBpZiAocmVwID09IG1fdGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0u
a2V5KQotICAgICAgICAgICAgICAgIHJldHVybiBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRl
eCAtIDFdLm9mZnNldDsKLSAgICAgICAgfQotICAgIH0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBQcm9wZXJ0eU1hcF9oCkluZGV4OiBydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZp
c2lvbiAzNzk4OSkJKGZyb20gcnVudGltZS9Qcm9wZXJ0eU1hcC5oOjM3OTg5KQorKysgcnVudGlt
ZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgxIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFByb3Bl
cnR5TWFwX2gKKyNkZWZpbmUgUHJvcGVydHlNYXBfaAorCisjaW5jbHVkZSAiUHJvcGVydHlTbG90
LmgiCisjaW5jbHVkZSAiaWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgorCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBE
VU1QX1BST1BFUlRZTUFQX1NUQVRTIDAKKyNlbHNlCisjZGVmaW5lIERVTVBfUFJPUEVSVFlNQVBf
U1RBVFMgMAorI2VuZGlmCisKK25hbWVzcGFjZSBKU0MgeworCisgICAgY2xhc3MgSlNPYmplY3Q7
CisgICAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CisKKyAgICB0eXBlZGVmIEpTVmFsdWUqKiBQ
cm9wZXJ0eVN0b3JhZ2U7CisKKyAgICBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CisgICAgICAg
IFVTdHJpbmc6OlJlcCoga2V5OworICAgICAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIHVuc2lnbmVkIGluZGV4OworCisgICAgICAgIFBy
b3BlcnR5TWFwRW50cnkoVVN0cmluZzo6UmVwKiBrLCBpbnQgYSkKKyAgICAgICAgICAgIDoga2V5
KGspCisgICAgICAgICAgICAsIG9mZnNldCgwKQorICAgICAgICAgICAgLCBhdHRyaWJ1dGVzKGEp
CisgICAgICAgICAgICAsIGluZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICAvLyBsYXN0SW5kZXhVc2VkIGlzIGFuIGV2ZXItaW5jcmVhc2luZyBpbmRleCB1c2VkIHRv
IGlkZW50aWZ5IHRoZSBvcmRlciBpdGVtcworICAgIC8vIHdlcmUgaW5zZXJ0ZWQgaW50byB0aGUg
cHJvcGVydHkgbWFwLiBJdCdzIHJlcXVpcmVkIHRoYXQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFt
ZXMKKyAgICAvLyByZXR1cm4gdGhlIHByb3BlcnRpZXMgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBh
ZGRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyCisgICAgLy8gYnJvd3NlcnMnIEphdmFT
Y3JpcHQgaW1wbGVtZW50YXRpb25zLgorICAgIHN0cnVjdCBQcm9wZXJ0eU1hcEhhc2hUYWJsZSB7
CisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBzaXplOworICAg
ICAgICB1bnNpZ25lZCBrZXlDb3VudDsKKyAgICAgICAgdW5zaWduZWQgZGVsZXRlZFNlbnRpbmVs
Q291bnQ7CisgICAgICAgIHVuc2lnbmVkIGxhc3RJbmRleFVzZWQ7CisgICAgICAgIHVuc2lnbmVk
IGVudHJ5SW5kaWNlc1sxXTsKKworICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyaWVzKCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIGVudHJpZXMgdmVjdG9yIGNvbWVzIGFmdGVy
IHRoZSBpbmRpY2VzIHZlY3Rvci4KKyAgICAgICAgICAgIC8vIFRoZSAwdGggaXRlbSBpbiB0aGUg
ZW50cmllcyB2ZWN0b3IgaXMgbm90IHJlYWxseSB1c2VkOyBpdCBoYXMgdG8KKyAgICAgICAgICAg
IC8vIGhhdmUgYSAwIGluIGl0cyBrZXkgdG8gYWxsb3cgdGhlIGhhc2ggdGFibGUgbG9va3VwIHRv
IGhhbmRsZSBkZWxldGVkCisgICAgICAgICAgICAvLyBzZW50aW5lbHMgd2l0aG91dCBhbnkgc3Bl
Y2lhbC1jYXNlIGNvZGUsIGJ1dCB0aGUgb3RoZXIgZmllbGRzIGFyZSB1bnVzZWQuCisgICAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQcm9wZXJ0eU1hcEVudHJ5Kj4oJmVudHJ5SW5k
aWNlc1tzaXplXSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRp
b25TaXplKHVuc2lnbmVkIHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIG5ldmVy
IGxldCBhIGhhc2ggdGFibGUgZ2V0IG1vcmUgdGhhbiBoYWxmIGZ1bGwsCisgICAgICAgICAgICAv
LyBTbyB0aGUgbnVtYmVyIG9mIGluZGljZXMgd2UgbmVlZCBpcyB0aGUgc2l6ZSBvZiB0aGUgaGFz
aCB0YWJsZS4KKyAgICAgICAgICAgIC8vIEJ1dCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaXMgaGFs
ZiB0aGF0IChwbHVzIG9uZSBmb3IgdGhlIGRlbGV0ZWQgc2VudGluZWwpLgorICAgICAgICAgICAg
cmV0dXJuIHNpemVvZihQcm9wZXJ0eU1hcEhhc2hUYWJsZSkKKyAgICAgICAgICAgICAgICArIChz
aXplIC0gMSkgKiBzaXplb2YodW5zaWduZWQpCisgICAgICAgICAgICAgICAgKyAoMSArIHNpemUg
LyAyKSAqIHNpemVvZihQcm9wZXJ0eU1hcEVudHJ5KTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICBjbGFzcyBQcm9wZXJ0eU1hcCB7CisgICAgcHVibGljOgorICAgICAgICBQcm9wZXJ0eU1hcCgp
OworICAgICAgICB+UHJvcGVydHlNYXAoKTsKKworICAgICAgICBQcm9wZXJ0eU1hcCYgb3BlcmF0
b3I9KGNvbnN0IFByb3BlcnR5TWFwJik7CisKKyAgICAgICAgc2l6ZV90IGdldChjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgICAgICBzaXplX3QgZ2V0KGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0OworICAg
ICAgICBzaXplX3QgcHV0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CisgICAgICAgIHNpemVfdCByZW1vdmUoY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKTsKKworICAgICAgICB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKFBy
b3BlcnR5TmFtZUFycmF5JikgY29uc3Q7CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gIW1fdGFibGU7IH0KKyAgICAgICAgdW5zaWduZWQgc3RvcmFnZVNpemUoKSBjb25z
dCB7IHJldHVybiBtX3RhYmxlID8gbV90YWJsZS0+a2V5Q291bnQgKyBtX2RlbGV0ZWRPZmZzZXRz
LnNpemUoKSA6IDA7IH0KKworICAgICAgICBzaXplX3QgcHJvcGVydHlNYXBTaXplKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNpemVvZihQcm9wZXJ0eU1hcCkgKyAobV90
YWJsZSA/IFByb3BlcnR5TWFwSGFzaFRhYmxlOjphbGxvY2F0aW9uU2l6ZShtX3RhYmxlLT5zaXpl
KSA6IDApOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVtcHR5
RW50cnlJbmRleCA9IDA7CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIFByb3BlcnR5
TWFwRW50cnkgRW50cnk7CisgICAgICAgIHR5cGVkZWYgUHJvcGVydHlNYXBIYXNoVGFibGUgVGFi
bGU7CisKKyAgICAgICAgdm9pZCBleHBhbmQoKTsKKyAgICAgICAgdm9pZCByZWhhc2goKTsKKyAg
ICAgICAgdm9pZCByZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplKTsKKyAgICAgICAgdm9pZCBj
cmVhdGVUYWJsZSgpOworCisgICAgICAgIHZvaWQgaW5zZXJ0KGNvbnN0IEVudHJ5Jik7CisKKyAg
ICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICAgICAgVGFibGUqIG1fdGFibGU7
CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9kZWxldGVkT2Zmc2V0czsKKyAgICB9OworCisg
ICAgaW5saW5lIFByb3BlcnR5TWFwOjpQcm9wZXJ0eU1hcCgpIAorICAgICAgICA6IG1fdGFibGUo
MCkKKyAgICB7CisgICAgfQorCisgICAgaW5saW5lIHNpemVfdCBQcm9wZXJ0eU1hcDo6Z2V0KGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VCghcHJvcGVydHlOYW1lLmlzTnVsbCgpKTsKKworICAgICAgICBpZiAoIW1fdGFibGUpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpub3RGb3VuZDsKKworICAgICAgICBVU3RyaW5nOjpSZXAqIHJl
cCA9IHByb3BlcnR5TmFtZS5fdXN0cmluZy5yZXAoKTsKKworICAgICAgICB1bnNpZ25lZCBpID0g
cmVwLT5jb21wdXRlZEhhc2goKTsKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICAg
ICAgKytudW1Qcm9iZXM7CisjZW5kaWYKKworICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0g
bV90YWJsZS0+ZW50cnlJbmRpY2VzW2kgJiBtX3RhYmxlLT5zaXplTWFza107CisgICAgICAgIGlm
IChlbnRyeUluZGV4ID09IGVtcHR5RW50cnlJbmRleCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om5vdEZvdW5kOworCisgICAgICAgIGlmIChyZXAgPT0gbV90YWJsZS0+ZW50cmllcygpW2VudHJ5
SW5kZXggLSAxXS5rZXkpCisgICAgICAgICAgICByZXR1cm4gbV90YWJsZS0+ZW50cmllcygpW2Vu
dHJ5SW5kZXggLSAxXS5vZmZzZXQ7CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAg
ICAgICsrbnVtQ29sbGlzaW9uczsKKyNlbmRpZgorCisgICAgICAgIHVuc2lnbmVkIGsgPSAxIHwg
V1RGOjpkb3VibGVIYXNoKHJlcC0+Y29tcHV0ZWRIYXNoKCkpOworCisgICAgICAgIHdoaWxlICgx
KSB7CisgICAgICAgICAgICBpICs9IGs7CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisg
ICAgICAgICAgICArK251bVJlaGFzaGVzOworI2VuZGlmCisKKyAgICAgICAgICAgIGVudHJ5SW5k
ZXggPSBtX3RhYmxlLT5lbnRyeUluZGljZXNbaSAmIG1fdGFibGUtPnNpemVNYXNrXTsKKyAgICAg
ICAgICAgIGlmIChlbnRyeUluZGV4ID09IGVtcHR5RW50cnlJbmRleCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpub3RGb3VuZDsKKworICAgICAgICAgICAgaWYgKHJlcCA9PSBtX3RhYmxl
LT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV90YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5vZmZzZXQ7CisgICAgICAgIH0KKyAg
ICB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlNYXBfaApJbmRl
eDogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJ1bnRpbWUv
UHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMzc5NzMpCisrKyBydW50aW1lL1Byb3Bl
cnR5TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4LDI3ICsxOCwxMyBAQAogICoK
ICAqLwogCi0jaWZuZGVmIFByb3BlcnR5TWFwX2gKLSNkZWZpbmUgUHJvcGVydHlNYXBfaAorI2lm
bmRlZiBQcm9wZXJ0eU1hcEhhc2hUYWJsZV9oCisjZGVmaW5lIFByb3BlcnR5TWFwSGFzaFRhYmxl
X2gKIAotI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgotI2luY2x1ZGUgImlkZW50aWZpZXIuaCIK
LSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4K
LQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUyAwCi0jZWxz
ZQotI2RlZmluZSBEVU1QX1BST1BFUlRZTUFQX1NUQVRTIDAKLSNlbmRpZgorI2luY2x1ZGUgInVz
dHJpbmcuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBKU09iamVjdDsKLSAgICBj
bGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKLQotICAgIHR5cGVkZWYgSlNWYWx1ZSoqIFByb3BlcnR5
U3RvcmFnZTsKLQogICAgIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICAgICAgVVN0cmlu
Zzo6UmVwKiBrZXk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldDsKQEAgLTg2LDk2ICs3Miw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIGNsYXNzIFByb3BlcnR5
TWFwIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFByb3BlcnR5TWFwKCk7Ci0gICAgICAgIH5Qcm9w
ZXJ0eU1hcCgpOwotCi0gICAgICAgIFByb3BlcnR5TWFwJiBvcGVyYXRvcj0oY29uc3QgUHJvcGVy
dHlNYXAmKTsKLQotICAgICAgICBzaXplX3QgZ2V0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkgY29uc3Q7Ci0gICAgICAgIHNpemVfdCBnZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykgY29uc3Q7Ci0gICAgICAgIHNpemVfdCBwdXQo
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAg
ICAgICAgc2l6ZV90IHJlbW92ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotCi0g
ICAgICAgIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoUHJvcGVydHlOYW1lQXJyYXkm
KSBjb25zdDsKLQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV90YWJs
ZTsgfQotICAgICAgICB1bnNpZ25lZCBzdG9yYWdlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFi
bGUgPyBtX3RhYmxlLT5rZXlDb3VudCArIG1fZGVsZXRlZE9mZnNldHMuc2l6ZSgpIDogMDsgfQot
Ci0gICAgICAgIHNpemVfdCBwcm9wZXJ0eU1hcFNpemUoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gc2l6ZW9mKFByb3BlcnR5TWFwKSArIChtX3RhYmxlID8gUHJvcGVydHlN
YXBIYXNoVGFibGU6OmFsbG9jYXRpb25TaXplKG1fdGFibGUtPnNpemUpIDogMCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZW1wdHlFbnRyeUluZGV4ID0gMDsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgUHJvcGVydHlNYXBFbnRyeSBFbnRyeTsK
LSAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEhhc2hUYWJsZSBUYWJsZTsKLQotICAgICAgICB2
b2lkIGV4cGFuZCgpOwotICAgICAgICB2b2lkIHJlaGFzaCgpOwotICAgICAgICB2b2lkIHJlaGFz
aCh1bnNpZ25lZCBuZXdUYWJsZVNpemUpOwotICAgICAgICB2b2lkIGNyZWF0ZVRhYmxlKCk7Ci0K
LSAgICAgICAgdm9pZCBpbnNlcnQoY29uc3QgRW50cnkmKTsKLQotICAgICAgICB2b2lkIGNoZWNr
Q29uc2lzdGVuY3koKTsKLQotICAgICAgICBUYWJsZSogbV90YWJsZTsKLSAgICAgICAgVmVjdG9y
PHVuc2lnbmVkPiBtX2RlbGV0ZWRPZmZzZXRzOwotICAgIH07Ci0KLSAgICBpbmxpbmUgUHJvcGVy
dHlNYXA6OlByb3BlcnR5TWFwKCkgCi0gICAgICAgIDogbV90YWJsZSgwKQotICAgIHsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgc2l6ZV90IFByb3BlcnR5TWFwOjpnZXQoY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUu
aXNOdWxsKCkpOwotCi0gICAgICAgIGlmICghbV90YWJsZSkKLSAgICAgICAgICAgIHJldHVybiBX
VEY6Om5vdEZvdW5kOwotCi0gICAgICAgIFVTdHJpbmc6OlJlcCogcmVwID0gcHJvcGVydHlOYW1l
Ll91c3RyaW5nLnJlcCgpOwotCi0gICAgICAgIHVuc2lnbmVkIGkgPSByZXAtPmNvbXB1dGVkSGFz
aCgpOwotCi0jaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwotICAgICAgICArK251bVByb2JlczsK
LSNlbmRpZgotCi0gICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX3RhYmxlLT5lbnRyeUlu
ZGljZXNbaSAmIG1fdGFibGUtPnNpemVNYXNrXTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0g
ZW1wdHlFbnRyeUluZGV4KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7Ci0KLSAg
ICAgICAgaWYgKHJlcCA9PSBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtleSkK
LSAgICAgICAgICAgIHJldHVybiBtX3RhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLm9m
ZnNldDsKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAgICAgICAgKytudW1Db2xsaXNp
b25zOwotI2VuZGlmCi0KLSAgICAgICAgdW5zaWduZWQgayA9IDEgfCBXVEY6OmRvdWJsZUhhc2go
cmVwLT5jb21wdXRlZEhhc2goKSk7Ci0KLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAg
IGkgKz0gazsKLQotI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKLSAgICAgICAgICAgICsrbnVt
UmVoYXNoZXM7Ci0jZW5kaWYKLQotICAgICAgICAgICAgZW50cnlJbmRleCA9IG1fdGFibGUtPmVu
dHJ5SW5kaWNlc1tpICYgbV90YWJsZS0+c2l6ZU1hc2tdOwotICAgICAgICAgICAgaWYgKGVudHJ5
SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4KQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om5v
dEZvdW5kOwotCi0gICAgICAgICAgICBpZiAocmVwID09IG1fdGFibGUtPmVudHJpZXMoKVtlbnRy
eUluZGV4IC0gMV0ua2V5KQotICAgICAgICAgICAgICAgIHJldHVybiBtX3RhYmxlLT5lbnRyaWVz
KClbZW50cnlJbmRleCAtIDFdLm9mZnNldDsKLSAgICAgICAgfQotICAgIH0KLQogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBQcm9wZXJ0eU1hcF9oCisjZW5kaWYgLy8gUHJvcGVydHlN
YXBIYXNoVGFibGVfaApJbmRleDogcnVudGltZS9TdHJ1Y3R1cmVJRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcnVudGltZS9TdHJ1Y3R1cmVJRC5jcHAJKHJldmlzaW9uIDM3OTg5KQorKysgcnVudGltZS9T
dHJ1Y3R1cmVJRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNywyNSBAQAogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNlbmRpZgogCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBE
T19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAorI2Vsc2UKKyNkZWZpbmUgRE9fUFJPUEVS
VFlNQVBfQ09OU1RFTkNZX0NIRUNLIDAKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwor
dXNpbmcgV1RGOjpkb3VibGVIYXNoOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gQ2hvb3NlIGEg
bnVtYmVyIGZvciB0aGUgZm9sbG93aW5nIHNvIHRoYXQgbW9zdCBwcm9wZXJ0eSBtYXBzIGFyZSBz
bWFsbGVyLAorLy8gYnV0IGl0J3Mgbm90IGdvaW5nIHRvIGJsb3cgb3V0IHRoZSBzdGFjayB0byBh
bGxvY2F0ZSB0aGlzIG51bWJlciBvZiBwb2ludGVycy4KK3N0YXRpYyBjb25zdCBpbnQgc21hbGxN
YXBUaHJlc2hvbGQgPSAxMDI0OworCisvLyBUaGUgcG9pbnQgYXQgd2hpY2ggdGhlIGZ1bmN0aW9u
IGNhbGwgb3ZlcmhlYWQgb2YgdGhlIHFzb3J0IGltcGxlbWVudGF0aW9uCisvLyBiZWNvbWVzIHNt
YWxsIGNvbXBhcmVkIHRvIHRoZSBpbmVmZmljaWVuY3kgb2YgaW5zZXJ0aW9uIHNvcnQuCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgdGlueU1hcFRocmVzaG9sZCA9IDIwOworCiAjaWZuZGVmIE5ERUJV
Rwogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIHN0cnVjdHVyZUlEQ291bnRlcigi
U3RydWN0dXJlSUQiKTsKIApAQCAtNzUsNyArOTAsOCBAQCB2b2lkIFN0cnVjdHVyZUlEOjpkdW1w
U3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgKytudW1iZXJTaW5nbGV0b25zOwogICAgICAg
ICB9CiAKLSAgICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHN0cnVjdHVyZUlELT5tX3By
b3BlcnR5TWFwLnByb3BlcnR5TWFwU2l6ZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlSUQtPm1f
cHJvcGVydHlUYWJsZSkKKyAgICAgICAgICAgIHRvdGFsUHJvcGVydHlNYXBzU2l6ZSArPSBQcm9w
ZXJ0eU1hcEhhc2hUYWJsZTo6YWxsb2NhdGlvblNpemUobV9wcm9wZXJ0eVRhYmxlLT5zaXplKTs7
CiAgICAgfQogCiAgICAgcHJpbnRmKCJOdW1iZXIgb2YgbGl2ZSBTdHJ1Y3R1cmVJRHM6ICVkXG4i
LCBsaXZlU3RydWN0dXJlSURTZXQuc2l6ZSgpKTsKQEAgLTk2LDYgKzExMiw3IEBAIFN0cnVjdHVy
ZUlEOjpTdHJ1Y3R1cmVJRChKU1ZhbHVlKiBwcm90b3QKICAgICAsIG1fcHJldmlvdXMoMCkKICAg
ICAsIG1fbmFtZUluUHJldmlvdXMoMCkKICAgICAsIG1fdHJhbnNpdGlvbkNvdW50KDApCisgICAg
LCBtX3Byb3BlcnR5VGFibGUoMCkKICAgICAsIG1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoSlNP
YmplY3Q6OmlubGluZVN0b3JhZ2VDYXBhY2l0eSkKICAgICAsIG1fY2FjaGVkVHJhbnNpc3Rpb25P
ZmZzZXQoV1RGOjpub3RGb3VuZCkKICAgICAsIG1faXNEaWN0aW9uYXJ5KGZhbHNlKQpAQCAtMTQw
LDYgKzE1NywxNSBAQCBTdHJ1Y3R1cmVJRDo6flN0cnVjdHVyZUlEKCkKICAgICBpZiAoIW1fdXNp
bmdTaW5nbGVUcmFuc2l0aW9uU2xvdCkKICAgICAgICAgZGVsZXRlIG1fdHJhbnNpdGlvbnMudGFi
bGU7CiAKKyAgICBpZiAobV9wcm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5
Q291bnQgPSBtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50ICsgbV9wcm9wZXJ0eVRhYmxlLT5kZWxl
dGVkU2VudGluZWxDb3VudDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBlbnRy
eUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChVU3RyaW5nOjpSZXAqIGtleSA9IG1fcHJv
cGVydHlUYWJsZS0+ZW50cmllcygpW2ldLmtleSkKKyAgICAgICAgICAgICAgICBrZXktPmRlcmVm
KCk7CisgICAgICAgIH0KKyAgICAgICAgZmFzdEZyZWUobV9wcm9wZXJ0eVRhYmxlKTsKKyAgICB9
CisKICNpZm5kZWYgTkRFQlVHCiAjaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQogICAg
IE11dGV4TG9ja2VyIHByb3RlY3QoaWdub3JlU2V0TXV0ZXgpOwpAQCAtMTg0LDcgKzIxMCw3IEBA
IHZvaWQgU3RydWN0dXJlSUQ6OmdldEVudW1lcmFibGVQcm9wZXJ0eU4KICAgICAgICAgcHJvcGVy
dHlOYW1lcy5zZXRDYWNoZWFibGUoZmFsc2UpOwogICAgIH0KIAotICAgIG1fcHJvcGVydHlNYXAu
Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMocHJvcGVydHlOYW1lcyk7CisgICAgZ2V0RW51bWVy
YWJsZVByb3BlcnR5TmFtZXNJbnRlcm5hbChwcm9wZXJ0eU5hbWVzKTsKIAogICAgIC8vIEFkZCBw
cm9wZXJ0aWVzIGZyb20gdGhlIHN0YXRpYyBoYXNodGFibGVzIG9mIHByb3BlcnRpZXMKICAgICBm
b3IgKGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IGJhc2VPYmplY3QtPmNsYXNzSW5mbygpOyBpbmZv
OyBpbmZvID0gaW5mby0+cGFyZW50Q2xhc3MpIHsKQEAgLTI1NSw4ICsyODEsOCBAQCBQYXNzUmVm
UHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1cmVJRDo6YWRkCiAKICAgICBpZiAoc3RydWN0dXJlSUQt
Pm1fdHJhbnNpdGlvbkNvdW50ID4gc19tYXhUcmFuc2l0aW9uTGVuZ3RoKSB7CiAgICAgICAgIFJl
ZlB0cjxTdHJ1Y3R1cmVJRD4gdHJhbnNpdGlvbiA9IHRvRGljdGlvbmFyeVRyYW5zaXRpb24oc3Ry
dWN0dXJlSUQpOwotICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5TWFwLnB1
dChwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAodHJhbnNpdGlvbi0+bV9w
cm9wZXJ0eU1hcC5zdG9yYWdlU2l6ZSgpID4gdHJhbnNpdGlvbi0+cHJvcGVydHlTdG9yYWdlQ2Fw
YWNpdHkoKSkKKyAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cHV0KHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7CisgICAgICAgIGlmICh0cmFuc2l0aW9uLT5wcm9wZXJ0eVN0b3JhZ2VTaXpl
KCkgPiB0cmFuc2l0aW9uLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKQogICAgICAgICAgICAg
dHJhbnNpdGlvbi0+Z3Jvd1Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCk7CiAgICAgICAgIHJldHVy
biB0cmFuc2l0aW9uLnJlbGVhc2UoKTsKICAgICB9CkBAIC0yNjcsMTIgKzI5MywxMyBAQCBQYXNz
UmVmUHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1cmVJRDo6YWRkCiAgICAgdHJhbnNpdGlvbi0+bV9u
YW1lSW5QcmV2aW91cyA9IHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCk7CiAgICAgdHJhbnNp
dGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9IGF0dHJpYnV0ZXM7CiAgICAgdHJhbnNpdGlv
bi0+bV90cmFuc2l0aW9uQ291bnQgPSBzdHJ1Y3R1cmVJRC0+bV90cmFuc2l0aW9uQ291bnQgKyAx
OwotICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlNYXAgPSBzdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0
eU1hcDsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmVJRC0+Y29w
eVByb3BlcnR5VGFibGUoKTsKKyAgICB0cmFuc2l0aW9uLT5tX2RlbGV0ZWRPZmZzZXRzID0gc3Ry
dWN0dXJlSUQtPm1fZGVsZXRlZE9mZnNldHM7IAogICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlT
dG9yYWdlQ2FwYWNpdHkgPSBzdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eTsK
ICAgICB0cmFuc2l0aW9uLT5tX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgPSBzdHJ1Y3R1cmVJ
RC0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOwogCi0gICAgb2Zmc2V0ID0gdHJhbnNpdGlv
bi0+bV9wcm9wZXJ0eU1hcC5wdXQocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICBpZiAo
dHJhbnNpdGlvbi0+bV9wcm9wZXJ0eU1hcC5zdG9yYWdlU2l6ZSgpID4gdHJhbnNpdGlvbi0+cHJv
cGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKKyAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXQocHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlTdG9y
YWdlU2l6ZSgpID4gdHJhbnNpdGlvbi0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKICAgICAg
ICAgdHJhbnNpdGlvbi0+Z3Jvd1Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCk7CiAKICAgICB0cmFu
c2l0aW9uLT5zZXRDYWNoZWRUcmFuc2lzdGlvbk9mZnNldChvZmZzZXQpOwpAQCAtMjkzLDEzICsz
MjAsMzAgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gU3RydWN0dXJlSUQ6OmFkZAogICAgIHJl
dHVybiB0cmFuc2l0aW9uLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4g
U3RydWN0dXJlSUQ6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihTdHJ1Y3R1cmVJRCogc3RydWN0
dXJlSUQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgc2l6ZV90JiBvZmZzZXQpCit7
CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmVJRC0+bV9pc0RpY3Rpb25hcnkpOworCisgICAgUmVmUHRy
PFN0cnVjdHVyZUlEPiB0cmFuc2l0aW9uID0gY3JlYXRlKHN0cnVjdHVyZUlELT5tX3Byb3RvdHlw
ZSwgc3RydWN0dXJlSUQtPnR5cGVJbmZvKCkpOworICAgIHRyYW5zaXRpb24tPm1faXNEaWN0aW9u
YXJ5ID0gdHJ1ZTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmVJ
RC0+Y29weVByb3BlcnR5VGFibGUoKTsKKyAgICB0cmFuc2l0aW9uLT5tX2RlbGV0ZWRPZmZzZXRz
ID0gc3RydWN0dXJlSUQtPm1fZGVsZXRlZE9mZnNldHM7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9w
ZXJ0eVN0b3JhZ2VDYXBhY2l0eSA9IHN0cnVjdHVyZUlELT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFj
aXR5OworICAgIHRyYW5zaXRpb24tPm1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyA9IHN0cnVj
dHVyZUlELT5tX2hhc0dldHRlclNldHRlclByb3BlcnRpZXM7CisKKyAgICBvZmZzZXQgPSB0cmFu
c2l0aW9uLT5yZW1vdmUocHJvcGVydHlOYW1lKTsKKworICAgIHJldHVybiB0cmFuc2l0aW9uLnJl
bGVhc2UoKTsKK30KKwogUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gU3RydWN0dXJlSUQ6OnRvRGlj
dGlvbmFyeVRyYW5zaXRpb24oU3RydWN0dXJlSUQqIHN0cnVjdHVyZUlEKQogewogICAgIEFTU0VS
VCghc3RydWN0dXJlSUQtPm1faXNEaWN0aW9uYXJ5KTsKIAogICAgIFJlZlB0cjxTdHJ1Y3R1cmVJ
RD4gdHJhbnNpdGlvbiA9IGNyZWF0ZShzdHJ1Y3R1cmVJRC0+bV9wcm90b3R5cGUsIHN0cnVjdHVy
ZUlELT50eXBlSW5mbygpKTsKICAgICB0cmFuc2l0aW9uLT5tX2lzRGljdGlvbmFyeSA9IHRydWU7
Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eU1hcCA9IHN0cnVjdHVyZUlELT5tX3Byb3BlcnR5
TWFwOworICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZUlELT5jb3B5
UHJvcGVydHlUYWJsZSgpOworICAgIHRyYW5zaXRpb24tPm1fZGVsZXRlZE9mZnNldHMgPSBzdHJ1
Y3R1cmVJRC0+bV9kZWxldGVkT2Zmc2V0czsKICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5U3Rv
cmFnZUNhcGFjaXR5ID0gc3RydWN0dXJlSUQtPm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHk7CiAg
ICAgdHJhbnNpdGlvbi0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzID0gc3RydWN0dXJlSUQt
Pm1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllczsKICAgICByZXR1cm4gdHJhbnNpdGlvbi5yZWxl
YXNlKCk7CkBAIC0zMjAsNyArMzY0LDggQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gU3RydWN0
dXJlSUQ6OmNoYQogewogICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gdHJhbnNpdGlvbiA9IGNyZWF0
ZShwcm90b3R5cGUsIHN0cnVjdHVyZUlELT50eXBlSW5mbygpKTsKICAgICB0cmFuc2l0aW9uLT5t
X3RyYW5zaXRpb25Db3VudCA9IHN0cnVjdHVyZUlELT5tX3RyYW5zaXRpb25Db3VudCArIDE7Ci0g
ICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eU1hcCA9IHN0cnVjdHVyZUlELT5tX3Byb3BlcnR5TWFw
OworICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZUlELT5jb3B5UHJv
cGVydHlUYWJsZSgpOworICAgIHRyYW5zaXRpb24tPm1fZGVsZXRlZE9mZnNldHMgPSBzdHJ1Y3R1
cmVJRC0+bV9kZWxldGVkT2Zmc2V0czsKICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5U3RvcmFn
ZUNhcGFjaXR5ID0gc3RydWN0dXJlSUQtPm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHk7CiAgICAg
dHJhbnNpdGlvbi0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzID0gc3RydWN0dXJlSUQtPm1f
aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllczsKICAgICByZXR1cm4gdHJhbnNpdGlvbi5yZWxlYXNl
KCk7CkBAIC0zMzAsNyArMzc1LDggQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gU3RydWN0dXJl
SUQ6OmdldAogewogICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gdHJhbnNpdGlvbiA9IGNyZWF0ZShz
dHJ1Y3R1cmVJRC0+c3RvcmVkUHJvdG90eXBlKCksIHN0cnVjdHVyZUlELT50eXBlSW5mbygpKTsK
ICAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Db3VudCA9IHN0cnVjdHVyZUlELT5tX3RyYW5z
aXRpb25Db3VudCArIDE7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eU1hcCA9IHN0cnVjdHVy
ZUlELT5tX3Byb3BlcnR5TWFwOworICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0
cnVjdHVyZUlELT5jb3B5UHJvcGVydHlUYWJsZSgpOworICAgIHRyYW5zaXRpb24tPm1fZGVsZXRl
ZE9mZnNldHMgPSBzdHJ1Y3R1cmVJRC0+bV9kZWxldGVkT2Zmc2V0czsKICAgICB0cmFuc2l0aW9u
LT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5ID0gc3RydWN0dXJlSUQtPm1fcHJvcGVydHlTdG9y
YWdlQ2FwYWNpdHk7CiAgICAgdHJhbnNpdGlvbi0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
ID0gdHJhbnNpdGlvbi0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOwogICAgIHJldHVybiB0
cmFuc2l0aW9uLnJlbGVhc2UoKTsKQEAgLTMzOCw5ICszODQsMTcgQEAgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVJRD4gU3RydWN0dXJlSUQ6OmdldAogCiBzaXplX3QgU3RydWN0dXJlSUQ6OmFkZFByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogewotICAgIHNpemVfdCBvZmZzZXQgPSBtX3Byb3BlcnR5TWFwLnB1
dChwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIGlmIChtX3Byb3BlcnR5TWFwLnN0b3Jh
Z2VTaXplKCkgPiBwcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKQorICAgIHNpemVfdCBvZmZzZXQg
PSBwdXQocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICBpZiAocHJvcGVydHlTdG9yYWdl
U2l6ZSgpID4gcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKICAgICAgICAgZ3Jvd1Byb3BlcnR5
U3RvcmFnZUNhcGFjaXR5KCk7CisgICAgY2xlYXJFbnVtZXJhdGlvbkNhY2hlKCk7CisgICAgcmV0
dXJuIG9mZnNldDsKK30KKworc2l6ZV90IFN0cnVjdHVyZUlEOjpyZW1vdmVQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK3sKKyAgICBzaXpl
X3Qgb2Zmc2V0ID0gcmVtb3ZlKHByb3BlcnR5TmFtZSk7CisgICAgY2xlYXJFbnVtZXJhdGlvbkNh
Y2hlKCk7CiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIApAQCAtMzU4LDYgKzQxMiw0ODggQEAgU3Ry
dWN0dXJlSURDaGFpbiogU3RydWN0dXJlSUQ6OmNyZWF0ZUNhYwogICAgIHJldHVybiBjYWNoZWRQ
cm90b3R5cGVDaGFpbigpOwogfQogCisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUworCitzdGF0
aWMgaW50IG51bVByb2JlczsKK3N0YXRpYyBpbnQgbnVtQ29sbGlzaW9uczsKK3N0YXRpYyBpbnQg
bnVtUmVoYXNoZXM7CitzdGF0aWMgaW50IG51bVJlbW92ZXM7CisKK3N0cnVjdCBQcm9wZXJ0eU1h
cFN0YXRpc3RpY3NFeGl0TG9nZ2VyIHsKKyAgICB+UHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExv
Z2dlcigpOworfTsKKworc3RhdGljIFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIgbG9n
Z2VyOworCitQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyOjp+UHJvcGVydHlNYXBTdGF0
aXN0aWNzRXhpdExvZ2dlcigpCit7CisgICAgcHJpbnRmKCJcbkpTQzo6UHJvcGVydHlNYXAgc3Rh
dGlzdGljc1xuXG4iKTsKKyAgICBwcmludGYoIiVkIHByb2Jlc1xuIiwgbnVtUHJvYmVzKTsKKyAg
ICBwcmludGYoIiVkIGNvbGxpc2lvbnMgKCUuMWYlJSlcbiIsIG51bUNvbGxpc2lvbnMsIDEwMC4w
ICogbnVtQ29sbGlzaW9ucyAvIG51bVByb2Jlcyk7CisgICAgcHJpbnRmKCIlZCByZWhhc2hlc1xu
IiwgbnVtUmVoYXNoZXMpOworICAgIHByaW50ZigiJWQgcmVtb3Zlc1xuIiwgbnVtUmVtb3Zlcyk7
Cit9CisKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVsZXRlZFNlbnRpbmVsSW5k
ZXggPSAxOworCisjaWYgIURPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSworCitpbmxpbmUg
dm9pZCBTdHJ1Y3R1cmVJRDo6Y2hlY2tDb25zaXN0ZW5jeU9mUHJvcGVydHlNYXBIYXNoVGFibGUo
KQoreworfSAgIAorCisjZW5kaWYKKworUHJvcGVydHlNYXBIYXNoVGFibGUqIFN0cnVjdHVyZUlE
Ojpjb3B5UHJvcGVydHlUYWJsZSgpCit7CisgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgc2l6ZV90IHRhYmxlU2l6ZSA9IFByb3BlcnR5TWFwSGFzaFRh
YmxlOjphbGxvY2F0aW9uU2l6ZShtX3Byb3BlcnR5VGFibGUtPnNpemUpOworICAgIFByb3BlcnR5
TWFwSGFzaFRhYmxlKiBuZXdUYWJsZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5TWFwSGFzaFRhYmxl
Kj4oZmFzdE1hbGxvYyh0YWJsZVNpemUpKTsKKyAgICBtZW1jcHkobmV3VGFibGUsIG1fcHJvcGVy
dHlUYWJsZSwgdGFibGVTaXplKTsKKworICAgIHVuc2lnbmVkIGVudHJ5Q291bnQgPSBtX3Byb3Bl
cnR5VGFibGUtPmtleUNvdW50ICsgbV9wcm9wZXJ0eVRhYmxlLT5kZWxldGVkU2VudGluZWxDb3Vu
dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IGVudHJ5Q291bnQ7ICsraSkgeworICAg
ICAgICBpZiAoVVN0cmluZzo6UmVwKiBrZXkgPSBuZXdUYWJsZS0+ZW50cmllcygpW2ldLmtleSkK
KyAgICAgICAgICAgIGtleS0+cmVmKCk7CisgICAgfQorCisgICAgcmV0dXJuIG5ld1RhYmxlOwor
fQorCitzaXplX3QgU3RydWN0dXJlSUQ6OmdldChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25zdAoreworICAgIEFTU0VSVCghcHJvcGVydHlO
YW1lLmlzTnVsbCgpKTsKKworICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKQorICAgICAgICByZXR1
cm4gV1RGOjpub3RGb3VuZDsKKworICAgIFVTdHJpbmc6OlJlcCogcmVwID0gcHJvcGVydHlOYW1l
Ll91c3RyaW5nLnJlcCgpOworCisgICAgdW5zaWduZWQgaSA9IHJlcC0+Y29tcHV0ZWRIYXNoKCk7
CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgKytudW1Qcm9iZXM7CisjZW5kaWYK
KworICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX3Byb3BlcnR5VGFibGUtPmVudHJ5SW5kaWNl
c1tpICYgbV9wcm9wZXJ0eVRhYmxlLT5zaXplTWFza107CisgICAgaWYgKGVudHJ5SW5kZXggPT0g
ZW1wdHlFbnRyeUluZGV4KQorICAgICAgICByZXR1cm4gV1RGOjpub3RGb3VuZDsKKworICAgIGlm
IChyZXAgPT0gbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtleSkg
eworICAgICAgICBhdHRyaWJ1dGVzID0gbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJ
bmRleCAtIDFdLmF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGUtPmVu
dHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ub2Zmc2V0OworICAgIH0KKworI2lmIERVTVBfUFJPUEVS
VFlNQVBfU1RBVFMKKyAgICArK251bUNvbGxpc2lvbnM7CisjZW5kaWYKKworICAgIHVuc2lnbmVk
IGsgPSAxIHwgZG91YmxlSGFzaChyZXAtPmNvbXB1dGVkSGFzaCgpKTsKKworICAgIHdoaWxlICgx
KSB7CisgICAgICAgIGkgKz0gazsKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICAg
ICAgKytudW1SZWhhc2hlczsKKyNlbmRpZgorCisgICAgICAgIGVudHJ5SW5kZXggPSBtX3Byb3Bl
cnR5VGFibGUtPmVudHJ5SW5kaWNlc1tpICYgbV9wcm9wZXJ0eVRhYmxlLT5zaXplTWFza107Cisg
ICAgICAgIGlmIChlbnRyeUluZGV4ID09IGVtcHR5RW50cnlJbmRleCkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om5vdEZvdW5kOworCisgICAgICAgIGlmIChyZXAgPT0gbV9wcm9wZXJ0eVRhYmxl
LT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtleSkgeworICAgICAgICAgICAgYXR0cmlidXRl
cyA9IG1fcHJvcGVydHlUYWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5hdHRyaWJ1dGVz
OworICAgICAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZS0+ZW50cmllcygpW2VudHJ5SW5k
ZXggLSAxXS5vZmZzZXQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3NpemVfdCBTdHJ1Y3R1cmVJ
RDo6cHV0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRl
cykKK3sKKyAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc051bGwoKSk7CisgICAgQVNTRVJUKGdl
dChwcm9wZXJ0eU5hbWUpID09IFdURjo6bm90Rm91bmQpOworCisgICAgY2hlY2tDb25zaXN0ZW5j
eU9mUHJvcGVydHlNYXBIYXNoVGFibGUoKTsKKworICAgIFVTdHJpbmc6OlJlcCogcmVwID0gcHJv
cGVydHlOYW1lLl91c3RyaW5nLnJlcCgpOworCisgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisg
ICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwSGFzaFRhYmxlKCk7CisKKyAgICAvLyBGSVhNRTogQ29u
c2lkZXIgYSBmYXN0IGNhc2UgZm9yIHRhYmxlcyB3aXRoIG5vIGRlbGV0ZWQgc2VudGluZWxzLgor
CisgICAgdW5zaWduZWQgaSA9IHJlcC0+Y29tcHV0ZWRIYXNoKCk7CisgICAgdW5zaWduZWQgayA9
IDA7CisgICAgYm9vbCBmb3VuZERlbGV0ZWRFbGVtZW50ID0gZmFsc2U7CisgICAgdW5zaWduZWQg
ZGVsZXRlZEVsZW1lbnRJbmRleCA9IDA7IC8vIGluaXRpYWxpemUgdG8gbWFrZSB0aGUgY29tcGls
ZXIgaGFwcHkKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICArK251bVByb2JlczsK
KyNlbmRpZgorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleCA9
IG1fcHJvcGVydHlUYWJsZS0+ZW50cnlJbmRpY2VzW2kgJiBtX3Byb3BlcnR5VGFibGUtPnNpemVN
YXNrXTsKKyAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4KQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZGVsZXRlZFNlbnRpbmVs
SW5kZXgpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGZpbmQgYSBkZWxldGVkLWVsZW1lbnQgc2Vu
dGluZWwsIHJlbWVtYmVyIGl0IGZvciB1c2UgbGF0ZXIuCisgICAgICAgICAgICBpZiAoIWZvdW5k
RGVsZXRlZEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBmb3VuZERlbGV0ZWRFbGVtZW50ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudEluZGV4ID0gaTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChrID09IDApIHsKKyAgICAgICAgICAgIGsg
PSAxIHwgZG91YmxlSGFzaChyZXAtPmNvbXB1dGVkSGFzaCgpKTsKKyNpZiBEVU1QX1BST1BFUlRZ
TUFQX1NUQVRTCisgICAgICAgICAgICArK251bUNvbGxpc2lvbnM7CisjZW5kaWYKKyAgICAgICAg
fQorCisgICAgICAgIGkgKz0gazsKKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICAg
ICAgKytudW1SZWhhc2hlczsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIEZpZ3VyZSBvdXQgd2hp
Y2ggZW50cnkgdG8gdXNlLgorICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX3Byb3BlcnR5VGFi
bGUtPmtleUNvdW50ICsgbV9wcm9wZXJ0eVRhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudCArIDI7
CisgICAgaWYgKGZvdW5kRGVsZXRlZEVsZW1lbnQpIHsKKyAgICAgICAgaSA9IGRlbGV0ZWRFbGVt
ZW50SW5kZXg7CisgICAgICAgIC0tbV9wcm9wZXJ0eVRhYmxlLT5kZWxldGVkU2VudGluZWxDb3Vu
dDsKKworICAgICAgICAvLyBTaW5jZSB3ZSdyZSBub3QgbWFraW5nIHRoZSB0YWJsZSBiaWdnZXIs
IHdlIGNhbid0IHVzZSB0aGUgZW50cnkgb25lIHBhc3QKKyAgICAgICAgLy8gdGhlIGVuZCB0aGF0
IHdlIHdlcmUgcGxhbm5pbmcgb24gdXNpbmcsIHNvIHNlYXJjaCBiYWNrd2FyZHMgZm9yIHRoZSBl
bXB0eQorICAgICAgICAvLyBzbG90IHRoYXQgd2UgY2FuIHVzZS4gV2Uga25vdyBpdCB3aWxsIGJl
IHRoZXJlIGJlY2F1c2Ugd2UgZGlkIGF0IGxlYXN0IG9uZQorICAgICAgICAvLyBkZWxldGlvbiBp
biB0aGUgcGFzdCB0aGF0IGxlZnQgYW4gZW50cnkgZW1wdHkuCisgICAgICAgIHdoaWxlIChtX3By
b3BlcnR5VGFibGUtPmVudHJpZXMoKVstLWVudHJ5SW5kZXggLSAxXS5rZXkpIHsgfQorICAgIH0K
KworICAgIC8vIENyZWF0ZSBhIG5ldyBoYXNoIHRhYmxlIGVudHJ5LgorICAgIG1fcHJvcGVydHlU
YWJsZS0+ZW50cnlJbmRpY2VzW2kgJiBtX3Byb3BlcnR5VGFibGUtPnNpemVNYXNrXSA9IGVudHJ5
SW5kZXg7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgaGFzaCB0YWJsZSBlbnRyeS4KKyAgICByZXAt
PnJlZigpOworICAgIG1fcHJvcGVydHlUYWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5r
ZXkgPSByZXA7CisgICAgbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFd
LmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIG1fcHJvcGVydHlUYWJsZS0+ZW50cmllcygp
W2VudHJ5SW5kZXggLSAxXS5pbmRleCA9ICsrbV9wcm9wZXJ0eVRhYmxlLT5sYXN0SW5kZXhVc2Vk
OworCisgICAgdW5zaWduZWQgbmV3T2Zmc2V0OworICAgIGlmICghbV9kZWxldGVkT2Zmc2V0cy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgbmV3T2Zmc2V0ID0gbV9kZWxldGVkT2Zmc2V0cy5sYXN0KCk7
CisgICAgICAgIG1fZGVsZXRlZE9mZnNldHMucmVtb3ZlTGFzdCgpOworICAgIH0gZWxzZQorICAg
ICAgICBuZXdPZmZzZXQgPSBtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50OworICAgIG1fcHJvcGVy
dHlUYWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5vZmZzZXQgPSBuZXdPZmZzZXQ7CisK
KyAgICArK21fcHJvcGVydHlUYWJsZS0+a2V5Q291bnQ7CisKKyAgICBpZiAoKG1fcHJvcGVydHlU
YWJsZS0+a2V5Q291bnQgKyBtX3Byb3BlcnR5VGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50KSAq
IDIgPj0gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKQorICAgICAgICBleHBhbmRQcm9wZXJ0eU1hcEhh
c2hUYWJsZSgpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeU9mUHJvcGVydHlNYXBIYXNoVGFibGUo
KTsKKyAgICByZXR1cm4gbmV3T2Zmc2V0OworfQorCitzaXplX3QgU3RydWN0dXJlSUQ6OnJlbW92
ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgQVNTRVJUKCFwcm9wZXJ0
eU5hbWUuaXNOdWxsKCkpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeU9mUHJvcGVydHlNYXBIYXNo
VGFibGUoKTsKKworICAgIFVTdHJpbmc6OlJlcCogcmVwID0gcHJvcGVydHlOYW1lLl91c3RyaW5n
LnJlcCgpOworCisgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAgICAgIHJldHVybiBXVEY6
Om5vdEZvdW5kOworCisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUworICAgICsrbnVtUHJvYmVz
OworICAgICsrbnVtUmVtb3ZlczsKKyNlbmRpZgorCisgICAgLy8gRmluZCB0aGUgdGhpbmcgdG8g
cmVtb3ZlLgorICAgIHVuc2lnbmVkIGkgPSByZXAtPmNvbXB1dGVkSGFzaCgpOworICAgIHVuc2ln
bmVkIGsgPSAwOworICAgIHVuc2lnbmVkIGVudHJ5SW5kZXg7CisgICAgVVN0cmluZzo6UmVwKiBr
ZXkgPSAwOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5SW5kZXggPSBtX3Byb3BlcnR5
VGFibGUtPmVudHJ5SW5kaWNlc1tpICYgbV9wcm9wZXJ0eVRhYmxlLT5zaXplTWFza107CisgICAg
ICAgIGlmIChlbnRyeUluZGV4ID09IGVtcHR5RW50cnlJbmRleCkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om5vdEZvdW5kOworCisgICAgICAgIGtleSA9IG1fcHJvcGVydHlUYWJsZS0+ZW50cmll
cygpW2VudHJ5SW5kZXggLSAxXS5rZXk7CisgICAgICAgIGlmIChyZXAgPT0ga2V5KQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGsgPT0gMCkgeworICAgICAgICAgICAgayA9IDEg
fCBkb3VibGVIYXNoKHJlcC0+Y29tcHV0ZWRIYXNoKCkpOworI2lmIERVTVBfUFJPUEVSVFlNQVBf
U1RBVFMKKyAgICAgICAgICAgICsrbnVtQ29sbGlzaW9uczsKKyNlbmRpZgorICAgICAgICB9CisK
KyAgICAgICAgaSArPSBrOworCisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUworICAgICAgICAr
K251bVJlaGFzaGVzOworI2VuZGlmCisgICAgfQorCisgICAgLy8gUmVwbGFjZSB0aGlzIG9uZSBl
bGVtZW50IHdpdGggdGhlIGRlbGV0ZWQgc2VudGluZWwuIEFsc28gY2xlYXIgb3V0CisgICAgLy8g
dGhlIGVudHJ5IHNvIHdlIGNhbiBpdGVyYXRlIGFsbCB0aGUgZW50cmllcyBhcyBuZWVkZWQuCisg
ICAgbV9wcm9wZXJ0eVRhYmxlLT5lbnRyeUluZGljZXNbaSAmIG1fcHJvcGVydHlUYWJsZS0+c2l6
ZU1hc2tdID0gZGVsZXRlZFNlbnRpbmVsSW5kZXg7CisKKyAgICBzaXplX3Qgb2Zmc2V0ID0gbV9w
cm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLm9mZnNldDsKKworICAgIGtl
eS0+ZGVyZWYoKTsKKyAgICBtX3Byb3BlcnR5VGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0g
MV0ua2V5ID0gMDsKKyAgICBtX3Byb3BlcnR5VGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0g
MV0uYXR0cmlidXRlcyA9IDA7CisgICAgbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJ
bmRleCAtIDFdLm9mZnNldCA9IDA7CisgICAgbV9kZWxldGVkT2Zmc2V0cy5hcHBlbmQob2Zmc2V0
KTsKKworICAgIEFTU0VSVChtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50ID49IDEpOworICAgIC0t
bV9wcm9wZXJ0eVRhYmxlLT5rZXlDb3VudDsKKyAgICArK21fcHJvcGVydHlUYWJsZS0+ZGVsZXRl
ZFNlbnRpbmVsQ291bnQ7CisKKyAgICBpZiAobV9wcm9wZXJ0eVRhYmxlLT5kZWxldGVkU2VudGlu
ZWxDb3VudCAqIDQgPj0gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKQorICAgICAgICByZWhhc2hQcm9w
ZXJ0eU1hcEhhc2hUYWJsZSgpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeU9mUHJvcGVydHlNYXBI
YXNoVGFibGUoKTsKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit2b2lkIFN0cnVjdHVyZUlEOjpp
bnNlcnRJbnRvUHJvcGVydHlNYXBIYXNoVGFibGUoY29uc3QgUHJvcGVydHlNYXBFbnRyeSYgZW50
cnkpCit7CisgICAgQVNTRVJUKG1fcHJvcGVydHlUYWJsZSk7CisKKyAgICB1bnNpZ25lZCBpID0g
ZW50cnkua2V5LT5jb21wdXRlZEhhc2goKTsKKyAgICB1bnNpZ25lZCBrID0gMDsKKworI2lmIERV
TVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICArK251bVByb2JlczsKKyNlbmRpZgorCisgICAgd2hp
bGUgKDEpIHsKKyAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1fcHJvcGVydHlUYWJsZS0+
ZW50cnlJbmRpY2VzW2kgJiBtX3Byb3BlcnR5VGFibGUtPnNpemVNYXNrXTsKKyAgICAgICAgaWYg
KGVudHJ5SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4KQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKGsgPT0gMCkgeworICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGVudHJ5
LmtleS0+Y29tcHV0ZWRIYXNoKCkpOworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICAg
ICAgICAgICsrbnVtQ29sbGlzaW9uczsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgaSAr
PSBrOworCisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUworICAgICAgICArK251bVJlaGFzaGVz
OworI2VuZGlmCisgICAgfQorCisgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1fcHJvcGVydHlU
YWJsZS0+a2V5Q291bnQgKyAyOworICAgIG1fcHJvcGVydHlUYWJsZS0+ZW50cnlJbmRpY2VzW2kg
JiBtX3Byb3BlcnR5VGFibGUtPnNpemVNYXNrXSA9IGVudHJ5SW5kZXg7CisgICAgbV9wcm9wZXJ0
eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdID0gZW50cnk7CisKKyAgICArK21fcHJv
cGVydHlUYWJsZS0+a2V5Q291bnQ7Cit9CisKK3ZvaWQgU3RydWN0dXJlSUQ6OmV4cGFuZFByb3Bl
cnR5TWFwSGFzaFRhYmxlKCkKK3sKKyAgICBBU1NFUlQobV9wcm9wZXJ0eVRhYmxlKTsKKyAgICBy
ZWhhc2hQcm9wZXJ0eU1hcEhhc2hUYWJsZShtX3Byb3BlcnR5VGFibGUtPnNpemUgKiAyKTsKK30K
Kwordm9pZCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlUHJvcGVydHlNYXBIYXNoVGFibGUoKQoreworICAg
IGNvbnN0IHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSA9IDE2OworCisgICAgQVNTRVJUKCFtX3Byb3Bl
cnR5VGFibGUpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeU9mUHJvcGVydHlNYXBIYXNoVGFibGUo
KTsKKworICAgIG1fcHJvcGVydHlUYWJsZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5TWFwSGFzaFRh
YmxlKj4oZmFzdFplcm9lZE1hbGxvYyhQcm9wZXJ0eU1hcEhhc2hUYWJsZTo6YWxsb2NhdGlvblNp
emUobmV3VGFibGVTaXplKSkpOworICAgIG1fcHJvcGVydHlUYWJsZS0+c2l6ZSA9IG5ld1RhYmxl
U2l6ZTsKKyAgICBtX3Byb3BlcnR5VGFibGUtPnNpemVNYXNrID0gbmV3VGFibGVTaXplIC0gMTsK
KworICAgIGNoZWNrQ29uc2lzdGVuY3lPZlByb3BlcnR5TWFwSGFzaFRhYmxlKCk7Cit9CisKK3Zv
aWQgU3RydWN0dXJlSUQ6OnJlaGFzaFByb3BlcnR5TWFwSGFzaFRhYmxlKCkKK3sKKyAgICBBU1NF
UlQobV9wcm9wZXJ0eVRhYmxlKTsKKyAgICBBU1NFUlQobV9wcm9wZXJ0eVRhYmxlLT5zaXplKTsK
KyAgICByZWhhc2hQcm9wZXJ0eU1hcEhhc2hUYWJsZShtX3Byb3BlcnR5VGFibGUtPnNpemUpOwor
fQorCit2b2lkIFN0cnVjdHVyZUlEOjpyZWhhc2hQcm9wZXJ0eU1hcEhhc2hUYWJsZSh1bnNpZ25l
ZCBuZXdUYWJsZVNpemUpCit7CisgICAgQVNTRVJUKG1fcHJvcGVydHlUYWJsZSk7CisKKyAgICBj
aGVja0NvbnNpc3RlbmN5T2ZQcm9wZXJ0eU1hcEhhc2hUYWJsZSgpOworCisgICAgUHJvcGVydHlN
YXBIYXNoVGFibGUqIG9sZFRhYmxlID0gbV9wcm9wZXJ0eVRhYmxlOworCisgICAgbV9wcm9wZXJ0
eVRhYmxlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlNYXBIYXNoVGFibGUqPihmYXN0WmVyb2VkTWFs
bG9jKFByb3BlcnR5TWFwSGFzaFRhYmxlOjphbGxvY2F0aW9uU2l6ZShuZXdUYWJsZVNpemUpKSk7
CisgICAgbV9wcm9wZXJ0eVRhYmxlLT5zaXplID0gbmV3VGFibGVTaXplOworICAgIG1fcHJvcGVy
dHlUYWJsZS0+c2l6ZU1hc2sgPSBuZXdUYWJsZVNpemUgLSAxOworCisgICAgdW5zaWduZWQgbGFz
dEluZGV4VXNlZCA9IDA7CisgICAgdW5zaWduZWQgZW50cnlDb3VudCA9IG9sZFRhYmxlLT5rZXlD
b3VudCArIG9sZFRhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudDsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDw9IGVudHJ5Q291bnQ7ICsraSkgeworICAgICAgICBpZiAob2xkVGFibGUtPmVu
dHJpZXMoKVtpXS5rZXkpIHsKKyAgICAgICAgICAgIGxhc3RJbmRleFVzZWQgPSBtYXgob2xkVGFi
bGUtPmVudHJpZXMoKVtpXS5pbmRleCwgbGFzdEluZGV4VXNlZCk7CisgICAgICAgICAgICBpbnNl
cnRJbnRvUHJvcGVydHlNYXBIYXNoVGFibGUob2xkVGFibGUtPmVudHJpZXMoKVtpXSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgbV9wcm9wZXJ0eVRhYmxlLT5sYXN0SW5kZXhVc2VkID0gbGFzdElu
ZGV4VXNlZDsKKworICAgIGZhc3RGcmVlKG9sZFRhYmxlKTsKKworICAgIGNoZWNrQ29uc2lzdGVu
Y3lPZlByb3BlcnR5TWFwSGFzaFRhYmxlKCk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZVByb3Bl
cnR5TWFwRW50cnlJbmRpY2VzKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCit7CisgICAg
dW5zaWduZWQgaWEgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eU1hcEVudHJ5KiBjb25zdCo+KGEpWzBd
LT5pbmRleDsKKyAgICB1bnNpZ25lZCBpYiA9IHN0YXRpY19jYXN0PFByb3BlcnR5TWFwRW50cnkq
IGNvbnN0Kj4oYilbMF0tPmluZGV4OworICAgIGlmIChpYSA8IGliKQorICAgICAgICByZXR1cm4g
LTE7CisgICAgaWYgKGlhID4gaWIpCisgICAgICAgIHJldHVybiArMTsKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBTdHJ1Y3R1cmVJRDo6Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXNJbnRlcm5h
bChQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykgY29uc3QKK3sKKyAgICBpZiAoIW1f
cHJvcGVydHlUYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcHJvcGVydHlUYWJs
ZS0+a2V5Q291bnQgPCB0aW55TWFwVGhyZXNob2xkKSB7CisgICAgICAgIFByb3BlcnR5TWFwRW50
cnkqIGFbdGlueU1hcFRocmVzaG9sZF07CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgdW5z
aWduZWQgZW50cnlDb3VudCA9IG1fcHJvcGVydHlUYWJsZS0+a2V5Q291bnQgKyBtX3Byb3BlcnR5
VGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50OworICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAx
OyBrIDw9IGVudHJ5Q291bnQ7IGsrKykgeworICAgICAgICAgICAgaWYgKG1fcHJvcGVydHlUYWJs
ZS0+ZW50cmllcygpW2tdLmtleSAmJiAhKG1fcHJvcGVydHlUYWJsZS0+ZW50cmllcygpW2tdLmF0
dHJpYnV0ZXMgJiBEb250RW51bSkpIHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5
KiB2YWx1ZSA9ICZtX3Byb3BlcnR5VGFibGUtPmVudHJpZXMoKVtrXTsKKyAgICAgICAgICAgICAg
ICBpbnQgajsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSBpIC0gMTsgaiA+PSAwICYmIGFbal0t
PmluZGV4ID4gdmFsdWUtPmluZGV4OyAtLWopCisgICAgICAgICAgICAgICAgICAgIGFbaiArIDFd
ID0gYVtqXTsKKyAgICAgICAgICAgICAgICBhW2ogKyAxXSA9IHZhbHVlOworICAgICAgICAgICAg
ICAgICsraTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXByb3BlcnR5
TmFtZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGk7ICsraykK
KyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZEtub3duVW5pcXVlKGFba10tPmtleSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGk7ICsr
aykKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChhW2tdLT5rZXkpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEFsbG9jYXRlIGEgYnVmZmVy
IHRvIHVzZSB0byBzb3J0IHRoZSBrZXlzLgorICAgIFZlY3RvcjxQcm9wZXJ0eU1hcEVudHJ5Kiwg
c21hbGxNYXBUaHJlc2hvbGQ+IHNvcnRlZEVudW1lcmFibGVzKG1fcHJvcGVydHlUYWJsZS0+a2V5
Q291bnQpOworCisgICAgLy8gR2V0IHBvaW50ZXJzIHRvIHRoZSBlbnVtZXJhYmxlIGVudHJpZXMg
aW4gdGhlIGJ1ZmZlci4KKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiogcCA9IHNvcnRlZEVudW1lcmFi
bGVzLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBlbnRyeUNvdW50ID0gbV9wcm9wZXJ0eVRhYmxlLT5r
ZXlDb3VudCArIG1fcHJvcGVydHlUYWJsZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQ7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8PSBlbnRyeUNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKG1f
cHJvcGVydHlUYWJsZS0+ZW50cmllcygpW2ldLmtleSAmJiAhKG1fcHJvcGVydHlUYWJsZS0+ZW50
cmllcygpW2ldLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAqcCsrID0gJm1f
cHJvcGVydHlUYWJsZS0+ZW50cmllcygpW2ldOworICAgIH0KKworICAgIHNpemVfdCBlbnVtZXJh
YmxlQ291bnQgPSBwIC0gc29ydGVkRW51bWVyYWJsZXMuZGF0YSgpOworICAgIC8vIFNvcnQgdGhl
IGVudHJpZXMgYnkgaW5kZXguCisgICAgcXNvcnQoc29ydGVkRW51bWVyYWJsZXMuZGF0YSgpLCBl
bnVtZXJhYmxlQ291bnQsIHNpemVvZihQcm9wZXJ0eU1hcEVudHJ5KiksIGNvbXBhcmVQcm9wZXJ0
eU1hcEVudHJ5SW5kaWNlcyk7CisgICAgc29ydGVkRW51bWVyYWJsZXMucmVzaXplKGVudW1lcmFi
bGVDb3VudCk7CisKKyAgICAvLyBQdXQgdGhlIGtleXMgb2YgdGhlIHNvcnRlZCBlbnRyaWVzIGlu
dG8gdGhlIGxpc3QuCisgICAgaWYgKCFwcm9wZXJ0eU5hbWVzLnNpemUoKSkgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNvcnRlZEVudW1lcmFibGVzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGRLbm93blVuaXF1ZShzb3J0ZWRFbnVtZXJhYmxlc1tp
XS0+a2V5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNv
cnRlZEVudW1lcmFibGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoc29ydGVkRW51bWVyYWJsZXNbaV0tPmtleSk7CisgICAgfQorfQorCisjaWYgRE9fUFJPUEVS
VFlNQVBfQ09OU1RFTkNZX0NIRUNLCisKK3ZvaWQgU3RydWN0dXJlSUQ6OmNoZWNrQ29uc2lzdGVu
Y3lPZlByb3BlcnR5TWFwSGFzaFRhYmxlKCkKK3sKKyAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fcHJvcGVydHlUYWJsZS0+c2l6ZSA+PSAx
Nik7CisgICAgQVNTRVJUKG1fcHJvcGVydHlUYWJsZS0+c2l6ZU1hc2spOworICAgIEFTU0VSVCht
X3Byb3BlcnR5VGFibGUtPnNpemUgPT0gbV9wcm9wZXJ0eVRhYmxlLT5zaXplTWFzayArIDEpOwor
ICAgIEFTU0VSVCghKG1fcHJvcGVydHlUYWJsZS0+c2l6ZSAmIG1fcHJvcGVydHlUYWJsZS0+c2l6
ZU1hc2spKTsKKworICAgIEFTU0VSVChtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50IDw9IG1fcHJv
cGVydHlUYWJsZS0+c2l6ZSAvIDIpOworICAgIEFTU0VSVChtX3Byb3BlcnR5VGFibGUtPmRlbGV0
ZWRTZW50aW5lbENvdW50IDw9IG1fcHJvcGVydHlUYWJsZS0+c2l6ZSAvIDQpOworCisgICAgQVNT
RVJUKG1fcHJvcGVydHlUYWJsZS0+a2V5Q291bnQgKyBtX3Byb3BlcnR5VGFibGUtPmRlbGV0ZWRT
ZW50aW5lbENvdW50IDw9IG1fcHJvcGVydHlUYWJsZS0+c2l6ZSAvIDIpOworCisgICAgdW5zaWdu
ZWQgaW5kZXhDb3VudCA9IDA7CisgICAgdW5zaWduZWQgZGVsZXRlZEluZGV4Q291bnQgPSAwOwor
ICAgIGZvciAodW5zaWduZWQgYSA9IDA7IGEgIT0gbV9wcm9wZXJ0eVRhYmxlLT5zaXplOyArK2Ep
IHsKKyAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1fcHJvcGVydHlUYWJsZS0+ZW50cnlJ
bmRpY2VzW2FdOworICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBlbXB0eUVudHJ5SW5kZXgpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZGVsZXRlZFNl
bnRpbmVsSW5kZXgpIHsKKyAgICAgICAgICAgICsrZGVsZXRlZEluZGV4Q291bnQ7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoZW50cnlJbmRleCA+IGRl
bGV0ZWRTZW50aW5lbEluZGV4KTsKKyAgICAgICAgQVNTRVJUKGVudHJ5SW5kZXggLSAxIDw9IG1f
cHJvcGVydHlUYWJsZS0+a2V5Q291bnQgKyBtX3Byb3BlcnR5VGFibGUtPmRlbGV0ZWRTZW50aW5l
bENvdW50KTsKKyAgICAgICAgKytpbmRleENvdW50OworCisgICAgICAgIGZvciAodW5zaWduZWQg
YiA9IGEgKyAxOyBiICE9IG1fcHJvcGVydHlUYWJsZS0+c2l6ZTsgKytiKQorICAgICAgICAgICAg
QVNTRVJUKG1fcHJvcGVydHlUYWJsZS0+ZW50cnlJbmRpY2VzW2JdICE9IGVudHJ5SW5kZXgpOwor
ICAgIH0KKyAgICBBU1NFUlQoaW5kZXhDb3VudCA9PSBtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50
KTsKKyAgICBBU1NFUlQoZGVsZXRlZEluZGV4Q291bnQgPT0gbV9wcm9wZXJ0eVRhYmxlLT5kZWxl
dGVkU2VudGluZWxDb3VudCk7CisKKyAgICBBU1NFUlQobV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVz
KClbMF0ua2V5ID09IDApOworCisgICAgdW5zaWduZWQgbm9uRW1wdHlFbnRyeUNvdW50ID0gMDsK
KyAgICBmb3IgKHVuc2lnbmVkIGMgPSAxOyBjIDw9IG1fcHJvcGVydHlUYWJsZS0+a2V5Q291bnQg
KyBtX3Byb3BlcnR5VGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50OyArK2MpIHsKKyAgICAgICAg
VVN0cmluZzo6UmVwKiByZXAgPSBtX3Byb3BlcnR5VGFibGUtPmVudHJpZXMoKVtjXS5rZXk7Cisg
ICAgICAgIGlmICghcmVwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICsrbm9uRW1w
dHlFbnRyeUNvdW50OworICAgICAgICB1bnNpZ25lZCBpID0gcmVwLT5jb21wdXRlZEhhc2goKTsK
KyAgICAgICAgdW5zaWduZWQgayA9IDA7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXg7Cisg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBlbnRyeUluZGV4ID0gbV9wcm9wZXJ0eVRh
YmxlLT5lbnRyeUluZGljZXNbaSAmIG1fcHJvcGVydHlUYWJsZS0+c2l6ZU1hc2tdOworICAgICAg
ICAgICAgQVNTRVJUKGVudHJ5SW5kZXggIT0gZW1wdHlFbnRyeUluZGV4KTsKKyAgICAgICAgICAg
IGlmIChyZXAgPT0gbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtl
eSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChrID09IDApCisgICAg
ICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKHJlcC0+Y29tcHV0ZWRIYXNoKCkpOworICAg
ICAgICAgICAgaSArPSBrOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChlbnRyeUluZGV4ID09
IGMgKyAxKTsKKyAgICB9CisKKyAgICBBU1NFUlQobm9uRW1wdHlFbnRyeUNvdW50ID09IG1fcHJv
cGVydHlUYWJsZS0+a2V5Q291bnQpOworfQorCisjZW5kaWYgLy8gRE9fUFJPUEVSVFlNQVBfQ09O
U1RFTkNZX0NIRUNLCisKKy8vIFN0cnVjdHVyZUlEQ2hhaW4KKwogU3RydWN0dXJlSURDaGFpbjo6
U3RydWN0dXJlSURDaGFpbihTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQpCiB7CiAgICAgc2l6ZV90
IHNpemUgPSAxOwpJbmRleDogcnVudGltZS9TdHJ1Y3R1cmVJRC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJ1
bnRpbWUvU3RydWN0dXJlSUQuaAkocmV2aXNpb24gMzc5ODkpCisrKyBydW50aW1lL1N0cnVjdHVy
ZUlELmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0IEBACisKIC8vIC0qLSBtb2RlOiBjKys7
IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yOSw5ICszMCwxMCBAQAogCiAjaW5jbHVkZSAi
SlNUeXBlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgotI2luY2x1ZGUgIlByb3BlcnR5TWFwLmgi
CisjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJ
RFRyYW5zaXRpb25UYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVJbmZvLmgiCisjaW5jbHVkZSAiaWRl
bnRpZmllci5oIgogI2luY2x1ZGUgInVzdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CkBAIC00MSw2ICs0MywxMiBAQAog
CiAjZGVmaW5lIERVTVBfU1RSVUNUVVJFX0lEX1NUQVRJU1RJQ1MgMAogCisjaWZuZGVmIE5ERUJV
RworI2RlZmluZSBEVU1QX1BST1BFUlRZTUFQX1NUQVRTIDAKKyNlbHNlCisjZGVmaW5lIERVTVBf
UFJPUEVSVFlNQVBfU1RBVFMgMAorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgUHJvcGVydHlOYW1lQXJyYXk7CkBAIC02NCw2ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjaGFuZ2VQcm90b3R5cGVU
cmFuc2l0aW9uKFN0cnVjdHVyZUlEKiwgSlNWYWx1ZSogcHJvdG90eXBlKTsKICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGFkZFByb3BlcnR5VHJhbnNpdGlvbihTdHJ1Y3R1
cmVJRCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRl
cywgc2l6ZV90JiBvZmZzZXQpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJ
RD4gcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFN0cnVjdHVyZUlEKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBzaXplX3QmIG9mZnNldCk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cnVjdHVyZUlEPiBnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uKFN0cnVjdHVyZUlEKik7CiAg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiB0b0RpY3Rpb25hcnlUcmFuc2l0
aW9uKFN0cnVjdHVyZUlEKik7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlE
PiBmcm9tRGljdGlvbmFyeVRyYW5zaXRpb24oU3RydWN0dXJlSUQqKTsKQEAgLTc4LDYgKzg3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0
aCBjYXV0aW9uLiAgCiAgICAgICAgIHNpemVfdCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Cisg
ICAgICAgIHNpemVfdCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHZvaWQgc2V0UHJvdG90eXBlV2l0aG91dFRy
YW5zaXRpb24oSlNWYWx1ZSogcHJvdG90eXBlKSB7IG1fcHJvdG90eXBlID0gcHJvdG90eXBlOyB9
CiAKICAgICAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2lzRGljdGlv
bmFyeTsgfQpAQCAtMTAxLDI0ICsxMTEsMzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBncm93UHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKTsKICAgICAgICAgc2l6ZV90IHByb3Bl
cnR5U3RvcmFnZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVN0b3JhZ2VDYXBh
Y2l0eTsgfQotICAgICAgICBzaXplX3QgcHJvcGVydHlTdG9yYWdlU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGVydHlNYXAuc3RvcmFnZVNpemUoKTsgfQotCi0gICAgICAgIHNpemVfdCBnZXQo
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5
TWFwLmdldChwcm9wZXJ0eU5hbWUpOyB9Ci0gICAgICAgIHNpemVfdCBnZXQoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsgfQotICAgICAgICBz
aXplX3QgcHV0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
dXRlcykgeyByZXR1cm4gbV9wcm9wZXJ0eU1hcC5wdXQocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KTsgfQotICAgICAgICBzaXplX3QgcmVtb3ZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkgeyByZXR1cm4gbV9wcm9wZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lKTsgfQorICAgICAg
ICBzaXplX3QgcHJvcGVydHlTdG9yYWdlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlU
YWJsZSA/IG1fcHJvcGVydHlUYWJsZS0+a2V5Q291bnQgKyBtX2RlbGV0ZWRPZmZzZXRzLnNpemUo
KSA6IDA7IH0KIAorICAgICAgICBzaXplX3QgZ2V0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkgY29uc3Q7CisgICAgICAgIHNpemVfdCBnZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykgY29uc3Q7CiAgICAgICAgIHZvaWQgZ2V0RW51
bWVyYWJsZVByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBKU09i
amVjdCopOwotICAgICAgICB2b2lkIGNsZWFyRW51bWVyYXRpb25DYWNoZSgpOwogCiAgICAgICAg
IGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzR2V0
dGVyU2V0dGVyUHJvcGVydGllczsgfQogICAgICAgICB2b2lkIHNldEhhc0dldHRlclNldHRlclBy
b3BlcnRpZXMoYm9vbCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKSB7IG1faGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcyA9IGhhc0dldHRlclNldHRlclByb3BlcnRpZXM7IH0KIAotICAgICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5TWFwLmlzRW1wdHkoKTsgfQor
ICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9wcm9wZXJ0eVRhYmxlOyB9
CiAKICAgICBwcml2YXRlOgogICAgICAgICBTdHJ1Y3R1cmVJRChKU1ZhbHVlKiBwcm90b3R5cGUs
IGNvbnN0IFR5cGVJbmZvJik7CiAKKyAgICAgICAgc2l6ZV90IHB1dChjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICBzaXplX3QgcmVt
b3ZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHZvaWQgZ2V0RW51
bWVyYWJsZVByb3BlcnR5TmFtZXNJbnRlcm5hbChQcm9wZXJ0eU5hbWVBcnJheSYpIGNvbnN0Owor
CisgICAgICAgIHZvaWQgZXhwYW5kUHJvcGVydHlNYXBIYXNoVGFibGUoKTsKKyAgICAgICAgdm9p
ZCByZWhhc2hQcm9wZXJ0eU1hcEhhc2hUYWJsZSgpOworICAgICAgICB2b2lkIHJlaGFzaFByb3Bl
cnR5TWFwSGFzaFRhYmxlKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIHZvaWQgY3Jl
YXRlUHJvcGVydHlNYXBIYXNoVGFibGUoKTsKKyAgICAgICAgdm9pZCBpbnNlcnRJbnRvUHJvcGVy
dHlNYXBIYXNoVGFibGUoY29uc3QgUHJvcGVydHlNYXBFbnRyeSYpOworICAgICAgICB2b2lkIGNo
ZWNrQ29uc2lzdGVuY3lPZlByb3BlcnR5TWFwSGFzaFRhYmxlKCk7CisKKyAgICAgICAgUHJvcGVy
dHlNYXBIYXNoVGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKCk7CisKKyAgICAgICAgdm9pZCBjbGVh
ckVudW1lcmF0aW9uQ2FjaGUoKTsKKworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZW1w
dHlFbnRyeUluZGV4ID0gMDsKKyAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX21h
eFRyYW5zaXRpb25MZW5ndGggPSA2NDsKIAogICAgICAgICBUeXBlSW5mbyBtX3R5cGVJbmZvOwpA
QCAtMTM3LDcgKzE2MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZlB0cjxQcm9w
ZXJ0eU5hbWVBcnJheURhdGE+IG1fY2FjaGVkUHJvcGVydHlOYW1lQXJyYXlEYXRhOwogCi0gICAg
ICAgIFByb3BlcnR5TWFwIG1fcHJvcGVydHlNYXA7CisgICAgICAgIFByb3BlcnR5TWFwSGFzaFRh
YmxlKiBtX3Byb3BlcnR5VGFibGU7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9kZWxldGVk
T2Zmc2V0czsKKwogICAgICAgICBzaXplX3QgbV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eTsKIAog
ICAgICAgICBzaXplX3QgbV9jYWNoZWRUcmFuc2lzdGlvbk9mZnNldDsKQEAgLTE0OCw2ICsxNzMs
NTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJl
dmlvdXMgOiA1OwogICAgIH07CiAKKyAgICBpbmxpbmUgc2l6ZV90IFN0cnVjdHVyZUlEOjpnZXQo
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFwcm9wZXJ0eU5hbWUuaXNOdWxsKCkpOworCisgICAgICAgIGlmICghbV9wcm9wZXJ0eVRh
YmxlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7CisKKyAgICAgICAgVVN0cmlu
Zzo6UmVwKiByZXAgPSBwcm9wZXJ0eU5hbWUuX3VzdHJpbmcucmVwKCk7CisKKyAgICAgICAgdW5z
aWduZWQgaSA9IHJlcC0+Y29tcHV0ZWRIYXNoKCk7CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NU
QVRTCisgICAgICAgICsrbnVtUHJvYmVzOworI2VuZGlmCisKKyAgICAgICAgdW5zaWduZWQgZW50
cnlJbmRleCA9IG1fcHJvcGVydHlUYWJsZS0+ZW50cnlJbmRpY2VzW2kgJiBtX3Byb3BlcnR5VGFi
bGUtPnNpemVNYXNrXTsKKyAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7CisKKyAgICAgICAgaWYgKHJlcCA9
PSBtX3Byb3BlcnR5VGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQorICAgICAg
ICAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5v
ZmZzZXQ7CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgICAgICsrbnVtQ29sbGlz
aW9uczsKKyNlbmRpZgorCisgICAgICAgIHVuc2lnbmVkIGsgPSAxIHwgV1RGOjpkb3VibGVIYXNo
KHJlcC0+Y29tcHV0ZWRIYXNoKCkpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAg
ICBpICs9IGs7CisKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgICAgICAgICArK251
bVJlaGFzaGVzOworI2VuZGlmCisKKyAgICAgICAgICAgIGVudHJ5SW5kZXggPSBtX3Byb3BlcnR5
VGFibGUtPmVudHJ5SW5kaWNlc1tpICYgbV9wcm9wZXJ0eVRhYmxlLT5zaXplTWFza107CisgICAg
ICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBlbXB0eUVudHJ5SW5kZXgpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7CisKKyAgICAgICAgICAgIGlmIChyZXAgPT0gbV9wcm9w
ZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtleSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLm9mZnNl
dDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGNsYXNzIFN0cnVjdHVyZUlEQ2hhaW4gOiBwdWJs
aWMgUmVmQ291bnRlZDxTdHJ1Y3R1cmVJRENoYWluPiB7CiAgICAgcHVibGljOgogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRENoYWluPiBjcmVhdGUoU3RydWN0dXJlSUQqIHN0
cnVjdHVyZUlEKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3RydWN0dXJlSURDaGFpbihzdHJ1Y3R1
cmVJRCkpOyB9Cg==
</data>
<flag name="review"
          id="11345"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>