<?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>22715</bug_id>
          
          <creation_ts>2008-12-06 13:14:16 -0800</creation_ts>
          <short_desc>Encapsulate CodeBlock members</short_desc>
          <delta_ts>2008-12-06 14:01:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>101670</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-12-06 13:14:16 -0800</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101671</commentid>
    <comment_count>1</comment_count>
      <attachid>25818</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-12-06 13:15:10 -0800</bug_when>
    <thetext>Created attachment 25818
patch

No perf change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101673</commentid>
    <comment_count>2</comment_count>
      <attachid>25818</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-06 13:19:58 -0800</bug_when>
    <thetext>Comment on attachment 25818
patch

r=me

I am glad someone finally did this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101679</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-12-06 14:01:20 -0800</bug_when>
    <thetext>Landed in r39070.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25818</attachid>
            <date>2008-12-06 13:15:10 -0800</date>
            <delta_ts>2008-12-06 13:19:58 -0800</delta_ts>
            <desc>patch</desc>
            <filename>encap.diff</filename>
            <type>text/plain</type>
            <size>166181</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5MDY5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE1IEBACisyMDA4LTEy
LTA1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MTUKKyAgICAgICAgRW5jYXBzdWxhdGUgbW9yZSBDb2RlQmxv
Y2sgbWVtYmVycyBpbiBwcmVwYXJhdGlvbgorICAgICAgICBvZiBtb3Zpbmcgc29tZSBvZiB0aGVt
IHRvIGEgcmFyZSBkYXRhIHN0cnVjdHVyZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OmxvY2F0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
cHJpbnRDb25kaXRpb25hbEp1bXApOgorICAgICAgICAoSlNDOjpwcmludEdldEJ5SWRPcCk6Cisg
ICAgICAgIChKU0M6OnByaW50UHV0QnlJZE9wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpw
cmludFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxsZXJz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZXJlZlN0cnVjdHVyZXMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJlZlN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om1hcmspOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEhhbmRsZXJGb3JWUEMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om5hdGl2ZUV4Y2VwdGlvbkNvZGVGb3JIYW5kbGVyVlBDKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yVlBDKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JWUEMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNocmlua1RvRml0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmFkZENhbGxlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVtb3ZlQ2FsbGVyKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90SW1tZWRpYXRlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Z2V0Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzVGVt
cG9yYXJ5UmVnaXN0ZXJJbmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0U3R1Yklu
Zm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mbyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpvd25lck5vZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldEdsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldFRoaXNSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dGhpc1JlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpzZXROZWVkc0Z1bGxTY29wZUNoYWluKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpuZWVkc0Z1bGxTY29wZUNoYWluKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpz
ZXRVc2VzRXZhbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXNlc0V2YWwpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnNldFVzZXNBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnVzZXNBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvZGVUeXBl
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzb3VyY2UpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNvdXJjZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkR2xvYmFs
UmVzb2x2ZUluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRQ
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJP
ZkNhbGxMaW5rSW5mb3MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZENhbGxMaW5rSW5m
byk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpudW1iZXJPZkp1bXBUYXJnZXRzKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjphZGRKdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqdW1wVGFyZ2V0
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsYXN0SnVtcFRhcmdldCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkRXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRXhwcmVz
c2lvbkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mTGluZUluZm9zKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRMaW5lSW5mbyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGFzdExpbmVJbmZvKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRSZXR1
cm5BZGRyZXNzVlBDTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZklkZW50
aWZpZXJzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRJZGVudGlmaWVyKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpudW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjph
ZGRDb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFk
ZEZ1bmN0aW9uRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZnVuY3Rpb25F
eHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRVbmV4cGVjdGVkQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVuZXhwZWN0ZWRDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6YWRkUmVnRXhwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpyZWdleHApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN5bWJvbFRhYmxlKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpldmFsQ29kZUNhY2hlKToKKyAgICAgICAgTmV3IGlubGluZSBz
ZXR0ZXJzL2dldHRlcnMuCisKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6UHJvZ3Jh
bUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6On5Qcm9ncmFtQ29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6Y2xlYXJHbG9iYWxPYmpl
Y3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHA6CisgICAgICAgIChKU0M6
OlNjb3BlU2FtcGxlUmVjb3JkOjpzYW1wbGUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Rvb2w6
OmR1bXApOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0xhYmVsLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAqIGppdC9KSVRJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmg6Cisg
ICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgQ2hhbmdlIGRpcmVj
dCBhY2Nlc3MgdG8gdXNlIG5ldyBnZXR0ZXIvc2V0dGVycy4KKwogMjAwOC0xMi0wNSAgR2F2aW4g
QmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgT2xpdmVyIEh1bnQuCkluZGV4OiBieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM5MDY5KQorKysgYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIE5FVkVSX0lO
TElORSBzdGF0aWMgY29uc3QgY2hhciogZGVidWdIb28KICAgICByZXR1cm4gIiI7CiB9CiAKLXN0
YXRpYyBpbnQganVtcFRhcmdldChjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBpdCwgaW50
IG9mZnNldCkKK3N0YXRpYyBpbnQgbG9jYXRpb25Gb3JPZmZzZXQoY29uc3QgVmVjdG9yPEluc3Ry
dWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25z
dF9pdGVyYXRvciYgaXQsIGludCBvZmZzZXQpCiB7CiAgICAgcmV0dXJuIGl0IC0gYmVnaW4gKyBv
ZmZzZXQ7CiB9CkBAIC0xNTIsMzcgKzE1MiwzNyBAQCBzdGF0aWMgdm9pZCBwcmludENvbmRpdGlv
bmFsSnVtcChjb25zdCBWCiB7CiAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAg
aW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIHByaW50ZigiWyU0ZF0gJXNcdFx0
ICVzLCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIG9wLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCks
IG9mZnNldCwganVtcFRhcmdldChiZWdpbiwgaXQsIG9mZnNldCkpOworICAgIHByaW50ZigiWyU0
ZF0gJXNcdFx0ICVzLCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIG9wLCByZWdpc3Rlck5hbWUocjAp
LmNfc3RyKCksIG9mZnNldCwgbG9jYXRpb25Gb3JPZmZzZXQoYmVnaW4sIGl0LCBvZmZzZXQpKTsK
IH0KIAotc3RhdGljIHZvaWQgcHJpbnRHZXRCeUlkT3AoaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5z
dHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgaXQsIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYg
aWRlbnRpZmllcnMsIGNvbnN0IGNoYXIqIG9wKQorc3RhdGljIHZvaWQgcHJpbnRHZXRCeUlkT3Ao
aW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgaXQsIGNv
bnN0IFZlY3RvcjxJZGVudGlmaWVyPiYgbV9pZGVudGlmaWVycywgY29uc3QgY2hhciogb3ApCiB7
CiAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IHIxID0gKCsraXQpLT51
Lm9wZXJhbmQ7CiAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIHByaW50Zigi
WyU0ZF0gJXNcdCAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgb3AsIHJlZ2lzdGVyTmFtZShyMCku
Y19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVy
c1tpZDBdKS5jX3N0cigpKTsKKyAgICBwcmludGYoIlslNGRdICVzXHQgJXMsICVzLCAlc1xuIiwg
bG9jYXRpb24sIG9wLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSku
Y19zdHIoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5jX3N0cigpKTsKICAgICBp
dCArPSA0OwogfQogCi1zdGF0aWMgdm9pZCBwcmludFB1dEJ5SWRPcChpbnQgbG9jYXRpb24sIFZl
Y3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBpdCwgY29uc3QgVmVjdG9yPElkZW50
aWZpZXI+JiBpZGVudGlmaWVycywgY29uc3QgY2hhciogb3ApCitzdGF0aWMgdm9pZCBwcmludFB1
dEJ5SWRPcChpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9y
JiBpdCwgY29uc3QgVmVjdG9yPElkZW50aWZpZXI+JiBtX2lkZW50aWZpZXJzLCBjb25zdCBjaGFy
KiBvcCkKIHsKICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgaWQwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
cHJpbnRmKCJbJTRkXSAlc1x0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJO
YW1lKHIwKS5jX3N0cigpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyc1tpZDBdKS5jX3N0cigpLCBy
ZWdpc3Rlck5hbWUocjEpLmNfc3RyKCkpOworICAgIHByaW50ZigiWyU0ZF0gJXNcdCAlcywgJXMs
ICVzXG4iLCBsb2NhdGlvbiwgb3AsIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwgaWROYW1lKGlk
MCwgbV9pZGVudGlmaWVyc1tpZDBdKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCkp
OwogICAgIGl0ICs9IDQ7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0cnVjdHVyZShjb25z
dCBjaGFyKiBuYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDLCBpbnQgb3BlcmFuZCkgY29uc3QK
IHsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IHZQQyAtIGluc3RydWN0aW9ucy5i
ZWdpbigpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0gdlBDIC0gbV9pbnN0cnVj
dGlvbnMuYmVnaW4oKTsKICAgICBwcmludGYoIiAgWyU0ZF0gJXM6ICVzXG4iLCBpbnN0cnVjdGlv
bk9mZnNldCwgbmFtZSwgcG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1tvcGVyYW5kXS51LnN0cnVj
dHVyZSkuVVRGOFN0cmluZygpLmNfc3RyKCkpOwogfQogCiB2b2lkIENvZGVCbG9jazo6cHJpbnRT
dHJ1Y3R1cmVzKGNvbnN0IEluc3RydWN0aW9uKiB2UEMpIGNvbnN0CiB7Ci0gICAgSW50ZXJwcmV0
ZXIqIGludGVycHJldGVyID0gZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7Ci0gICAgdW5zaWduZWQg
aW5zdHJ1Y3Rpb25PZmZzZXQgPSB2UEMgLSBpbnN0cnVjdGlvbnMuYmVnaW4oKTsKKyAgICBJbnRl
cnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOworICAgIHVu
c2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0gdlBDIC0gbV9pbnN0cnVjdGlvbnMuYmVnaW4oKTsK
IAogICAgIGlmICh2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9n
ZXRfYnlfaWQpKSB7CiAgICAgICAgIHByaW50U3RydWN0dXJlKCJnZXRfYnlfaWQiLCB2UEMsIDQp
OwpAQCAtMjE3LDkxICsyMTcsOTEgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50U3RydWN0dXJlcyhj
b25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gVGhlc2UgaW5zdHJ1Y3Rp
b25zIGRvZXNuJ3QgcmVmIFN0cnVjdHVyZXMuCisgICAgLy8gVGhlc2UgbV9pbnN0cnVjdGlvbnMg
ZG9lc24ndCByZWYgU3RydWN0dXJlcy4KICAgICBBU1NFUlQodlBDWzBdLnUub3Bjb2RlID09IGlu
dGVycHJldGVyLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2dlbmVyaWMpIHx8IHZQQ1swXS51Lm9w
Y29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKSB8fCB2
UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9jYWxsKSB8fCB2UENb
MF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9jYWxsX2V2YWwpIHx8IHZQ
Q1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2NvbnN0cnVjdCkpOwog
fQogCiB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBpbnN0cnVjdGlvbnMu
YmVnaW4oKTsKLSAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBp
bnN0cnVjdGlvbnMuZW5kKCk7CisgICAgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0
b3IgYmVnaW4gPSBtX2luc3RydWN0aW9ucy5iZWdpbigpOworICAgIFZlY3RvcjxJbnN0cnVjdGlv
bj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1faW5zdHJ1Y3Rpb25zLmVuZCgpOwogCiAgICAgc2l6
ZV90IGluc3RydWN0aW9uQ291bnQgPSAwOwogICAgIGZvciAoVmVjdG9yPEluc3RydWN0aW9uPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBpZiAo
ZXhlYy0+aW50ZXJwcmV0ZXIoKS0+aXNPcGNvZGUoaXQtPnUub3Bjb2RlKSkKICAgICAgICAgICAg
ICsraW5zdHJ1Y3Rpb25Db3VudDsKIAotICAgIHByaW50ZigiJWx1IGluc3RydWN0aW9uczsgJWx1
IGJ5dGVzIGF0ICVwOyAlZCBwYXJhbWV0ZXIocyk7ICVkIGNhbGxlZSByZWdpc3RlcihzKVxuXG4i
LAorICAgIHByaW50ZigiJWx1IG1faW5zdHJ1Y3Rpb25zOyAlbHUgYnl0ZXMgYXQgJXA7ICVkIHBh
cmFtZXRlcihzKTsgJWQgY2FsbGVlIHJlZ2lzdGVyKHMpXG5cbiIsCiAgICAgICAgIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KGluc3RydWN0aW9uQ291bnQpLAotICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihpbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9u
KSksCi0gICAgICAgIHRoaXMsIG51bVBhcmFtZXRlcnMsIG51bUNhbGxlZVJlZ2lzdGVycyk7Cisg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAq
IHNpemVvZihJbnN0cnVjdGlvbikpLAorICAgICAgICB0aGlzLCBtX251bVBhcmFtZXRlcnMsIG1f
bnVtQ2FsbGVlUmVnaXN0ZXJzKTsKICAgICAKICAgICBmb3IgKFZlY3RvcjxJbnN0cnVjdGlvbj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgZHVt
cChleGVjLCBiZWdpbiwgaXQpOwogCi0gICAgaWYgKGlkZW50aWZpZXJzLnNpemUoKSkgeworICAg
IGlmICghbV9pZGVudGlmaWVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgcHJpbnRmKCJcbklkZW50
aWZpZXJzOlxuIik7CiAgICAgICAgIHNpemVfdCBpID0gMDsKICAgICAgICAgZG8gewotICAgICAg
ICAgICAgcHJpbnRmKCIgIGlkJXUgPSAlc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCBp
ZGVudGlmaWVyc1tpXS5hc2NpaSgpKTsKKyAgICAgICAgICAgIHByaW50ZigiICBpZCV1ID0gJXNc
biIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgbV9pZGVudGlmaWVyc1tpXS5hc2NpaSgpKTsK
ICAgICAgICAgICAgICsraTsKLSAgICAgICAgfSB3aGlsZSAoaSAhPSBpZGVudGlmaWVycy5zaXpl
KCkpOworICAgICAgICB9IHdoaWxlIChpICE9IG1faWRlbnRpZmllcnMuc2l6ZSgpKTsKICAgICB9
CiAKLSAgICBpZiAoY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKSB7CisgICAgaWYgKCFtX2NvbnN0
YW50UmVnaXN0ZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBwcmludGYoIlxuQ29uc3RhbnRzOlxu
Iik7Ci0gICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSBudW1WYXJzOworICAgICAgICB1
bnNpZ25lZCByZWdpc3RlckluZGV4ID0gbV9udW1WYXJzOwogICAgICAgICBzaXplX3QgaSA9IDA7
CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIHByaW50ZigiICAgciV1ID0gJXNcbiIsIHJlZ2lz
dGVySW5kZXgsIHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywgY29uc3RhbnRSZWdpc3RlcnNbaV0u
anNWYWx1ZShleGVjKSkuYXNjaWkoKSk7CisgICAgICAgICAgICBwcmludGYoIiAgIHIldSA9ICVz
XG4iLCByZWdpc3RlckluZGV4LCB2YWx1ZVRvU291cmNlU3RyaW5nKGV4ZWMsIG1fY29uc3RhbnRS
ZWdpc3RlcnNbaV0uanNWYWx1ZShleGVjKSkuYXNjaWkoKSk7CiAgICAgICAgICAgICArK2k7CiAg
ICAgICAgICAgICArK3JlZ2lzdGVySW5kZXg7Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBjb25zdGFu
dFJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICB9IHdoaWxlIChpIDwgbV9jb25zdGFudFJlZ2lz
dGVycy5zaXplKCkpOwogICAgIH0KIAotICAgIGlmICh1bmV4cGVjdGVkQ29uc3RhbnRzLnNpemUo
KSkgeworICAgIGlmICghbV91bmV4cGVjdGVkQ29uc3RhbnRzLmlzRW1wdHkoKSkgewogICAgICAg
ICBwcmludGYoIlxuVW5leHBlY3RlZCBDb25zdGFudHM6XG4iKTsKICAgICAgICAgc2l6ZV90IGkg
PSAwOwogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBwcmludGYoIiAgayV1ID0gJXNcbiIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgdmFsdWVUb1NvdXJjZVN0cmluZyhleGVjLCB1bmV4cGVj
dGVkQ29uc3RhbnRzW2ldKS5hc2NpaSgpKTsKKyAgICAgICAgICAgIHByaW50ZigiICBrJXUgPSAl
c1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCB2YWx1ZVRvU291cmNlU3RyaW5nKGV4ZWMs
IG1fdW5leHBlY3RlZENvbnN0YW50c1tpXSkuYXNjaWkoKSk7CiAgICAgICAgICAgICArK2k7Ci0g
ICAgICAgIH0gd2hpbGUgKGkgPCB1bmV4cGVjdGVkQ29uc3RhbnRzLnNpemUoKSk7CisgICAgICAg
IH0gd2hpbGUgKGkgPCBtX3VuZXhwZWN0ZWRDb25zdGFudHMuc2l6ZSgpKTsKICAgICB9CiAgICAg
Ci0gICAgaWYgKHJlZ2V4cHMuc2l6ZSgpKSB7Ci0gICAgICAgIHByaW50ZigiXG5SZWdFeHBzOlxu
Iik7CisgICAgaWYgKCFtX3JlZ2V4cHMuaXNFbXB0eSgpKSB7CisgICAgICAgIHByaW50ZigiXG5t
X3JlZ2V4cHM6XG4iKTsKICAgICAgICAgc2l6ZV90IGkgPSAwOwogICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICBwcmludGYoIiAgcmUldSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSks
IHJlZ2V4cFRvU291cmNlU3RyaW5nKHJlZ2V4cHNbaV0uZ2V0KCkpLmFzY2lpKCkpOworICAgICAg
ICAgICAgcHJpbnRmKCIgIHJlJXUgPSAlc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCBy
ZWdleHBUb1NvdXJjZVN0cmluZyhtX3JlZ2V4cHNbaV0uZ2V0KCkpLmFzY2lpKCkpOwogICAgICAg
ICAgICAgKytpOwotICAgICAgICB9IHdoaWxlIChpIDwgcmVnZXhwcy5zaXplKCkpOworICAgICAg
ICB9IHdoaWxlIChpIDwgbV9yZWdleHBzLnNpemUoKSk7CiAgICAgfQogCi0gICAgaWYgKGdsb2Jh
bFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpIHx8IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
LnNpemUoKSkKKyAgICBpZiAoIW1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5pc0VtcHR5KCkg
fHwgIW1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuaXNFbXB0eSgpKQogICAgICAgICBwcmlu
dGYoIlxuU3RydWN0dXJlczpcbiIpOwogCi0gICAgaWYgKGdsb2JhbFJlc29sdmVJbnN0cnVjdGlv
bnMuc2l6ZSgpKSB7CisgICAgaWYgKCFtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIHNpemVfdCBpID0gMDsKICAgICAgICAgZG8gewotICAgICAgICAgICAg
IHByaW50U3RydWN0dXJlcygmaW5zdHJ1Y3Rpb25zW2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnNb
aV1dKTsKKyAgICAgICAgICAgICBwcmludFN0cnVjdHVyZXMoJm1faW5zdHJ1Y3Rpb25zW21fZ2xv
YmFsUmVzb2x2ZUluc3RydWN0aW9uc1tpXV0pOwogICAgICAgICAgICAgICsraTsKLSAgICAgICAg
fSB3aGlsZSAoaSA8IGdsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAg
fSB3aGlsZSAoaSA8IG1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5zaXplKCkpOwogICAgIH0K
LSAgICBpZiAocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpKSB7CisgICAgaWYgKCFt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBzaXplX3Qg
aSA9IDA7CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICBwcmludFN0cnVjdHVyZXMoJmluc3Ry
dWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXS5ieXRlY29kZUluZGV4XSk7Cisg
ICAgICAgICAgICAgcHJpbnRTdHJ1Y3R1cmVzKCZtX2luc3RydWN0aW9uc1ttX3Byb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25zW2ldLmJ5dGVjb2RlSW5kZXhdKTsKICAgICAgICAgICAgICArK2k7Ci0g
ICAgICAgIH0gd2hpbGUgKGkgPCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCkpOwor
ICAgICAgICB9IHdoaWxlIChpIDwgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCkp
OwogICAgIH0KICAKLSAgICBpZiAoZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpKSB7CisgICAgaWYg
KCFtX2V4Y2VwdGlvbkhhbmRsZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBwcmludGYoIlxuRXhj
ZXB0aW9uIEhhbmRsZXJzOlxuIik7CiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwogICAgICAgICBk
byB7Ci0gICAgICAgICAgICBwcmludGYoIlx0ICVkOiB7IHN0YXJ0OiBbJTRkXSBlbmQ6IFslNGRd
IHRhcmdldDogWyU0ZF0gfVxuIiwgaSArIDEsIGV4Y2VwdGlvbkhhbmRsZXJzW2ldLnN0YXJ0LCBl
eGNlcHRpb25IYW5kbGVyc1tpXS5lbmQsIGV4Y2VwdGlvbkhhbmRsZXJzW2ldLnRhcmdldCk7Cisg
ICAgICAgICAgICBwcmludGYoIlx0ICVkOiB7IHN0YXJ0OiBbJTRkXSBlbmQ6IFslNGRdIHRhcmdl
dDogWyU0ZF0gfVxuIiwgaSArIDEsIG1fZXhjZXB0aW9uSGFuZGxlcnNbaV0uc3RhcnQsIG1fZXhj
ZXB0aW9uSGFuZGxlcnNbaV0uZW5kLCBtX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLnRhcmdldCk7CiAg
ICAgICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBleGNlcHRpb25IYW5kbGVycy5z
aXplKCkpOworICAgICAgICB9IHdoaWxlIChpIDwgbV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkp
OwogICAgIH0KICAgICAKICAgICBpZiAoIW1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5pc0Vt
cHR5KCkpIHsKQEAgLTM4MSw3ICszODEsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3Rh
dGUqIGV4ZWMsIGNvCiAgICAgICAgIGNhc2Ugb3BfdW5leHBlY3RlZF9sb2FkOiB7CiAgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBrMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSB1bmV4cGVjdGVkX2xv
YWRcdCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIGNvbnN0
YW50TmFtZShleGVjLCBrMCwgdW5leHBlY3RlZENvbnN0YW50c1trMF0pLmNfc3RyKCkpOworICAg
ICAgICAgICAgcHJpbnRmKCJbJTRkXSB1bmV4cGVjdGVkX2xvYWRcdCAlcywgJXNcbiIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIGNvbnN0YW50TmFtZShleGVjLCBrMCwgbV91
bmV4cGVjdGVkQ29uc3RhbnRzW2swXSkuY19zdHIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX25ld19vYmplY3Q6IHsKQEAgLTM5OSw3ICszOTksNyBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgIGNhc2Ug
b3BfbmV3X3JlZ2V4cDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CiAgICAgICAgICAgICBpbnQgcmUwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBw
cmludGYoIlslNGRdIG5ld19yZWdleHBcdCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5h
bWUocjApLmNfc3RyKCksIHJlZ2V4cE5hbWUocmUwLCByZWdleHBzW3JlMF0uZ2V0KCkpLmNfc3Ry
KCkpOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBuZXdfcmVnZXhwXHQgJXMsICVzXG4iLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdleHBOYW1lKHJlMCwgbV9yZWdl
eHBzW3JlMF0uZ2V0KCkpLmNfc3RyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9tb3Y6IHsKQEAgLTU2NywyMSArNTY3LDIxIEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlOiB7
CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGlu
dCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gcmVz
b2x2ZVx0XHQgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCBp
ZE5hbWUoaWQwLCBpZGVudGlmaWVyc1tpZDBdKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHByaW50
ZigiWyU0ZF0gcmVzb2x2ZVx0XHQgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIw
KS5jX3N0cigpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmNfc3RyKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3NraXA6
IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHNraXBMZXZlbHMg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gcmVzb2x2ZV9z
a2lwXHQgJXMsICVzLCAlZFxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwg
aWROYW1lKGlkMCwgaWRlbnRpZmllcnNbaWQwXSkuY19zdHIoKSwgc2tpcExldmVscyk7CisgICAg
ICAgICAgICBwcmludGYoIlslNGRdIHJlc29sdmVfc2tpcFx0ICVzLCAlcywgJWRcbiIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNb
aWQwXSkuY19zdHIoKSwgc2tpcExldmVscyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsOiB7CiAgICAgICAgICAgICBpbnQgcjAg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIEpTVmFsdWUqIHNjb3BlID0gc3RhdGlj
X2Nhc3Q8SlNWYWx1ZSo+KCgrK2l0KS0+dS5qc0NlbGwpOwogICAgICAgICAgICAgaW50IGlkMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSByZXNvbHZlX2ds
b2JhbFx0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCks
IHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywgc2NvcGUpLmFzY2lpKCksIGlkTmFtZShpZDAsIGlk
ZW50aWZpZXJzW2lkMF0pLmNfc3RyKCkpOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSByZXNv
bHZlX2dsb2JhbFx0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNf
c3RyKCksIHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywgc2NvcGUpLmFzY2lpKCksIGlkTmFtZShp
ZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuY19zdHIoKSk7CiAgICAgICAgICAgICBpdCArPSAyOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTYxNiw5NCArNjE2LDk0IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgY2FzZSBvcF9yZXNv
bHZlX2Jhc2U6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRm
KCJbJTRkXSByZXNvbHZlX2Jhc2VcdCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUo
cjApLmNfc3RyKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXJzW2lkMF0pLmNfc3RyKCkpOworICAg
ICAgICAgICAgcHJpbnRmKCJbJTRkXSByZXNvbHZlX2Jhc2VcdCAlcywgJXNcbiIsIGxvY2F0aW9u
LCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQw
XSkuY19zdHIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IG9wX3Jlc29sdmVfd2l0aF9iYXNlOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAg
ICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRmKCJb
JTRkXSByZXNvbHZlX3dpdGhfYmFzZSAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJO
YW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIGlkTmFtZShpZDAsIGlk
ZW50aWZpZXJzW2lkMF0pLmNfc3RyKCkpOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSByZXNv
bHZlX3dpdGhfYmFzZSAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5j
X3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmll
cnNbaWQwXSkuY19zdHIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIG9wX3Jlc29sdmVfZnVuYzogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50Zigi
WyU0ZF0gcmVzb2x2ZV9mdW5jXHQgJXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShyMCkuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpLCBpZE5hbWUoaWQwLCBpZGVu
dGlmaWVyc1tpZDBdKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gcmVzb2x2
ZV9mdW5jXHQgJXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lk
MF0pLmNfc3RyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKGxvY2F0aW9uLCBp
dCwgaWRlbnRpZmllcnMsICJnZXRfYnlfaWQiKTsKKyAgICAgICAgICAgIHByaW50R2V0QnlJZE9w
KGxvY2F0aW9uLCBpdCwgbV9pZGVudGlmaWVycywgImdldF9ieV9pZCIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjogewotICAg
ICAgICAgICAgcHJpbnRHZXRCeUlkT3AobG9jYXRpb24sIGl0LCBpZGVudGlmaWVycywgImdldF9i
eV9pZF9zZWxmIik7CisgICAgICAgICAgICBwcmludEdldEJ5SWRPcChsb2NhdGlvbiwgaXQsIG1f
aWRlbnRpZmllcnMsICJnZXRfYnlfaWRfc2VsZiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZl9saXN0OiB7Ci0gICAgICAgICAg
ICBwcmludEdldEJ5SWRPcChsb2NhdGlvbiwgaXQsIGlkZW50aWZpZXJzLCAiZ2V0X2J5X2lkX3Nl
bGZfbGlzdCIpOworICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3AobG9jYXRpb24sIGl0LCBtX2lk
ZW50aWZpZXJzLCAiZ2V0X2J5X2lkX3NlbGZfbGlzdCIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86IHsKLSAgICAgICAgICAg
IHByaW50R2V0QnlJZE9wKGxvY2F0aW9uLCBpdCwgaWRlbnRpZmllcnMsICJnZXRfYnlfaWRfcHJv
dG8iKTsKKyAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKGxvY2F0aW9uLCBpdCwgbV9pZGVudGlm
aWVycywgImdldF9ieV9pZF9wcm90byIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdDogewotICAgICAgICAgICAgcHJp
bnRHZXRCeUlkT3AobG9jYXRpb24sIGl0LCBpZGVudGlmaWVycywgIm9wX2dldF9ieV9pZF9wcm90
b19saXN0Iik7CisgICAgICAgICAgICBwcmludEdldEJ5SWRPcChsb2NhdGlvbiwgaXQsIG1faWRl
bnRpZmllcnMsICJvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46IHsKLSAgICAgICAg
ICAgIHByaW50R2V0QnlJZE9wKGxvY2F0aW9uLCBpdCwgaWRlbnRpZmllcnMsICJnZXRfYnlfaWRf
Y2hhaW4iKTsKKyAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKGxvY2F0aW9uLCBpdCwgbV9pZGVu
dGlmaWVycywgImdldF9ieV9pZF9jaGFpbiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzogewotICAgICAgICAgICAgcHJp
bnRHZXRCeUlkT3AobG9jYXRpb24sIGl0LCBpZGVudGlmaWVycywgImdldF9ieV9pZF9nZW5lcmlj
Iik7CisgICAgICAgICAgICBwcmludEdldEJ5SWRPcChsb2NhdGlvbiwgaXQsIG1faWRlbnRpZmll
cnMsICJnZXRfYnlfaWRfZ2VuZXJpYyIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7Ci0gICAgICAgICAgICBwcmludEdl
dEJ5SWRPcChsb2NhdGlvbiwgaXQsIGlkZW50aWZpZXJzLCAiZ2V0X2FycmF5X2xlbmd0aCIpOwor
ICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3AobG9jYXRpb24sIGl0LCBtX2lkZW50aWZpZXJzLCAi
Z2V0X2FycmF5X2xlbmd0aCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDogewotICAgICAgICAgICAgcHJpbnRHZXRCeUlk
T3AobG9jYXRpb24sIGl0LCBpZGVudGlmaWVycywgImdldF9zdHJpbmdfbGVuZ3RoIik7CisgICAg
ICAgICAgICBwcmludEdldEJ5SWRPcChsb2NhdGlvbiwgaXQsIG1faWRlbnRpZmllcnMsICJnZXRf
c3RyaW5nX2xlbmd0aCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIHByaW50UHV0QnlJZE9wKGxvY2F0aW9u
LCBpdCwgaWRlbnRpZmllcnMsICJwdXRfYnlfaWQiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJ
ZE9wKGxvY2F0aW9uLCBpdCwgbV9pZGVudGlmaWVycywgInB1dF9ieV9pZCIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZTog
ewotICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3AobG9jYXRpb24sIGl0LCBpZGVudGlmaWVycywg
InB1dF9ieV9pZF9yZXBsYWNlIik7CisgICAgICAgICAgICBwcmludFB1dEJ5SWRPcChsb2NhdGlv
biwgaXQsIG1faWRlbnRpZmllcnMsICJwdXRfYnlfaWRfcmVwbGFjZSIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbjog
ewotICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3AobG9jYXRpb24sIGl0LCBpZGVudGlmaWVycywg
InB1dF9ieV9pZF90cmFuc2l0aW9uIik7CisgICAgICAgICAgICBwcmludFB1dEJ5SWRPcChsb2Nh
dGlvbiwgaXQsIG1faWRlbnRpZmllcnMsICJwdXRfYnlfaWRfdHJhbnNpdGlvbiIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJp
YzogewotICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3AobG9jYXRpb24sIGl0LCBpZGVudGlmaWVy
cywgInB1dF9ieV9pZF9nZW5lcmljIik7CisgICAgICAgICAgICBwcmludFB1dEJ5SWRPcChsb2Nh
dGlvbiwgaXQsIG1faWRlbnRpZmllcnMsICJwdXRfYnlfaWRfZ2VuZXJpYyIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfZ2V0dGVyOiB7CiAgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBpZDAg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBwdXRfZ2V0dGVyXHQgJXMsICVzLCAlc1xu
IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwgaWROYW1lKGlkMCwgaWRlbnRp
ZmllcnNbaWQwXSkuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpKTsKKyAgICAgICAg
ICAgIHByaW50ZigiWyU0ZF0gcHV0X2dldHRlclx0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCBy
ZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSku
Y19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X3NldHRlcjogewogICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHByaW50ZigiWyU0ZF0gcHV0X3NldHRlclx0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9u
LCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXJzW2lkMF0p
LmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19zdHIoKSk7CisgICAgICAgICAgICBwcmludGYo
IlslNGRdIHB1dF9zZXR0ZXJcdCAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1l
KHIwKS5jX3N0cigpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmNfc3RyKCksIHJl
Z2lzdGVyTmFtZShyMSkuY19zdHIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX2RlbF9ieV9pZDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAg
ICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50
ZigiWyU0ZF0gZGVsX2J5X2lkXHQgJXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShyMCkuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpLCBpZE5hbWUoaWQwLCBpZGVu
dGlmaWVyc1tpZDBdKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gZGVsX2J5
X2lkXHQgJXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwg
cmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0p
LmNfc3RyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9nZXRfYnlfdmFsOiB7CkBAIC03MzYsMTIgKzczNiwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9qbXA6IHsK
ICAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50ZigiWyU0ZF0gam1wXHRcdCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIG9mZnNldCwganVt
cFRhcmdldChiZWdpbiwgaXQsIG9mZnNldCkpOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBq
bXBcdFx0ICVkKC0+JWQpXG4iLCBsb2NhdGlvbiwgb2Zmc2V0LCBsb2NhdGlvbkZvck9mZnNldChi
ZWdpbiwgaXQsIG9mZnNldCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9sb29wOiB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRdIGxvb3BcdFx0ICVkKC0+JWQpXG4iLCBs
b2NhdGlvbiwgb2Zmc2V0LCBqdW1wVGFyZ2V0KGJlZ2luLCBpdCwgb2Zmc2V0KSk7CisgICAgICAg
ICAgICBwcmludGYoIlslNGRdIGxvb3BcdFx0ICVkKC0+JWQpXG4iLCBsb2NhdGlvbiwgb2Zmc2V0
LCBsb2NhdGlvbkZvck9mZnNldChiZWdpbiwgaXQsIG9mZnNldCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9qdHJ1ZTogewpAQCAtNzY4LDQyICs3Njgs
NDIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gam5sZXNzXHRcdCAlcywgJXMsICVkKC0+JWQp
XG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEp
LmNfc3RyKCksIG9mZnNldCwganVtcFRhcmdldChiZWdpbiwgaXQsIG9mZnNldCkpOworICAgICAg
ICAgICAgcHJpbnRmKCJbJTRkXSBqbmxlc3NcdFx0ICVzLCAlcywgJWQoLT4lZClcbiIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19zdHIoKSwg
b2Zmc2V0LCBsb2NhdGlvbkZvck9mZnNldChiZWdpbiwgaXQsIG9mZnNldCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3M6IHsKICAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRdIGxvb3BfaWZfbGVzc1x0ICVzLCAl
cywgJWQoLT4lZClcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lz
dGVyTmFtZShyMSkuY19zdHIoKSwgb2Zmc2V0LCBqdW1wVGFyZ2V0KGJlZ2luLCBpdCwgb2Zmc2V0
KSk7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIGxvb3BfaWZfbGVzc1x0ICVzLCAlcywgJWQo
LT4lZClcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFt
ZShyMSkuY19zdHIoKSwgb2Zmc2V0LCBsb2NhdGlvbkZvck9mZnNldChiZWdpbiwgaXQsIG9mZnNl
dCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9sb29w
X2lmX2xlc3NlcTogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBv
ZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gbG9v
cF9pZl9sZXNzZXFcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1l
KHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIG9mZnNldCwganVtcFRhcmdl
dChiZWdpbiwgaXQsIG9mZnNldCkpOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBsb29wX2lm
X2xlc3NlcVx0ICVzLCAlcywgJWQoLT4lZClcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjAp
LmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19zdHIoKSwgb2Zmc2V0LCBsb2NhdGlvbkZvck9m
ZnNldChiZWdpbiwgaXQsIG9mZnNldCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7CiAgICAgICAgICAgICBpbnQgdGFibGVJbmRl
eCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAo
KytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBzd2l0Y2hfaW1tXHQg
JWQsICVkKC0+JWQpLCAlc1xuIiwgbG9jYXRpb24sIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQs
IGp1bXBUYXJnZXQoYmVnaW4sIGl0LCBkZWZhdWx0VGFyZ2V0KSwgcmVnaXN0ZXJOYW1lKHNjcnV0
aW5lZVJlZ2lzdGVyKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gc3dpdGNo
X2ltbVx0ICVkLCAlZCgtPiVkKSwgJXNcbiIsIGxvY2F0aW9uLCB0YWJsZUluZGV4LCBkZWZhdWx0
VGFyZ2V0LCBsb2NhdGlvbkZvck9mZnNldChiZWdpbiwgaXQsIGRlZmF1bHRUYXJnZXQpLCByZWdp
c3Rlck5hbWUoc2NydXRpbmVlUmVnaXN0ZXIpLmNfc3RyKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjogewogICAgICAgICAgICAg
aW50IHRhYmxlSW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBkZWZh
dWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgc2NydXRpbmVl
UmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0g
c3dpdGNoX2NoYXJcdCAlZCwgJWQoLT4lZCksICVzXG4iLCBsb2NhdGlvbiwgdGFibGVJbmRleCwg
ZGVmYXVsdFRhcmdldCwganVtcFRhcmdldChiZWdpbiwgaXQsIGRlZmF1bHRUYXJnZXQpLCByZWdp
c3Rlck5hbWUoc2NydXRpbmVlUmVnaXN0ZXIpLmNfc3RyKCkpOworICAgICAgICAgICAgcHJpbnRm
KCJbJTRkXSBzd2l0Y2hfY2hhclx0ICVkLCAlZCgtPiVkKSwgJXNcbiIsIGxvY2F0aW9uLCB0YWJs
ZUluZGV4LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbkZvck9mZnNldChiZWdpbiwgaXQsIGRlZmF1
bHRUYXJnZXQpLCByZWdpc3Rlck5hbWUoc2NydXRpbmVlUmVnaXN0ZXIpLmNfc3RyKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5n
OiB7CiAgICAgICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAg
ICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgcHJpbnRmKCJbJTRkXSBzd2l0Y2hfc3RyaW5nXHQgJWQsICVkKC0+JWQpLCAlc1xuIiwgbG9j
YXRpb24sIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGp1bXBUYXJnZXQoYmVnaW4sIGl0LCBk
ZWZhdWx0VGFyZ2V0KSwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5jX3N0cigpKTsK
KyAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gc3dpdGNoX3N0cmluZ1x0ICVkLCAlZCgtPiVkKSwg
JXNcbiIsIGxvY2F0aW9uLCB0YWJsZUluZGV4LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbkZvck9m
ZnNldChiZWdpbiwgaXQsIGRlZmF1bHRUYXJnZXQpLCByZWdpc3Rlck5hbWUoc2NydXRpbmVlUmVn
aXN0ZXIpLmNfc3RyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9uZXdfZnVuYzogewpAQCAtODc0LDcgKzg3NCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAgIGludCBkZXN0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgaXRlciA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJp
bnRmKCJbJTRkXSBuZXh0X3BuYW1lXHQgJXMsICVzLCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIHJl
Z2lzdGVyTmFtZShkZXN0KS5jX3N0cigpLCByZWdpc3Rlck5hbWUoaXRlcikuY19zdHIoKSwgb2Zm
c2V0LCBqdW1wVGFyZ2V0KGJlZ2luLCBpdCwgb2Zmc2V0KSk7CisgICAgICAgICAgICBwcmludGYo
IlslNGRdIG5leHRfcG5hbWVcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBsb2NhdGlvbiwgcmVnaXN0
ZXJOYW1lKGRlc3QpLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShpdGVyKS5jX3N0cigpLCBvZmZzZXQs
IGxvY2F0aW9uRm9yT2Zmc2V0KGJlZ2luLCBpdCwgb2Zmc2V0KSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1c2hfc2NvcGU6IHsKQEAgLTg5MCwxMyAr
ODkwLDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGlkMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRdIHB1c2hfbmV3X3Njb3BlIFx0JXMsICVzLCAl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwgaWROYW1lKGlkMCwgaWRl
bnRpZmllcnNbaWQwXSkuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIxKS5jX3N0cigpKTsKKyAgICAg
ICAgICAgIHByaW50ZigiWyU0ZF0gcHVzaF9uZXdfc2NvcGUgXHQlcywgJXMsICVzXG4iLCBsb2Nh
dGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJz
W2lkMF0pLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19zdHIoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2ptcF9zY29wZXM6IHsKICAgICAgICAg
ICAgIGludCBzY29wZURlbHRhID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRdIGpt
cF9zY29wZXNcdF4lZCwgJWQoLT4lZClcbiIsIGxvY2F0aW9uLCBzY29wZURlbHRhLCBvZmZzZXQs
IGp1bXBUYXJnZXQoYmVnaW4sIGl0LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIHByaW50ZigiWyU0
ZF0gam1wX3Njb3Blc1x0XiVkLCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIHNjb3BlRGVsdGEsIG9m
ZnNldCwgbG9jYXRpb25Gb3JPZmZzZXQoYmVnaW4sIGl0LCBvZmZzZXQpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKQEAgLTkxMywxMyAr
OTEzLDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGVycm9y
VHlwZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGswID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRdIG5ld19lcnJvclx0ICVzLCAlZCwg
JXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIGVycm9yVHlwZSwgY29u
c3RhbnROYW1lKGV4ZWMsIGswLCB1bmV4cGVjdGVkQ29uc3RhbnRzW2swXSkuY19zdHIoKSk7Cisg
ICAgICAgICAgICBwcmludGYoIlslNGRdIG5ld19lcnJvclx0ICVzLCAlZCwgJXNcbiIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIGVycm9yVHlwZSwgY29uc3RhbnROYW1lKGV4
ZWMsIGswLCBtX3VuZXhwZWN0ZWRDb25zdGFudHNbazBdKS5jX3N0cigpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfanNyOiB7CiAgICAgICAgICAgICBp
bnQgcmV0QWRkckRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IG9mZnNl
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBqc3JcdFx0
ICVzLCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyZXRBZGRyRHN0KS5jX3N0
cigpLCBvZmZzZXQsIGp1bXBUYXJnZXQoYmVnaW4sIGl0LCBvZmZzZXQpKTsKKyAgICAgICAgICAg
IHByaW50ZigiWyU0ZF0ganNyXHRcdCAlcywgJWQoLT4lZClcbiIsIGxvY2F0aW9uLCByZWdpc3Rl
ck5hbWUocmV0QWRkckRzdCkuY19zdHIoKSwgb2Zmc2V0LCBsb2NhdGlvbkZvck9mZnNldChiZWdp
biwgaXQsIG9mZnNldCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9zcmV0OiB7CkBAIC05NTYsMTggKzk1NiwxNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7Ci0gICAg
Zm9yIChzaXplX3Qgc2l6ZSA9IGdsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBkZXJlZlN0cnVjdHVyZXMoJmluc3RydWN0aW9u
c1tnbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zW2ldXSk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90
IHNpemUgPSBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgZGVyZWZTdHJ1Y3R1cmVzKCZtX2luc3RydWN0aW9uc1ttX2dsb2Jh
bFJlc29sdmVJbnN0cnVjdGlvbnNbaV1dKTsKIAotICAgIGZvciAoc2l6ZV90IHNpemUgPSBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIGRlcmVmU3RydWN0dXJlcygmaW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25zW2ldLmJ5dGVjb2RlSW5kZXhdKTsKLSAgICAgICAgaWYgKHByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zW2ldLnN0dWJSb3V0aW5lKQotICAgICAgICAgICAgV1RGOjpmYXN0RnJlZUV4ZWN1
dGFibGUocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV0uc3R1YlJvdXRpbmUpOworICAgIGZv
ciAoc2l6ZV90IHNpemUgPSBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgZGVyZWZTdHJ1Y3R1cmVzKCZtX2luc3RydWN0
aW9uc1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldLmJ5dGVjb2RlSW5kZXhdKTsKKyAg
ICAgICAgaWYgKG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV0uc3R1YlJvdXRpbmUpCisg
ICAgICAgICAgICBXVEY6OmZhc3RGcmVlRXhlY3V0YWJsZShtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25zW2ldLnN0dWJSb3V0aW5lKTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBzaXplID0g
Y2FsbExpbmtJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gJmNhbGxMaW5rSW5mb3NbaV07CisgICAgZm9yIChz
aXplX3Qgc2l6ZSA9IG1fY2FsbExpbmtJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gJm1fY2FsbExpbmtJbmZv
c1tpXTsKICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSkKICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+Y2FsbGVlLT5yZW1vdmVDYWxsZXIoY2FsbExpbmtJbmZvKTsKICAgICB9
CkBAIC05NzUsMjcgKzk3NCwyNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2lmIEVOQUJM
RShKSVQpIAogICAgIHVubGlua0NhbGxlcnMoKTsKIAotICAgIGlmIChjdGlDb2RlKQotICAgICAg
ICBXVEY6OmZhc3RGcmVlRXhlY3V0YWJsZShjdGlDb2RlKTsKKyAgICBpZiAobV9qaXRDb2RlKQor
ICAgICAgICBXVEY6OmZhc3RGcmVlRXhlY3V0YWJsZShtX2ppdENvZGUpOwogI2VuZGlmCiB9CiAK
ICNpZiBFTkFCTEUoSklUKSAKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxsZXJzKCkKIHsKLSAg
ICBzaXplX3Qgc2l6ZSA9IGxpbmtlZENhbGxlckxpc3Quc2l6ZSgpOworICAgIHNpemVfdCBzaXpl
ID0gbV9saW5rZWRDYWxsZXJMaXN0LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBDYWxsTGlua0luZm8qIGN1cnJlbnRDYWxsZXIgPSBsaW5r
ZWRDYWxsZXJMaXN0W2ldOworICAgICAgICBDYWxsTGlua0luZm8qIGN1cnJlbnRDYWxsZXIgPSBt
X2xpbmtlZENhbGxlckxpc3RbaV07CiAgICAgICAgIEpJVDo6dW5saW5rQ2FsbChjdXJyZW50Q2Fs
bGVyKTsKICAgICAgICAgY3VycmVudENhbGxlci0+c2V0VW5saW5rZWQoKTsKICAgICB9Ci0gICAg
bGlua2VkQ2FsbGVyTGlzdC5jbGVhcigpOworICAgIG1fbGlua2VkQ2FsbGVyTGlzdC5jbGVhcigp
OwogfQogI2VuZGlmCiAKIHZvaWQgQ29kZUJsb2NrOjpkZXJlZlN0cnVjdHVyZXMoSW5zdHJ1Y3Rp
b24qIHZQQykgY29uc3QKIHsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBnbG9iYWxE
YXRhLT5pbnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2Jh
bERhdGEtPmludGVycHJldGVyOwogCiAgICAgaWYgKHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9zZWxmKSkgewogICAgICAgICB2UENbNF0udS5z
dHJ1Y3R1cmUtPmRlcmVmKCk7CkBAIC0xMDQwLDcgKzEwMzksNyBAQCB2b2lkIENvZGVCbG9jazo6
ZGVyZWZTdHJ1Y3R1cmVzKEluc3RydWN0CiAKIHZvaWQgQ29kZUJsb2NrOjpyZWZTdHJ1Y3R1cmVz
KEluc3RydWN0aW9uKiB2UEMpIGNvbnN0CiB7Ci0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVy
ID0gZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVy
ID0gbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlcjsKIAogICAgIGlmICh2UENbMF0udS5vcGNvZGUg
PT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfYnlfaWRfc2VsZikpIHsKICAgICAgICAg
dlBDWzRdLnUuc3RydWN0dXJlLT5yZWYoKTsKQEAgLTEwNzMsMzQgKzEwNzIsMzQgQEAgdm9pZCBD
b2RlQmxvY2s6OnJlZlN0cnVjdHVyZXMoSW5zdHJ1Y3RpbwogCiB2b2lkIENvZGVCbG9jazo6bWFy
aygpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25zdGFudFJlZ2lzdGVycy5zaXpl
KCk7ICsraSkKLSAgICAgICAgaWYgKCFjb25zdGFudFJlZ2lzdGVyc1tpXS5tYXJrZWQoKSkKLSAg
ICAgICAgICAgIGNvbnN0YW50UmVnaXN0ZXJzW2ldLm1hcmsoKTsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdW5leHBlY3RlZENvbnN0YW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgaWYg
KCF1bmV4cGVjdGVkQ29uc3RhbnRzW2ldLT5tYXJrZWQoKSkKLSAgICAgICAgICAgIHVuZXhwZWN0
ZWRDb25zdGFudHNbaV0tPm1hcmsoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmICghbV9jb25zdGFudFJlZ2lz
dGVyc1tpXS5tYXJrZWQoKSkKKyAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0ubWFy
aygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VuZXhwZWN0ZWRDb25zdGFudHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIGlmICghbV91bmV4cGVjdGVkQ29uc3RhbnRzW2ldLT5tYXJr
ZWQoKSkKKyAgICAgICAgICAgIG1fdW5leHBlY3RlZENvbnN0YW50c1tpXS0+bWFyaygpOwogCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGZ1bmN0aW9uc1tpXS0+Ym9keSgpLT5tYXJrKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2Z1bmN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9mdW5jdGlvbnNbaV0tPmJvZHko
KS0+bWFyaygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkV4cHJlc3Np
b25zLnNpemUoKTsgKytpKQotICAgICAgICBmdW5jdGlvbkV4cHJlc3Npb25zW2ldLT5ib2R5KCkt
Pm1hcmsoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25FeHByZXNzaW9u
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJlc3Npb25zW2ldLT5ib2R5KCkt
Pm1hcmsoKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6OmdldEhhbmRsZXJGb3JWUEMoY29uc3QgSW5z
dHJ1Y3Rpb24qIHZQQywgSW5zdHJ1Y3Rpb24qJiB0YXJnZXQsIGludCYgc2NvcGVEZXB0aCkKIHsK
LSAgICBWZWN0b3I8SGFuZGxlckluZm8+OjppdGVyYXRvciBwdHIgPSBleGNlcHRpb25IYW5kbGVy
cy5iZWdpbigpOyAKLSAgICBWZWN0b3I8SGFuZGxlckluZm8+OjppdGVyYXRvciBlbmQgPSBleGNl
cHRpb25IYW5kbGVycy5lbmQoKTsKLSAgICB1bnNpZ25lZCBhZGRyZXNzT2Zmc2V0ID0gdlBDIC0g
aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7Ci0gICAgQVNTRVJUKGFkZHJlc3NPZmZzZXQgPCBpbnN0cnVj
dGlvbnMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8SGFuZGxlckluZm8+OjppdGVyYXRvciBwdHIgPSBt
X2V4Y2VwdGlvbkhhbmRsZXJzLmJlZ2luKCk7IAorICAgIFZlY3RvcjxIYW5kbGVySW5mbz46Oml0
ZXJhdG9yIGVuZCA9IG1fZXhjZXB0aW9uSGFuZGxlcnMuZW5kKCk7CisgICAgdW5zaWduZWQgYWRk
cmVzc09mZnNldCA9IHZQQyAtIG1faW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CisgICAgQVNTRVJUKGFk
ZHJlc3NPZmZzZXQgPCBtX2luc3RydWN0aW9ucy5zaXplKCkpOwogICAgIAogICAgIGZvciAoOyBw
dHIgIT0gZW5kOyArK3B0cikgewogICAgICAgICAvLyBIYW5kbGVycyBhcmUgb3JkZXJlZCBpbm5l
cm1vc3QgZmlyc3QsIHNvIHRoZSBmaXJzdCBoYW5kbGVyIHdlIGVuY291bnRlcgogICAgICAgICAv
LyB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgY29ycmVjdCBoYW5kbGVy
IHRvIHVzZS4KICAgICAgICAgaWYgKHB0ci0+c3RhcnQgPD0gYWRkcmVzc09mZnNldCAmJiBwdHIt
PmVuZCA+PSBhZGRyZXNzT2Zmc2V0KSB7CiAgICAgICAgICAgICBzY29wZURlcHRoID0gcHRyLT5z
Y29wZURlcHRoOwotICAgICAgICAgICAgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBw
dHItPnRhcmdldDsKKyAgICAgICAgICAgIHRhcmdldCA9IG1faW5zdHJ1Y3Rpb25zLmJlZ2luKCkg
KyBwdHItPnRhcmdldDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTEwOSwxMSArMTEwOCwxMSBAQCBib29sIENvZGVCbG9jazo6Z2V0SGFuZGxlckZvclZQ
Qyhjb25zdCBJCiAKIHZvaWQqIENvZGVCbG9jazo6bmF0aXZlRXhjZXB0aW9uQ29kZUZvckhhbmRs
ZXJWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIGhhbmRsZXJWUEMpCiB7Ci0gICAgVmVjdG9yPEhhbmRs
ZXJJbmZvPjo6aXRlcmF0b3IgcHRyID0gZXhjZXB0aW9uSGFuZGxlcnMuYmVnaW4oKTsgCi0gICAg
VmVjdG9yPEhhbmRsZXJJbmZvPjo6aXRlcmF0b3IgZW5kID0gZXhjZXB0aW9uSGFuZGxlcnMuZW5k
KCk7CisgICAgVmVjdG9yPEhhbmRsZXJJbmZvPjo6aXRlcmF0b3IgcHRyID0gbV9leGNlcHRpb25I
YW5kbGVycy5iZWdpbigpOyAKKyAgICBWZWN0b3I8SGFuZGxlckluZm8+OjppdGVyYXRvciBlbmQg
PSBtX2V4Y2VwdGlvbkhhbmRsZXJzLmVuZCgpOwogICAgIAogICAgIGZvciAoOyBwdHIgIT0gZW5k
OyArK3B0cikgewotICAgICAgICBJbnN0cnVjdGlvbip0YXJnZXQgPSBpbnN0cnVjdGlvbnMuYmVn
aW4oKSArIHB0ci0+dGFyZ2V0OworICAgICAgICBJbnN0cnVjdGlvbip0YXJnZXQgPSBtX2luc3Ry
dWN0aW9ucy5iZWdpbigpICsgcHRyLT50YXJnZXQ7CiAgICAgICAgIGlmIChoYW5kbGVyVlBDID09
IHRhcmdldCkKICAgICAgICAgICAgIHJldHVybiBwdHItPm5hdGl2ZUNvZGU7CiAgICAgfQpAQCAt
MTEyMywzMyArMTEyMiwzMyBAQCB2b2lkKiBDb2RlQmxvY2s6Om5hdGl2ZUV4Y2VwdGlvbkNvZGVG
b3JICiAKIGludCBDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JWUEMoY29uc3QgSW5zdHJ1Y3Rpb24q
IHZQQykKIHsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IHZQQyAtIGluc3RydWN0
aW9ucy5iZWdpbigpOwotICAgIEFTU0VSVChpbnN0cnVjdGlvbk9mZnNldCA8IGluc3RydWN0aW9u
cy5zaXplKCkpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0gdlBDIC0gbV9pbnN0
cnVjdGlvbnMuYmVnaW4oKTsKKyAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25PZmZzZXQgPCBtX2luc3Ry
dWN0aW9ucy5zaXplKCkpOwogCi0gICAgaWYgKCFsaW5lSW5mby5zaXplKCkpCi0gICAgICAgIHJl
dHVybiBvd25lck5vZGUtPnNvdXJjZSgpLmZpcnN0TGluZSgpOyAvLyBFbXB0eSBmdW5jdGlvbgor
ICAgIGlmICghbV9saW5lSW5mby5zaXplKCkpCisgICAgICAgIHJldHVybiBtX293bmVyTm9kZS0+
c291cmNlKCkuZmlyc3RMaW5lKCk7IC8vIEVtcHR5IGZ1bmN0aW9uCiAKICAgICBpbnQgbG93ID0g
MDsKLSAgICBpbnQgaGlnaCA9IGxpbmVJbmZvLnNpemUoKTsKKyAgICBpbnQgaGlnaCA9IG1fbGlu
ZUluZm8uc2l6ZSgpOwogICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICAgICAgIGludCBtaWQg
PSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOwotICAgICAgICBpZiAobGluZUluZm9bbWlkXS5pbnN0
cnVjdGlvbk9mZnNldCA8PSBpbnN0cnVjdGlvbk9mZnNldCkKKyAgICAgICAgaWYgKG1fbGluZUlu
Zm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBpbnN0cnVjdGlvbk9mZnNldCkKICAgICAgICAg
ICAgIGxvdyA9IG1pZCArIDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhpZ2ggPSBtaWQ7
CiAgICAgfQogICAgIAogICAgIGlmICghbG93KQotICAgICAgICByZXR1cm4gb3duZXJOb2RlLT5z
b3VyY2UoKS5maXJzdExpbmUoKTsKLSAgICByZXR1cm4gbGluZUluZm9bbG93IC0gMV0ubGluZU51
bWJlcjsKKyAgICAgICAgcmV0dXJuIG1fb3duZXJOb2RlLT5zb3VyY2UoKS5maXJzdExpbmUoKTsK
KyAgICByZXR1cm4gbV9saW5lSW5mb1tsb3cgLSAxXS5saW5lTnVtYmVyOwogfQogCiBpbnQgQ29k
ZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQywgaW50
JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpCiB7Ci0gICAgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25PZmZzZXQgPSB2UEMgLSBpbnN0cnVjdGlvbnMuYmVnaW4oKTsKLSAgICBB
U1NFUlQoaW5zdHJ1Y3Rpb25PZmZzZXQgPCBpbnN0cnVjdGlvbnMuc2l6ZSgpKTsKKyAgICB1bnNp
Z25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IHZQQyAtIG1faW5zdHJ1Y3Rpb25zLmJlZ2luKCk7Cisg
ICAgQVNTRVJUKGluc3RydWN0aW9uT2Zmc2V0IDwgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpKTsKIAot
ICAgIGlmICghZXhwcmVzc2lvbkluZm8uc2l6ZSgpKSB7CisgICAgaWYgKCFtX2V4cHJlc3Npb25J
bmZvLnNpemUoKSkgewogICAgICAgICAvLyBXZSBkaWRuJ3QgdGhpbmsgYW55dGhpbmcgY291bGQg
dGhyb3cuICBBcHBhcmVudGx5IHdlIHdlcmUgd3JvbmcuCiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0g
MDsKICAgICAgICAgZW5kT2Zmc2V0ID0gMDsKQEAgLTExNTgsMTAgKzExNTcsMTAgQEAgaW50IENv
ZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yVlBDKGNvbgogICAgIH0KIAogICAgIGludCBsb3cg
PSAwOwotICAgIGludCBoaWdoID0gZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworICAgIGludCBoaWdo
ID0gbV9leHByZXNzaW9uSW5mby5zaXplKCk7CiAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKICAg
ICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7Ci0gICAgICAgIGlmIChleHBy
ZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGluc3RydWN0aW9uT2Zmc2V0KQor
ICAgICAgICBpZiAobV9leHByZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGlu
c3RydWN0aW9uT2Zmc2V0KQogICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgaGlnaCA9IG1pZDsKQEAgLTExNzUsMjggKzExNzQsMzIgQEAgaW50IENv
ZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yVlBDKGNvbgogICAgICAgICByZXR1cm4gbGluZU51
bWJlckZvclZQQyh2UEMpOwogICAgIH0KIAotICAgIHN0YXJ0T2Zmc2V0ID0gZXhwcmVzc2lvbklu
Zm9bbG93IC0gMV0uc3RhcnRPZmZzZXQ7Ci0gICAgZW5kT2Zmc2V0ID0gZXhwcmVzc2lvbkluZm9b
bG93IC0gMV0uZW5kT2Zmc2V0OwotICAgIGRpdm90ID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV0u
ZGl2b3RQb2ludCArIHNvdXJjZU9mZnNldDsKKyAgICBzdGFydE9mZnNldCA9IG1fZXhwcmVzc2lv
bkluZm9bbG93IC0gMV0uc3RhcnRPZmZzZXQ7CisgICAgZW5kT2Zmc2V0ID0gbV9leHByZXNzaW9u
SW5mb1tsb3cgLSAxXS5lbmRPZmZzZXQ7CisgICAgZGl2b3QgPSBtX2V4cHJlc3Npb25JbmZvW2xv
dyAtIDFdLmRpdm90UG9pbnQgKyBtX3NvdXJjZU9mZnNldDsKICAgICByZXR1cm4gbGluZU51bWJl
ckZvclZQQyh2UEMpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoKQogewotICAg
IGluc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgIGdsb2JhbFJlc29sdmVJbnN0cnVjdGlv
bnMuc2hyaW5rVG9GaXQoKTsKLSAgICBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtU
b0ZpdCgpOwotICAgIGNhbGxMaW5rSW5mb3Muc2hyaW5rVG9GaXQoKTsKLSAgICBsaW5rZWRDYWxs
ZXJMaXN0LnNocmlua1RvRml0KCk7Ci0gICAgaWRlbnRpZmllcnMuc2hyaW5rVG9GaXQoKTsKLSAg
ICBmdW5jdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAgICBmdW5jdGlvbkV4cHJlc3Npb25zLnNocmlu
a1RvRml0KCk7Ci0gICAgY29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKLSAgICB1bmV4
cGVjdGVkQ29uc3RhbnRzLnNocmlua1RvRml0KCk7Ci0gICAgcmVnZXhwcy5zaHJpbmtUb0ZpdCgp
OwotICAgIGV4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7Ci0gICAgZXhwcmVzc2lvbklu
Zm8uc2hyaW5rVG9GaXQoKTsKLSAgICBsaW5lSW5mby5zaHJpbmtUb0ZpdCgpOworICAgIG1faW5z
dHJ1Y3Rpb25zLnNocmlua1RvRml0KCk7CisKKyAgICBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlv
bnMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNocmlu
a1RvRml0KCk7CisgICAgbV9jYWxsTGlua0luZm9zLnNocmlua1RvRml0KCk7CisgICAgbV9saW5r
ZWRDYWxsZXJMaXN0LnNocmlua1RvRml0KCk7CisKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLnNo
cmlua1RvRml0KCk7CisgICAgbV9leHByZXNzaW9uSW5mby5zaHJpbmtUb0ZpdCgpOworICAgIG1f
bGluZUluZm8uc2hyaW5rVG9GaXQoKTsKKworICAgIG1faWRlbnRpZmllcnMuc2hyaW5rVG9GaXQo
KTsKKyAgICBtX2Z1bmN0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZnVuY3Rpb25FeHByZXNz
aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQo
KTsKKyAgICBtX3VuZXhwZWN0ZWRDb25zdGFudHMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX3JlZ2V4
cHMuc2hyaW5rVG9GaXQoKTsKKwogICAgIG1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5zaHJp
bmtUb0ZpdCgpOwogICAgIG1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgp
OwogICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwpJbmRleDogYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDM5MDY5KQorKysgYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxNSwyNCArMjE1LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfTsKIAotICAg
IHN0cnVjdCBDb2RlQmxvY2sgeworICAgIGNsYXNzIENvZGVCbG9jayB7CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7CisgICAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2soU2NvcGVOb2RlKiBv
d25lck5vZGUsIENvZGVUeXBlIGNvZGVUeXBlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0KQotICAgICAgICAgICAgOiBvd25l
ck5vZGUob3duZXJOb2RlKQotICAgICAgICAgICAgLCBnbG9iYWxEYXRhKDApCisgICAgICAgICAg
ICA6IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCisgICAgICAgICAgICAsIG1fbnVtQ29uc3RhbnRz
KDApCisgICAgICAgICAgICAsIG1fbnVtVmFycygwKQorICAgICAgICAgICAgLCBtX251bVBhcmFt
ZXRlcnMoMCkKKyAgICAgICAgICAgICwgbV9vd25lck5vZGUob3duZXJOb2RlKQorICAgICAgICAg
ICAgLCBtX2dsb2JhbERhdGEoMCkKICNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgLCBjdGlD
b2RlKDApCisgICAgICAgICAgICAsIG1faml0Q29kZSgwKQogI2VuZGlmCi0gICAgICAgICAgICAs
IG51bUNhbGxlZVJlZ2lzdGVycygwKQotICAgICAgICAgICAgLCBudW1Db25zdGFudHMoMCkKLSAg
ICAgICAgICAgICwgbnVtVmFycygwKQotICAgICAgICAgICAgLCBudW1QYXJhbWV0ZXJzKDApCi0g
ICAgICAgICAgICAsIG5lZWRzRnVsbFNjb3BlQ2hhaW4ob3duZXJOb2RlLT5uZWVkc0FjdGl2YXRp
b24oKSkKLSAgICAgICAgICAgICwgdXNlc0V2YWwob3duZXJOb2RlLT51c2VzRXZhbCgpKQotICAg
ICAgICAgICAgLCBjb2RlVHlwZShjb2RlVHlwZSkKLSAgICAgICAgICAgICwgc291cmNlKHNvdXJj
ZVByb3ZpZGVyKQotICAgICAgICAgICAgLCBzb3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0KQorICAg
ICAgICAgICAgLCBtX25lZWRzRnVsbFNjb3BlQ2hhaW4ob3duZXJOb2RlLT5uZWVkc0FjdGl2YXRp
b24oKSkKKyAgICAgICAgICAgICwgbV91c2VzRXZhbChvd25lck5vZGUtPnVzZXNFdmFsKCkpCisg
ICAgICAgICAgICAsIG1fY29kZVR5cGUoY29kZVR5cGUpCisgICAgICAgICAgICAsIG1fc291cmNl
KHNvdXJjZVByb3ZpZGVyKQorICAgICAgICAgICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZz
ZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzb3VyY2UpOworICAgICAgICAgICAg
QVNTRVJUKG1fc291cmNlKTsKICAgICAgICAgfQogCiAgICAgICAgIH5Db2RlQmxvY2soKTsKQEAg
LTI0NCwyNSArMjQ2LDI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkZENhbGxl
cihDYWxsTGlua0luZm8qIGNhbGxlcikKICAgICAgICAgewogICAgICAgICAgICAgY2FsbGVyLT5j
YWxsZWUgPSB0aGlzOwotICAgICAgICAgICAgY2FsbGVyLT5wb3NpdGlvbiA9IGxpbmtlZENhbGxl
ckxpc3Quc2l6ZSgpOwotICAgICAgICAgICAgbGlua2VkQ2FsbGVyTGlzdC5hcHBlbmQoY2FsbGVy
KTsKKyAgICAgICAgICAgIGNhbGxlci0+cG9zaXRpb24gPSBtX2xpbmtlZENhbGxlckxpc3Quc2l6
ZSgpOworICAgICAgICAgICAgbV9saW5rZWRDYWxsZXJMaXN0LmFwcGVuZChjYWxsZXIpOwogICAg
ICAgICB9CiAKICAgICAgICAgdm9pZCByZW1vdmVDYWxsZXIoQ2FsbExpbmtJbmZvKiBjYWxsZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IGNhbGxlci0+cG9zaXRpb247
Ci0gICAgICAgICAgICB1bnNpZ25lZCBsYXN0UG9zID0gbGlua2VkQ2FsbGVyTGlzdC5zaXplKCkg
LSAxOworICAgICAgICAgICAgdW5zaWduZWQgbGFzdFBvcyA9IG1fbGlua2VkQ2FsbGVyTGlzdC5z
aXplKCkgLSAxOwogCiAgICAgICAgICAgICBpZiAocG9zICE9IGxhc3RQb3MpIHsKLSAgICAgICAg
ICAgICAgICBsaW5rZWRDYWxsZXJMaXN0W3Bvc10gPSBsaW5rZWRDYWxsZXJMaXN0W2xhc3RQb3Nd
OwotICAgICAgICAgICAgICAgIGxpbmtlZENhbGxlckxpc3RbcG9zXS0+cG9zaXRpb24gPSBwb3M7
CisgICAgICAgICAgICAgICAgbV9saW5rZWRDYWxsZXJMaXN0W3Bvc10gPSBtX2xpbmtlZENhbGxl
ckxpc3RbbGFzdFBvc107CisgICAgICAgICAgICAgICAgbV9saW5rZWRDYWxsZXJMaXN0W3Bvc10t
PnBvc2l0aW9uID0gcG9zOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGlua2VkQ2FsbGVy
TGlzdC5zaHJpbmsobGFzdFBvcyk7CisgICAgICAgICAgICBtX2xpbmtlZENhbGxlckxpc3Quc2hy
aW5rKGxhc3RQb3MpOwogICAgICAgICB9CiAKICAgICAgICAgaW5saW5lIGJvb2wgaXNLbm93bk5v
dEltbWVkaWF0ZShpbnQgaW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA9
PSB0aGlzUmVnaXN0ZXIpCisgICAgICAgICAgICBpZiAoaW5kZXggPT0gbV90aGlzUmVnaXN0ZXIp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgICAgIGlmIChpc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCkBAIC0yNzMsMTcgKzI3NSwxNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoaW50IGluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXggPj0gbnVt
VmFycyAmJiBpbmRleCA8IG51bVZhcnMgKyBudW1Db25zdGFudHM7CisgICAgICAgICAgICByZXR1
cm4gaW5kZXggPj0gbV9udW1WYXJzICYmIGluZGV4IDwgbV9udW1WYXJzICsgbV9udW1Db25zdGFu
dHM7CiAgICAgICAgIH0KIAogICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGdldENvbnN0
YW50KGludCBpbmRleCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50UmVn
aXN0ZXJzW2luZGV4IC0gbnVtVmFyc10uZ2V0SlNWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBtX251bVZhcnNdLmdldEpTVmFsdWUoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVy
SW5kZXgoaW50IGluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXggPj0g
bnVtVmFycyArIG51bUNvbnN0YW50czsKKyAgICAgICAgICAgIHJldHVybiBpbmRleCA+PSBtX251
bVZhcnMgKyBtX251bUNvbnN0YW50czsKICAgICAgICAgfQogCiAjaWYgIWRlZmluZWQoTkRFQlVH
KSB8fCBFTkFCTEVfT1BDT0RFX1NBTVBMSU5HCkBAIC0zMDIsMTUgKzMwNCw5MiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgZ2V0U3R1YkluZm8odm9pZCog
cmV0dXJuQWRkcmVzcykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5Q2hv
cDxTdHJ1Y3R1cmVTdHViSW5mbywgdm9pZCosIGdldFN0cnVjdHVyZVN0dWJJbmZvUmV0dXJuTG9j
YXRpb24+KHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmJlZ2luKCksIHByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zLnNpemUoKSwgcmV0dXJuQWRkcmVzcykpOworICAgICAgICAgICAgcmV0dXJu
ICooYmluYXJ5Q2hvcDxTdHJ1Y3R1cmVTdHViSW5mbywgdm9pZCosIGdldFN0cnVjdHVyZVN0dWJJ
bmZvUmV0dXJuTG9jYXRpb24+KG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuYmVnaW4oKSwg
bV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIHJldHVybkFkZHJlc3MpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIENhbGxMaW5rSW5mbyYgZ2V0Q2FsbExpbmtJbmZvKHZvaWQqIHJl
dHVybkFkZHJlc3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeUNob3A8
Q2FsbExpbmtJbmZvLCB2b2lkKiwgZ2V0Q2FsbExpbmtJbmZvUmV0dXJuTG9jYXRpb24+KGNhbGxM
aW5rSW5mb3MuYmVnaW4oKSwgY2FsbExpbmtJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MpKTsK
KyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeUNob3A8Q2FsbExpbmtJbmZvLCB2b2lkKiwgZ2V0
Q2FsbExpbmtJbmZvUmV0dXJuTG9jYXRpb24+KG1fY2FsbExpbmtJbmZvcy5iZWdpbigpLCBtX2Nh
bGxMaW5rSW5mb3Muc2l6ZSgpLCByZXR1cm5BZGRyZXNzKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIHNocmlua1RvRml0KCk7CisKKyAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5z
dHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KKyNpZiBFTkFCTEUoSklUKQor
ICAgICAgICB2b2lkIHNldEpJVENvZGUodm9pZCogaml0Q29kZSkgeyBtX2ppdENvZGUgPSBqaXRD
b2RlOyB9CisgICAgICAgIHZvaWQqIGppdENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KKyNl
bmRpZgorCisgICAgICAgIFNjb3BlTm9kZSogb3duZXJOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9v
d25lck5vZGU7IH0KKworICAgICAgICB2b2lkIHNldEdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKSB7IG1fZ2xvYmFsRGF0YSA9IGdsb2JhbERhdGE7IH0KKworICAgICAgICB2b2lk
IHNldFRoaXNSZWdpc3RlcihpbnQgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhp
c1JlZ2lzdGVyOyB9CisgICAgICAgIGludCB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBt
X3RoaXNSZWdpc3RlcjsgfQorCisgICAgICAgIHZvaWQgc2V0TmVlZHNGdWxsU2NvcGVDaGFpbihi
b29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4pIHsgbV9uZWVkc0Z1bGxTY29wZUNoYWluID0gbmVlZHNG
dWxsU2NvcGVDaGFpbjsgfQorICAgICAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSBjb25z
dCB7IHJldHVybiBtX25lZWRzRnVsbFNjb3BlQ2hhaW47IH0KKyAgICAgICAgdm9pZCBzZXRVc2Vz
RXZhbChib29sIHVzZXNFdmFsKSB7IG1fdXNlc0V2YWwgPSB1c2VzRXZhbDsgfQorICAgICAgICBi
b29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQorICAgICAgICB2b2lk
IHNldFVzZXNBcmd1bWVudHMoYm9vbCB1c2VzQXJndW1lbnRzKSB7IG1fdXNlc0FyZ3VtZW50cyA9
IHVzZXNBcmd1bWVudHM7IH0KKyAgICAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VzQXJndW1lbnRzOyB9CisKKyAgICAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CisKKyAgICAgICAgU291cmNlUHJvdmlkZXIqIHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CisgICAgICAgIHVuc2lnbmVk
IHNvdXJjZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlT2Zmc2V0OyB9CisKKyAgICAg
ICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb24odW5zaWduZWQgZ2xvYmFsUmVzb2x2
ZUluc3RydWN0aW9ucykgeyBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuYXBwZW5kKGdsb2Jh
bFJlc29sdmVJbnN0cnVjdGlvbnMpOyB9CisKKyAgICAgICAgc2l6ZV90IG51bWJlck9mUHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgICAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb24odW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMpIHsgbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucy5hcHBlbmQoU3RydWN0dXJlU3R1YkluZm8ocHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbnMpKTsgfQorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgcHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnNbaW5kZXhdOyB9CisKKyAgICAgICAgc2l6ZV90IG51bWJlck9mQ2FsbExpbmtJbmZvcygp
IGNvbnN0IHsgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5zaXplKCk7IH0KKyAgICAgICAgdm9pZCBh
ZGRDYWxsTGlua0luZm8oKSB7IG1fY2FsbExpbmtJbmZvcy5hcHBlbmQoQ2FsbExpbmtJbmZvKCkp
OyB9CisgICAgICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKGludCBpbmRleCkgeyByZXR1
cm4gbV9jYWxsTGlua0luZm9zW2luZGV4XTsgfQorCisgICAgICAgIHNpemVfdCBudW1iZXJPZkp1
bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KKyAgICAg
ICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQpIHsgbV9qdW1wVGFyZ2V0
cy5hcHBlbmQoanVtcFRhcmdldCk7IH0KKyAgICAgICAgdW5zaWduZWQganVtcFRhcmdldChpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5kZXhdOyB9CisgICAgICAgIHVu
c2lnbmVkIGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5sYXN0
KCk7IH0KKworICAgICAgICBzaXplX3QgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOyB9CisgICAgICAgIHZvaWQgYWRk
RXhjZXB0aW9uSGFuZGxlcihjb25zdCBIYW5kbGVySW5mbyYgaGFubGVyKSB7IHJldHVybiBtX2V4
Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5sZXIpOyB9CisgICAgICAgIEhhbmRsZXJJbmZvJiBl
eGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVyc1tp
bmRleF07IH0KKworICAgICAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKGNvbnN0IEV4cHJlc3Np
b25SYW5nZUluZm8mIGV4cHJlc3Npb25JbmZvKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLmFw
cGVuZChleHByZXNzaW9uSW5mbyk7IH0KKworICAgICAgICBzaXplX3QgbnVtYmVyT2ZMaW5lSW5m
b3MoKSBjb25zdCB7IHJldHVybiBtX2xpbmVJbmZvLnNpemUoKTsgfQorICAgICAgICB2b2lkIGFk
ZExpbmVJbmZvKGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbykgeyByZXR1cm4gbV9saW5lSW5mby5h
cHBlbmQobGluZUluZm8pOyB9CisgICAgICAgIExpbmVJbmZvJiBsYXN0TGluZUluZm8oKSB7IHJl
dHVybiBtX2xpbmVJbmZvLmxhc3QoKTsgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgSGFz
aE1hcDx2b2lkKiwgdW5zaWduZWQ+JiBqaXRSZXR1cm5BZGRyZXNzVlBDTWFwKCkgeyByZXR1cm4g
bV9qaXRSZXR1cm5BZGRyZXNzVlBDTWFwOyB9CisjZW5kaWYKKworICAgICAgICAvLyBDb25zdGFu
dCBQb29sCisKKyAgICAgICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXJzLnNpemUoKTsgfQorICAgICAgICB2b2lkIGFkZElkZW50aWZpZXIo
Y29uc3QgSWRlbnRpZmllciYgaSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5hcHBlbmQoaSk7IH0K
KyAgICAgICAgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1faWRl
bnRpZmllcnNbaW5kZXhdOyB9CisKKyAgICAgICAgc2l6ZV90IG51bWJlck9mQ29uc3RhbnRSZWdp
c3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgfQorICAg
ICAgICB2b2lkIGFkZENvbnN0YW50UmVnaXN0ZXIoY29uc3QgUmVnaXN0ZXImIHIpIHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKHIpOyB9CisgICAgICAgIFJlZ2lzdGVyJiBjb25z
dGFudFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRl
eF07IH0KKworICAgICAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbihGdW5jRGVjbE5vZGUqIG4pIHsg
dW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25zLnNpemUoKTsgbV9mdW5jdGlvbnMuYXBwZW5kKG4p
OyByZXR1cm4gc2l6ZTsgfQorICAgICAgICBGdW5jRGVjbE5vZGUqIGZ1bmN0aW9uKGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbnNbaW5kZXhdLmdldCgpOyB9CisKKyAgICAgICAg
dW5zaWduZWQgYWRkRnVuY3Rpb25FeHByZXNzaW9uKEZ1bmNFeHByTm9kZSogbikgeyB1bnNpZ25l
ZCBzaXplID0gbV9mdW5jdGlvbkV4cHJlc3Npb25zLnNpemUoKTsgbV9mdW5jdGlvbkV4cHJlc3Np
b25zLmFwcGVuZChuKTsgcmV0dXJuIHNpemU7IH0KKyAgICAgICAgRnVuY0V4cHJOb2RlKiBmdW5j
dGlvbkV4cHJlc3Npb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcmVz
c2lvbnNbaW5kZXhdLmdldCgpOyB9CisKKyAgICAgICAgdW5zaWduZWQgYWRkVW5leHBlY3RlZENv
bnN0YW50KEpTVmFsdWUqIHYpIHsgdW5zaWduZWQgc2l6ZSA9IG1fdW5leHBlY3RlZENvbnN0YW50
cy5zaXplKCk7IG1fdW5leHBlY3RlZENvbnN0YW50cy5hcHBlbmQodik7IHJldHVybiBzaXplOyB9
CisgICAgICAgIEpTVmFsdWUqIHVuZXhwZWN0ZWRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5leHBlY3RlZENvbnN0YW50c1tpbmRleF07IH0KKworICAgICAgICB1bnNpZ25l
ZCBhZGRSZWdFeHAoUmVnRXhwKiByKSB7IHVuc2lnbmVkIHNpemUgPSBtX3JlZ2V4cHMuc2l6ZSgp
OyBtX3JlZ2V4cHMuYXBwZW5kKHIpOyByZXR1cm4gc2l6ZTsgfQorICAgICAgICBSZWdFeHAqIHJl
Z2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnZXhwc1tpbmRleF0uZ2V0KCk7IH0K
KworICAgICAgICAvLyBKdW1wIFRhYmxlcwogCiAgICAgICAgIHNpemVfdCBudW1iZXJPZkltbWVk
aWF0ZVN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2ltbWVkaWF0ZVN3aXRjaEp1
bXBUYWJsZXMuc2l6ZSgpOyB9CiAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgYWRkSW1tZWRpYXRl
U3dpdGNoSnVtcFRhYmxlKCkgeyBtX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFNp
bXBsZUp1bXBUYWJsZSgpKTsgcmV0dXJuIG1faW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcy5sYXN0
KCk7IH0KQEAgLTMyNCw4NiArNDAzLDEwNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3Ry
aW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IG1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcy5hcHBlbmQoU3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQogICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3
aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOyB9CiAKLSAgICAgICAgU2NvcGVOb2RlKiBvd25lck5vZGU7Ci0g
ICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKLSNpZiBFTkFCTEUoSklUKQotICAgICAg
ICB2b2lkKiBjdGlDb2RlOwotI2VuZGlmCiAKLSAgICAgICAgaW50IG51bUNhbGxlZVJlZ2lzdGVy
czsKKyAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1cm4gbV9zeW1ib2xU
YWJsZTsgfQorICAgICAgICBFdmFsQ29kZUNhY2hlJiBldmFsQ29kZUNhY2hlKCkgeyByZXR1cm4g
bV9ldmFsQ29kZUNhY2hlOyB9CiAKKyAgICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworCisgICAg
ICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZhdGUuCisKKyAg
ICAgICAgaW50IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgICAgICAvLyBOT1RFOiBudW1Db25z
dGFudHMgaG9sZHMgdGhlIG51bWJlciBvZiBjb25zdGFudCByZWdpc3RlcnMgYWxsb2NhdGVkCiAg
ICAgICAgIC8vIGJ5IHRoZSBjb2RlIGdlbmVyYXRvciwgbm90IHRoZSBudW1iZXIgb2YgY29uc3Rh
bnQgcmVnaXN0ZXJzIHVzZWQuCiAgICAgICAgIC8vIChEdXBsaWNhdGUgY29uc3RhbnRzIGFyZSB1
bmlxdWVkIGR1cmluZyBjb2RlIGdlbmVyYXRpb24sIGFuZCBzcGFyZQogICAgICAgICAvLyBjb25z
dGFudCByZWdpc3RlcnMgbWF5IGJlIGFsbG9jYXRlZC4pCi0gICAgICAgIGludCBudW1Db25zdGFu
dHM7Ci0gICAgICAgIGludCBudW1WYXJzOwotICAgICAgICBpbnQgbnVtUGFyYW1ldGVyczsKLSAg
ICAgICAgaW50IHRoaXNSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWlu
OwotICAgICAgICBib29sIHVzZXNFdmFsOwotICAgICAgICBib29sIHVzZXNBcmd1bWVudHM7Ci0g
ICAgICAgIENvZGVUeXBlIGNvZGVUeXBlOwotICAgICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZTsKLSAgICAgICAgdW5zaWduZWQgc291cmNlT2Zmc2V0OwotCi0gICAgICAgIFZlY3Rv
cjxJbnN0cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zOwotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGds
b2JhbFJlc29sdmVJbnN0cnVjdGlvbnM7Ci0gICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5m
bz4gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7Ci0gICAgICAgIFZlY3RvcjxDYWxsTGlua0lu
Zm8+IGNhbGxMaW5rSW5mb3M7Ci0gICAgICAgIFZlY3RvcjxDYWxsTGlua0luZm8qPiBsaW5rZWRD
YWxsZXJMaXN0OwotCi0gICAgICAgIC8vIENvbnN0YW50IHBvb2wKLSAgICAgICAgVmVjdG9yPElk
ZW50aWZpZXI+IGlkZW50aWZpZXJzOwotICAgICAgICBWZWN0b3I8UmVmUHRyPEZ1bmNEZWNsTm9k
ZT4gPiBmdW5jdGlvbnM7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8RnVuY0V4cHJOb2RlPiA+IGZ1
bmN0aW9uRXhwcmVzc2lvbnM7Ci0gICAgICAgIFZlY3RvcjxSZWdpc3Rlcj4gY29uc3RhbnRSZWdp
c3RlcnM7Ci0gICAgICAgIFZlY3RvcjxKU1ZhbHVlKj4gdW5leHBlY3RlZENvbnN0YW50czsKLSAg
ICAgICAgVmVjdG9yPFJlZlB0cjxSZWdFeHA+ID4gcmVnZXhwczsKLSAgICAgICAgVmVjdG9yPEhh
bmRsZXJJbmZvPiBleGNlcHRpb25IYW5kbGVyczsKLSAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25S
YW5nZUluZm8+IGV4cHJlc3Npb25JbmZvOwotICAgICAgICBWZWN0b3I8TGluZUluZm8+IGxpbmVJ
bmZvOworICAgICAgICBpbnQgbV9udW1Db25zdGFudHM7CisgICAgICAgIGludCBtX251bVZhcnM7
CisgICAgICAgIGludCBtX251bVBhcmFtZXRlcnM7CiAKKyAgICBwcml2YXRlOgorI2lmICFkZWZp
bmVkKE5ERUJVRykgfHwgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAgICAgdm9pZCBkdW1w
KEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBi
ZWdpbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImKSBjb25zdDsKKyNlbmRp
ZgorCisgICAgICAgIFNjb3BlTm9kZSogbV9vd25lck5vZGU7CisgICAgICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOworCisgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVj
dGlvbnM7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgSGFzaE1hcDx2b2lkKiwgdW5zaWduZWQ+
IGN0aVJldHVybkFkZHJlc3NWUENNYXA7CisgICAgICAgIHZvaWQqIG1faml0Q29kZTsKICNlbmRp
ZgogCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ganVtcFRhcmdldHM7CisgICAgICAgIGludCBt
X3RoaXNSZWdpc3RlcjsKIAotICAgICAgICBFdmFsQ29kZUNhY2hlIGV2YWxDb2RlQ2FjaGU7Cisg
ICAgICAgIGJvb2wgbV9uZWVkc0Z1bGxTY29wZUNoYWluOworICAgICAgICBib29sIG1fdXNlc0V2
YWw7CisgICAgICAgIGJvb2wgbV91c2VzQXJndW1lbnRzOwogCi0gICAgICAgIFN5bWJvbFRhYmxl
IHN5bWJvbFRhYmxlOwotICAgIHByaXZhdGU6Ci0jaWYgIWRlZmluZWQoTkRFQlVHKSB8fCBFTkFC
TEUoT1BDT0RFX1NBTVBMSU5HKQotICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwgY29uc3Qg
VmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1
Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYpIGNvbnN0OworICAgICAgICBDb2RlVHlwZSBtX2NvZGVU
eXBlOworCisgICAgICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2U7CisgICAgICAg
IHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OworCisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9n
bG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zOworICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1Yklu
Zm8+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CisgICAgICAgIFZlY3RvcjxDYWxsTGlu
a0luZm8+IG1fY2FsbExpbmtJbmZvczsKKyAgICAgICAgVmVjdG9yPENhbGxMaW5rSW5mbyo+IG1f
bGlua2VkQ2FsbGVyTGlzdDsKKworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRhcmdl
dHM7CisKKyAgICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwor
ICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAg
ICAgICAgVmVjdG9yPExpbmVJbmZvPiBtX2xpbmVJbmZvOworCisjaWYgRU5BQkxFKEpJVCkKKyAg
ICAgICAgSGFzaE1hcDx2b2lkKiwgdW5zaWduZWQ+IG1faml0UmV0dXJuQWRkcmVzc1ZQQ01hcDsK
ICNlbmRpZgogCisgICAgICAgIC8vIENvbnN0YW50IFBvb2wKKyAgICAgICAgVmVjdG9yPElkZW50
aWZpZXI+IG1faWRlbnRpZmllcnM7CisgICAgICAgIFZlY3RvcjxSZWdpc3Rlcj4gbV9jb25zdGFu
dFJlZ2lzdGVyczsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxGdW5jRGVjbE5vZGU+ID4gbV9mdW5j
dGlvbnM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8RnVuY0V4cHJOb2RlPiA+IG1fZnVuY3Rpb25F
eHByZXNzaW9uczsKKyAgICAgICAgVmVjdG9yPEpTVmFsdWUqPiBtX3VuZXhwZWN0ZWRDb25zdGFu
dHM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8UmVnRXhwPiA+IG1fcmVnZXhwczsKKworICAgICAg
ICAvLyBKdW1wIFRhYmxlcwogICAgICAgICBWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX2ltbWVk
aWF0ZVN3aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1f
Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAgVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIFN5bWJvbFRhYmxlIG1fc3lt
Ym9sVGFibGU7CisKKyAgICAgICAgRXZhbENvZGVDYWNoZSBtX2V2YWxDb2RlQ2FjaGU7CiAgICAg
fTsKIAogICAgIC8vIFByb2dyYW0gY29kZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwg
c28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9iamVjdAogICAgIC8vIHJlc3BvbnNpYmxlIGZvciBtYXJr
aW5nIGl0LgogCi0gICAgc3RydWN0IFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2Nr
IHsKKyAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CisgICAg
cHVibGljOgogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKFNjb3BlTm9kZSogb3duZXJOb2RlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCiAgICAgICAgICAgICA6IENvZGVCbG9j
ayhvd25lck5vZGUsIGNvZGVUeXBlLCBzb3VyY2VQcm92aWRlciwgMCkKLSAgICAgICAgICAgICwg
Z2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICwgbV9nbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbG9iYWxPYmplY3QtPmNvZGVC
bG9ja3MoKS5hZGQodGhpcyk7CisgICAgICAgICAgICBtX2dsb2JhbE9iamVjdC0+Y29kZUJsb2Nr
cygpLmFkZCh0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIH5Qcm9ncmFtQ29kZUJsb2NrKCkK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgICAg
ICBnbG9iYWxPYmplY3QtPmNvZGVCbG9ja3MoKS5yZW1vdmUodGhpcyk7CisgICAgICAgICAgICBp
ZiAobV9nbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QtPmNvZGVC
bG9ja3MoKS5yZW1vdmUodGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0OyAvLyBGb3IgcHJvZ3JhbSBhbmQgZXZhbCBub2RlcywgdGhlIGdsb2Jh
bCBvYmplY3QgdGhhdCBtYXJrcyB0aGUgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgdm9pZCBjbGVh
ckdsb2JhbE9iamVjdCgpIHsgbV9nbG9iYWxPYmplY3QgPSAwOyB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7IC8vIEZvciBwcm9ncmFtIGFu
ZCBldmFsIG5vZGVzLCB0aGUgZ2xvYmFsIG9iamVjdCB0aGF0IG1hcmtzIHRoZSBjb25zdGFudCBw
b29sLgogICAgIH07CiAKLSAgICBzdHJ1Y3QgRXZhbENvZGVCbG9jayA6IHB1YmxpYyBQcm9ncmFt
Q29kZUJsb2NrIHsKKyAgICBjbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIFByb2dyYW1Db2Rl
QmxvY2sgeworICAgIHB1YmxpYzoKICAgICAgICAgRXZhbENvZGVCbG9jayhTY29wZU5vZGUqIG93
bmVyTm9kZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4gc291cmNlUHJvdmlkZXIpCiAgICAgICAgICAgICA6IFByb2dyYW1Db2RlQmxvY2so
b3duZXJOb2RlLCBFdmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlcikKICAgICAg
ICAgewpJbmRleDogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBieXRl
Y29kZS9TYW1wbGluZ1Rvb2wuY3BwCShyZXZpc2lvbiAzOTA2OSkKKysrIGJ5dGVjb2RlL1NhbXBs
aW5nVG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE0ICs0MiwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIHZvaWQgU2NvcGVTYW1wbGVSZWNvcmQ6OnNhbXBsZShDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSW5zdHJ1Y3Rpb24qIHZQQykKIHsKICAgICBpZiAoIW1fc2FtcGxlcykgewotICAgICAgICBt
X3NpemUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5zaXplKCk7CisgICAgICAgIG1fc2l6ZSA9
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgICAgICBtX3NhbXBsZXMgPSBz
dGF0aWNfY2FzdDxpbnQqPihjYWxsb2MobV9zaXplLCBzaXplb2YoaW50KSkpOwogICAgICAgICBt
X2NvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICB9CiAKICAgICArK21fc2FtcGxlQ291bnQ7CiAK
LSAgICB1bnNpZ25lZCBvZmZlc3QgPSB2UEMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdp
bigpOworICAgIHVuc2lnbmVkIG9mZmVzdCA9IHZQQyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKTsKICAgICAvLyBTaW5jZSB3ZSBkb24ndCByZWFkIGFuZCB3cml0ZSBjb2RlQmxv
Y2sgYW5kIHZQQyBhdG9taWNhbGx5LCB0aGlzIGNoZWNrCiAgICAgLy8gY2FuIGZhaWwgaWYgd2Ug
c2FtcGxlIG1pZCBvcF9jYWxsIC8gb3BfcmV0LgogICAgIGlmIChvZmZlc3QgPCBtX3NpemUpIHsK
QEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgICAgIGRvdWJsZSBibG9ja1BlcmNlbnQgPSAocmVjb3JkLT5tX3NhbXBsZUNvdW50
ICogMTAwLjApIC8gbV9zYW1wbGVDb3VudDsKIAogICAgICAgICBpZiAoYmxvY2tQZXJjZW50ID49
IDEpIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMuYmVnaW4oKTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBjb2RlID0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgICAgICAgICAgcHJpbnRmKCIjJWQ6ICVzOiVk
OiAlZCAvICVsbGQgKCUuM2YlJSlcbiIsIGkgKyAxLCByZWNvcmQtPm1fc2NvcGUtPnNvdXJjZVVS
TCgpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JWUEMoY29k
ZSksIHJlY29yZC0+bV9zYW1wbGVDb3VudCwgbV9zYW1wbGVDb3VudCwgYmxvY2tQZXJjZW50KTsK
ICAgICAgICAgICAgIGlmIChpIDwgMTApIHsKICAgICAgICAgICAgICAgICBIYXNoTWFwPHVuc2ln
bmVkLHVuc2lnbmVkPiBsaW5lQ291bnRzOwpJbmRleDogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAzOTA2OSkKKysrIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjpzZXREdW1wc0dlbmVyYXRlCiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
KCkKIHsKLSAgICBtX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyID0gbV90aGlzUmVnaXN0ZXIuaW5k
ZXgoKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0VGhpc1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLmlu
ZGV4KCkpOwogCiAgICAgbV9zY29wZU5vZGUtPmVtaXRCeXRlY29kZSgqdGhpcyk7CiAKQEAgLTE1
NCw3ICsxNTQsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICArK21fY29kZUJsb2NrLT5udW1WYXJz
OworICAgICsrbV9jb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICByMCA9IG5ld1JlZ2lzdGVyKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBCeXRlY29kZUdl
bmVyYXRvcjo6YWRkR2xvYmFsVmFyKGNvbgogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjphbGxv
Y2F0ZUNvbnN0YW50cyhzaXplX3QgY291bnQpCiB7Ci0gICAgbV9jb2RlQmxvY2stPm51bUNvbnN0
YW50cyA9IGNvdW50OworICAgIG1fY29kZUJsb2NrLT5tX251bUNvbnN0YW50cyA9IGNvdW50Owog
ICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTIwNiwyMSArMjA2LDIx
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8KICAgICAsIG1fZW1p
dE5vZGVEZXB0aCgwKQogewogICAgIGlmIChtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKQotICAgICAg
ICBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiA9IHRydWU7CisgICAgICAgIG1fY29k
ZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwogCiAgICAgZW1pdE9wY29kZShv
cF9lbnRlcik7Ci0gICAgY29kZUJsb2NrLT5nbG9iYWxEYXRhID0gbV9nbG9iYWxEYXRhOworICAg
IGNvZGVCbG9jay0+c2V0R2xvYmFsRGF0YShtX2dsb2JhbERhdGEpOwogCiAgICAgLy8gRklYTUU6
IE1vdmUgY29kZSB0aGF0IG1vZGlmaWVzIHRoZSBnbG9iYWwgb2JqZWN0IHRvIEludGVycHJldGVy
OjpleGVjdXRlLgogICAgIAotICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzID0gMTsgLy8g
QWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlzIgorICAgIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRl
cnMgPSAxOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3IgInRoaXMiCiAKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBSZWdpc3RlckZpbGUq
IHJlZ2lzdGVyRmlsZSA9ICZleGVjLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPnJlZ2lzdGVy
RmlsZSgpOwogICAgIAogICAgIC8vIFNoaWZ0IHJlZ2lzdGVyIGluZGV4ZXMgaW4gZ2VuZXJhdGVk
IGNvZGUgdG8gZWxpZGUgcmVnaXN0ZXJzIGFsbG9jYXRlZCBieSBpbnRlcm1lZGlhdGUgc3RhY2sg
ZnJhbWVzLgotICAgIG1fZ2xvYmFsVmFyU3RvcmFnZU9mZnNldCA9IC1SZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemUgLSBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycyAtIHJlZ2lzdGVy
RmlsZS0+c2l6ZSgpOworICAgIG1fZ2xvYmFsVmFyU3RvcmFnZU9mZnNldCA9IC1SZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0g
cmVnaXN0ZXJGaWxlLT5zaXplKCk7CiAKICAgICAvLyBBZGQgcHJldmlvdXNseSBkZWZpbmVkIHN5
bWJvbHMgdG8gYm9va2tlZXBpbmcuCiAgICAgbV9nbG9iYWxzLmdyb3coc3ltYm9sVGFibGUtPnNp
emUoKSk7CkBAIC0yODUsMTkgKzI4NSwxOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoRnVuCiAgICAgLCBtX2VtaXROb2RlRGVwdGgoMCkKIHsKICAgICBpZiAobV9zaG91
bGRFbWl0RGVidWdIb29rcykKLSAgICAgICAgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hh
aW4gPSB0cnVlOworICAgICAgICBtX2NvZGVCbG9jay0+c2V0TmVlZHNGdWxsU2NvcGVDaGFpbih0
cnVlKTsKIAotICAgIGNvZGVCbG9jay0+Z2xvYmFsRGF0YSA9IG1fZ2xvYmFsRGF0YTsKKyAgICBj
b2RlQmxvY2stPnNldEdsb2JhbERhdGEobV9nbG9iYWxEYXRhKTsKIAogICAgIGJvb2wgdXNlc0Fy
Z3VtZW50cyA9IGZ1bmN0aW9uQm9keS0+dXNlc0FyZ3VtZW50cygpOwotICAgIGNvZGVCbG9jay0+
dXNlc0FyZ3VtZW50cyA9IHVzZXNBcmd1bWVudHM7CisgICAgY29kZUJsb2NrLT5zZXRVc2VzQXJn
dW1lbnRzKHVzZXNBcmd1bWVudHMpOwogICAgIGlmICh1c2VzQXJndW1lbnRzKSB7CiAgICAgICAg
IG1fYXJndW1lbnRzUmVnaXN0ZXIuc2V0SW5kZXgoUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxl
ZUFyZ3VtZW50cyk7CiAgICAgICAgIGFkZFZhcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBm
YWxzZSk7CiAgICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWlu
KSB7Ci0gICAgICAgICsrbV9jb2RlQmxvY2stPm51bVZhcnM7CisgICAgaWYgKG1fY29kZUJsb2Nr
LT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpIHsKKyAgICAgICAgKyttX2NvZGVCbG9jay0+bV9udW1W
YXJzOwogICAgICAgICBtX2FjdGl2YXRpb25SZWdpc3RlckluZGV4ID0gbmV3UmVnaXN0ZXIoKS0+
aW5kZXgoKTsKICAgICAgICAgZW1pdE9wY29kZShvcF9lbnRlcl93aXRoX2FjdGl2YXRpb24pOwog
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXJJbmRleCk7
CkBAIC0zMjcsNyArMzI3LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KEZ1bgogICAgIC8vIEFkZCAidGhpcyIgYXMgYSBwYXJhbWV0ZXIKICAgICBtX3RoaXNSZWdpc3Rl
ci5zZXRJbmRleChtX25leHRQYXJhbWV0ZXJJbmRleCk7CiAgICAgKyttX25leHRQYXJhbWV0ZXJJ
bmRleDsKLSAgICArK21fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzOworICAgICsrbV9jb2RlQmxv
Y2stPm1fbnVtUGFyYW1ldGVyczsKIAogICAgIGlmIChmdW5jdGlvbkJvZHktPnVzZXNUaGlzKCkp
IHsKICAgICAgICAgZW1pdE9wY29kZShvcF9jb252ZXJ0X3RoaXMpOwpAQCAtMzU2LDExICszNTYs
MTEgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YQogICAgICwgbV9l
bWl0Tm9kZURlcHRoKDApCiB7CiAgICAgaWYgKG1fc2hvdWxkRW1pdERlYnVnSG9va3MpCi0gICAg
ICAgIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluID0gdHJ1ZTsKKyAgICAgICAgbV9j
b2RlQmxvY2stPnNldE5lZWRzRnVsbFNjb3BlQ2hhaW4odHJ1ZSk7CiAKICAgICBlbWl0T3Bjb2Rl
KG9wX2VudGVyKTsKLSAgICBjb2RlQmxvY2stPmdsb2JhbERhdGEgPSBtX2dsb2JhbERhdGE7Ci0g
ICAgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMgPSAxOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3Ig
InRoaXMiCisgICAgY29kZUJsb2NrLT5zZXRHbG9iYWxEYXRhKG1fZ2xvYmFsRGF0YSk7CisgICAg
bV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9IDE7IC8vIEFsbG9jYXRlIHNwYWNlIGZvciAi
dGhpcyIKIAogICAgIGFsbG9jYXRlQ29uc3RhbnRzKGV2YWxOb2RlLT5uZWVkZWRDb25zdGFudHMo
KSk7CiB9CkBAIC0zODAsNyArMzgwLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZFBhcmFtZQogICAgIC8vIFRvIG1haW50YWluIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24sIHdl
IGhhdmUgdG8gYWxsb2NhdGUgdW5pcXVlIHNwYWNlIGZvcgogICAgIC8vIGVhY2ggcGFyYW1ldGVy
LCBldmVuIGlmIHRoZSBwYXJhbWV0ZXIgZG9lc24ndCBtYWtlIGl0IGludG8gdGhlIHN5bWJvbCB0
YWJsZS4KICAgICArK21fbmV4dFBhcmFtZXRlckluZGV4OwotICAgICsrbV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnM7CisgICAgKyttX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTQyNiw3ICs0MjYsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJh
dG9yOjppc0xvY2FsQ29uc3RhbnQoCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6bmV3
UmVnaXN0ZXIoKQogewogICAgIG1fY2FsbGVlUmVnaXN0ZXJzLmFwcGVuZChtX2NhbGxlZVJlZ2lz
dGVycy5zaXplKCkpOwotICAgIG1fY29kZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnMgPSBtYXg8
aW50PihtX2NvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzLCBtX2NhbGxlZVJlZ2lzdGVycy5z
aXplKCkpOworICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyA9IG1heDxpbnQ+
KG1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycywgbV9jYWxsZWVSZWdpc3RlcnMuc2l6
ZSgpKTsKICAgICByZXR1cm4gJm1fY2FsbGVlUmVnaXN0ZXJzLmxhc3QoKTsKIH0KIApAQCAtNDQz
LDcgKzQ0Myw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpuZXdUZW1wb3IKIAog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmhpZ2hlc3RVc2VkUmVnaXN0ZXIoKQogewot
ICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnM7CisgICAg
c2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgIHdo
aWxlIChtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkgPCBjb3VudCkKICAgICAgICAgbmV3UmVnaXN0
ZXIoKTsKICAgICByZXR1cm4gJm1fY2FsbGVlUmVnaXN0ZXJzLmxhc3QoKTsKQEAgLTQ3NywxNiAr
NDc3LDE2IEBAIFBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWkKICAgICB1
bnNpZ25lZCBuZXdMYWJlbEluZGV4ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgIGwwLT5z
ZXRMb2NhdGlvbihuZXdMYWJlbEluZGV4KTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+anVtcFRh
cmdldHMuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgdW5zaWduZWQgbGFzdExhYmVsSW5kZXggPSBt
X2NvZGVCbG9jay0+anVtcFRhcmdldHMubGFzdCgpOworICAgIGlmIChtX2NvZGVCbG9jay0+bnVt
YmVyT2ZKdW1wVGFyZ2V0cygpKSB7CisgICAgICAgIHVuc2lnbmVkIGxhc3RMYWJlbEluZGV4ID0g
bV9jb2RlQmxvY2stPmxhc3RKdW1wVGFyZ2V0KCk7CiAgICAgICAgIEFTU0VSVChsYXN0TGFiZWxJ
bmRleCA8PSBuZXdMYWJlbEluZGV4KTsKICAgICAgICAgaWYgKG5ld0xhYmVsSW5kZXggPT0gbGFz
dExhYmVsSW5kZXgpIHsKICAgICAgICAgICAgIC8vIFBlZXBob2xlIG9wdGltaXphdGlvbnMgaGF2
ZSBhbHJlYWR5IGJlZW4gZGlzYWJsZWQgYnkgZW1pdHRpbmcgdGhlIGxhc3QgbGFiZWwKLSAgICAg
ICAgICAgIHJldHVybiBsMDsgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBsMDsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0cy5hcHBlbmQobmV3
TGFiZWxJbmRleCk7CisgICAgbV9jb2RlQmxvY2stPmFkZEp1bXBUYXJnZXQobmV3TGFiZWxJbmRl
eCk7CiAKICAgICAvLyBUaGlzIGRpc2FibGVzIHBlZXBob2xlIG9wdGltaXphdGlvbnMgd2hlbiBh
biBpbnN0cnVjdGlvbiBpcyBhIGp1bXAgdGFyZ2V0CiAgICAgbV9sYXN0T3Bjb2RlSUQgPSBvcF9l
bmQ7CkBAIC02NzAsMjUgKzY3MCwyMSBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pCiB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoRnVuY0Rl
Y2xOb2RlKiBuKQogewogICAgIC8vIE5vIG5lZWQgdG8gZXhwbGljaXRseSB1bmlxdWUgZnVuY3Rp
b24gYm9keSBub2RlcyAtLSB0aGV5J3JlIHVuaXF1ZSBhbHJlYWR5LgotICAgIGludCBpbmRleCA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbnMuc2l6ZSgpOwotICAgIG1fY29kZUJsb2NrLT5mdW5jdGlv
bnMuYXBwZW5kKG4pOwotICAgIHJldHVybiBpbmRleDsKKyAgICByZXR1cm4gbV9jb2RlQmxvY2st
PmFkZEZ1bmN0aW9uKG4pOwogfQogCiB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29u
c3RhbnQoRnVuY0V4cHJOb2RlKiBuKQogewogICAgIC8vIE5vIG5lZWQgdG8gZXhwbGljaXRseSB1
bmlxdWUgZnVuY3Rpb24gZXhwcmVzc2lvbiBub2RlcyAtLSB0aGV5J3JlIHVuaXF1ZSBhbHJlYWR5
LgotICAgIGludCBpbmRleCA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHJlc3Npb25zLnNpemUo
KTsKLSAgICBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByZXNzaW9ucy5hcHBlbmQobik7Ci0gICAg
cmV0dXJuIGluZGV4OworICAgIHJldHVybiBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHByZXNz
aW9uKG4pOwogfQogCiB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgVVN0cmluZzo6UmVwKiByZXAgPSBpZGVudC51
c3RyaW5nKCkucmVwKCk7Ci0gICAgcGFpcjxJZGVudGlmaWVyTWFwOjppdGVyYXRvciwgYm9vbD4g
cmVzdWx0ID0gbV9pZGVudGlmaWVyTWFwLmFkZChyZXAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
cy5zaXplKCkpOworICAgIHBhaXI8SWRlbnRpZmllck1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3Vs
dCA9IG1faWRlbnRpZmllck1hcC5hZGQocmVwLCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlm
aWVycygpKTsKICAgICBpZiAocmVzdWx0LnNlY29uZCkgLy8gbmV3IGVudHJ5Ci0gICAgICAgIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIHJl
cCkpOworICAgICAgICBtX2NvZGVCbG9jay0+YWRkSWRlbnRpZmllcihJZGVudGlmaWVyKG1fZ2xv
YmFsRGF0YSwgcmVwKSk7CiAKICAgICByZXR1cm4gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7CiB9CkBA
IC03MDEsNyArNjk3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0
YQogICAgICAgICAKICAgICAgICAgKyttX25leHRDb25zdGFudEluZGV4OwogCi0gICAgICAgIG1f
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQodik7CisgICAgICAgIG1fY29kZUJs
b2NrLT5hZGRDb25zdGFudFJlZ2lzdGVyKHYpOwogICAgICAgICByZXR1cm4gJmNvbnN0YW50Owog
ICAgIH0KIApAQCAtNzEwLDE2ICs3MDYsMTIgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmFkZENvbnN0YQogCiB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVW5leHBlY3Rl
ZENvbnN0YW50KEpTVmFsdWUqIHYpCiB7Ci0gICAgaW50IGluZGV4ID0gbV9jb2RlQmxvY2stPnVu
ZXhwZWN0ZWRDb25zdGFudHMuc2l6ZSgpOwotICAgIG1fY29kZUJsb2NrLT51bmV4cGVjdGVkQ29u
c3RhbnRzLmFwcGVuZCh2KTsKLSAgICByZXR1cm4gaW5kZXg7CisgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT5hZGRVbmV4cGVjdGVkQ29uc3RhbnQodik7CiB9CiAKIHVuc2lnbmVkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRSZWdFeHAoUmVnRXhwKiByKQogewotICAgIGludCBpbmRleCA9IG1fY29kZUJs
b2NrLT5yZWdleHBzLnNpemUoKTsKLSAgICBtX2NvZGVCbG9jay0+cmVnZXhwcy5hcHBlbmQocik7
Ci0gICAgcmV0dXJuIGluZGV4OworICAgIHJldHVybiBtX2NvZGVCbG9jay0+YWRkUmVnRXhwKHIp
OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE1vdmUoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCkBAIC03OTQsOCArNzg2LDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVhbAogICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9
PSBkc3RJbmRleAogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3JhcnkoKQogICAgICAgICAg
ICAgJiYgbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzItPmluZGV4KCkp
Ci0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnNbc3JjMi0+aW5k
ZXgoKSAtIG1fY29kZUJsb2NrLT5udW1WYXJzXS5qc1ZhbHVlKG1fc2NvcGVDaGFpbi0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKSktPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGNvbnN0
IFVTdHJpbmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJz
W3NyYzItPmluZGV4KCkgLSBtX2NvZGVCbG9jay0+bnVtVmFyc10uanNWYWx1ZShtX3Njb3BlQ2hh
aW4tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKS0+dmFsdWUoKTsKKyAgICAgICAgICAg
ICYmIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkgLSBtX2NvZGVC
bG9jay0+bV9udW1WYXJzKS5qc1ZhbHVlKG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSktPmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFVTdHJpbmcmIHZh
bHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgo
KSAtIG1fY29kZUJsb2NrLT5tX251bVZhcnMpLmpzVmFsdWUobV9zY29wZUNoYWluLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpKSktPnZhbHVlKCk7CiAgICAgICAgICAgICBpZiAodmFsdWUg
PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgICByZXdpbmRVbmFyeU9wKCk7CiAgICAg
ICAgICAgICAgICAgZW1pdE9wY29kZShvcF9pc191bmRlZmluZWQpOwpAQCAtOTg2LDcgKzk3OCw3
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2wKICAgICB9CiAKICAg
ICBpZiAoZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5nbG9iYWxSZXNvbHZl
SW5zdHJ1Y3Rpb25zLmFwcGVuZChpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBtX2Nv
ZGVCbG9jay0+YWRkR2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUo
KSk7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9nbG9iYWwpOwogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGdsb2JhbE9iamVjdCk7CkBAIC0xMDY2LDcgKzEwNTgsNyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0QnlJZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5KQogewotICAgIG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucy5hcHBlbmQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICBtX2NvZGVC
bG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkp
OwogCiAgICAgZW1pdE9wY29kZShvcF9nZXRfYnlfaWQpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOwpAQCAtMTA4MSw3ICsxMDczLDcgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1dEJ5SWQoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHksIFJlZ2lzdGVySUQqIHZhbHVlKQogewotICAgIG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucy5hcHBlbmQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICBtX2NvZGVC
bG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkp
OwogCiAgICAgZW1pdE9wY29kZShvcF9wdXRfYnlfaWQpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChiYXNlLT5pbmRleCgpKTsKQEAgLTEyNTMsNyArMTI0NSw3IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICB9CiAKICAgICBlbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgIG1fY29kZUJsb2NrLT5jYWxs
TGlua0luZm9zLmFwcGVuZChDYWxsTGlua0luZm8oKSk7CisgICAgbV9jb2RlQmxvY2stPmFkZENh
bGxMaW5rSW5mbygpOwogCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIGVtaXRPcGNvZGUob3Bjb2Rl
SUQpOwpAQCAtMTI3NywxMCArMTI2OSwxMCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdENhbGwoCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmV0dXJu
KFJlZ2lzdGVySUQqIHNyYykKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4pIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkgewog
ICAgICAgICBlbWl0T3Bjb2RlKG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOwogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXJJbmRleCk7Ci0gICAgfSBlbHNl
IGlmIChtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cyAmJiBtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycyA+IDEpCisgICAgfSBlbHNlIGlmIChtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYm
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPiAxKQogICAgICAgICBlbWl0T3Bjb2RlKG9w
X3RlYXJfb2ZmX2FyZ3VtZW50cyk7CiAKICAgICByZXR1cm4gZW1pdFVuYXJ5Tm9Ec3RPcChvcF9y
ZXQsIHNyYyk7CkBAIC0xMzMyLDcgKzEzMjQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENvbnN0CiAgICAgICAgIGNhbGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkp
OwogCiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
KTsKLSAgICBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5hcHBlbmQoQ2FsbExpbmtJbmZvKCkp
OworICAgIG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKIAogICAgIGVtaXRPcGNvZGUo
b3BfY29uc3RydWN0KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsg
Ly8gZHN0CkBAIC0xNTUxLDcgKzE1NDMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdE5leHRQCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKFJl
Z2lzdGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogc3RhcnQsIExhYmVsKiBlbmQpCiB7CiAg
ICAgSGFuZGxlckluZm8gaW5mbyA9IHsgc3RhcnQtPm9mZnNldEZyb20oMCksIGVuZC0+b2Zmc2V0
RnJvbSgwKSwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2R5bmFtaWNTY29wZURlcHRoLCAwIH07
Ci0gICAgZXhjZXB0aW9uSGFuZGxlcnMoKS5hcHBlbmQoaW5mbyk7CisgICAgbV9jb2RlQmxvY2st
PmFkZEV4Y2VwdGlvbkhhbmRsZXIoaW5mbyk7CiAgICAgZW1pdE9wY29kZShvcF9jYXRjaCk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldFJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICBy
ZXR1cm4gdGFyZ2V0UmVnaXN0ZXI7CkluZGV4OiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gMzkwNjkpCisrKyBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJl
Z2lzdGVySUQqIGRlc3RpbmF0aW9uRm9yQXNzaWduUmVzdWx0KFJlZ2lzdGVySUQqIGRzdCkKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGRzdCAmJiBkc3QgIT0gaWdub3JlZFJlc3VsdCgpICYm
IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQorICAgICAgICAgICAgaWYgKGRzdCAm
JiBkc3QgIT0gaWdub3JlZFJlc3VsdCgpICYmIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNo
YWluKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdC0+aXNUZW1wb3JhcnkoKSA/IGRzdCA6
IG5ld1RlbXBvcmFyeSgpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTE2
Myw5ICsxNjMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgLy8g
Tm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0aGF0IGRzdCwgaWYgcHJvdmlkZWQsIGlzIGVpdGhlciBh
IGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0ZW1wb3JhcnkuCiAgICAgICAgICAgICBBU1NFUlQoIWRz
dCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8ICFkc3QtPmlzVGVtcG9yYXJ5KCkgfHwgZHN0
LT5yZWZDb3VudCgpKTsKLSAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmxpbmVJbmZvLnNp
emUoKSB8fCBtX2NvZGVCbG9jay0+bGluZUluZm8ubGFzdCgpLmxpbmVOdW1iZXIgIT0gbi0+bGlu
ZU5vKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPm51bWJlck9mTGluZUluZm9z
KCkgfHwgbV9jb2RlQmxvY2stPmxhc3RMaW5lSW5mbygpLmxpbmVOdW1iZXIgIT0gbi0+bGluZU5v
KCkpIHsKICAgICAgICAgICAgICAgICBMaW5lSW5mbyBpbmZvID0geyBpbnN0cnVjdGlvbnMoKS5z
aXplKCksIG4tPmxpbmVObygpIH07Ci0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmxpbmVJ
bmZvLmFwcGVuZChpbmZvKTsKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkTGluZUlu
Zm8oaW5mbyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobV9lbWl0Tm9kZURlcHRo
ID49IHNfbWF4RW1pdE5vZGVEZXB0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZW1pdFRocm93
RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKQEAgLTE4Miw3ICsxODIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBkaXZv
dCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKICAgICAgICAgeyAK
LSAgICAgICAgICAgIGRpdm90IC09IG1fY29kZUJsb2NrLT5zb3VyY2VPZmZzZXQ7CisgICAgICAg
ICAgICBkaXZvdCAtPSBtX2NvZGVCbG9jay0+c291cmNlT2Zmc2V0KCk7CiAgICAgICAgICAgICBp
ZiAoZGl2b3QgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhEaXZvdCkgewogICAgICAgICAgICAg
ICAgIC8vIE92ZXJmbG93IGhhcyBvY2N1cnJlZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJl
ciBpbmZvIGZvciBlcnJvcnMgZm9yIHRoaXMgcmVnaW9uCiAgICAgICAgICAgICAgICAgZGl2b3Qg
PSAwOwpAQCAtMjA2LDEyICsyMDYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBp
bmZvLmRpdm90UG9pbnQgPSBkaXZvdDsKICAgICAgICAgICAgIGluZm8uc3RhcnRPZmZzZXQgPSBz
dGFydE9mZnNldDsKICAgICAgICAgICAgIGluZm8uZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmV4cHJlc3Npb25JbmZvLmFwcGVuZChpbmZvKTsKKyAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5hZGRFeHByZXNzaW9uSW5mbyhpbmZvKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGxlZnRIYW5kU2lkZU5lZWRzQ29w
eShib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRJc1B1cmUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAobV9jb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUgfHwgbV9jb2Rl
QmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4gfHwgcmlnaHRIYXNBc3NpZ25tZW50cykgJiYgIXJp
Z2h0SXNQdXJlOworICAgICAgICAgICAgcmV0dXJuIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29k
ZSB8fCBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8IHJpZ2h0SGFzQXNzaWdu
bWVudHMpICYmICFyaWdodElzUHVyZTsKICAgICAgICAgfQogCiAgICAgICAgIEFMV0FZU19JTkxJ
TkUgUGFzc1JlZlB0cjxSZWdpc3RlcklEPiBlbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShFeHByZXNz
aW9uTm9kZSogbiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SXNQdXJlKQpA
QCAtMzk4LDEyICszOTgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGFk
ZFVuZXhwZWN0ZWRDb25zdGFudChKU1ZhbHVlKik7CiAgICAgICAgIHVuc2lnbmVkIGFkZFJlZ0V4
cChSZWdFeHAqKTsKIAotICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMo
KSB7IHJldHVybiBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zOyB9CisgICAgICAgIFZlY3RvcjxJ
bnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKTsgfQogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7IHJldHVybiAq
bV9zeW1ib2xUYWJsZTsgfQotICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+JiBleGNlcHRpb25I
YW5kbGVycygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyczsgfQogCiAg
ICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemVMb2NhbHMoKSB7IHJldHVybiAobV9jb2RlVHlwZSAh
PSBFdmFsQ29kZSkgJiYgIW1fZHluYW1pY1Njb3BlRGVwdGg7IH0KLSAgICAgICAgYm9vbCBjYW5P
cHRpbWl6ZU5vbkxvY2FscygpIHsgcmV0dXJuIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSkg
JiYgIW1fZHluYW1pY1Njb3BlRGVwdGggJiYgIW1fY29kZUJsb2NrLT51c2VzRXZhbDsgfQorICAg
ICAgICBib29sIGNhbk9wdGltaXplTm9uTG9jYWxzKCkgeyByZXR1cm4gKG1fY29kZVR5cGUgPT0g
RnVuY3Rpb25Db2RlKSAmJiAhbV9keW5hbWljU2NvcGVEZXB0aCAmJiAhbV9jb2RlQmxvY2stPnVz
ZXNFdmFsKCk7IH0KIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VGhyb3dFeHByZXNzaW9uVG9v
RGVlcEV4Y2VwdGlvbigpOwogCkluZGV4OiBieXRlY29tcGlsZXIvTGFiZWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBieXRlY29tcGlsZXIvTGFiZWwuaAkocmV2aXNpb24gMzkwNjkpCisrKyBieXRlY29tcGls
ZXIvTGFiZWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3VucmVzb2x2ZWRKdW1wcy5zaXplKCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaiA9IG1fdW5yZXNvbHZlZEp1bXBzW2ldOwotICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNbal0udS5vcGVyYW5kID0gbV9sb2NhdGlv
biAtIGo7CisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2pdLnUu
b3BlcmFuZCA9IG1fbG9jYXRpb24gLSBqOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKSW5k
ZXg6IGludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMzkwNjkpCisrKyBpbnRlcnByZXRlci9DYWxsRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBK
U1ZhbHVlKiBDYWxsRnJhbWU6OnRoaXNWYWx1ZSgpCiB7Ci0gICAgcmV0dXJuIHRoaXNbY29kZUJs
b2NrKCktPnRoaXNSZWdpc3Rlcl0uanNWYWx1ZSh0aGlzKTsKKyAgICByZXR1cm4gdGhpc1tjb2Rl
QmxvY2soKS0+dGhpc1JlZ2lzdGVyKCldLmpzVmFsdWUodGhpcyk7CiB9CiAKIH0KSW5kZXg6IGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHJldmlzaW9uIDM5MDY5KQorKysgaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMiArOTIsMTIgQEAgc3RhdGljIGNvbnN0IGludCBw
cmVmZXJyZWRTY3JpcHRDaGVja1RpbQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBJbnN0cnVjdGlv
biogdlBDRm9yUEMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHZvaWQqIHBjKQogewotICAgIGlmIChw
YyA+PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICYmIHBjIDwgY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMuZW5kKCkpCisgICAgaWYgKHBjID49IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKSAmJiBwYyA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KHBjKTsKIAotICAgIEFTU0VSVChj
b2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuY29udGFpbnMocGMpKTsKLSAgICB1bnNp
Z25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQocGMp
OwotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXg7
CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0UmV0dXJuQWRkcmVzc1ZQQ01hcCgpLmNvbnRhaW5z
KHBjKSk7CisgICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2RlQmxvY2stPmppdFJldHVybkFkZHJl
c3NWUENNYXAoKS5nZXQocGMpOworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCkgKyB2UENJbmRleDsKIH0KIAogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKQEAgLTExMiw3
ICsxMTIsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBJbnN0cnVjdGlvbiogdlBDRm9yCiAvLyBS
ZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgc2NvcGUgY2hhaW4gd2l0aGluIGEgZ2l2ZW4gY2FsbCBm
cmFtZS4KIHN0YXRpYyBpbnQgZGVwdGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFNjb3BlQ2hhaW4m
IHNjKQogewotICAgIGlmICghY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQorICAgIGlm
ICghY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGludCBzY29wZURlcHRoID0gMDsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNj
LmJlZ2luKCk7CkBAIC0zMzMsNyArMzMzLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0
ZXI6OnJlc29sdmUoQwogICAgIEFTU0VSVChpdGVyICE9IGVuZCk7CiAKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSWRlbnRpZmllciYgaWRl
bnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsKKyAgICBJZGVudGlmaWVyJiBp
ZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7CiAgICAgZG8gewogICAgICAg
ICBKU09iamVjdCogbyA9ICppdGVyOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKQEAg
LTM1Niw3ICszNTYsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZVNr
CiAKICAgICBpbnQgZHN0ID0gKHZQQyArIDEpLT51Lm9wZXJhbmQ7CiAgICAgaW50IHByb3BlcnR5
ID0gKHZQQyArIDIpLT51Lm9wZXJhbmQ7Ci0gICAgaW50IHNraXAgPSAodlBDICsgMyktPnUub3Bl
cmFuZCArIGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbjsKKyAgICBpbnQgc2tpcCA9ICh2
UEMgKyAzKS0+dS5vcGVyYW5kICsgY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CiAK
ICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
OwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKQEAg
LTM2Niw3ICszNjYsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZVNr
CiAgICAgICAgICsraXRlcjsKICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKICAgICB9Ci0g
ICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsK
KyAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7
CiAgICAgZG8gewogICAgICAgICBKU09iamVjdCogbyA9ICppdGVyOwogICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChvKTsKQEAgLTM5OCw3ICszOTgsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRl
cnByZXRlcjo6cmVzb2x2ZUdsCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2Nr
LT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CisgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXIocHJvcGVydHkpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9i
amVjdCk7CiAgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwg
aWRlbnQsIHNsb3QpKSB7CiAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUo
Y2FsbEZyYW1lLCBpZGVudCk7CkBAIC00NTAsNyArNDUwLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQg
SW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogewogICAgIGludCBkc3QgPSAodlBDICsgMSktPnUub3Bl
cmFuZDsKICAgICBpbnQgcHJvcGVydHkgPSAodlBDICsgMiktPnUub3BlcmFuZDsKLSAgICBjYWxs
RnJhbWVbZHN0XSA9IGlubGluZVJlc29sdmVCYXNlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+aWRlbnRpZmllcnNbcHJvcGVydHldLCBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7
CisgICAgY2FsbEZyYW1lW2RzdF0gPSBpbmxpbmVSZXNvbHZlQmFzZShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkpLCBjYWxsRnJhbWUtPnNjb3Bl
Q2hhaW4oKSk7CiB9CiAKIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlQmFz
ZUFuZFByb3BlcnR5KENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1Zh
bHVlKiYgZXhjZXB0aW9uVmFsdWUpCkBAIC00NjgsNyArNDY4LDcgQEAgTkVWRVJfSU5MSU5FIGJv
b2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogICAgIEFTU0VSVChpdGVyICE9IGVuZCk7CiAKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSWRl
bnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsKKyAgICBJ
ZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7CiAgICAg
SlNPYmplY3QqIGJhc2U7CiAgICAgZG8gewogICAgICAgICBiYXNlID0gKml0ZXI7CkBAIC01MDQs
NyArNTA0LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogICAg
IEFTU0VSVChpdGVyICE9IGVuZCk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlk
ZW50aWZpZXJzW3Byb3BlcnR5XTsKKyAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+
aWRlbnRpZmllcihwcm9wZXJ0eSk7CiAgICAgSlNPYmplY3QqIGJhc2U7CiAgICAgZG8gewogICAg
ICAgICBiYXNlID0gKml0ZXI7CkBAIC01MzcsMTQgKzUzNywxNCBAQCBORVZFUl9JTkxJTkUgYm9v
bCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhCiBBTFdBWVNfSU5MSU5FIENhbGxGcmFtZSogSW50ZXJw
cmV0ZXI6OnNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKENvZGVCbG9jayogbmV3Q29kZUJsb2Nr
LCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHNpemVf
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ2MpCiB7CiAgICAgUmVnaXN0ZXIqIHIgPSBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSByICsgcmVnaXN0ZXJPZmZz
ZXQgKyBuZXdDb2RlQmxvY2stPm51bUNhbGxlZVJlZ2lzdGVyczsKKyAgICBSZWdpc3RlciogbmV3
RW5kID0gciArIHJlZ2lzdGVyT2Zmc2V0ICsgbmV3Q29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lz
dGVyczsKIAotICAgIGlmIChMSUtFTFkoYXJnYyA9PSBuZXdDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMpKSB7IC8vIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cworICAgIGlmIChMSUtFTFkoYXJn
YyA9PSBuZXdDb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpIHsgLy8gY29ycmVjdCBudW1iZXIg
b2YgYXJndW1lbnRzCiAgICAgICAgIGlmIChVTkxJS0VMWSghcmVnaXN0ZXJGaWxlLT5ncm93KG5l
d0VuZCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHIgKz0gcmVnaXN0ZXJPZmZz
ZXQ7Ci0gICAgfSBlbHNlIGlmIChhcmdjIDwgbmV3Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKSB7
IC8vIHRvbyBmZXcgYXJndW1lbnRzIC0tIGZpbGwgaW4gdGhlIGJsYW5rcwotICAgICAgICBzaXpl
X3Qgb21pdHRlZEFyZ0NvdW50ID0gbmV3Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzIC0gYXJnYzsK
KyAgICB9IGVsc2UgaWYgKGFyZ2MgPCBuZXdDb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykgeyAv
LyB0b28gZmV3IGFyZ3VtZW50cyAtLSBmaWxsIGluIHRoZSBibGFua3MKKyAgICAgICAgc2l6ZV90
IG9taXR0ZWRBcmdDb3VudCA9IG5ld0NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gYXJnYzsK
ICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgKz0gb21pdHRlZEFyZ0NvdW50OwogICAgICAgICBuZXdF
bmQgKz0gb21pdHRlZEFyZ0NvdW50OwogICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3Jvdyhu
ZXdFbmQpKQpAQCAtNTU1LDcgKzU1NSw3IEBAIEFMV0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBJbnRl
cnByZXRlcjo6c2wKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbWl0dGVkQXJnQ291
bnQ7ICsraSkKICAgICAgICAgICAgIGFyZ3ZbaV0gPSBqc1VuZGVmaW5lZCgpOwogICAgIH0gZWxz
ZSB7IC8vIHRvbyBtYW55IGFyZ3VtZW50cyAtLSBjb3B5IGV4cGVjdGVkIGFyZ3VtZW50cywgbGVh
dmluZyB0aGUgZXh0cmEgYXJndW1lbnRzIGJlaGluZAotICAgICAgICBzaXplX3QgbnVtUGFyYW1l
dGVycyA9IG5ld0NvZGVCbG9jay0+bnVtUGFyYW1ldGVyczsKKyAgICAgICAgc2l6ZV90IG51bVBh
cmFtZXRlcnMgPSBuZXdDb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgKz0gbnVtUGFyYW1ldGVyczsKICAgICAgICAgbmV3RW5kICs9IG51bVBhcmFtZXRl
cnM7CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OmNhbGxFCiAKICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+
c2NvcGVDaGFpbigpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKLSAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gY29kZUJsb2NrLT5ldmFs
Q29kZUNhY2hlLmdldChjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UsIHNjb3BlQ2hhaW4sIGV4Y2Vw
dGlvblZhbHVlKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gY29kZUJsb2NrLT5l
dmFsQ29kZUNhY2hlKCkuZ2V0KGNhbGxGcmFtZSwgcHJvZ3JhbVNvdXJjZSwgc2NvcGVDaGFpbiwg
ZXhjZXB0aW9uVmFsdWUpOwogCiAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsK
ICAgICBpZiAoZXZhbE5vZGUpCkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6
ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIGNvbnN0IFJlZ2lzdGVyKiBpdDsKICAgICBjb25z
dCBSZWdpc3RlciogZW5kOwogCi0gICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUgPT0gR2xvYmFs
Q29kZSkgeworICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gR2xvYmFsQ29kZSkgewog
ICAgICAgICBpdCA9IHJlZ2lzdGVyRmlsZS0+bGFzdEdsb2JhbCgpOwogICAgICAgICBlbmQgPSBp
dCArIHJlZ2lzdGVyRmlsZS0+bnVtR2xvYmFscygpOwogICAgICAgICB3aGlsZSAoaXQgIT0gZW5k
KSB7CkBAIC02ODUsOSArNjg1LDkgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhD
YWxsRnJhbQogICAgICAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgIH0KICAgICAKLSAgICBpdCA9IGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnM7CisgICAgaXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0g
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnM7CiAgICAgcHJpbnRmKCJbdGhpc10gICAgICAgICAgICAgICAgICAgICB8ICUxMHAgfCAl
MTBwIFxuIiwgaXQsICgqaXQpLnYoKSk7ICsraXQ7Ci0gICAgZW5kID0gaXQgKyBtYXgoY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzIC0gMSwgMCk7IC8vIC0gMSB0byBza2lwICJ0aGlzIgorICAgIGVu
ZCA9IGl0ICsgbWF4KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gMSwgMCk7IC8vIC0gMSB0
byBza2lwICJ0aGlzIgogICAgIGlmIChpdCAhPSBlbmQpIHsKICAgICAgICAgZG8gewogICAgICAg
ICAgICAgcHJpbnRmKCJbcGFyYW1dICAgICAgICAgICAgICAgICAgICB8ICUxMHAgfCAlMTBwIFxu
IiwgaXQsICgqaXQpLnYoKSk7CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6
ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogCiAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOwogCi0g
ICAgZW5kID0gaXQgKyBjb2RlQmxvY2stPm51bVZhcnM7CisgICAgZW5kID0gaXQgKyBjb2RlQmxv
Y2stPm1fbnVtVmFyczsKICAgICBpZiAoaXQgIT0gZW5kKSB7CiAgICAgICAgIGRvIHsKICAgICAg
ICAgICAgIHByaW50ZigiW3IlMmRdICAgICAgICAgICAgICAgICAgICAgIHwgJTEwcCB8ICUxMHAg
XG4iLCByZWdpc3RlckNvdW50LCBpdCwgKCppdCkudigpKTsKQEAgLTcxOCw3ICs3MTgsNyBAQCB2
b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtCiAgICAgfQogICAgIHByaW50
ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
Iik7CiAKLSAgICBlbmQgPSBpdCArIGNvZGVCbG9jay0+bnVtQ29uc3RhbnRzOworICAgIGVuZCA9
IGl0ICsgY29kZUJsb2NrLT5tX251bUNvbnN0YW50czsKICAgICBpZiAoaXQgIT0gZW5kKSB7CiAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgIHByaW50ZigiW3IlMmRdICAgICAgICAgICAgICAgICAg
ICAgIHwgJTEwcCB8ICUxMHAgXG4iLCByZWdpc3RlckNvdW50LCBpdCwgKCppdCkudigpKTsKQEAg
LTcyOCw3ICs3MjgsNyBAQCB2b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFt
CiAgICAgfQogICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKLSAgICBlbmQgPSBpdCArIGNvZGVCbG9jay0+bnVtQ2Fs
bGVlUmVnaXN0ZXJzIC0gY29kZUJsb2NrLT5udW1Db25zdGFudHMgLSBjb2RlQmxvY2stPm51bVZh
cnM7CisgICAgZW5kID0gaXQgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0gY29k
ZUJsb2NrLT5tX251bUNvbnN0YW50cyAtIGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGlmIChp
dCAhPSBlbmQpIHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgcHJpbnRmKCJbciUyZF0gICAg
ICAgICAgICAgICAgICAgICAgfCAlMTBwIHwgJTEwcCBcbiIsIHJlZ2lzdGVyQ291bnQsIGl0LCAo
Kml0KS52KCkpOwpAQCAtNzYwLDIwICs3NjAsMjAgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJw
cmV0ZXI6OnVud2luZENhbAogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgewogICAgICAgICBEZWJ1Z2dlckNh
bGxGcmFtZSBkZWJ1Z2dlckNhbGxGcmFtZShjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsKICAg
ICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVlKCkpCi0gICAgICAgICAgICBkZWJ1Z2dlci0+cmV0
dXJuRXZlbnQoZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJ
RCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+bGFzdExpbmUoKSk7CisgICAgICAgICAgICBkZWJ1
Z2dlci0+cmV0dXJuRXZlbnQoZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2Rl
KCktPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3duZXJOb2RlKCktPmxhc3RMaW5lKCkpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oZGVidWdn
ZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2st
Pm93bmVyTm9kZS0+bGFzdExpbmUoKSk7CisgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0
ZVByb2dyYW0oZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlKCktPnNvdXJj
ZUlEKCksIGNvZGVCbG9jay0+b3duZXJOb2RlKCktPmxhc3RMaW5lKCkpOwogICAgIH0KIAogICAg
IGlmIChQcm9maWxlciogcHJvZmlsZXIgPSAqUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVy
ZW5jZSgpKSB7CiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlZSgpKQogICAgICAgICAgICAg
cHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNhbGxlZSgpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBj
b2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlVVJMKCksIGNvZGVCbG9jay0+b3duZXJOb2RlLT5s
aW5lTm8oKSk7CisgICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNv
ZGVCbG9jay0+b3duZXJOb2RlKCktPnNvdXJjZVVSTCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZSgp
LT5saW5lTm8oKSk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhpcyBjYWxsIGZyYW1lIGNyZWF0ZWQg
YW4gYWN0aXZhdGlvbiBvciBhbiAnYXJndW1lbnRzJyBvYmplY3QsIHRlYXIgaXQgb2ZmLgotICAg
IGlmIChvbGRDb2RlQmxvY2stPmNvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBvbGRDb2RlQmxv
Y2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4pIHsKKyAgICBpZiAob2xkQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBvbGRDb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4o
KSkgewogICAgICAgICB3aGlsZSAoIXNjb3BlQ2hhaW4tPm9iamVjdC0+aXNPYmplY3QoJkpTQWN0
aXZhdGlvbjo6aW5mbykpCiAgICAgICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+cG9w
KCk7CiAgICAgICAgIHN0YXRpY19jYXN0PEpTQWN0aXZhdGlvbio+KHNjb3BlQ2hhaW4tPm9iamVj
dCktPmNvcHlSZWdpc3RlcnMoY2FsbEZyYW1lLT5vcHRpb25hbENhbGxlZUFyZ3VtZW50cygpKTsK
QEAgLTc4Miw3ICs3ODIsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5k
Q2FsCiAgICAgICAgICAgICBhcmd1bWVudHMtPmNvcHlSZWdpc3RlcnMoKTsKICAgICB9CiAKLSAg
ICBpZiAob2xkQ29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQorICAgIGlmIChvbGRDb2Rl
QmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKICAgICAgICAgc2NvcGVDaGFpbi0+ZGVyZWYo
KTsKIAogICAgIHZvaWQqIHJldHVyblBDID0gY2FsbEZyYW1lLT5yZXR1cm5QQygpOwpAQCAtODI1
LDggKzgyNSw4IEBAIE5FVkVSX0lOTElORSBJbnN0cnVjdGlvbiogSW50ZXJwcmV0ZXI6OnQKICAg
ICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhjYWxsRnJhbWUs
IElkZW50aWZpZXIoY2FsbEZyYW1lLCBleHByZXNzaW9uRW5kT2Zmc2V0UHJvcGVydHlOYW1lKSwg
anNOdW1iZXIoY2FsbEZyYW1lLCBkaXZvdFBvaW50ICsgZW5kT2Zmc2V0KSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhjYWxsRnJhbWUsIElkZW50aWZpZXIoY2FsbEZy
YW1lLCAibGluZSIpLCBqc051bWJlcihjYWxsRnJhbWUsIGNvZGVCbG9jay0+bGluZU51bWJlckZv
clZQQyh2UEMpKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgICAgICAgICBleGNl
cHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUs
ICJzb3VyY2VJZCIpLCBqc051bWJlcihjYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5z
b3VyY2VJRCgpKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgICAgICAgICBleGNl
cHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGNhbGxGcmFtZSwgSWRlbnRpZmllcihjYWxsRnJhbWUs
ICJzb3VyY2VVUkwiKSwganNPd25lZFN0cmluZyhjYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJO
b2RlLT5zb3VyY2VVUkwoKSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgICAgICAg
ICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhjYWxsRnJhbWUsIElkZW50aWZpZXIoY2Fs
bEZyYW1lLCAic291cmNlSWQiKSwganNOdW1iZXIoY2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVy
Tm9kZSgpLT5zb3VyY2VJRCgpKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgICAg
ICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGNhbGxGcmFtZSwgSWRlbnRpZmllcihj
YWxsRnJhbWUsICJzb3VyY2VVUkwiKSwganNPd25lZFN0cmluZyhjYWxsRnJhbWUsIGNvZGVCbG9j
ay0+b3duZXJOb2RlKCktPnNvdXJjZVVSTCgpKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbi0+aXNX
YXRjaGRvZ0V4Y2VwdGlvbigpKSB7CkBAIC04NDAsNyArODQwLDcgQEAgTkVWRVJfSU5MSU5FIElu
c3RydWN0aW9uKiBJbnRlcnByZXRlcjo6dAogCiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9
IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7CiAgICAgICAg
IERlYnVnZ2VyQ2FsbEZyYW1lIGRlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9u
VmFsdWUpOwotICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGRlYnVnZ2VyQ2FsbEZyYW1lLCBj
b2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9y
VlBDKHZQQykpOworICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGRlYnVnZ2VyQ2FsbEZyYW1l
LCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPmxpbmVOdW1i
ZXJGb3JWUEModlBDKSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UgdGhyb3cgaW4gdGhlIG1pZGRs
ZSBvZiBhIGNhbGwgaW5zdHJ1Y3Rpb24sIHdlIG5lZWQgdG8gbm90aWZ5CkBAIC05MDYsNyArOTA2
LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbU5vZAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gJnByb2dyYW1Ob2RlLT5ieXRlY29kZShzY29wZUNoYWluKTsKIAog
ICAgIFJlZ2lzdGVyKiBvbGRFbmQgPSBtX3JlZ2lzdGVyRmlsZS5lbmQoKTsKLSAgICBSZWdpc3Rl
ciogbmV3RW5kID0gb2xkRW5kICsgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnM7
CisgICAgUmVnaXN0ZXIqIG5ld0VuZCA9IG9sZEVuZCArIGNvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVyczsKICAgICBpZiAoIW1fcmVnaXN0ZXJGaWxlLmdyb3cobmV3RW5kKSkg
ewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSk7CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKQEAgLTkxOCwxMSArOTE4LDExIEBAIEpTVmFs
dWUqIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1Ob2QKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgZ2xv
YmFsT2JqZWN0LT5jb3B5R2xvYmFsc1RvKG1fcmVnaXN0ZXJGaWxlKTsKIAotICAgIENhbGxGcmFt
ZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUob2xkRW5kICsgY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKLSAgICBu
ZXdDYWxsRnJhbWVbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXJdID0gdGhpc09iajsKKyAgICBDYWxs
RnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCArIGNvZGVCbG9j
ay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsK
KyAgICBuZXdDYWxsRnJhbWVbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKV0gPSB0aGlzT2JqOwog
ICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIENhbGxGcmFt
ZTo6bm9DYWxsZXIoKSwgMCwgMCwgMCk7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5uZWVkc0Z1bGxT
Y29wZUNoYWluKQorICAgIGlmIChjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKICAg
ICAgICAgc2NvcGVDaGFpbi0+cmVmKCk7CiAKICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJv
ZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOwpAQCAtOTM1LDkgKzkzNSw5IEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1Ob2QKIAogICAgICAgICBtX3JlZW50
cnlEZXB0aCsrOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGlmICghY29kZUJsb2NrLT5jdGlD
b2RlKQorICAgICAgICBpZiAoIWNvZGVCbG9jay0+aml0Q29kZSgpKQogICAgICAgICAgICAgSklU
Ojpjb21waWxlKHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGNvZGVCbG9jayk7Ci0gICAgICAgIHJl
c3VsdCA9IEpJVDo6ZXhlY3V0ZShjb2RlQmxvY2stPmN0aUNvZGUsICZtX3JlZ2lzdGVyRmlsZSwg
bmV3Q2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxEYXRhLCBleGNlcHRpb24pOworICAgICAg
ICByZXN1bHQgPSBKSVQ6OmV4ZWN1dGUoY29kZUJsb2NrLT5qaXRDb2RlKCksICZtX3JlZ2lzdGVy
RmlsZSwgbmV3Q2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxEYXRhLCBleGNlcHRpb24pOwog
I2Vsc2UKICAgICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3Rl
ckZpbGUsIG5ld0NhbGxGcmFtZSwgZXhjZXB0aW9uKTsKICNlbmRpZgpAQCAtMTAwMSw5ICsxMDAx
LDkgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRnVuY3Rpb25CbwogCiAgICAgICAg
IG1fcmVlbnRyeURlcHRoKys7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgaWYgKCFjb2RlQmxv
Y2stPmN0aUNvZGUpCisgICAgICAgIGlmICghY29kZUJsb2NrLT5qaXRDb2RlKCkpCiAgICAgICAg
ICAgICBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKLSAg
ICAgICAgcmVzdWx0ID0gSklUOjpleGVjdXRlKGNvZGVCbG9jay0+Y3RpQ29kZSwgJm1fcmVnaXN0
ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4Y2VwdGlvbik7
CisgICAgICAgIHJlc3VsdCA9IEpJVDo6ZXhlY3V0ZShjb2RlQmxvY2stPmppdENvZGUoKSwgJm1f
cmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4Y2Vw
dGlvbik7CiAjZWxzZQogICAgICAgICByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZt
X3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBleGNlcHRpb24pOwogI2VuZGlmCkBAIC0xMDE5
LDcgKzEwMTksNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShGdW5jdGlvbkJvCiAK
IEpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKIHsKLSAgICByZXR1cm4gZXhlY3V0ZShldmFsTm9k
ZSwgY2FsbEZyYW1lLCB0aGlzT2JqLCBtX3JlZ2lzdGVyRmlsZS5zaXplKCkgKyBldmFsTm9kZS0+
Ynl0ZWNvZGUoc2NvcGVDaGFpbikubnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gZXhlY3V0
ZShldmFsTm9kZSwgY2FsbEZyYW1lLCB0aGlzT2JqLCBtX3JlZ2lzdGVyRmlsZS5zaXplKCkgKyBl
dmFsTm9kZS0+Ynl0ZWNvZGUoc2NvcGVDaGFpbikubV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBzY29wZUNoYWluLCBleGNlcHRpb24pOwogfQogCiBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaiwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKQEAgLTEw
NDgsNyArMTA0OCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxOb2RlKiAK
IAogICAgICAgICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciBvcHRpbWl6ZXIodmFyaWFibGVP
YmplY3QpOwogCi0gICAgICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjayYgdmFy
U3RhY2sgPSBjb2RlQmxvY2stPm93bmVyTm9kZS0+dmFyU3RhY2soKTsKKyAgICAgICAgY29uc3Qg
RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrJiB2YXJTdGFjayA9IGNvZGVCbG9jay0+b3duZXJO
b2RlKCktPnZhclN0YWNrKCk7CiAgICAgICAgIERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjazo6
Y29uc3RfaXRlcmF0b3IgdmFyU3RhY2tFbmQgPSB2YXJTdGFjay5lbmQoKTsKICAgICAgICAgZm9y
IChEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdmFyU3Rh
Y2suYmVnaW4oKTsgaXQgIT0gdmFyU3RhY2tFbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gKCppdCkuZmlyc3Q7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAotICAgICAgICBjb25zdCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFj
ayYgZnVuY3Rpb25TdGFjayA9IGNvZGVCbG9jay0+b3duZXJOb2RlLT5mdW5jdGlvblN0YWNrKCk7
CisgICAgICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlv
blN0YWNrID0gY29kZUJsb2NrLT5vd25lck5vZGUoKS0+ZnVuY3Rpb25TdGFjaygpOwogICAgICAg
ICBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjazo6Y29uc3RfaXRlcmF0b3IgZnVuY3Rp
b25TdGFja0VuZCA9IGZ1bmN0aW9uU3RhY2suZW5kKCk7CiAgICAgICAgIGZvciAoRGVjbGFyYXRp
b25TdGFja3M6OkZ1bmN0aW9uU3RhY2s6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZnVuY3Rpb25TdGFj
ay5iZWdpbigpOyBpdCAhPSBmdW5jdGlvblN0YWNrRW5kOyArK2l0KSB7CiAgICAgICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdDsKQEAgLTEwNjgsNyArMTA2OCw3IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpleGVjdXRlKEV2YWxOb2RlKiAKICAgICB9CiAKICAgICBSZWdpc3Rlciogb2xkRW5k
ID0gbV9yZWdpc3RlckZpbGUuZW5kKCk7Ci0gICAgUmVnaXN0ZXIqIG5ld0VuZCA9IG1fcmVnaXN0
ZXJGaWxlLnN0YXJ0KCkgKyBnbG9iYWxSZWdpc3Rlck9mZnNldCArIGNvZGVCbG9jay0+bnVtQ2Fs
bGVlUmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBtX3JlZ2lzdGVyRmlsZS5zdGFy
dCgpICsgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzOwogICAgIGlmICghbV9yZWdpc3RlckZpbGUuZ3JvdyhuZXdFbmQpKSB7CiAgICAgICAgICpl
eGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwpAQCAtMTA3NywxMCArMTA3NywxMCBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogCiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBD
YWxsRnJhbWU6OmNyZWF0ZShtX3JlZ2lzdGVyRmlsZS5zdGFydCgpICsgZ2xvYmFsUmVnaXN0ZXJP
ZmZzZXQpOwogCiAgICAgLy8gYSAwIGNvZGVCbG9jayBpbmRpY2F0ZXMgYSBidWlsdC1pbiBjYWxs
ZXIKLSAgICBuZXdDYWxsRnJhbWVbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXJdID0gdGhpc09iajsK
KyAgICBuZXdDYWxsRnJhbWVbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKV0gPSB0aGlzT2JqOwog
ICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIGNhbGxGcmFt
ZS0+YWRkSG9zdENhbGxGcmFtZUZsYWcoKSwgMCwgMCwgMCk7CiAKLSAgICBpZiAoY29kZUJsb2Nr
LT5uZWVkc0Z1bGxTY29wZUNoYWluKQorICAgIGlmIChjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4oKSkKICAgICAgICAgc2NvcGVDaGFpbi0+cmVmKCk7CiAKICAgICBQcm9maWxlcioqIHBy
b2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOwpAQCAtMTA5Myw5
ICsxMDkzLDkgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbE5vZGUqIAogCiAg
ICAgICAgIG1fcmVlbnRyeURlcHRoKys7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgaWYgKCFj
b2RlQmxvY2stPmN0aUNvZGUpCisgICAgICAgIGlmICghY29kZUJsb2NrLT5qaXRDb2RlKCkpCiAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgY29kZUJsb2Nr
KTsKLSAgICAgICAgcmVzdWx0ID0gSklUOjpleGVjdXRlKGNvZGVCbG9jay0+Y3RpQ29kZSwgJm1f
cmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4Y2Vw
dGlvbik7CisgICAgICAgIHJlc3VsdCA9IEpJVDo6ZXhlY3V0ZShjb2RlQmxvY2stPmppdENvZGUo
KSwgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEs
IGV4Y2VwdGlvbik7CiAjZWxzZQogICAgICAgICByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3Jt
YWwsICZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBleGNlcHRpb24pOwogI2VuZGlmCkBA
IC0xMTE3LDIyICsxMTE3LDIyIEBAIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjpkZWJ1
ZyhDYWwKIAogICAgIHN3aXRjaCAoZGVidWdIb29rSUQpIHsKICAgICAgICAgY2FzZSBEaWRFbnRl
ckNhbGxGcmFtZToKLSAgICAgICAgICAgIGRlYnVnZ2VyLT5jYWxsRXZlbnQoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lck5vZGUtPnNvdXJjZUlEKCksIGZpcnN0TGluZSk7
CisgICAgICAgICAgICBkZWJ1Z2dlci0+Y2FsbEV2ZW50KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+b3duZXJOb2RlKCktPnNvdXJjZUlEKCksIGZpcnN0TGluZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgV2lsbExlYXZlQ2FsbEZyYW1lOgotICAgICAgICAg
ICAgZGVidWdnZXItPnJldHVybkV2ZW50KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBsYXN0TGluZSk7CisgICAgICAgICAgICBkZWJ1Z2dl
ci0+cmV0dXJuRXZlbnQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lck5v
ZGUoKS0+c291cmNlSUQoKSwgbGFzdExpbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBjYXNlIFdpbGxFeGVjdXRlU3RhdGVtZW50OgotICAgICAgICAgICAgZGVidWdnZXItPmF0U3Rh
dGVtZW50KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJOb2RlLT5zb3Vy
Y2VJRCgpLCBmaXJzdExpbmUpOworICAgICAgICAgICAgZGVidWdnZXItPmF0U3RhdGVtZW50KGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJOb2RlKCktPnNvdXJjZUlEKCks
IGZpcnN0TGluZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgV2lsbEV4ZWN1
dGVQcm9ncmFtOgotICAgICAgICAgICAgZGVidWdnZXItPndpbGxFeGVjdXRlUHJvZ3JhbShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9kZS0+c291cmNlSUQoKSwgZmly
c3RMaW5lKTsKKyAgICAgICAgICAgIGRlYnVnZ2VyLT53aWxsRXhlY3V0ZVByb2dyYW0oY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lck5vZGUoKS0+c291cmNlSUQoKSwgZmly
c3RMaW5lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBEaWRFeGVjdXRlUHJv
Z3JhbToKLSAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRFeGVjdXRlUHJvZ3JhbShjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9kZS0+c291cmNlSUQoKSwgbGFzdExpbmUp
OworICAgICAgICAgICAgZGVidWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFtKGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJOb2RlKCktPnNvdXJjZUlEKCksIGxhc3RMaW5lKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBEaWRSZWFjaEJyZWFrcG9pbnQ6Ci0g
ICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBsYXN0TGluZSk7CisgICAg
ICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+b3duZXJOb2RlKCktPnNvdXJjZUlEKCksIGxhc3RMaW5lKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0xMjI2LDcgKzEyMjYsNyBAQCBORVZFUl9JTkxJ
TkUgU2NvcGVDaGFpbk5vZGUqIEludGVycHJldGVyCiB7CiAgICAgaW50IGRzdCA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7Ci0gICAgSWRlbnRpZmllciYgcHJvcGVydHkgPSBjb2RlQmxvY2stPmlkZW50aWZpZXJz
WygrK3ZQQyktPnUub3BlcmFuZF07CisgICAgSWRlbnRpZmllciYgcHJvcGVydHkgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXIoKCsrdlBDKS0+dS5vcGVyYW5kKTsKICAgICBKU1ZhbHVlKiB2YWx1ZSA9
IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICBK
U09iamVjdCogc2NvcGUgPSBuZXcgKGNhbGxGcmFtZSkgSlNTdGF0aWNTY29wZU9iamVjdChjYWxs
RnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7CiAgICAgY2FsbEZyYW1lW2RzdF0g
PSBzY29wZTsKQEAgLTE0ODUsNyArMTQ4NSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2
YXRlRXhlY3V0ZShFeGUKICAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IG5vVmFsdWUoKTsK
ICAgICBJbnN0cnVjdGlvbiogaGFuZGxlclZQQyA9IDA7CiAKLSAgICBJbnN0cnVjdGlvbiogdlBD
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CisgICAgSW5z
dHJ1Y3Rpb24qIHZQQyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJl
Z2luKCk7CiAgICAgUHJvZmlsZXIqKiBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UgPSBQcm9maWxl
cjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAgICAgdW5zaWduZWQgdGlja0NvdW50ID0g
bV90aWNrc1VudGlsTmV4dFRpbWVvdXRDaGVjayArIDE7CiAKQEAgLTE1NzQsNyArMTU3NCw3IEBA
IEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KICAg
ICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHJlZ0V4cCA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBuZXcgKGdsb2Jh
bERhdGEpIFJlZ0V4cE9iamVjdChjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0
KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5yZWdleHBzW3Jl
Z0V4cF0pOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IG5ldyAoZ2xvYmFsRGF0YSkgUmVnRXhw
T2JqZWN0KGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKS0+cmVnRXhwU3Ry
dWN0dXJlKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnJlZ2V4cChyZWdFeHApKTsKIAogICAg
ICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMjQxMiw3ICsyNDEy
LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAg
Ki8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGlu
ZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc2tpcCA9ICgrK3ZQQyktPnUu
b3BlcmFuZCArIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW47Cisg
ICAgICAgIGludCBza2lwID0gKCsrdlBDKS0+dS5vcGVyYW5kICsgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwogCiAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAgICAgICAgIFNjb3BlQ2hhaW5J
dGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKQEAgLTI0MzQsNyArMjQzNCw3IEBA
IEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKIAogICAgICAgICAgKi8K
ICAgICAgICAgaW50IGluZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc2tp
cCA9ICgrK3ZQQyktPnUub3BlcmFuZCArIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVs
bFNjb3BlQ2hhaW47CisgICAgICAgIGludCBza2lwID0gKCsrdlBDKS0+dS5vcGVyYW5kICsgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwogICAgICAgICBpbnQg
dmFsdWUgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKQEAgLTI1MTUsNyArMjUxNSw3IEBA
IEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IHBy
b3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKIAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50ID0g
Y29kZUJsb2NrLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CisgICAgICAgIElkZW50aWZpZXImIGlk
ZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKICAgICAgICAgSlNWYWx1ZSog
YmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
YmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CkBAIC0yNTQ3LDcgKzI1NDcs
NyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAg
ICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgaW50IG9m
ZnNldCA9IHZQQ1s1XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9i
amVjdC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNb
dlBDWzNdLnUub3BlcmFuZF0pID09IGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcih2UENbM10udS5vcGVyYW5kKSkgPT0gYmFz
ZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwogICAgICAgICAgICAgICAgIGNhbGxG
cmFtZVtkc3RdID0gYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7CiAKICAgICAg
ICAgICAgICAgICB2UEMgKz0gODsKQEAgLTI1ODEsNyArMjU4MSw3IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgICAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENb
Nl0udS5vcGVyYW5kOwogCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90b09iamVjdC0+
Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNbdlBDWzNd
LnUub3BlcmFuZF0pID09IHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90b09iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcih2UENbM10udS5vcGVyYW5kKSkgPT0gcHJv
dG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAg
Y2FsbEZyYW1lW2RzdF0gPSBwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7CiAK
ICAgICAgICAgICAgICAgICAgICAgdlBDICs9IDg7CkBAIC0yNjM2LDcgKzI2MzYsNyBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBvZmZzZXQgPSB2UENbN10udS5vcGVyYW5kOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoYmFzZU9iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+aWRlbnRpZmllcnNbdlBDWzNdLnUub3BlcmFuZF0pID09IGJhc2VPYmplY3QtPmdldERpcmVj
dE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2Jq
ZWN0LT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHZQ
Q1szXS51Lm9wZXJhbmQpKSA9PSBiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGJhc2VPYmplY3QtPmdl
dERpcmVjdE9mZnNldChvZmZzZXQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICB2UEMgKz0g
ODsKQEAgLTI2NTksNyArMjY1OSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGUKICAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwogICAgICAgICBp
bnQgcHJvcGVydHkgPSB2UENbM10udS5vcGVyYW5kOwogCi0gICAgICAgIElkZW50aWZpZXImIGlk
ZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNbcHJvcGVydHldOworICAg
ICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZp
ZXIocHJvcGVydHkpOwogICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFz
ZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUpOwogICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUs
IGlkZW50LCBzbG90KTsKQEAgLTI3MjUsNyArMjcyNSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKIAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxG
cmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CisgICAgICAgIElkZW50aWZpZXIm
IGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Q7CiAgICAgICAgIGJhc2VWYWx1ZS0+cHV0KGNhbGxGcmFtZSwgaWRlbnQs
IGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpLCBzbG90KTsKICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwpAQCAtMjc3NCw3ICsyNzc0LDcgQEAgSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogCiAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0g
dlBDWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2UENb
N10udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5vZmZzZXRG
b3JMb2NhdGlvbihiYXNlT2JqZWN0LT5nZXREaXJlY3RMb2NhdGlvbihjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5pZGVudGlmaWVyc1t2UENbMl0udS5vcGVyYW5kXSkpID09IG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGJhc2VPYmplY3QtPm9mZnNldEZvckxvY2F0aW9uKGJhc2VPYmpl
Y3QtPmdldERpcmVjdExvY2F0aW9uKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIo
dlBDWzJdLnUub3BlcmFuZCkpKSA9PSBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJhc2VPYmpl
Y3QtPnB1dERpcmVjdE9mZnNldChvZmZzZXQsIGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxs
RnJhbWUpKTsKIAogICAgICAgICAgICAgICAgIHZQQyArPSA4OwpAQCAtMjgwOSw3ICsyODA5LDcg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICAg
ICAgIGludCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gdlBDWzVdLnUub3BlcmFuZDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoYmFzZU9iamVjdC0+b2Zmc2V0Rm9yTG9jYXRpb24oYmFzZU9iamVjdC0+
Z2V0RGlyZWN0TG9jYXRpb24oY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNbdlBD
WzJdLnUub3BlcmFuZF0pKSA9PSBvZmZzZXQpOworICAgICAgICAgICAgICAgIEFTU0VSVChiYXNl
T2JqZWN0LT5vZmZzZXRGb3JMb2NhdGlvbihiYXNlT2JqZWN0LT5nZXREaXJlY3RMb2NhdGlvbihj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHZQQ1syXS51Lm9wZXJhbmQpKSkgPT0g
b2Zmc2V0KTsKICAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RPZmZzZXQob2Zm
c2V0LCBjYWxsRnJhbWVbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1lKSk7CiAKICAgICAgICAgICAg
ICAgICB2UEMgKz0gODsKQEAgLTI4MzQsNyArMjgzNCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3BlcmFu
ZDsKIAogICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1
ZShjYWxsRnJhbWUpOwotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsKKyAgICAgICAgSWRlbnRpZmllciYgaWRl
bnQgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKICAgICAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIGJhc2VWYWx1ZS0+cHV0KGNhbGxGcmFt
ZSwgaWRlbnQsIGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpLCBzbG90KTsKICAg
ICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwpAQCAtMjg1NSw3ICsyODU1LDcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgcHJvcGVydHkg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKICAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBjYWxs
RnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpLT50b09iamVjdChjYWxsRnJhbWUpOwotICAg
ICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZp
ZXJzW3Byb3BlcnR5XTsKKyAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKICAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGNhbGxGcmFtZSwgaWRlbnQpKTsK
ICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IHJlc3VsdDsKQEAgLTMyNjQsNyArMzI2NCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2
YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAg
ICAgICAgaW50IGZ1bmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5mdW5jdGlvbnNbZnVuY10tPm1ha2VGdW5j
dGlvbihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKKyAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5mdW5jdGlvbihmdW5jKS0+bWFrZUZ1
bmN0aW9uKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5zY29wZUNoYWluKCkpOwogCiAgICAgICAgICsr
dlBDOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zMjgwLDcgKzMyODAsNyBAQCBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBkc3Qg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBmdW5jID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwogCi0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
ZnVuY3Rpb25FeHByZXNzaW9uc1tmdW5jXS0+bWFrZUZ1bmN0aW9uKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5zY29wZUNoYWluKCkpOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmZ1bmN0aW9uRXhwcmVzc2lvbihmdW5jKS0+bWFrZUZ1bmN0aW9uKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT5zY29wZUNoYWluKCkpOwogCiAgICAgICAgICsrdlBDOwogICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zMzU5LDcgKzMzNTksNyBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIDUsIGNhbGxEYXRhU2NvcGVDaGFp
biwgcHJldmlvdXNDYWxsRnJhbWUsIGRzdCwgYXJnQ291bnQsIGFzRnVuY3Rpb24odikpOwotICAg
ICAgICAgICAgdlBDID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKKyAgICAg
ICAgICAgIHZQQyA9IG5ld0NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKIAogI2lm
IEVOQUJMRShPUENPREVfU1RBVFMpCiAgICAgICAgICAgICBPcGNvZGVTdGF0czo6cmVzZXRMYXN0
SW5zdHJ1Y3Rpb24oKTsKQEAgLTM0MTMsNyArMzQxMyw3IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KIAogICAgICAgICBpbnQgc3JjID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
bmVlZHNGdWxsU2NvcGVDaGFpbik7CisgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpOwogCiAgICAgICAgIGFzQWN0aXZhdGlvbihjYWxs
RnJhbWVbc3JjXS5nZXRKU1ZhbHVlKCkpLT5jb3B5UmVnaXN0ZXJzKGNhbGxGcmFtZS0+b3B0aW9u
YWxDYWxsZWVBcmd1bWVudHMoKSk7CiAKQEAgLTM0MzMsNyArMzQzMyw3IEBAIEpTVmFsdWUqIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgVGhpcyBvcGNvZGUgc2hv
dWxkIG9ubHkgYmUgdXNlZCBpbW1lZGlhdGVseSBiZWZvcmUgb3BfcmV0LgogICAgICAgICAqLwog
Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzICYm
ICFjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKTsKKyAgICAgICAg
QVNTRVJUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSAmJiAhY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKTsKIAogICAgICAgICBjYWxs
RnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCktPmNvcHlSZWdpc3RlcnMoKTsKIApAQCAt
MzQ1Miw3ICszNDUyLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4
ZQogCiAgICAgICAgIGludCByZXN1bHQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
aWYgKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4pCisgICAgICAg
IGlmIChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpCiAgICAg
ICAgICAgICBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+ZGVyZWYoKTsKIAogICAgICAgICBKU1Zh
bHVlKiByZXR1cm5WYWx1ZSA9IGNhbGxGcmFtZVtyZXN1bHRdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
QEAgLTM0ODIsMTEgKzM0ODIsMTEgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZQogICAgICAgICBzaXplX3QgaSA9IDA7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoc2l6
ZV90IGNvdW50ID0gY29kZUJsb2NrLT5udW1WYXJzOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
Zm9yIChzaXplX3QgY291bnQgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsgaSA8IGNvdW50OyArK2kp
CiAgICAgICAgICAgICBjYWxsRnJhbWVbaV0gPSBqc1VuZGVmaW5lZCgpOwogCi0gICAgICAgIGZv
ciAoc2l6ZV90IGNvdW50ID0gY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycy5zaXplKCksIGog
PSAwOyBqIDwgY291bnQ7ICsraSwgKytqKQotICAgICAgICAgICAgY2FsbEZyYW1lW2ldID0gY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyc1tqXTsKKyAgICAgICAgZm9yIChzaXplX3QgY291bnQg
PSBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSwgaiA9IDA7IGogPCBjb3Vu
dDsgKytpLCArK2opCisgICAgICAgICAgICBjYWxsRnJhbWVbaV0gPSBjb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIoaik7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKQEAgLTM1MDcsMTQgKzM1MDcsMTQgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZh
dGVFeGVjdXRlKEV4ZQogICAgICAgICBzaXplX3QgaSA9IDA7CiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgICAgICBmb3IgKHNpemVf
dCBjb3VudCA9IGNvZGVCbG9jay0+bnVtVmFyczsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGZv
ciAoc2l6ZV90IGNvdW50ID0gY29kZUJsb2NrLT5tX251bVZhcnM7IGkgPCBjb3VudDsgKytpKQog
ICAgICAgICAgICAgY2FsbEZyYW1lW2ldID0ganNVbmRlZmluZWQoKTsKIAotICAgICAgICBmb3Ig
KHNpemVfdCBjb3VudCA9IGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpLCBqID0g
MDsgaiA8IGNvdW50OyArK2ksICsraikKLSAgICAgICAgICAgIGNhbGxGcmFtZVtpXSA9IGNvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcnNbal07CisgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0g
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCksIGogPSAwOyBqIDwgY291bnQ7
ICsraSwgKytqKQorICAgICAgICAgICAgY2FsbEZyYW1lW2ldID0gY29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKGopOwogCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNBY3Rp
dmF0aW9uKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Cb2R5Tm9kZSo+KGNvZGVCbG9j
ay0+b3duZXJOb2RlKSk7CisgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAo
Z2xvYmFsRGF0YSkgSlNBY3RpdmF0aW9uKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25C
b2R5Tm9kZSo+KGNvZGVCbG9jay0+b3duZXJOb2RlKCkpKTsKICAgICAgICAgY2FsbEZyYW1lW2Rz
dF0gPSBhY3RpdmF0aW9uOwogICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZy
YW1lLT5zY29wZUNoYWluKCktPmNvcHkoKS0+cHVzaChhY3RpdmF0aW9uKSk7CiAKQEAgLTM2MTEs
NyArMzYxMSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywg
dlBDICsgNywgY2FsbERhdGFTY29wZUNoYWluLCBwcmV2aW91c0NhbGxGcmFtZSwgZHN0LCBhcmdD
b3VudCwgYXNGdW5jdGlvbih2KSk7Ci0gICAgICAgICAgICB2UEMgPSBuZXdDb2RlQmxvY2stPmlu
c3RydWN0aW9ucy5iZWdpbigpOworICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpOwogCiAjaWYgRU5BQkxFKE9QQ09ERV9TVEFUUykKICAgICAgICAg
ICAgIE9wY29kZVN0YXRzOjpyZXNldExhc3RJbnN0cnVjdGlvbigpOwpAQCAtMzgxMiw3ICszODEy
LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAq
LwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3Jj
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPnVuZXhwZWN0ZWRDb25zdGFudHNbc3JjXTsKKyAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51bmV4cGVjdGVkQ29uc3RhbnQoc3Jj
KTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzgz
MCw3ICszODMwLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQog
ICAgICAgICBpbnQgbWVzc2FnZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAogICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIGNhbGxG
cmFtZVtkc3RdID0gRXJyb3I6OmNyZWF0ZShjYWxsRnJhbWUsIChFcnJvclR5cGUpdHlwZSwgY29k
ZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnRzW21lc3NhZ2VdLT50b1N0cmluZyhjYWxsRnJhbWUp
LCBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JWUEModlBDKSwgY29kZUJsb2NrLT5vd25lck5vZGUt
PnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VVUkwoKSk7CisgICAgICAg
IGNhbGxGcmFtZVtkc3RdID0gRXJyb3I6OmNyZWF0ZShjYWxsRnJhbWUsIChFcnJvclR5cGUpdHlw
ZSwgY29kZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnQobWVzc2FnZSktPnRvU3RyaW5nKGNhbGxG
cmFtZSksIGNvZGVCbG9jay0+bGluZU51bWJlckZvclZQQyh2UEMpLCBjb2RlQmxvY2stPm93bmVy
Tm9kZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VVUkwoKSk7
CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM4NDIs
NyArMzg0Miw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAg
ICAgICAgICAgcHJvZ3JhbS4gUmV0dXJuIGNvbnRyb2wgdG8gdGhlIGNhbGxpbmcgbmF0aXZlIGNv
ZGUuCiAgICAgICAgICovCiAKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4pIHsKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkgewogICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICAgICAgICAgIEFTU0VSVChz
Y29wZUNoYWluLT5yZWZDb3VudCA+IDEpOwogICAgICAgICAgICAgc2NvcGVDaGFpbi0+ZGVyZWYo
KTsKQEAgLTM4NjcsNyArMzg2Nyw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGUKIAogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZy
YW1lKS0+aXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3Qo
Y2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAgICAgIElkZW50aWZpZXIm
IGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcnNbcHJvcGVydHldOwor
ICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50
aWZpZXIocHJvcGVydHkpOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lW2Z1bmN0aW9uXS5qc1Zh
bHVlKGNhbGxGcmFtZSktPmlzT2JqZWN0KCkpOwogICAgICAgICBiYXNlT2JqLT5kZWZpbmVHZXR0
ZXIoY2FsbEZyYW1lLCBpZGVudCwgYXNPYmplY3QoY2FsbEZyYW1lW2Z1bmN0aW9uXS5qc1ZhbHVl
KGNhbGxGcmFtZSkpKTsKIApAQCAtMzg5MSw3ICszODkxLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogCiAgICAgICAgIEFTU0VSVChjYWxsRnJhbWVbYmFzZV0u
anNWYWx1ZShjYWxsRnJhbWUpLT5pc09iamVjdCgpKTsKICAgICAgICAgSlNPYmplY3QqIGJhc2VP
YmogPSBhc09iamVjdChjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsKLSAgICAg
ICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
c1twcm9wZXJ0eV07CisgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+aWRlbnRpZmllcihwcm9wZXJ0eSk7CiAgICAgICAgIEFTU0VSVChjYWxsRnJhbWVb
ZnVuY3Rpb25dLmpzVmFsdWUoY2FsbEZyYW1lKS0+aXNPYmplY3QoKSk7CiAgICAgICAgIGJhc2VP
YmotPmRlZmluZVNldHRlcihjYWxsRnJhbWUsIGlkZW50LCBhc09iamVjdChjYWxsRnJhbWVbZnVu
Y3Rpb25dLmpzVmFsdWUoY2FsbEZyYW1lKSkpOwogCkBAIC0zOTk3LDkgKzM5OTcsOSBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHMoCiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZnVuY3Rpb25DYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMpIHsKLSAgICAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKTsKLSAgICAgICAgU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZTsKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIGludCBhcmd1bWVudHNJ
bmRleCA9IHN5bWJvbFRhYmxlLmdldChmdW5jdGlvbkNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cy51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7CiAgICAgICAgIHJldHVybiBm
dW5jdGlvbkNhbGxGcmFtZVthcmd1bWVudHNJbmRleF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAg
IH0KQEAgLTQwNDcsOCArNDA0Nyw4IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENh
bGxlcihDYWwKIAogICAgIEluc3RydWN0aW9uKiB2UEMgPSB2UENGb3JQQyhjYWxsZXJDb2RlQmxv
Y2ssIGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7CiAgICAgbGluZU51bWJlciA9IGNhbGxlckNvZGVC
bG9jay0+bGluZU51bWJlckZvclZQQyh2UEMgLSAxKTsKLSAgICBzb3VyY2VJRCA9IGNhbGxlckNv
ZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpOwotICAgIHNvdXJjZVVSTCA9IGNhbGxlckNv
ZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VVUkwoKTsKKyAgICBzb3VyY2VJRCA9IGNhbGxlckNv
ZGVCbG9jay0+b3duZXJOb2RlKCktPnNvdXJjZUlEKCk7CisgICAgc291cmNlVVJMID0gY2FsbGVy
Q29kZUJsb2NrLT5vd25lck5vZGUoKS0+c291cmNlVVJMKCk7CiAgICAgZnVuY3Rpb24gPSBjYWxs
ZXJGcmFtZS0+Y2FsbGVlKCk7CiB9CiAKQEAgLTQwODcsOCArNDA4Nyw4IEBAIE5FVkVSX0lOTElO
RSB2b2lkIEludGVycHJldGVyOjp0cnlDVElDYWMKICAgICAvLyBJbiB0aGUgaW50ZXJwcmV0ZXIg
dGhlIGxhc3Qgc3RydWN0dXJlIGlzIHRyYXBwZWQgaGVyZTsgaW4gQ1RJIHdlIHVzZSB0aGUKICAg
ICAvLyAqX3NlY29uZCBtZXRob2QgdG8gYWNoaWV2ZSBhIHNpbWlsYXIgKGJ1dCBub3QgcXVpdGUg
dGhlIHNhbWUpIGVmZmVjdC4KIAotICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5j
dGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChyZXR1cm5BZGRyZXNzKTsKLSAgICBJbnN0cnVjdGlv
biogdlBDID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIHZQQ0luZGV4OworICAg
IHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5qaXRSZXR1cm5BZGRyZXNzVlBDTWFwKCku
Z2V0KHJldHVybkFkZHJlc3MpOworICAgIEluc3RydWN0aW9uKiB2UEMgPSBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmJlZ2luKCkgKyB2UENJbmRleDsKIAogICAgIC8vIENhY2hlIGhpdDogU3Bl
Y2lhbGl6ZSBpbnN0cnVjdGlvbiBhbmQgcmVmIFN0cnVjdHVyZXMuCiAKQEAgLTQxNzUsOCArNDE3
NSw4IEBAIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0cnlDVElDYWMKICAgICAvLyBJ
biB0aGUgaW50ZXJwcmV0ZXIgdGhlIGxhc3Qgc3RydWN0dXJlIGlzIHRyYXBwZWQgaGVyZTsgaW4g
Q1RJIHdlIHVzZSB0aGUKICAgICAvLyAqX3NlY29uZCBtZXRob2QgdG8gYWNoaWV2ZSBhIHNpbWls
YXIgKGJ1dCBub3QgcXVpdGUgdGhlIHNhbWUpIGVmZmVjdC4KIAotICAgIHVuc2lnbmVkIHZQQ0lu
ZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChyZXR1cm5BZGRyZXNz
KTsKLSAgICBJbnN0cnVjdGlvbiogdlBDID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4o
KSArIHZQQ0luZGV4OworICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5qaXRSZXR1
cm5BZGRyZXNzVlBDTWFwKCkuZ2V0KHJldHVybkFkZHJlc3MpOworICAgIEluc3RydWN0aW9uKiB2
UEMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyB2UENJbmRleDsKIAogICAg
IC8vIENhY2hlIGhpdDogU3BlY2lhbGl6ZSBpbnN0cnVjdGlvbiBhbmQgcmVmIFN0cnVjdHVyZXMu
CiAKQEAgLTQ0MjQsNyArNDQyNCw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9yZWdpc3Rlcl9m
aWxlX2NoZWMKIHsKICAgICBDVElfU1RBQ0tfSEFDSygpOwogCi0gICAgaWYgKExJS0VMWShBUkdf
cmVnaXN0ZXJGaWxlLT5ncm93KEFSR19jYWxsRnJhbWUgKyBBUkdfY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+bnVtQ2FsbGVlUmVnaXN0ZXJzKSkpCisgICAgaWYgKExJS0VMWShBUkdfcmVnaXN0ZXJG
aWxlLT5ncm93KEFSR19jYWxsRnJhbWUgKyBBUkdfY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmV3aW5kIHRv
IHRoZSBwcmV2aW91cyBjYWxsIGZyYW1lIGJlY2F1c2Ugb3BfY2FsbCBhbHJlYWR5IG9wdGltaXN0
aWNhbGx5CkBAIC00NTgyLDggKzQ1ODIsOCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9zCiAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsK
IAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
Ci0gICAgICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNz
VlBDTWFwLmdldChDVElfUkVUVVJOX0FERFJFU1MpOwotICAgICAgICBJbnN0cnVjdGlvbiogdlBD
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIHZQQ0luZGV4OworICAgICAgICB1
bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+aml0UmV0dXJuQWRkcmVzc1ZQQ01hcCgpLmdl
dChDVElfUkVUVVJOX0FERFJFU1MpOworICAgICAgICBJbnN0cnVjdGlvbiogdlBDID0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgdlBDSW5kZXg7CiAKICAgICAgICAgQVNTRVJU
KHNsb3Quc2xvdEJhc2UoKS0+aXNPYmplY3QoKSk7CiAKQEAgLTQ2NjYsNyArNDY2Niw3IEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3AKIAogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYXNDZWxsKGJhc2VWYWx1ZSktPnN0cnVjdHVyZSgpOwogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJbnN0cnVjdGlvbiog
dlBDID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGNvZGVCbG9jay0+Y3RpUmV0
dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9BRERSRVNTKTsKKyAgICBJbnN0cnVjdGlv
biogdlBDID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZUJsb2NrLT5q
aXRSZXR1cm5BZGRyZXNzVlBDTWFwKCkuZ2V0KENUSV9SRVRVUk5fQUREUkVTUyk7CiAKICAgICBB
U1NFUlQoc2xvdC5zbG90QmFzZSgpLT5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogc2xvdEJh
c2VPYmplY3QgPSBhc09iamVjdChzbG90LnNsb3RCYXNlKCkpOwpAQCAtNDc3NSw5ICs0Nzc1LDkg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pbnN0YW5jZW9mKAogICAgIGlmICghYmFz
ZVZhbC0+aXNPYmplY3QoKSkgewogICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19j
YWxsRnJhbWU7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01h
cC5jb250YWlucyhDVElfUkVUVVJOX0FERFJFU1MpKTsKLSAgICAgICAgdW5zaWduZWQgdlBDSW5k
ZXggPSBjb2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuZ2V0KENUSV9SRVRVUk5fQURE
UkVTUyk7Ci0gICAgICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlk
UGFyYW1FcnJvcihjYWxsRnJhbWUsICJpbnN0YW5jZW9mIiwgYmFzZVZhbCwgY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMuYmVnaW4oKSArIHZQQ0luZGV4LCBjb2RlQmxvY2spOworICAgICAgICBBU1NF
UlQoY29kZUJsb2NrLT5qaXRSZXR1cm5BZGRyZXNzVlBDTWFwKCkuY29udGFpbnMoQ1RJX1JFVFVS
Tl9BRERSRVNTKSk7CisgICAgICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5qaXRS
ZXR1cm5BZGRyZXNzVlBDTWFwKCkuZ2V0KENUSV9SRVRVUk5fQUREUkVTUyk7CisgICAgICAgIEFS
R19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJh
bWUsICJpbnN0YW5jZW9mIiwgYmFzZVZhbCwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpICsgdlBDSW5kZXgsIGNvZGVCbG9jayk7CiAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigp
OwogICAgIH0KIApAQCAtNDg0OCw3ICs0ODQ4LDcgQEAgdm9pZCogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9jYWxsX0pTRnVuY3RpbwogICAgIFNjb3BlQ2hhaW5Ob2RlKiBjYWxsRGF0YVNjb3BlQ2hhaW4g
PSBhc0Z1bmN0aW9uKEFSR19zcmMxKS0+bV9zY29wZUNoYWluLm5vZGUoKTsKICAgICBDb2RlQmxv
Y2sqIG5ld0NvZGVCbG9jayA9ICZhc0Z1bmN0aW9uKEFSR19zcmMxKS0+Ym9keSgpLT5ieXRlY29k
ZShjYWxsRGF0YVNjb3BlQ2hhaW4pOwogCi0gICAgaWYgKCFuZXdDb2RlQmxvY2stPmN0aUNvZGUp
CisgICAgaWYgKCFuZXdDb2RlQmxvY2stPmppdENvZGUoKSkKICAgICAgICAgSklUOjpjb21waWxl
KEFSR19nbG9iYWxEYXRhLCBuZXdDb2RlQmxvY2spOwogCiAgICAgcmV0dXJuIG5ld0NvZGVCbG9j
azsKQEAgLTQ4NjIsMTIgKzQ4NjIsMTIgQEAgVm9pZFB0clBhaXIgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9jYWxsX2FyaQogICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gQVJHX2NvZGVCbG9jazQ7
CiAgICAgaW50IGFyZ0NvdW50ID0gQVJHX2ludDM7CiAKLSAgICBBU1NFUlQoYXJnQ291bnQgIT0g
bmV3Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKTsKKyAgICBBU1NFUlQoYXJnQ291bnQgIT0gbmV3
Q29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpOwogCiAgICAgQ2FsbEZyYW1lKiBvbGRDYWxsRnJh
bWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAKLSAgICBpZiAoYXJnQ291bnQgPiBuZXdD
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMpIHsKLSAgICAgICAgc2l6ZV90IG51bVBhcmFtZXRlcnMg
PSBuZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnM7CisgICAgaWYgKGFyZ0NvdW50ID4gbmV3Q29k
ZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpIHsKKyAgICAgICAgc2l6ZV90IG51bVBhcmFtZXRlcnMg
PSBuZXdDb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgUmVnaXN0ZXIqIHIgPSBj
YWxsRnJhbWUtPnJlZ2lzdGVycygpICsgbnVtUGFyYW1ldGVyczsKIAogICAgICAgICBSZWdpc3Rl
ciogYXJndiA9IHIgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBudW1QYXJh
bWV0ZXJzIC0gYXJnQ291bnQ7CkBAIC00ODc3LDkgKzQ4NzcsOSBAQCBWb2lkUHRyUGFpciBJbnRl
cnByZXRlcjo6Y3RpX29wX2NhbGxfYXJpCiAgICAgICAgIGNhbGxGcmFtZSA9IENhbGxGcmFtZTo6
Y3JlYXRlKHIpOwogICAgICAgICBjYWxsRnJhbWUtPnNldENhbGxlckZyYW1lKG9sZENhbGxGcmFt
ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZV90IG9taXR0ZWRBcmdDb3VudCA9IG5ld0Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycyAtIGFyZ0NvdW50OworICAgICAgICBzaXplX3Qgb21pdHRl
ZEFyZ0NvdW50ID0gbmV3Q29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBhcmdDb3VudDsKICAg
ICAgICAgUmVnaXN0ZXIqIHIgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgb21pdHRlZEFyZ0Nv
dW50OwotICAgICAgICBSZWdpc3RlciogbmV3RW5kID0gciArIG5ld0NvZGVCbG9jay0+bnVtQ2Fs
bGVlUmVnaXN0ZXJzOworICAgICAgICBSZWdpc3RlciogbmV3RW5kID0gciArIG5ld0NvZGVCbG9j
ay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CiAgICAgICAgIGlmICghQVJHX3JlZ2lzdGVyRmlsZS0+
Z3JvdyhuZXdFbmQpKSB7CiAgICAgICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHByZXZpb3VzIGNh
bGwgZnJhbWUgYmVjYXVzZSBvcF9jYWxsIGFscmVhZHkgb3B0aW1pc3RpY2FsbHkKICAgICAgICAg
ICAgIC8vIG1vdmVkIHRoZSBjYWxsIGZyYW1lIGZvcndhcmQuCkBAIC00OTA3LDEyICs0OTA3LDEy
IEBAIHZvaWQqIEludGVycHJldGVyOjpjdGlfdm1fZG9udExhenlMaW5rQ2EKIAogICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oQVJHX3NyYzEpOwogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gJmNhbGxlZS0+Ym9keSgpLT5ieXRlY29kZShjYWxsZWUtPm1fc2NvcGVDaGFpbi5u
b2RlKCkpOwotICAgIGlmICghY29kZUJsb2NrLT5jdGlDb2RlKQorICAgIGlmICghY29kZUJsb2Nr
LT5qaXRDb2RlKCkpCiAgICAgICAgIEpJVDo6Y29tcGlsZShBUkdfZ2xvYmFsRGF0YSwgY29kZUJs
b2NrKTsKIAogICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKEFSR19yZXR1cm5BZGRy
ZXNzMiwgQVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsTGluayk7
CiAKLSAgICByZXR1cm4gY29kZUJsb2NrLT5jdGlDb2RlOworICAgIHJldHVybiBjb2RlQmxvY2st
PmppdENvZGUoKTsKIH0KIAogdm9pZCogSW50ZXJwcmV0ZXI6OmN0aV92bV9sYXp5TGlua0NhbGwo
Q1RJX0FSR1MpCkBAIC00OTIxLDIwICs0OTIxLDIwIEBAIHZvaWQqIEludGVycHJldGVyOjpjdGlf
dm1fbGF6eUxpbmtDYWxsKEMKIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24o
QVJHX3NyYzEpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmNhbGxlZS0+Ym9keSgpLT5i
eXRlY29kZShjYWxsZWUtPm1fc2NvcGVDaGFpbi5ub2RlKCkpOwotICAgIGlmICghY29kZUJsb2Nr
LT5jdGlDb2RlKQorICAgIGlmICghY29kZUJsb2NrLT5qaXRDb2RlKCkpCiAgICAgICAgIEpJVDo6
Y29tcGlsZShBUkdfZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKIAogICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gJkFSR19jYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygp
LT5nZXRDYWxsTGlua0luZm8oQVJHX3JldHVybkFkZHJlc3MyKTsKLSAgICBKSVQ6OmxpbmtDYWxs
KGNhbGxlZSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmN0aUNvZGUsIGNhbGxMaW5rSW5mbywgQVJH
X2ludDMpOworICAgIEpJVDo6bGlua0NhbGwoY2FsbGVlLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+
aml0Q29kZSgpLCBjYWxsTGlua0luZm8sIEFSR19pbnQzKTsKIAotICAgIHJldHVybiBjb2RlQmxv
Y2stPmN0aUNvZGU7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0Q29kZSgpOwogfQogCiBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX2FjdGl2YXRpb24oQ1RJX0FSR1MpCiB7CiAg
ICAgQ1RJX1NUQUNLX0hBQ0soKTsKIAotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5l
dyAoQVJHX2dsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihBUkdfY2FsbEZyYW1lLCBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkJvZHlOb2RlKj4oQVJHX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9k
ZSkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoQVJHX2dsb2JhbERhdGEp
IEpTQWN0aXZhdGlvbihBUkdfY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkJvZHlOb2Rl
Kj4oQVJHX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyTm9kZSgpKSk7CiAgICAgQVJHX2Nh
bGxGcmFtZS0+c2V0U2NvcGVDaGFpbihBUkdfY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmNvcHko
KS0+cHVzaChhY3RpdmF0aW9uKSk7CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CkBAIC01MDA3
LDcgKzUwMDcsNyBAQCB2b2lkIEludGVycHJldGVyOjpjdGlfb3BfdGVhcl9vZmZfYWN0aXZhCiB7
CiAgICAgQ1RJX1NUQUNLX0hBQ0soKTsKIAotICAgIEFTU0VSVChBUkdfY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7CisgICAgQVNTRVJUKEFSR19jYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpOwogICAgIGFzQWN0aXZhdGlvbihB
Ukdfc3JjMSktPmNvcHlSZWdpc3RlcnMoQVJHX2NhbGxGcmFtZS0+b3B0aW9uYWxDYWxsZWVBcmd1
bWVudHMoKSk7CiB9CiAKQEAgLTUwMTUsNyArNTAxNSw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0
aV9vcF90ZWFyX29mZl9hcmd1bWUKIHsKICAgICBDVElfU1RBQ0tfSEFDSygpOwogCi0gICAgQVNT
RVJUKEFSR19jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzICYmICFBUkdfY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbik7CisgICAgQVNTRVJUKEFS
R19jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkgJiYgIUFSR19jYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpOwogICAgIEFSR19jYWxsRnJh
bWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCktPmNvcHlSZWdpc3RlcnMoKTsKIH0KIApAQCAt
NTAzOSw3ICs1MDM5LDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29wX3JldF9zY29wZUNoYWlu
KAogewogICAgIENUSV9TVEFDS19IQUNLKCk7CiAKLSAgICBBU1NFUlQoQVJHX2NhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4pOworICAgIEFTU0VSVChBUkdfY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKTsKICAgICBBUkdfY2FsbEZy
YW1lLT5zY29wZUNoYWluKCktPmRlcmVmKCk7CiB9CiAKQEAgLTUwNzQsOSArNTA3NCw5IEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZShDVEkKICAgICB9IHdoaWxlICgrK2l0
ZXIgIT0gZW5kKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNv
bnRhaW5zKENUSV9SRVRVUk5fQUREUkVTUykpOwotICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29k
ZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChDVElfUkVUVVJOX0FERFJFU1MpOwot
ICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVy
cm9yKGNhbGxGcmFtZSwgaWRlbnQsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2
UENJbmRleCwgY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRSZXR1cm5BZGRy
ZXNzVlBDTWFwKCkuY29udGFpbnMoQ1RJX1JFVFVSTl9BRERSRVNTKSk7CisgICAgdW5zaWduZWQg
dlBDSW5kZXggPSBjb2RlQmxvY2stPmppdFJldHVybkFkZHJlc3NWUENNYXAoKS5nZXQoQ1RJX1JF
VFVSTl9BRERSRVNTKTsKKyAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVW5k
ZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlkZW50LCBjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmJlZ2luKCkgKyB2UENJbmRleCwgY29kZUJsb2NrKTsKICAgICBWTV9USFJPV19FWENF
UFRJT04oKTsKIH0KIApAQCAtNTIwMSw5ICs1MjAxLDkgQEAgVm9pZFB0clBhaXIgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9yZXNvbHZlXwogICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKIAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQo
Y29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKENUSV9SRVRVUk5fQURE
UkVTUykpOwotICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRy
ZXNzVlBDTWFwLmdldChDVElfUkVUVVJOX0FERFJFU1MpOwotICAgIEFSR19nbG9iYWxEYXRhLT5l
eGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnQs
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyB2UENJbmRleCwgY29kZUJsb2NrKTsK
KyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRSZXR1cm5BZGRyZXNzVlBDTWFwKCkuY29udGFpbnMo
Q1RJX1JFVFVSTl9BRERSRVNTKSk7CisgICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2RlQmxvY2st
PmppdFJldHVybkFkZHJlc3NWUENNYXAoKS5nZXQoQ1RJX1JFVFVSTl9BRERSRVNTKTsKKyAgICBB
UkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihj
YWxsRnJhbWUsIGlkZW50LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyB2UENJ
bmRleCwgY29kZUJsb2NrKTsKICAgICBWTV9USFJPV19FWENFUFRJT05fMigpOwogfQogCkBAIC01
MzU5LDkgKzUzNTksOSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfc2tp
CiAgICAgfSB3aGlsZSAoKytpdGVyICE9IGVuZCk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0
dXJuQWRkcmVzc1ZQQ01hcC5jb250YWlucyhDVElfUkVUVVJOX0FERFJFU1MpKTsKLSAgICB1bnNp
Z25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJ
X1JFVFVSTl9BRERSRVNTKTsKLSAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRl
VW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlkZW50LCBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9jayk7CisgICAgQVNTRVJUKGNvZGVC
bG9jay0+aml0UmV0dXJuQWRkcmVzc1ZQQ01hcCgpLmNvbnRhaW5zKENUSV9SRVRVUk5fQUREUkVT
UykpOworICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5qaXRSZXR1cm5BZGRyZXNz
VlBDTWFwKCkuZ2V0KENUSV9SRVRVUk5fQUREUkVTUyk7CisgICAgQVJHX2dsb2JhbERhdGEtPmV4
Y2VwdGlvbiA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCwg
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9jayk7
CiAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiB9CiAKQEAgLTU1OTgsOSArNTU5OCw5IEBAIFZv
aWRQdHJQYWlyIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV8KICAgICB9IHdoaWxlIChpdGVy
ICE9IGVuZCk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5jb250
YWlucyhDVElfUkVUVVJOX0FERFJFU1MpKTsKLSAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVC
bG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9BRERSRVNTKTsKLSAg
ICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJv
cihjYWxsRnJhbWUsIGlkZW50LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBD
SW5kZXgsIGNvZGVCbG9jayk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0UmV0dXJuQWRkcmVz
c1ZQQ01hcCgpLmNvbnRhaW5zKENUSV9SRVRVUk5fQUREUkVTUykpOworICAgIHVuc2lnbmVkIHZQ
Q0luZGV4ID0gY29kZUJsb2NrLT5qaXRSZXR1cm5BZGRyZXNzVlBDTWFwKCkuZ2V0KENUSV9SRVRV
Uk5fQUREUkVTUyk7CisgICAgQVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVVuZGVm
aW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCwgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5iZWdpbigpICsgdlBDSW5kZXgsIGNvZGVCbG9jayk7CiAgICAgVk1fVEhST1dfRVhDRVBU
SU9OXzIoKTsKIH0KIApAQCAtNTc1NiwxMyArNTc1NiwxMyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRl
cjo6Y3RpX29wX3Rocm93KENUSV9BCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2Fs
bEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKIAotICAgIEFTU0VSVChjb2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuY29udGFp
bnMoQ1RJX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2RlQmxv
Y2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuZ2V0KENUSV9SRVRVUk5fQUREUkVTUyk7CisgICAg
QVNTRVJUKGNvZGVCbG9jay0+aml0UmV0dXJuQWRkcmVzc1ZQQ01hcCgpLmNvbnRhaW5zKENUSV9S
RVRVUk5fQUREUkVTUykpOworICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5qaXRS
ZXR1cm5BZGRyZXNzVlBDTWFwKCkuZ2V0KENUSV9SRVRVUk5fQUREUkVTUyk7CiAKICAgICBKU1Zh
bHVlKiBleGNlcHRpb25WYWx1ZSA9IEFSR19zcmMxOwogICAgIEFTU0VSVChleGNlcHRpb25WYWx1
ZSk7CiAKLSAgICBJbnN0cnVjdGlvbiogaGFuZGxlclZQQyA9IEFSR19nbG9iYWxEYXRhLT5pbnRl
cnByZXRlci0+dGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIHZQQ0luZGV4LCB0cnVlKTsKKyAgICBJbnN0cnVj
dGlvbiogaGFuZGxlclZQQyA9IEFSR19nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+dGhyb3dFeGNl
cHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5iZWdpbigpICsgdlBDSW5kZXgsIHRydWUpOwogCiAgICAgaWYgKCFoYW5kbGVyVlBDKSB7CiAg
ICAgICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CkBAIC01OTEwLDkgKzU5MTAs
OSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2luKENUSV9BUkdTCiAgICAgaWYgKCFi
YXNlVmFsLT5pc09iamVjdCgpKSB7CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJH
X2NhbGxGcmFtZTsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBD
TWFwLmNvbnRhaW5zKENUSV9SRVRVUk5fQUREUkVTUykpOwotICAgICAgICB1bnNpZ25lZCB2UENJ
bmRleCA9IGNvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5nZXQoQ1RJX1JFVFVSTl9B
RERSRVNTKTsKLSAgICAgICAgQVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFs
aWRQYXJhbUVycm9yKGNhbGxGcmFtZSwgImluIiwgYmFzZVZhbCwgY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMuYmVnaW4oKSArIHZQQ0luZGV4LCBjb2RlQmxvY2spOworICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRSZXR1cm5BZGRyZXNzVlBDTWFwKCkuY29udGFpbnMoQ1RJX1JFVFVSTl9BRERS
RVNTKSk7CisgICAgICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5qaXRSZXR1cm5B
ZGRyZXNzVlBDTWFwKCkuZ2V0KENUSV9SRVRVUk5fQUREUkVTUyk7CisgICAgICAgIEFSR19nbG9i
YWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUsICJp
biIsIGJhc2VWYWwsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIHZQQ0luZGV4
LCBjb2RlQmxvY2spOwogICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKICAgICB9CiAKQEAg
LTYwNzcsNyArNjA3Nyw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19lcnJv
cigKICAgICBKU1ZhbHVlKiBtZXNzYWdlID0gQVJHX3NyYzI7CiAgICAgdW5zaWduZWQgbGluZU51
bWJlciA9IEFSR19pbnQzOwogCi0gICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoY2FsbEZyYW1lLCBz
dGF0aWNfY2FzdDxFcnJvclR5cGU+KHR5cGUpLCBtZXNzYWdlLT50b1N0cmluZyhjYWxsRnJhbWUp
LCBsaW5lTnVtYmVyLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwgY29kZUJsb2Nr
LT5vd25lck5vZGUtPnNvdXJjZVVSTCgpKTsKKyAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShjYWxs
RnJhbWUsIHN0YXRpY19jYXN0PEVycm9yVHlwZT4odHlwZSksIG1lc3NhZ2UtPnRvU3RyaW5nKGNh
bGxGcmFtZSksIGxpbmVOdW1iZXIsIGNvZGVCbG9jay0+b3duZXJOb2RlKCktPnNvdXJjZUlEKCks
IGNvZGVCbG9jay0+b3duZXJOb2RlKCktPnNvdXJjZVVSTCgpKTsKIH0KIAogdm9pZCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2RlYnVnKENUSV9BUkdTKQpAQCAtNjEwMSwxNCArNjEwMSwxNCBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6Y3RpX3ZtX3Rocm93KENUSV9BCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9IEFSR19nbG9iYWxEYXRhOwogCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+Y3RpUmV0dXJu
QWRkcmVzc1ZQQ01hcC5jb250YWlucyhnbG9iYWxEYXRhLT5leGNlcHRpb25Mb2NhdGlvbikpOwot
ICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFw
LmdldChnbG9iYWxEYXRhLT5leGNlcHRpb25Mb2NhdGlvbik7CisgICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0UmV0dXJuQWRkcmVzc1ZQQ01hcCgpLmNvbnRhaW5zKGdsb2JhbERhdGEtPmV4Y2VwdGlv
bkxvY2F0aW9uKSk7CisgICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2RlQmxvY2stPmppdFJldHVy
bkFkZHJlc3NWUENNYXAoKS5nZXQoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24pOwogCiAg
ICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSBnbG9iYWxEYXRhLT5leGNlcHRpb247CiAgICAg
QVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBub1Zh
bHVlKCk7CiAKLSAgICBJbnN0cnVjdGlvbiogaGFuZGxlclZQQyA9IGdsb2JhbERhdGEtPmludGVy
cHJldGVyLT50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGZhbHNlKTsKKyAgICBJbnN0cnVj
dGlvbiogaGFuZGxlclZQQyA9IGdsb2JhbERhdGEtPmludGVycHJldGVyLT50aHJvd0V4Y2VwdGlv
bihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyB2UENJbmRleCwgZmFsc2UpOwogCiAgICAgaWYgKCFoYW5kbGVyVlBDKSB7CiAgICAg
ICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CkluZGV4OiBqaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBqaXQvSklULmNwcAkocmV2aXNpb24gMzkwNjkpCisrKyBqaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDkgKzE4NCw5IEBAIEpJVDo6SklUKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgQ29kZUIKICAgICA6IG1faW50ZXJwcmV0ZXIoZ2xvYmFsRGF0YS0+aW50
ZXJwcmV0ZXIpCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKLSAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zLnNpemUoKSA6IDApCi0gICAgLCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25J
bmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6
ZSgpIDogMCkKLSAgICAsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8oY29kZUJs
b2NrID8gY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKSA6IDApCisgICAgLCBtX2xhYmVs
cyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCisgICAg
LCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+
bnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpIDogMCkKKyAgICAsIG1fY2FsbFN0
cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2NrLT5udW1iZXJP
ZkNhbGxMaW5rSW5mb3MoKSA6IDApCiAgICAgLCBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVy
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgLCBtX2p1bXBUYXJnZXRzUG9z
aXRpb24oMCkKIHsKQEAgLTI2NSw4ICsyNjUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dTY3JpcHRD
aGVjayh1bnNpZ25lZCBiCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsK
LSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
LmJlZ2luKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMuc2l6ZSgpOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
Q291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgdW5zaWdu
ZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID0gMDsKICAgICB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCA9IDA7CkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9lbmQ6IHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbikKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFp
bigpKQogICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
ZW5kKTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwogICAgICAgICAgICAgX18gcHVzaGxfbShSZWdp
c3RlckZpbGU6OlJldHVyblBDICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwg
WDg2OjplZGkpOwpAQCAtMzkzLDEyICszOTMsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeUlkSG90UGF0aChpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kLCAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kXSksIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIGks
IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrKTsKKyAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeUlkSG90UGF0aChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpKSwgaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZCwgaSwgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KyspOwog
ICAgICAgICAgICAgaSArPSA4OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeUlkSG90UGF0
aChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kXSksIGksIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrKTsKKyAgICAgICAgICAg
IGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQpKSwgaSwgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbklu
ZGV4KyspOwogICAgICAgICAgICAgaSArPSA4OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKICAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOworICAg
ICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlu
c3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdD
b25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwogICAgICAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfaWQpOwogICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25ld19mdW5j
OiB7Ci0gICAgICAgICAgICBGdW5jRGVjbE5vZGUqIGZ1bmMgPSAobV9jb2RlQmxvY2stPmZ1bmN0
aW9uc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSkuZ2V0KCk7CisgICAgICAgICAgICBG
dW5jRGVjbE5vZGUqIGZ1bmMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb24oaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZD4oZnVuYyksIDApOwogICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZnVuYyk7CiAgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwpAQCAtNTMxLDcgKzUz
MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X3Njb3BlZF92YXI6IHsKLSAgICAg
ICAgICAgIGludCBza2lwID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluOworICAgICAgICAgICAgaW50IHNraXAgPSBpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4o
KTsKIAogICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJGaWxl
OjpTY29wZUNoYWluLCBYODY6OmVheCk7CiAgICAgICAgICAgICB3aGlsZSAoc2tpcC0tKQpAQCAt
NTQ0LDcgKzU0NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6
IHsKLSAgICAgICAgICAgIGludCBza2lwID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCAr
IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluOworICAgICAgICAgICAgaW50IHNraXAg
PSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNj
b3BlQ2hhaW4oKTsKIAogICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIoUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluLCBYODY6OmVkeCk7CiAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsK
QEAgLTU2OSw3ICs1NjksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXQ6IHsKICAgICAgICAgICAgIC8vIFdlIGNvdWxk
IEpJVCBnZW5lcmF0ZSB0aGUgZGVyZWYsIG9ubHkgY2FsbGluZyBvdXQgdG8gQyB3aGVuIHRoZSBy
ZWZjb3VudCBoaXRzIHplcm8uCi0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVs
bFNjb3BlQ2hhaW4pCisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4oKSkKICAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX3JldF9zY29wZUNoYWluKTsKIAogICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQg
aW4gJWVheC4KQEAgLTU5OCw3ICs1OTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Jl
c29sdmU6IHsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOworICAgICAgICAgICAg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwogICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlKTsKICAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CkBAIC02NDEs
NyArNjQxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Z1bmM6IHsKLSAg
ICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNb
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmQpKTsKICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkPihpZGVudCksIDApOwogICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2Z1bmMpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCk7CkBAIC03
MDQsNyArNzA0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH07CiAgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOiB7
Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKICAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9iYXNlKTsKICAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CkBAIC03MTksOSAr
NzE5LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3NraXA6IHsKLSAgICAg
ICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQpKTsKICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkPihpZGVudCksIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbiwgNCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCks
IDQpOwogICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNv
bHZlX3NraXApOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGkgKz0gNDsKQEAgLTczMCw3ICs3MzAs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIGNhc2Ugb3Bf
cmVzb2x2ZV9nbG9iYWw6IHsKICAgICAgICAgICAgIC8vIEZhc3QgY2FzZQogICAgICAgICAgICAg
dW5zaWduZWQgZ2xvYmFsT2JqZWN0ID0gYXNJbnRlZ2VyKGluc3RydWN0aW9uW2kgKyAyXS51Lmpz
Q2VsbCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICB2b2lkKiBzdHJ1Y3R1cmVBZGRyZXNzID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zdHJ1Y3Rpb24gKyBpICsgNCk7CiAgICAgICAgICAg
ICB2b2lkKiBvZmZzZXRBZGRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zdHJ1Y3Rpb24g
KyBpICsgNSk7CiAKQEAgLTg4Niw3ICs4ODYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9w
X3VuZXhwZWN0ZWRfbG9hZDogewotICAgICAgICAgICAgSlNWYWx1ZSogdiA9IG1fY29kZUJsb2Nr
LT51bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdOworICAg
ICAgICAgICAgSlNWYWx1ZSogdiA9IG1fY29kZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnQoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJ
bnRlZ2VyKHYpLCBYODY6OmVheCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaSArPSAzOwpAQCAt
OTgzLDcgKzk4Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV93aXRoX2Jh
c2U6IHsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwogICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX3dpdGhfYmFzZSk7CiAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4
Njo6ZWR4KTsKQEAgLTk5Miw3ICs5OTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25l
d19mdW5jX2V4cDogewotICAgICAgICAgICAgRnVuY0V4cHJOb2RlKiBmdW5jID0gKG1fY29kZUJs
b2NrLT5mdW5jdGlvbkV4cHJlc3Npb25zW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKS5n
ZXQoKTsKKyAgICAgICAgICAgIEZ1bmNFeHByTm9kZSogZnVuYyA9IG1fY29kZUJsb2NrLT5mdW5j
dGlvbkV4cHJlc3Npb24oaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7CiAgICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oZnVuYyks
IDApOwogICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdf
ZnVuY19leHApOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKQEAgLTEwNjksNyArMTA2OSw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogewotICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBt
X2NvZGVCbG9jay0+cmVnZXhwc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXS5nZXQoKTsK
KyAgICAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gbV9jb2RlQmxvY2stPnJlZ2V4cChpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFu
dChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihyZWdFeHApLCAwKTsKICAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X3JlZ2V4cCk7CiAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwpA
QCAtMTE3MSw3ICsxMTcxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXNoX25ld19z
Y29wZTogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7CisgICAgICAgICAgICBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7CiAgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0
LCBYODY6OmVjeCk7CiAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX3B1c2hfbmV3X3Njb3BlKTsKQEAgLTEyNjIsNyArMTI2Miw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9nZXR0
ZXI6IHsKICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpKTsKICAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihp
ZGVudCksIDQpOwogICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgOCwgWDg2OjplY3gpOwogICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfZ2V0dGVyKTsKQEAgLTEyNzEs
NyArMTI3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXI6IHsKICAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOworICAgICAgICAgICAg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwogICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
OCwgWDg2OjplY3gpOwogICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9wdXRfc2V0dGVyKTsKQEAgLTEyNzksNyArMTI3OSw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfbmV3X2Vycm9yOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBtZXNzYWdlID0gbV9j
b2RlQmxvY2stPnVuZXhwZWN0ZWRDb25zdGFudHNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZF07CisgICAgICAgICAgICBKU1ZhbHVlKiBtZXNzYWdlID0gbV9jb2RlQmxvY2stPnVuZXhwZWN0
ZWRDb25zdGFudChpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwKTsKICAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChhc0ludGVnZXIobWVzc2FnZSksIDQpOwog
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KG1fY29kZUJsb2NrLT5saW5lTnVtYmVy
Rm9yVlBDKCZpbnN0cnVjdGlvbltpXSksIDgpOwpAQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2gg
Q1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgICAg
ICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vz
c2FyaWx5IHByb2xvbmdpbmcKICAgICAgICAgICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJs
b2NrLT5udW1WYXJzICsgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKKyAg
ICAgICAgICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5tX251bVZhcnMgKyBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBjb3VudDsgKytqKQogICAgICAgICAgICAgICAgIGVtaXRJbml0UmVnaXN0
ZXIoaik7CiAKQEAgLTEzNjksNyArMTM2OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVt
LCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIHRv
IHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAg
ICAgICAgICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUu
Ci0gICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycyArIG1fY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgICAgICBzaXplX3QgY291
bnQgPSBtX2NvZGVCbG9jay0+bV9udW1WYXJzICsgbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3Rh
bnRSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgY291bnQ7
ICsraikKICAgICAgICAgICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKGopOwogCkBAIC0xMzgwLDcg
KzEzODAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsK
LSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycyA9
PSAxKSA/IEludGVycHJldGVyOjpjdGlfb3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMgOiBJ
bnRlcnByZXRlcjo6Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHMpOworICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPT0gMSkgPyBJbnRlcnByZXRl
cjo6Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zIDogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9jcmVhdGVfYXJndW1lbnRzKTsKICAgICAgICAgICAgIGkgKz0gMTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0xNDMyLDggKzE0MzIsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQocHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbkluZGV4ID09IG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9ucy5zaXplKCkpOwotICAgIEFTU0VSVChjYWxsTGlua0luZm9JbmRleCA9PSBtX2NvZGVC
bG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCkpOworICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXggPT0gbV9jb2RlQmxvY2stPm51bWJlck9mUHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbnMoKSk7CisgICAgQVNTRVJUKGNhbGxMaW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2Nr
LT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKSk7CiB9CiAKIApAQCAtMTQ2MSw3ICsxNDYxLDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICB1bnNpZ25lZCBwcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPSAwOwogICAgIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4ID0gMDsKIAotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMuYmVnaW4oKTsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICBmb3IgKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9z
bG93Q2FzZXMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAvLyBGSVhNRTogZW5hYmxlIHBlZXBo
b2xlIG9wdGltaXphdGlvbnMgZm9yIHNsb3cgY2FzZXMgd2hlbiBhcHBsaWNhYmxlCiAgICAgICAg
IGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKQEAgLTE2MDQsMTIgKzE2MDQsMTIgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlJZFNsb3dDYXNlKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKSwgaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZCwgaSwgaXRlciwgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
KyspOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5SWRTbG93Q2FzZShpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQpKSwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgaSwgaXRlciwgcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KyspOwogICAgICAgICAgICAgaSArPSA4OwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pLCBpLCBpdGVyLCBwcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgrKyk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlJZFNs
b3dDYXNlKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUu
b3BlcmFuZCkpLCBpLCBpdGVyLCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgrKyk7CiAg
ICAgICAgICAgICBpICs9IDg7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTk0
Nyw4ICsxOTQ3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgX18gbGluayhfXyBqbXAoKSwgbV9sYWJlbHNbaV0pOwogICAgIH0KIAotICAgIEFTU0VSVChw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPT0gbV9jb2RlQmxvY2stPnByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSk7Ci0gICAgQVNTRVJUKGNhbGxMaW5rSW5mb0luZGV4ID09
IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKSk7CisgICAgQVNTRVJUKHByb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZQcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucygpKTsKKyAgICBBU1NFUlQoY2FsbExpbmtJbmZvSW5kZXggPT0gbV9j
b2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlKCkKQEAgLTE5NTcsNyArMTk1Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZSgpCiAgICAgICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2Nv
ZGVCbG9jayksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xvdCgpKTsKICNl
bmRpZgogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgICAgIF9fIG1vdmxfaTMybSht
X2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zLmJlZ2luKCkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7
CisgICAgICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNh
bXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSksIG1faW50ZXJwcmV0ZXIt
PnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKICNlbmRpZgogCiAgICAgLy8gQ291bGQgdXNlIGEg
cG9wbF9tLCBidXQgd291bGQgbmVlZCB0byBvZmZzZXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlv
biBpZiBzby4KQEAgLTE5NjYsMTIgKzE5NjYsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
KCkKIAogICAgIEptcFNyYyBzbG93UmVnaXN0ZXJGaWxlQ2hlY2s7CiAgICAgSm1wRHN0IGFmdGVy
UmVnaXN0ZXJGaWxlQ2hlY2s7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSA9PSBGdW5j
dGlvbkNvZGUpIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKSB7CiAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgZmFzdCBsaW5rZWQgY2FsbCwgd2Ug
ZG8gbm90IHNldCB0aGlzIHVwIGluIHRoZSBjYWxsZXIuCiAgICAgICAgIGVtaXRQdXRJbW1lZGlh
dGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2sp
OwogCiAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19yZWdpc3RlckZpbGUsIFg4Njo6
ZWF4KTsKLSAgICAgICAgX18gbGVhbF9tcihtX2NvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJz
ICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGksIFg4Njo6ZWR4KTsKKyAgICAgICAgX18gbGVh
bF9tcihtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
LCBYODY6OmVkaSwgWDg2OjplZHgpOwogICAgICAgICBfXyBjbXBsX21yKEZJRUxEX09GRlNFVChS
ZWdpc3RlckZpbGUsIG1fZW5kKSwgWDg2OjplYXgsIFg4Njo6ZWR4KTsKICAgICAgICAgc2xvd1Jl
Z2lzdGVyRmlsZUNoZWNrID0gX18gamcoKTsKICAgICAgICAgYWZ0ZXJSZWdpc3RlckZpbGVDaGVj
ayA9IF9fIGxhYmVsKCk7CkBAIC0xOTgxLDcgKzE5ODEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGUoKQogICAgIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICBwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSA9PSBGdW5jdGlv
bkNvZGUpIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KSB7CiAgICAgICAgIF9fIGxpbmsoc2xvd1JlZ2lzdGVyRmlsZUNoZWNrLCBfXyBsYWJlbCgpKTsK
ICAgICAgICAgZW1pdENUSUNhbGwoMCwgSW50ZXJwcmV0ZXI6OmN0aV9yZWdpc3Rlcl9maWxlX2No
ZWNrKTsKICAgICAgICAgSm1wU3JjIGJhY2tUb0JvZHkgPSBfXyBqbXAoKTsKQEAgLTIwMjAsMzMg
KzIwMjAsMzUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlKCkKICAgICAgICAgfQogICAgIH0K
IAotICAgIGZvciAoVmVjdG9yPEhhbmRsZXJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fY29kZUJs
b2NrLT5leGNlcHRpb25IYW5kbGVycy5iZWdpbigpOyBpdGVyICE9IG1fY29kZUJsb2NrLT5leGNl
cHRpb25IYW5kbGVycy5lbmQoKTsgKytpdGVyKQotICAgICAgICAgaXRlci0+bmF0aXZlQ29kZSA9
IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbaXRlci0+dGFyZ2V0XSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25I
YW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVC
bG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0g
X18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVsc1toYW5kbGVyLnRhcmdldF0pOwor
ICAgIH0KIAogICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9j
YWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBp
ZiAoaXRlci0+dG8pCiAgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgaXRlci0+
ZnJvbSwgaXRlci0+dG8pOwotICAgICAgICBtX2NvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQ
Q01hcC5hZGQoX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBpdGVyLT5mcm9tKSwgaXRlci0+
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5qaXRSZXR1cm5BZGRyZXNzVlBD
TWFwKCkuYWRkKF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgaXRlci0+ZnJvbSksIGl0ZXIt
PmJ5dGVjb2RlSW5kZXgpOwogICAgIH0KIAogICAgIC8vIExpbmsgYWJzb2x1dGUgYWRkcmVzc2Vz
IGZvciBqc3IKICAgICBmb3IgKFZlY3RvcjxKU1JJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fanNy
U2l0ZXMuYmVnaW4oKTsgaXRlciAhPSBtX2pzclNpdGVzLmVuZCgpOyArK2l0ZXIpCiAgICAgICAg
IFg4NkFzc2VtYmxlcjo6bGlua0Fic29sdXRlQWRkcmVzcyhjb2RlLCBpdGVyLT5hZGRyUG9zaXRp
b24sIGl0ZXItPnRhcmdldCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2Rl
QmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zW2ldOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
bnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpOyArK2kpIHsKKyAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbihpKTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBYODZBc3NlbWJsZXI6
OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5m
b1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IFg4
NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX3Byb3BlcnR5QWNjZXNzQ29t
cGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgfQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvc1tpXTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExp
bmtJbmZvcygpOyArK2kpIHsKKyAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxv
Y2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBY
ODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwogICAgICAgICBpbmZvLmhv
dFBhdGhCZWdpbiA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2Nh
bGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgICAg
IGluZm8uaG90UGF0aE90aGVyID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNv
ZGUsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsK
ICAgICAgICAgaW5mby5jb2xkUGF0aE90aGVyID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRB
ZGRyZXNzKGNvZGUsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY29sZFBh
dGhPdGhlcik7CiAgICAgfQogCi0gICAgbV9jb2RlQmxvY2stPmN0aUNvZGUgPSBjb2RlOworICAg
IG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKGNvZGUpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoKQpAQCAtMjExMCw3ICsyMTEyLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIF9fIGxpbmsoaGFzQ29kZUJs
b2NrMSwgX18gbGFiZWwoKSk7CiAKICAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRjaGVzIGNhbGxl
ZSBhcml0eS4KLSAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQ29kZUJsb2Nr
LCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgpOworICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJ
RUxEX09GRlNFVChDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyksIFg4Njo6ZWF4KTsKICAgICBK
bXBTcmMgYXJpdHlDaGVja09rYXkxID0gX18gamUoKTsKICAgICBfXyBwb3BsX3IoWDg2OjplYngp
OwogICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwpAQCAtMjE1Miw3ICsyMTU0LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIF9fIGxpbmsoaGFz
Q29kZUJsb2NrMiwgX18gbGFiZWwoKSk7CiAKICAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRjaGVz
IGNhbGxlZSBhcml0eS4KLSAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQ29k
ZUJsb2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgpOworICAgIF9fIGNtcGxfcm0oWDg2Ojpl
ZHgsIEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyksIFg4Njo6ZWF4KTsK
ICAgICBKbXBTcmMgYXJpdHlDaGVja09rYXkyID0gX18gamUoKTsKICAgICBfXyBwb3BsX3IoWDg2
OjplYngpOwogICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwpAQCAtMjE5NCw3ICsyMTk2
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIF9fIGxp
bmsoaGFzQ29kZUJsb2NrMywgX18gbGFiZWwoKSk7CiAKICAgICAvLyBDaGVjayBhcmdDb3VudCBt
YXRjaGVzIGNhbGxlZSBhcml0eS4KLSAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZT
RVQoQ29kZUJsb2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgpOworICAgIF9fIGNtcGxfcm0o
WDg2OjplZHgsIEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyksIFg4Njo6
ZWF4KTsKICAgICBKbXBTcmMgYXJpdHlDaGVja09rYXkzID0gX18gamUoKTsKICAgICBfXyBwb3Bs
X3IoWDg2OjplYngpOwogICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwpAQCAtMjIxMSw3
ICsyMjEzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAg
IGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7CiAKICAgICAvLyBsb2FkIGN0aUNv
ZGUgZnJvbSB0aGUgbmV3IGNvZGVCbG9jay4KLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChD
b2RlQmxvY2ssIGN0aUNvZGUpLCBYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKENvZGVCbG9jaywgbV9qaXRDb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsK
IAogICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKIApJbmRleDogaml0L0pJVENhbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMzkwNjkpCisrKyBqaXQvSklUQ2Fs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBKSVQ6OnVubGlua0Nh
bGwoQ2FsbExpbmtJbmZvKiBjYWxsTAogdm9pZCBKSVQ6OmxpbmtDYWxsKEpTRnVuY3Rpb24qIGNh
bGxlZSwgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIHZvaWQqIGN0aUNvZGUsIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvLCBpbnQgY2FsbGVyQXJnQ291bnQpCiB7CiAgICAgLy8gQ3VycmVu
dGx5IHdlIG9ubHkgbGluayBjYWxscyB3aXRoIHRoZSBleGFjdCBudW1iZXIgb2YgYXJndW1lbnRz
LgotICAgIGlmIChjYWxsZXJBcmdDb3VudCA9PSBjYWxsZWVDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMpIHsKKyAgICBpZiAoY2FsbGVyQXJnQ291bnQgPT0gY2FsbGVlQ29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnMpIHsKICAgICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOwog
ICAgIAogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmFkZENhbGxlcihjYWxsTGlua0luZm8pOwpJ
bmRleDogaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklUSW5saW5l
TWV0aG9kcy5oCShyZXZpc2lvbiAzOTA2OSkKKysrIGppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZQogCiAgICAgaWYgKHNyYyA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lz
dGVyICYmIG1fY29kZUJsb2NrLT5pc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoc3JjKSkgewogICAg
ICAgICBib29sIGF0SnVtcFRhcmdldCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAobV9qdW1wVGFy
Z2V0c1Bvc2l0aW9uIDwgbV9jb2RlQmxvY2stPmp1bXBUYXJnZXRzLnNpemUoKSAmJiBtX2NvZGVC
bG9jay0+anVtcFRhcmdldHNbbV9qdW1wVGFyZ2V0c1Bvc2l0aW9uXSA8PSBjdXJyZW50SW5zdHJ1
Y3Rpb25JbmRleCkgewotICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0c1tt
X2p1bXBUYXJnZXRzUG9zaXRpb25dID09IGN1cnJlbnRJbnN0cnVjdGlvbkluZGV4KQorICAgICAg
ICB3aGlsZSAobV9qdW1wVGFyZ2V0c1Bvc2l0aW9uIDwgbV9jb2RlQmxvY2stPm51bWJlck9mSnVt
cFRhcmdldHMoKSAmJiBtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1bXBUYXJnZXRzUG9zaXRp
b24pIDw9IGN1cnJlbnRJbnN0cnVjdGlvbkluZGV4KSB7CisgICAgICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPmp1bXBUYXJnZXQobV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb25JbmRleCkKICAgICAgICAgICAgICAgICBhdEp1bXBUYXJnZXQgPSB0cnVlOwogICAgICAg
ICAgICAgKyttX2p1bXBUYXJnZXRzUG9zaXRpb247CiAgICAgICAgIH0KQEAgLTIyNCwxNCArMjI0
LDE0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFIKIEFMV0FZU19J
TkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJ
SGVscGVyX2ogaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgc3Rv
cmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyAgICBzdG9yZTMyKEltbTMyKG1f
aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSkpLCBtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CiAjZW5kaWYKICAgICByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oY2FsbEZyYW1lUmVnaXN0ZXIsIENUSV9BUkdT
X2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGN0aUNhbGwgPSBjYWxsKCk7CiAgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChjdGlDYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKICNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1w
bGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5l
bmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29k
ZUluZGV4LCBmYWxzZSkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7
CiAjZW5kaWYKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKQEAgLTI0MSwxNCArMjQx
LDE0IEBAIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW4KIEFMV0FZU19J
TkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJ
SGVscGVyX28gaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgc3Rv
cmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyAgICBzdG9yZTMyKEltbTMyKG1f
aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSkpLCBtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CiAjZW5kaWYKICAgICByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oY2FsbEZyYW1lUmVnaXN0ZXIsIENUSV9BUkdT
X2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGN0aUNhbGwgPSBjYWxsKCk7CiAgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChjdGlDYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKICNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1w
bGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5l
bmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29k
ZUluZGV4LCBmYWxzZSkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7
CiAjZW5kaWYKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKQEAgLTI1OCwxNCArMjU4
LDE0IEBAIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW4KIEFMV0FZU19J
TkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJ
SGVscGVyX3AgaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgc3Rv
cmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyAgICBzdG9yZTMyKEltbTMyKG1f
aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSkpLCBtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CiAjZW5kaWYKICAgICByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oY2FsbEZyYW1lUmVnaXN0ZXIsIENUSV9BUkdT
X2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGN0aUNhbGwgPSBjYWxsKCk7CiAgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChjdGlDYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKICNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1w
bGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5l
bmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29k
ZUluZGV4LCBmYWxzZSkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7
CiAjZW5kaWYKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKQEAgLTI3NSwxNCArMjc1
LDE0IEBAIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW4KIEFMV0FZU19J
TkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJ
SGVscGVyX2IgaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgc3Rv
cmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyAgICBzdG9yZTMyKEltbTMyKG1f
aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSkpLCBtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CiAjZW5kaWYKICAgICByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oY2FsbEZyYW1lUmVnaXN0ZXIsIENUSV9BUkdT
X2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGN0aUNhbGwgPSBjYWxsKCk7CiAgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChjdGlDYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKICNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1w
bGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5l
bmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29k
ZUluZGV4LCBmYWxzZSkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7
CiAjZW5kaWYKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKQEAgLTI5MiwxNCArMjky
LDE0IEBAIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW4KIEFMV0FZU19J
TkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJ
SGVscGVyX3YgaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgc3Rv
cmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyAgICBzdG9yZTMyKEltbTMyKG1f
aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSkpLCBtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CiAjZW5kaWYKICAgICByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oY2FsbEZyYW1lUmVnaXN0ZXIsIENUSV9BUkdT
X2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGN0aUNhbGwgPSBjYWxsKCk7CiAgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChjdGlDYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKICNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1w
bGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5l
bmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29k
ZUluZGV4LCBmYWxzZSkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7
CiAjZW5kaWYKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKQEAgLTMwOSwxNCArMzA5
LDE0IEBAIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW4KIEFMV0FZU19J
TkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJ
SGVscGVyX3MgaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgc3Rv
cmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyAgICBzdG9yZTMyKEltbTMyKG1f
aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSkpLCBtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CiAjZW5kaWYKICAgICByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oY2FsbEZyYW1lUmVnaXN0ZXIsIENUSV9BUkdT
X2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGN0aUNhbGwgPSBjYWxsKCk7CiAgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChjdGlDYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKICNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1w
bGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5l
bmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29k
ZUluZGV4LCBmYWxzZSkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7
CiAjZW5kaWYKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKQEAgLTMyNiwxNCArMzI2
LDE0IEBAIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW4KIEFMV0FZU19J
TkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJ
SGVscGVyXzIgaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgc3Rv
cmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyAgICBzdG9yZTMyKEltbTMyKG1f
aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSkpLCBtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CiAjZW5kaWYKICAgICByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oY2FsbEZyYW1lUmVnaXN0ZXIsIENUSV9BUkdT
X2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGN0aUNhbGwgPSBjYWxsKCk7CiAgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChjdGlDYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKICNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1w
bGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5l
bmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29k
ZUluZGV4LCBmYWxzZSkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7
CiAjZW5kaWYKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKSW5kZXg6IGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMzkwNjkpCisrKyBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0
aChpbnQgcmVzdQogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgWDg2Ojpl
YXgsIGkpOwogCi0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7
CisgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCkuYnl0ZWNvZGVJbmRleCA9PSBpKTsKIAogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgYmFzZVZSZWcpOwogCkBAIC0x
NTUsNyArMTU1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IHJlcwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiAKICAgICAvLyBUcmFjayB0
aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcmVw
YXRjaCBpbmZvcm1hdGlvbi4KLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNvZGVJbmRl
eCA9PSBpKTsKKyAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b24ocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KS5ieXRlY29kZUluZGV4ID09IGkpOwog
ICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwogfQogCkBAIC0xNjcsNyArMTY3
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVQdXRCeUlkSG90UGF0aChpbnQgYmFzZQogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIFg4Njo6ZWF4LCB2YWx1ZVZSZWcsIFg4Njo6
ZWR4LCBpKTsKIAotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkp
OworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpLmJ5dGVjb2RlSW5kZXggPT0gaSk7CiAKICAgICAv
LyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGVpdGhlciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1t
ZWRpYXRlLCBvciBpZiB0aGUgU3RydWN0dXJlIGRvZXMgbm90IG1hdGNoLgogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgYmFzZVZSZWcpOwpAQCAtMTk4LDcgKzE5
OCw3IEBAIHZvaWQgSklUOjpjb21waWxlUHV0QnlJZFNsb3dDYXNlKGludCBiYXMKICAgICBKbXBT
cmMgY2FsbCA9IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkKTsK
IAogICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVz
ZWQgdG8gcmVjb3ZlciByZXBhdGNoIGluZm9ybWF0aW9uLgotICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbklu
ZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbihwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpLmJ5dGVj
b2RlSW5kZXggPT0gaSk7CiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7CiB9
CiAKSW5kZXg6IHBhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFyc2VyL05vZGVzLmNw
cAkocmV2aXNpb24gMzkwNjkpCisrKyBwYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDY1LDcgKzI0NjUsNyBAQCB2b2lkIEV2YWxOb2RlOjpnZW5lcmF0ZUJ5dGVjb2RlKFNjb3Bl
Q2hhCiAKICAgICBtX2NvZGUuc2V0KG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIGdsb2JhbE9iamVj
dCwgc291cmNlKCkucHJvdmlkZXIoKSkpOwogCi0gICAgQnl0ZWNvZGVHZW5lcmF0b3IgZ2VuZXJh
dG9yKHRoaXMsIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgJm1fY29kZS0+
c3ltYm9sVGFibGUsIG1fY29kZS5nZXQoKSk7CisgICAgQnl0ZWNvZGVHZW5lcmF0b3IgZ2VuZXJh
dG9yKHRoaXMsIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgJm1fY29kZS0+
c3ltYm9sVGFibGUoKSwgbV9jb2RlLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZ2VuZXJhdGUoKTsK
IAogICAgIC8vIEV2YWwgY29kZSBuZWVkcyB0byBoYW5nIG9uIHRvIGl0cyBkZWNsYXJhdGlvbiBz
dGFja3MgdG8ga2VlcCBkZWNsYXJhdGlvbiBpbmZvIGFsaXZlIHVudGlsIEludGVycHJldGVyOjpl
eGVjdXRlIHRpbWUsCkBAIC0yNTQ5LDcgKzI1NDksNyBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6
OmdlbmVyYXRlQnl0ZWNvZGUoCiAKICAgICBtX2NvZGUuc2V0KG5ldyBDb2RlQmxvY2sodGhpcywg
RnVuY3Rpb25Db2RlLCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgp
KSk7CiAKLSAgICBCeXRlY29kZUdlbmVyYXRvciBnZW5lcmF0b3IodGhpcywgZ2xvYmFsT2JqZWN0
LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCAmbV9jb2RlLT5zeW1ib2xUYWJsZSwgbV9jb2RlLmdl
dCgpKTsKKyAgICBCeXRlY29kZUdlbmVyYXRvciBnZW5lcmF0b3IodGhpcywgZ2xvYmFsT2JqZWN0
LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCAmbV9jb2RlLT5zeW1ib2xUYWJsZSgpLCBtX2NvZGUu
Z2V0KCkpOwogICAgIGdlbmVyYXRvci5nZW5lcmF0ZSgpOwogCiAgICAgZGVzdHJveURhdGEoKTsK
SW5kZXg6IHJ1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcnVudGltZS9Bcmd1bWVu
dHMuaAkocmV2aXNpb24gMzkwNjkpCisrKyBydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZ1bmN0aW9u
ID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKICAgICAKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSAmZnVuY3Rpb24tPmJvZHkoKS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKLSAgICAgICAgaW50
IG51bVBhcmFtZXRlcnMgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnM7CisgICAgICAgIGludCBu
dW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnM7CiAgICAgICAgIGFyZ2Mg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKIAogICAgICAgICBpZiAoYXJnYyA8PSBudW1Q
YXJhbWV0ZXJzKQpAQCAtMjA2LDggKzIwNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAg
ICAgICAgQVNTRVJUKCFkKCktPnJlZ2lzdGVyQXJyYXkpOwogCi0gICAgICAgIHNpemVfdCBudW1Q
YXJhbWV0ZXJzTWludXNUaGlzID0gZCgpLT5mdW5jdGlvbkJvZHktPmdlbmVyYXRlZEJ5dGVjb2Rl
KCkubnVtUGFyYW1ldGVycyAtIDE7Ci0gICAgICAgIHNpemVfdCBudW1WYXJzID0gZCgpLT5mdW5j
dGlvbkJvZHktPmdlbmVyYXRlZEJ5dGVjb2RlKCkubnVtVmFyczsKKyAgICAgICAgc2l6ZV90IG51
bVBhcmFtZXRlcnNNaW51c1RoaXMgPSBkKCktPmZ1bmN0aW9uQm9keS0+Z2VuZXJhdGVkQnl0ZWNv
ZGUoKS5tX251bVBhcmFtZXRlcnMgLSAxOworICAgICAgICBzaXplX3QgbnVtVmFycyA9IGQoKS0+
ZnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRlY29kZSgpLm1fbnVtVmFyczsKICAgICAgICAgc2l6
ZV90IG51bUxvY2FscyA9IG51bVZhcnMgKyBudW1QYXJhbWV0ZXJzTWludXNUaGlzOwogCiAgICAg
ICAgIGlmICghbnVtTG9jYWxzKQpJbmRleDogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiAzOTA2
OSkKKysrIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1
LDcgKzk1LDcgQEAgSlNWYWx1ZSogY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeAogICAg
IGludCBsaW5lID0gY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JWUEModlBDLCBkaXZvdFBv
aW50LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICBVU3RyaW5nIG1lc3NhZ2UgPSAiQ2Fu
J3QgZmluZCB2YXJpYWJsZTogIjsKICAgICBtZXNzYWdlLmFwcGVuZChpZGVudC51c3RyaW5nKCkp
OwotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJlZmVyZW5j
ZUVycm9yLCBtZXNzYWdlLCBsaW5lLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlSUQoKSwg
Y29kZUJsb2NrLT5vd25lck5vZGUtPnNvdXJjZVVSTCgpKTsKKyAgICBKU09iamVjdCogZXhjZXB0
aW9uID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVuY2VFcnJvciwgbWVzc2FnZSwgbGluZSwg
Y29kZUJsb2NrLT5vd25lck5vZGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25lck5vZGUo
KS0+c291cmNlVVJMKCkpOwogICAgIGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywg
SWRlbnRpZmllcihleGVjLCBleHByZXNzaW9uQmVnaW5PZmZzZXRQcm9wZXJ0eU5hbWUpLCBqc051
bWJlcihleGVjLCBkaXZvdFBvaW50IC0gc3RhcnRPZmZzZXQpLCBSZWFkT25seSB8IERvbnREZWxl
dGUpOwogICAgIGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgSWRlbnRpZmllcihl
eGVjLCBleHByZXNzaW9uQ2FyZXRPZmZzZXRQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihleGVjLCBk
aXZvdFBvaW50KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKICAgICBleGNlcHRpb24tPnB1dFdp
dGhBdHRyaWJ1dGVzKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhwcmVzc2lvbkVuZE9mZnNldFBy
b3BlcnR5TmFtZSksIGpzTnVtYmVyKGV4ZWMsIGRpdm90UG9pbnQgKyBlbmRPZmZzZXQpLCBSZWFk
T25seSB8IERvbnREZWxldGUpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIGJvb2wgaXNTdHJXaGl0ZVNw
YWNlKFVDaGFyIGMpOwogCiBzdGF0aWMgVVN0cmluZyBjcmVhdGVFcnJvck1lc3NhZ2UoRXhlY1N0
YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50LCBpbnQgZXhwcmVzc2lvblN0YXJ0
LCBpbnQgZXhwcmVzc2lvblN0b3AsIEpTVmFsdWUqIHZhbHVlLCBVU3RyaW5nIGVycm9yKQogewot
ICAgIGlmICghZXhwcmVzc2lvblN0b3AgfHwgZXhwcmVzc2lvblN0YXJ0ID4gY29kZUJsb2NrLT5z
b3VyY2UtPmxlbmd0aCgpKSB7CisgICAgaWYgKCFleHByZXNzaW9uU3RvcCB8fCBleHByZXNzaW9u
U3RhcnQgPiBjb2RlQmxvY2stPnNvdXJjZSgpLT5sZW5ndGgoKSkgewogICAgICAgICBVU3RyaW5n
IGVycm9yVGV4dCA9IHZhbHVlLT50b1N0cmluZyhleGVjKTsKICAgICAgICAgZXJyb3JUZXh0LmFw
cGVuZCgiIGlzICIpOwogICAgICAgICBlcnJvclRleHQuYXBwZW5kKGVycm9yKTsKQEAgLTExNywx
NCArMTE3LDE0IEBAIHN0YXRpYyBVU3RyaW5nIGNyZWF0ZUVycm9yTWVzc2FnZShFeGVjU3QKICAg
ICAKICAgICBpZiAoZXhwcmVzc2lvblN0YXJ0IDwgZXhwcmVzc2lvblN0b3ApIHsKICAgICAgICAg
ZXJyb3JUZXh0LmFwcGVuZCgnXCcnKTsKLSAgICAgICAgZXJyb3JUZXh0LmFwcGVuZChjb2RlQmxv
Y2stPnNvdXJjZS0+Z2V0UmFuZ2UoZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uU3RvcCkpOwor
ICAgICAgICBlcnJvclRleHQuYXBwZW5kKGNvZGVCbG9jay0+c291cmNlKCktPmdldFJhbmdlKGV4
cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvblN0b3ApKTsKICAgICAgICAgZXJyb3JUZXh0LmFwcGVu
ZCgiJyBbIik7CiAgICAgICAgIGVycm9yVGV4dC5hcHBlbmQodmFsdWUtPnRvU3RyaW5nKGV4ZWMp
KTsKICAgICAgICAgZXJyb3JUZXh0LmFwcGVuZCgiXSBpcyAiKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBObyByYW5nZSBpbmZvcm1hdGlvbiwgc28gZ2l2ZSBhIGZldyBjaGFyYWN0ZXJzIG9m
IGNvbnRleHQKLSAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEgPSBjb2RlQmxvY2stPnNvdXJjZS0+
ZGF0YSgpOwotICAgICAgICBpbnQgZGF0YUxlbmd0aCA9IGNvZGVCbG9jay0+c291cmNlLT5sZW5n
dGgoKTsKKyAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEgPSBjb2RlQmxvY2stPnNvdXJjZSgpLT5k
YXRhKCk7CisgICAgICAgIGludCBkYXRhTGVuZ3RoID0gY29kZUJsb2NrLT5zb3VyY2UoKS0+bGVu
Z3RoKCk7CiAgICAgICAgIGludCBzdGFydCA9IGV4cHJlc3Npb25TdGFydDsKICAgICAgICAgaW50
IHN0b3AgPSBleHByZXNzaW9uU3RhcnQ7CiAgICAgICAgIC8vIEdldCB1cCB0byAyMCBjaGFyYWN0
ZXJzIG9mIGNvbnRleHQgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBkaXZvdCwgY2xhbXBp
bmcgdG8gdGhlIGxpbmUuCkBAIC0xMzgsNyArMTM4LDcgQEAgc3RhdGljIFVTdHJpbmcgY3JlYXRl
RXJyb3JNZXNzYWdlKEV4ZWNTdAogICAgICAgICB3aGlsZSAoc3RvcCA+IGV4cHJlc3Npb25TdGFy
dCAmJiBpc1N0cldoaXRlU3BhY2UoZGF0YVtzdG9wXSkpCiAgICAgICAgICAgICBzdG9wLS07CiAg
ICAgICAgIGVycm9yVGV4dC5hcHBlbmQoIm5lYXIgJy4uLiIpOwotICAgICAgICBlcnJvclRleHQu
YXBwZW5kKGNvZGVCbG9jay0+c291cmNlLT5nZXRSYW5nZShzdGFydCwgc3RvcCkpOworICAgICAg
ICBlcnJvclRleHQuYXBwZW5kKGNvZGVCbG9jay0+c291cmNlKCktPmdldFJhbmdlKHN0YXJ0LCBz
dG9wKSk7CiAgICAgICAgIGVycm9yVGV4dC5hcHBlbmQoIi4uLicgWyIpOwogICAgICAgICBlcnJv
clRleHQuYXBwZW5kKHZhbHVlLT50b1N0cmluZyhleGVjKSk7CiAgICAgICAgIGVycm9yVGV4dC5h
cHBlbmQoIl0gaXMgIik7CkBAIC0xNTksNyArMTU5LDcgQEAgSlNPYmplY3QqIGNyZWF0ZUludmFs
aWRQYXJhbUVycm9yKEV4ZWNTdAogICAgIGludCBkaXZvdFBvaW50ID0gMDsKICAgICBpbnQgbGlu
ZSA9IGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yVlBDKHZQQywgZGl2b3RQb2ludCwgc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCk7CiAgICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBjcmVhdGVF
cnJvck1lc3NhZ2UoZXhlYywgY29kZUJsb2NrLCBsaW5lLCBkaXZvdFBvaW50LCBkaXZvdFBvaW50
ICsgZW5kT2Zmc2V0LCB2YWx1ZSwgbWVzc2FnZSk7Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9
IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCBlcnJvck1lc3NhZ2UsIGxpbmUsIGNvZGVC
bG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNl
VVJMKCkpOworICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5
cGVFcnJvciwgZXJyb3JNZXNzYWdlLCBsaW5lLCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3Vy
Y2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VVUkwoKSk7CiAgICAgZXhjZXB0
aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4cHJlc3Npb25C
ZWdpbk9mZnNldFByb3BlcnR5TmFtZSksIGpzTnVtYmVyKGV4ZWMsIGRpdm90UG9pbnQgLSBzdGFy
dE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgZXhjZXB0aW9uLT5wdXRXaXRo
QXR0cmlidXRlcyhleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4cHJlc3Npb25DYXJldE9mZnNldFBy
b3BlcnR5TmFtZSksIGpzTnVtYmVyKGV4ZWMsIGRpdm90UG9pbnQpLCBSZWFkT25seSB8IERvbnRE
ZWxldGUpOwogICAgIGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgSWRlbnRpZmll
cihleGVjLCBleHByZXNzaW9uRW5kT2Zmc2V0UHJvcGVydHlOYW1lKSwganNOdW1iZXIoZXhlYywg
ZGl2b3RQb2ludCArIGVuZE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CkBAIC0xNzUs
MTIgKzE3NSwxMiBAQCBKU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlCiAK
ICAgICAvLyBXZSdyZSBpbiBhICJuZXciIGV4cHJlc3Npb24sIHNvIHdlIG5lZWQgdG8gc2tpcCBv
dmVyIHRoZSAibmV3Li4iIHBhcnQKICAgICBpbnQgc3RhcnRQb2ludCA9IGRpdm90UG9pbnQgLSAo
c3RhcnRPZmZzZXQgPyBzdGFydE9mZnNldCAtIDQgOiAwKTsgLy8gLTQgZm9yICJuZXcgIgotICAg
IGNvbnN0IFVDaGFyKiBkYXRhID0gY29kZUJsb2NrLT5zb3VyY2UtPmRhdGEoKTsKKyAgICBjb25z
dCBVQ2hhciogZGF0YSA9IGNvZGVCbG9jay0+c291cmNlKCktPmRhdGEoKTsKICAgICB3aGlsZSAo
c3RhcnRQb2ludCA8IGRpdm90UG9pbnQgJiYgaXNTdHJXaGl0ZVNwYWNlKGRhdGFbc3RhcnRQb2lu
dF0pKQogICAgICAgICBzdGFydFBvaW50Kys7CiAgICAgCiAgICAgVVN0cmluZyBlcnJvck1lc3Nh
Z2UgPSBjcmVhdGVFcnJvck1lc3NhZ2UoZXhlYywgY29kZUJsb2NrLCBsaW5lLCBzdGFydFBvaW50
LCBkaXZvdFBvaW50LCB2YWx1ZSwgIm5vdCBhIGNvbnN0cnVjdG9yIik7Ci0gICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbiA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCBlcnJvck1lc3NhZ2Us
IGxpbmUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVy
Tm9kZS0+c291cmNlVVJMKCkpOworICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIFR5cGVFcnJvciwgZXJyb3JNZXNzYWdlLCBsaW5lLCBjb2RlQmxvY2stPm93bmVy
Tm9kZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VVUkwoKSk7
CiAgICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IGV4cHJlc3Npb25CZWdpbk9mZnNldFByb3BlcnR5TmFtZSksIGpzTnVtYmVyKGV4ZWMsIGRpdm90
UG9pbnQgLSBzdGFydE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgZXhjZXB0
aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4cHJlc3Npb25D
YXJldE9mZnNldFByb3BlcnR5TmFtZSksIGpzTnVtYmVyKGV4ZWMsIGRpdm90UG9pbnQpLCBSZWFk
T25seSB8IERvbnREZWxldGUpOwogICAgIGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhl
YywgSWRlbnRpZmllcihleGVjLCBleHByZXNzaW9uRW5kT2Zmc2V0UHJvcGVydHlOYW1lKSwganNO
dW1iZXIoZXhlYywgZGl2b3RQb2ludCArIGVuZE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSk7CkBAIC0xOTQsNyArMTk0LDcgQEAgSlNWYWx1ZSogY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3Io
RXhlY1N0YQogICAgIGludCBkaXZvdFBvaW50ID0gMDsKICAgICBpbnQgbGluZSA9IGNvZGVCbG9j
ay0+ZXhwcmVzc2lvblJhbmdlRm9yVlBDKHZQQywgZGl2b3RQb2ludCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCk7CiAgICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBjcmVhdGVFcnJvck1lc3NhZ2Uo
ZXhlYywgY29kZUJsb2NrLCBsaW5lLCBkaXZvdFBvaW50IC0gc3RhcnRPZmZzZXQsIGRpdm90UG9p
bnQsIHZhbHVlLCAibm90IGEgZnVuY3Rpb24iKTsKLSAgICBKU09iamVjdCogZXhjZXB0aW9uID0g
RXJyb3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsIGVycm9yTWVzc2FnZSwgbGluZSwgY29kZUJs
b2NrLT5vd25lck5vZGUtPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VV
UkwoKSk7ICAgIAorICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
IFR5cGVFcnJvciwgZXJyb3JNZXNzYWdlLCBsaW5lLCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5z
b3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VVUkwoKSk7ICAgIAogICAg
IGV4Y2VwdGlvbi0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgSWRlbnRpZmllcihleGVjLCBleHBy
ZXNzaW9uQmVnaW5PZmZzZXRQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihleGVjLCBkaXZvdFBvaW50
IC0gc3RhcnRPZmZzZXQpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgIGV4Y2VwdGlvbi0+
cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgSWRlbnRpZmllcihleGVjLCBleHByZXNzaW9uQ2FyZXRP
ZmZzZXRQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihleGVjLCBkaXZvdFBvaW50KSwgUmVhZE9ubHkg
fCBEb250RGVsZXRlKTsKICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgZXhwcmVzc2lvbkVuZE9mZnNldFByb3BlcnR5TmFtZSksIGpzTnVtYmVy
KGV4ZWMsIGRpdm90UG9pbnQgKyBlbmRPZmZzZXQpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwpA
QCAtMjE4LDcgKzIxOCw3IEBAIEpTT2JqZWN0KiBjcmVhdGVOb3RBbk9iamVjdEVycm9yKEV4ZWNT
dGEKICAgICBpbnQgZGl2b3RQb2ludCA9IDA7CiAgICAgaW50IGxpbmUgPSBjb2RlQmxvY2stPmV4
cHJlc3Npb25SYW5nZUZvclZQQyh2UEMsIGRpdm90UG9pbnQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQpOwogICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gY3JlYXRlRXJyb3JNZXNzYWdlKGV4ZWMs
IGNvZGVCbG9jaywgbGluZSwgZGl2b3RQb2ludCAtIHN0YXJ0T2Zmc2V0LCBkaXZvdFBvaW50LCBl
cnJvci0+aXNOdWxsKCkgPyBqc051bGwoKSA6IGpzVW5kZWZpbmVkKCksICJub3QgYW4gb2JqZWN0
Iik7Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVy
cm9yLCBlcnJvck1lc3NhZ2UsIGxpbmUsIGNvZGVCbG9jay0+b3duZXJOb2RlLT5zb3VyY2VJRCgp
LCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlVVJMKCkpOworICAgIEpTT2JqZWN0KiBleGNl
cHRpb24gPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvciwgZXJyb3JNZXNzYWdlLCBsaW5l
LCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9k
ZSgpLT5zb3VyY2VVUkwoKSk7CiAgICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGV4cHJlc3Npb25CZWdpbk9mZnNldFByb3BlcnR5TmFtZSksIGpz
TnVtYmVyKGV4ZWMsIGRpdm90UG9pbnQgLSBzdGFydE9mZnNldCksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSk7CiAgICAgZXhjZXB0aW9uLT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBJZGVudGlmaWVy
KGV4ZWMsIGV4cHJlc3Npb25DYXJldE9mZnNldFByb3BlcnR5TmFtZSksIGpzTnVtYmVyKGV4ZWMs
IGRpdm90UG9pbnQpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgIGV4Y2VwdGlvbi0+cHV0
V2l0aEF0dHJpYnV0ZXMoZXhlYywgSWRlbnRpZmllcihleGVjLCBleHByZXNzaW9uRW5kT2Zmc2V0
UHJvcGVydHlOYW1lKSwganNOdW1iZXIoZXhlYywgZGl2b3RQb2ludCArIGVuZE9mZnNldCksIFJl
YWRPbmx5IHwgRG9udERlbGV0ZSk7CkluZGV4OiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAzOTA2OSkKKysr
IHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCB2b2lkIEpTQWN0aXZhdGlvbjo6bWFyaygpCiAgICAgaWYgKCFyZWdpc3RlckFycmF5KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgbnVtUGFyYW1ldGVyc01pbnVzVGhpcyA9IGQoKS0+
ZnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRlY29kZSgpLm51bVBhcmFtZXRlcnMgLSAxOworICAg
IHNpemVfdCBudW1QYXJhbWV0ZXJzTWludXNUaGlzID0gZCgpLT5mdW5jdGlvbkJvZHktPmdlbmVy
YXRlZEJ5dGVjb2RlKCkubV9udW1QYXJhbWV0ZXJzIC0gMTsKIAogICAgIHNpemVfdCBpID0gMDsK
ICAgICBzaXplX3QgY291bnQgPSBudW1QYXJhbWV0ZXJzTWludXNUaGlzOyAKQEAgLTY3LDcgKzY3
LDcgQEAgdm9pZCBKU0FjdGl2YXRpb246Om1hcmsoKQogICAgICAgICAgICAgci5tYXJrKCk7CiAg
ICAgfQogCi0gICAgc2l6ZV90IG51bVZhcnMgPSBkKCktPmZ1bmN0aW9uQm9keS0+Z2VuZXJhdGVk
Qnl0ZWNvZGUoKS5udW1WYXJzOworICAgIHNpemVfdCBudW1WYXJzID0gZCgpLT5mdW5jdGlvbkJv
ZHktPmdlbmVyYXRlZEJ5dGVjb2RlKCkubV9udW1WYXJzOwogCiAgICAgLy8gU2tpcCB0aGUgY2Fs
bCBmcmFtZSwgd2hpY2ggc2l0cyBiZXR3ZWVuIHRoZSBwYXJhbWV0ZXJzIGFuZCB2YXJzLgogICAg
IGkgKz0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwpJbmRleDogcnVudGltZS9K
U0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZp
c2lvbiAzOTA2OSkKKysrIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgc3Ry
dWN0IEpTQWN0aXZhdGlvbkRhdGEgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdERhdGEgewogICAg
ICAgICAgICAgSlNBY3RpdmF0aW9uRGF0YShQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1
bmN0aW9uQm9keSwgUmVnaXN0ZXIqIHJlZ2lzdGVycykKLSAgICAgICAgICAgICAgICA6IEpTVmFy
aWFibGVPYmplY3REYXRhKCZmdW5jdGlvbkJvZHktPmdlbmVyYXRlZEJ5dGVjb2RlKCkuc3ltYm9s
VGFibGUsIHJlZ2lzdGVycykKKyAgICAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3REYXRh
KCZmdW5jdGlvbkJvZHktPmdlbmVyYXRlZEJ5dGVjb2RlKCkuc3ltYm9sVGFibGUoKSwgcmVnaXN0
ZXJzKQogICAgICAgICAgICAgICAgICwgZnVuY3Rpb25Cb2R5KGZ1bmN0aW9uQm9keSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgIH0KSW5kZXg6IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAzOTA2
OSkKKysrIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIs
NyArMTEyLDcgQEAgSlNHbG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCgpCiAKICAgICBIYXNo
U2V0PFByb2dyYW1Db2RlQmxvY2sqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29kZUJsb2Nrcygp
LmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxQcm9ncmFtQ29kZUJsb2NrKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gY29kZUJsb2NrcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
KCppdCktPmdsb2JhbE9iamVjdCA9IDA7CisgICAgICAgICgqaXQpLT5jbGVhckdsb2JhbE9iamVj
dCgpOwogICAgICAgICAKICAgICBSZWdpc3RlckZpbGUmIHJlZ2lzdGVyRmlsZSA9IGdsb2JhbERh
dGEoKS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpOwogICAgIGlmIChyZWdpc3RlckZpbGUu
Z2xvYmFsT2JqZWN0KCkgPT0gdGhpcykgewo=
</data>
<flag name="review"
          id="12100"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>