<?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>27102</bug_id>
          
          <creation_ts>2009-07-08 16:53:20 -0700</creation_ts>
          <short_desc>[V8] Move V8GCController functions to their own file</short_desc>
          <delta_ts>2009-07-08 17:16:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130570</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-08 16:53:20 -0700</bug_when>
    <thetext>Phase 2 of V8GCController madness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130574</commentid>
    <comment_count>1</comment_count>
      <attachid>32489</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-08 17:07:13 -0700</bug_when>
    <thetext>Created attachment 32489
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130576</commentid>
    <comment_count>2</comment_count>
      <attachid>32489</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-08 17:09:07 -0700</bug_when>
    <thetext>Comment on attachment 32489
patch

I did not review this for content.  The move looks sane enough.  rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130577</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-08 17:16:13 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Adding         WebCore/bindings/v8/V8GCController.cpp
Adding         WebCore/bindings/v8/V8GCController.h
Sending        WebCore/bindings/v8/V8Proxy.cpp
Sending        WebCore/bindings/v8/V8Proxy.h
Transmitting file data .....
Committed revision 45652.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32489</attachid>
            <date>2009-07-08 17:07:13 -0700</date>
            <delta_ts>2009-07-08 17:09:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>gccontroller-file.patch</filename>
            <type>text/plain</type>
            <size>37236</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTY1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDctMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IE1vdmUgVjhHQ0NvbnRyb2xsZXIgZnVuY3Rpb25zIHRvIHRoZWlyIG93biBmaWxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzEwMgorCisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOEdDQ29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisKIDIwMDktMDct
MDggIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVjhHQ0NvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkRPTU9iamVjdHNJbmNs
dWRlLmgiCisjaW5jbHVkZSAiVjhET01NYXAuaCIKKyNpbmNsdWRlICJWOEluZGV4LmgiCisjaW5j
bHVkZSAiVjhQcm94eS5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHV0aWxp
dHk+CisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx2OC1kZWJ1Zy5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTkRFQlVH
CisvLyBLZWVwcyB0cmFjayBvZiBnbG9iYWwgaGFuZGxlcyBjcmVhdGVkIChub3QgSlMgd3JhcHBl
cnMKKy8vIG9mIERPTSBvYmplY3RzKS4gT2Z0ZW4gdGhlc2UgZ2xvYmFsIGhhbmRsZXMgYXJlIHNv
dXJjZQorLy8gb2YgbGVha3MuCisvLworLy8gSWYgeW91IHdhbnQgdG8gbGV0IGEgQysrIG9iamVj
dCBob2xkIGEgcGVyc2lzdGVudCBoYW5kbGUKKy8vIHRvIGEgSlMgb2JqZWN0LCB5b3Ugc2hvdWxk
IHJlZ2lzdGVyIHRoZSBoYW5kbGUgaGVyZSB0bworLy8ga2VlcCB0cmFjayBvZiBsZWFrcy4KKy8v
CisvLyBXaGVuIGNyZWF0aW5nIGEgcGVyc2lzdGVudCBoYW5kbGUsIGNhbGw6CisvLworLy8gI2lm
bmRlZiBOREVCVUcKKy8vICAgIFY4R0NDb250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZSh0
eXBlLCBob3N0LCBoYW5kbGUpOworLy8gI2VuZGlmCisvLworLy8gV2hlbiByZWxlYXNpbmcgdGhl
IGhhbmRsZSwgY2FsbDoKKy8vCisvLyAjaWZuZGVmIE5ERUJVRworLy8gICAgVjhHQ0NvbnRyb2xs
ZXI6OnVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodHlwZSwgaG9zdCwgaGFuZGxlKTsKKy8vICNlbmRp
ZgorLy8KK3R5cGVkZWYgSGFzaE1hcDx2ODo6VmFsdWUqLCBHbG9iYWxIYW5kbGVJbmZvKj4gR2xv
YmFsSGFuZGxlTWFwOworCitzdGF0aWMgR2xvYmFsSGFuZGxlTWFwJiBnbG9iYWxIYW5kbGVNYXAo
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoR2xvYmFsSGFuZGxlTWFwLCBzdGF0aWNHbG9i
YWxIYW5kbGVNYXAsICgpKTsKKyAgICByZXR1cm4gc3RhdGljR2xvYmFsSGFuZGxlTWFwOworfQor
CisvLyBUaGUgZnVuY3Rpb24gaXMgdGhlIHBsYWNlIHRvIHNldCB0aGUgYnJlYWsgcG9pbnQgdG8g
aW5zcGVjdAorLy8gbGl2ZSBnbG9iYWwgaGFuZGxlcy4gTGVha3MgYXJlIG9mdGVuIGNvbWUgZnJv
bSBsZWFrZWQgZ2xvYmFsIGhhbmRsZXMuCitzdGF0aWMgdm9pZCBlbnVtZXJhdGVHbG9iYWxIYW5k
bGVzKCkKK3sKKyAgICBmb3IgKEdsb2JhbEhhbmRsZU1hcDo6aXRlcmF0b3IgaXQgPSBnbG9iYWxI
YW5kbGVNYXAoKS5iZWdpbigpLCBlbmQgPSBnbG9iYWxIYW5kbGVNYXAoKS5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIEdsb2JhbEhhbmRsZUluZm8qIGluZm8gPSBpdC0+c2Vjb25k
OworICAgICAgICBVTlVTRURfUEFSQU0oaW5mbyk7CisgICAgICAgIHY4OjpWYWx1ZSogaGFuZGxl
ID0gaXQtPmZpcnN0OworICAgICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICB9Cit9CisK
K3ZvaWQgVjhHQ0NvbnRyb2xsZXI6OnJlZ2lzdGVyR2xvYmFsSGFuZGxlKEdsb2JhbEhhbmRsZVR5
cGUgdHlwZSwgdm9pZCogaG9zdCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBoYW5kbGUpCit7
CisgICAgQVNTRVJUKCFnbG9iYWxIYW5kbGVNYXAoKS5jb250YWlucygqaGFuZGxlKSk7CisgICAg
Z2xvYmFsSGFuZGxlTWFwKCkuc2V0KCpoYW5kbGUsIG5ldyBHbG9iYWxIYW5kbGVJbmZvKGhvc3Qs
IHR5cGUpKTsKK30KKwordm9pZCBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhhbmRs
ZSh2b2lkKiBob3N0LCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IGhhbmRsZSkKK3sKKyAgICBB
U1NFUlQoZ2xvYmFsSGFuZGxlTWFwKCkuY29udGFpbnMoKmhhbmRsZSkpOworICAgIEdsb2JhbEhh
bmRsZUluZm8qIGluZm8gPSBnbG9iYWxIYW5kbGVNYXAoKS50YWtlKCpoYW5kbGUpOworICAgIEFT
U0VSVChpbmZvLT5tX2hvc3QgPT0gaG9zdCk7CisgICAgZGVsZXRlIGluZm87Cit9CisjZW5kaWYg
Ly8gaWZuZGVmIE5ERUJVRworCit0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIHY4OjpPYmplY3QqPiBE
T01Ob2RlTWFwOwordHlwZWRlZiBIYXNoTWFwPHZvaWQqLCB2ODo6T2JqZWN0Kj4gRE9NT2JqZWN0
TWFwOworCisjaWZuZGVmIE5ERUJVRworCitzdGF0aWMgdm9pZCBlbnVtZXJhdGVET01PYmplY3RN
YXAoRE9NT2JqZWN0TWFwJiB3cmFwcGVyTWFwKQoreworICAgIGZvciAoRE9NT2JqZWN0TWFwOjpp
dGVyYXRvciBpdCA9IHdyYXBwZXJNYXAuYmVnaW4oKSwgZW5kID0gd3JhcHBlck1hcC5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdy
YXBwZXIoaXQtPnNlY29uZCk7CisgICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0
eXBlID0gVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CisgICAgICAgIHZvaWQqIG9i
amVjdCA9IGl0LT5maXJzdDsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgICAgICBV
TlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICB9Cit9CisKK2NsYXNzIERPTU9iamVjdFZpc2l0b3Ig
OiBwdWJsaWMgRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciB7CitwdWJsaWM6CisgICAgdm9p
ZCB2aXNpdERPTVdyYXBwZXIodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5
cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHR5cGUpOworICAgICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICB9Cit9OworCitj
bGFzcyBFbnN1cmVXZWFrRE9NTm9kZVZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2Rl
Pjo6VmlzaXRvciB7CitwdWJsaWM6CisgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoTm9kZSogb2Jq
ZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKG9iamVjdCk7CisgICAgICAgIEFTU0VSVCh3cmFwcGVyLklzV2VhaygpKTsK
KyAgICB9Cit9OworCisjZW5kaWYgLy8gTkRFQlVHCisKKy8vIEEgbWFwIGZyb20gYSBET00gbm9k
ZSB0byBpdHMgSlMgd3JhcHBlciwgdGhlIHdyYXBwZXIKKy8vIGlzIGtlcHQgYXMgYSBzdHJvbmcg
cmVmZXJlbmNlIHRvIHN1cnZpdmUgR0NzLgorc3RhdGljIERPTU9iamVjdE1hcCYgZ2NQcm90ZWN0
ZWRNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRE9NT2JqZWN0TWFwLCBzdGF0aWNH
Y1Byb3RlY3RlZE1hcCwgKCkpOworICAgIHJldHVybiBzdGF0aWNHY1Byb3RlY3RlZE1hcDsKK30K
Kwordm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NQcm90ZWN0KHZvaWQqIGRvbU9iamVjdCkKK3sKKyAg
ICBpZiAoIWRvbU9iamVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChnY1Byb3RlY3RlZE1h
cCgpLmNvbnRhaW5zKGRvbU9iamVjdCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWdldERP
TU9iamVjdE1hcCgpLmNvbnRhaW5zKGRvbU9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIENyZWF0ZSBhIG5ldyAoc3Ryb25nKSBwZXJzaXN0ZW50IGhhbmRsZSBmb3IgdGhlIG9iamVj
dC4KKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0
TWFwKCkuZ2V0KGRvbU9iamVjdCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBnY1Byb3RlY3RlZE1hcCgpLnNldChkb21PYmplY3QsICp2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKK30KKwordm9pZCBWOEdDQ29udHJv
bGxlcjo6Z2NVbnByb3RlY3Qodm9pZCogZG9tT2JqZWN0KQoreworICAgIGlmICghZG9tT2JqZWN0
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFnY1Byb3RlY3RlZE1hcCgpLmNvbnRhaW5zKGRv
bU9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERpc3Bvc2UgdGhlIHN0cm9uZyBy
ZWZlcmVuY2UuCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcihnY1Byb3Rl
Y3RlZE1hcCgpLnRha2UoZG9tT2JqZWN0KSk7CisgICAgd3JhcHBlci5EaXNwb3NlKCk7Cit9CisK
K2NsYXNzIEdDUHJvbG9ndWVWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZp
c2l0b3IgeworcHVibGljOgorICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKHZvaWQqIG9iamVjdCwg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB7CisgICAgICAgIEFTU0VS
VCh3cmFwcGVyLklzV2VhaygpKTsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisjZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRTogeyAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgTkFNRSogaW1wbCA9IHN0YXRpY19jYXN0PE5BTUUq
PihvYmplY3QpOyAgXAorICAgICAgICAgICAgaWYgKGltcGwtPmhhc1BlbmRpbmdBY3Rpdml0eSgp
KSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHdyYXBwZXIuQ2xlYXJXZWFrKCk7ICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB9CisgICAgQUNUSVZFX0RPTV9PQkpFQ1RfVFlQRVMoTUFL
RV9DQVNFKQorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI3Vu
ZGVmIE1BS0VfQ0FTRQorICAgICAgICB9CisKKyAgICAvLyBBZGRpdGlvbmFsIGhhbmRsaW5nIG9m
IG1lc3NhZ2UgcG9ydCBlbnN1cmluZyB0aGF0IGVudGFuZ2xlZCBwb3J0cyBhbHNvCisgICAgLy8g
aGF2ZSB0aGVpciB3cmFwcGVycyBlbnRhbmdsZWQuIFRoaXMgc2hvdWxkIGlkZWFsbHkgYmUgaGFu
ZGxlZCB3aGVuIHRoZQorICAgIC8vIHBvcnRzIGFyZSBhY3R1YWxseSBlbnRhbmdsZWQgaW4gTWVz
c2FnZVBvcnQ6OmVudGFuZ2xlLCBidXQgdG8gYXZvaWQKKyAgICAvLyBmb3JraW5nIE1lc3NhZ2VQ
b3J0LiogdGhpcyBpcyBwb3N0cG9uZWQgdG8gR0MgdGltZS4gSGF2aW5nIHRoaXMgcG9zdHBvbmVk
CisgICAgLy8gaGFzIHRoZSBkcmF3YmFjayB0aGF0IHRoZSB3cmFwcGVycyBhcmUgImVudGFuZ2xl
ZC91bmVudGFuZ2xlZCIgZm9yIGVhY2gKKyAgICAvLyBHQyBldmVuIHRob3VnaCB0aGVpciBlbnRh
Z2xlbWVudCBtb3N0IGxpa2VseSBpcyBzdGlsbCB0aGUgc2FtZS4KKyAgICBpZiAodHlwZSA9PSBW
OENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JUKSB7CisgICAgICAgIC8vIEdldCB0aGUgcG9ydCBhbmQg
aXRzIGVudGFuZ2xlZCBwb3J0LgorICAgICAgICBNZXNzYWdlUG9ydCogcG9ydDEgPSBzdGF0aWNf
Y2FzdDxNZXNzYWdlUG9ydCo+KG9iamVjdCk7CisgICAgICAgIE1lc3NhZ2VQb3J0KiBwb3J0MiA9
IHBvcnQxLT5sb2NhbGx5RW50YW5nbGVkUG9ydCgpOworCisgICAgICAgIC8vIElmIHdlIGFyZSBy
ZW1vdGVseSBlbnRhbmdsZWQsIHRoZW4gbWFyayB0aGlzIG9iamVjdCBhcyByZWFjaGFibGUKKyAg
ICAgICAgLy8gKHdlIGNhbid0IGRldGVybWluZSByZWFjaGFiaWxpdHkgZGlyZWN0bHkgYXMgdGhl
IHJlbW90ZSBvYmplY3QgaXMKKyAgICAgICAgLy8gb3V0LW9mLXByb2MpLgorICAgICAgICBpZiAo
cG9ydDEtPmlzRW50YW5nbGVkKCkgJiYgIXBvcnQyKQorICAgICAgICAgICAgd3JhcHBlci5DbGVh
cldlYWsoKTsKKworICAgICAgICBpZiAocG9ydDIpIHsKKyAgICAgICAgICAgIC8vIEFzIHBvcnRz
IGFyZSBhbHdheXMgZW50YW5nbGVkIGluIHBhaXJzIG9ubHkgcGVyZm9ybSB0aGUgZW50YW5nbGVt
ZW50CisgICAgICAgICAgICAvLyBvbmNlIGZvciBlYWNoIHBhaXIgKHNlZSBBU1NFUlQgaW4gTWVz
c2FnZVBvcnQ6OnVuZW50YW5nbGUoKSkuCisgICAgICAgICAgICBpZiAocG9ydDEgPCBwb3J0Mikg
eworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3J0MVdyYXBwZXIgPSBW
OFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBwb3J0
MSk7CisgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvcnQyV3JhcHBlciA9
IFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIHBv
cnQyKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocG9ydDFXcmFwcGVyLT5Jc09iamVjdCgpKTsK
KyAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHBvcnQxV3JhcHBl
ciktPlNldEludGVybmFsRmllbGQoVjhDdXN0b206OmtNZXNzYWdlUG9ydEVudGFuZ2xlZFBvcnRJ
bmRleCwgcG9ydDJXcmFwcGVyKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocG9ydDJXcmFwcGVy
LT5Jc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KHBvcnQyV3JhcHBlciktPlNldEludGVybmFsRmllbGQoVjhDdXN0b206OmtNZXNzYWdlUG9y
dEVudGFuZ2xlZFBvcnRJbmRleCwgcG9ydDFXcmFwcGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgd3JhcHBlciBlbnRhbmdsZW1l
bnQgd2hlbiBhIHBvcnQgaXMgbm90IGVudGFuZ2xlZC4KKyAgICAgICAgICAgIGlmIChWOFByb3h5
Ojpkb21PYmplY3RIYXNKU1dyYXBwZXIocG9ydDEpKSB7CisgICAgICAgICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBwb3J0MSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHdy
YXBwZXItPklzT2JqZWN0KCkpOworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3Qod3JhcHBlciktPlNldEludGVybmFsRmllbGQoVjhDdXN0b206OmtNZXNzYWdlUG9y
dEVudGFuZ2xlZFBvcnRJbmRleCwgdjg6OlVuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KK307CisKK2NsYXNzIEdyb3VwZXJJdGVtIHsKK3B1YmxpYzoKKyAg
ICBHcm91cGVySXRlbSh1aW50cHRyX3QgZ3JvdXBJZCwgTm9kZSogbm9kZSwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCisgICAgICAgIDogbV9ncm91cElkKGdyb3VwSWQpCisg
ICAgICAgICwgbV9ub2RlKG5vZGUpCisgICAgICAgICwgbV93cmFwcGVyKHdyYXBwZXIpIAorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgIHVpbnRwdHJfdCBncm91cElkKCkgY29uc3QgeyByZXR1
cm4gbV9ncm91cElkOyB9CisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsg
fQorICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIoKSBjb25zdCB7IHJldHVy
biBtX3dyYXBwZXI7IH0KKworcHJpdmF0ZToKKyAgICB1aW50cHRyX3QgbV9ncm91cElkOworICAg
IE5vZGUqIG1fbm9kZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX3dyYXBwZXI7
Cit9OworCitib29sIG9wZXJhdG9yPChjb25zdCBHcm91cGVySXRlbSYgYSwgY29uc3QgR3JvdXBl
ckl0ZW0mIGIpCit7CisgICAgcmV0dXJuIGEuZ3JvdXBJZCgpIDwgYi5ncm91cElkKCk7Cit9CisK
K3R5cGVkZWYgVmVjdG9yPEdyb3VwZXJJdGVtPiBHcm91cGVyTGlzdDsKKworY2xhc3MgT2JqZWN0
R3JvdXBlclZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciB7Citw
dWJsaWM6CisgICAgT2JqZWN0R3JvdXBlclZpc2l0b3IoKQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IGdyb3VwZXJfLnJlc2VydmVDYXBhY2l0eShub2RlX21hcC5zaXplKCkpOyAgPworICAgIH0K
KworICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIpCisgICAgeworCisgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIGlu
IGRvY3VtZW50LCBwdXQgaXQgaW4gdGhlIG93bmVyRG9jdW1lbnQncyBvYmplY3QgZ3JvdXAuCisg
ICAgICAgIC8vCisgICAgICAgIC8vIElmIGFuIGltYWdlIGVsZW1lbnQgd2FzIGNyZWF0ZWQgYnkg
SmF2YVNjcmlwdCAibmV3IEltYWdlIiwKKyAgICAgICAgLy8gaXQgaXMgbm90IGluIGEgZG9jdW1l
bnQuIEhvd2V2ZXIsIGlmIHRoZSBsb2FkIGV2ZW50IGhhcyBub3QKKyAgICAgICAgLy8gYmVlbiBm
aXJlZCAoc3RpbGwgb25sb2FkaW5nKSwgaXQgaXMgdHJlYXRlZCBhcyBpbiB0aGUgZG9jdW1lbnQu
CisgICAgICAgIC8vCisgICAgICAgIC8vIE90aGVyd2lzZSwgdGhlIG5vZGUgaXMgcHV0IGluIGFu
IG9iamVjdCBncm91cCBpZGVudGlmaWVkIGJ5IHRoZSByb290CisgICAgICAgIC8vIGVsZW1lbnQg
b2YgdGhlIHRyZWUgdG8gd2hpY2ggaXQgYmVsb25ncy4KKyAgICAgICAgdWludHB0cl90IGdyb3Vw
SWQ7CisgICAgICAgIGlmIChub2RlLT5pbkRvY3VtZW50KCkgfHwgKG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjppbWdUYWcpICYmICFzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4obm9k
ZSktPmhhdmVGaXJlZExvYWRFdmVudCgpKSkKKyAgICAgICAgICAgIGdyb3VwSWQgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgTm9kZSogcm9vdCA9IG5vZGU7CisgICAgICAgICAgICB3aGlsZSAocm9vdC0+
cGFyZW50KCkpCisgICAgICAgICAgICAgICAgcm9vdCA9IHJvb3QtPnBhcmVudCgpOworCisgICAg
ICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBhbG9uZSBpbiBpdHMgRE9NIHRyZWUgKGRvZXNuJ3Qg
aGF2ZSBhIHBhcmVudCBvciBhbnkKKyAgICAgICAgICAgIC8vIGNoaWxkcmVuKSB0aGVuIHRoZSBn
cm91cCB3aWxsIGJlIGZpbHRlcmVkIG91dCBsYXRlciBhbnl3YXkuCisgICAgICAgICAgICBpZiAo
cm9vdCA9PSBub2RlICYmICFub2RlLT5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBncm91cElkID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHJvb3QpOworICAgICAgICB9CisgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0
ZW0oZ3JvdXBJZCwgbm9kZSwgd3JhcHBlcikpOworICAgIH0KKworICAgIHZvaWQgYXBwbHlHcm91
cGluZygpCisgICAgeworICAgICAgICAvLyBHcm91cCBieSBzb3J0aW5nIGJ5IHRoZSBncm91cCBp
ZC4KKyAgICAgICAgc3RkOjpzb3J0KG1fZ3JvdXBlci5iZWdpbigpLCBtX2dyb3VwZXIuZW5kKCkp
OworCisgICAgICAgIC8vIEZJWE1FIFNob3VsZCBwcm9iYWJseSB3b3JrIGluIGl0ZXJhdG9ycyBo
ZXJlLCBidXQgaW5kZXhlcyB3ZXJlIGVhc2llciBmb3IgbXkgc2ltcGxlIG1pbmQuCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncm91cGVyLnNpemUoKTsgKSB7CisgICAgICAgICAg
ICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBvZiB0aGUgbGlzdCkuCisgICAg
ICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gbV9ncm91cGVyLnNpemUoKTsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgbV9ncm91cGVyLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JvdXBlcltpXS5ncm91cElkKCkgIT0gbV9ncm91cGVyW2pdLmdy
b3VwSWQoKSkgeworICAgICAgICAgICAgICAgICAgICBuZXh0S2V5SW5kZXggPSBqOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEFTU0VSVChuZXh0S2V5SW5kZXggPiBpKTsKKworICAgICAgICAgICAgLy8g
V2Ugb25seSBjYXJlIGFib3V0IGEgZ3JvdXAgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgb2JqZWN0
LiBJZiBpdCBvbmx5CisgICAgICAgICAgICAvLyBoYXMgb25lIG9iamVjdCwgaXQgaGFzIG5vdGhp
bmcgZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUuCisgICAgICAgICAgICBpZiAobmV4
dEtleUluZGV4IC0gaSA8PSAxKSB7CisgICAgICAgICAgICAgICAgaSA9IG5leHRLZXlJbmRleDsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
VmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBncm91cDsKKyAgICAgICAgICAgIGdy
b3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsKKyAgICAgICAgICAgIGZvciAo
OyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9ncm91cGVyW2ldLm5vZGUoKTsKKyAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
VmFsdWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0ud3JhcHBlcigpOworICAgICAgICAgICAgICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVu
ZCh3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICAvKiBGSVhNRTogUmUtZW5hYmxlZCB0aGlzIGNv
ZGUgdG8gYXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBlcnMhCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEN1cnJlbnRseSB0aGlzIGRlcGVuZHMgb24gbG9va2luZyB1cCB0aGUgd3JhcHBlcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBHQywgYnV0IHdlIGRvbid0IGtu
b3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Un
cmUgaW4sIHNvIGl0J3MgdW5jbGVhciB3aGljaCBtYXAgdG8gbG9vayBpbi4uLgorCisgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgc3R5bGVkIGFuZCB0aGVyZSBpcyBhIHdyYXBwZXIg
Zm9yIHRoZSBpbmxpbmUKKyAgICAgICAgICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbiwgd2Ug
bmVlZCB0byBrZWVwIHRoYXQgc3R5bGUgZGVjbGFyYXRpb24KKyAgICAgICAgICAgICAgICAvLyB3
cmFwcGVyIGFsaXZlIGFzIHdlbGwsIHNvIHdlIGFkZCBpdCB0byB0aGUgb2JqZWN0IGdyb3VwLgor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgICAgU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICAgICAgICAgIGlm
IChzdHlsZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBnZXRET01P
YmplY3RNYXAoKS5nZXQoc3R5bGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIu
SXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsK
KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGdyb3VwLnNpemUoKSA+IDEpCisg
ICAgICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RHcm91cCgmZ3JvdXBbMF0sIGdyb3VwLnNp
emUoKSk7CisKKyAgICAgICAgICAgIEFTU0VSVChpID09IG5leHRLZXlJbmRleCk7CisgICAgICAg
IH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JvdXBlckxpc3QgbV9ncm91cGVyOworfTsKKwor
Ly8gQ3JlYXRlIG9iamVjdCBncm91cHMgZm9yIERPTSB0cmVlIG5vZGVzLgordm9pZCBWOEdDQ29u
dHJvbGxlcjo6Z2NQcm9sb2d1ZSgpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworCisj
aWZuZGVmIE5ERUJVRworICAgIERPTU9iamVjdFZpc2l0b3IgZG9tT2JqZWN0VmlzaXRvcjsKKyAg
ICB2aXNpdERPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJmRvbU9iamVjdFZpc2l0b3IpOworI2Vu
ZGlmCisKKyAgICAvLyBSdW4gdGhyb3VnaCBhbGwgb2JqZWN0cyB3aXRoIHBvc3NpYmxlIHBlbmRp
bmcgYWN0aXZpdHkgbWFraW5nIHRoZWlyCisgICAgLy8gd3JhcHBlcnMgbm9uIHdlYWsgaWYgdGhl
cmUgaXMgcGVuZGluZyBhY3Rpdml0eS4KKyAgICBHQ1Byb2xvZ3VlVmlzaXRvciBwcm9sb2d1ZVZp
c2l0b3I7CisgICAgdmlzaXRBY3RpdmVET01PYmplY3RzSW5DdXJyZW50VGhyZWFkKCZwcm9sb2d1
ZVZpc2l0b3IpOworCisgICAgLy8gQ3JlYXRlIG9iamVjdCBncm91cHMuCisgICAgT2JqZWN0R3Jv
dXBlclZpc2l0b3Igb2JqZWN0R3JvdXBlclZpc2l0b3I7CisgICAgdmlzaXRET01Ob2Rlc0luQ3Vy
cmVudFRocmVhZCgmb2JqZWN0R3JvdXBlclZpc2l0b3IpOworICAgIG9iamVjdEdyb3VwZXJWaXNp
dG9yLmFwcGx5R3JvdXBpbmcoKTsKK30KKworY2xhc3MgR0NFcGlsb2d1ZVZpc2l0b3IgOiBwdWJs
aWMgRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciB7CitwdWJsaWM6CisgICAgdm9pZCB2aXNp
dERPTVdyYXBwZXIodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFw
cGVyKQorICAgIHsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBW
OFByb3h5Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisjZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOiB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBOQU1FKiBpbXBsID0g
c3RhdGljX2Nhc3Q8TkFNRSo+KG9iamVjdCk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
IGlmIChpbXBsLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBBU1NFUlQoIXdyYXBwZXIuSXNXZWFrKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsoaW1wbCwgJndl
YWtBY3RpdmVET01PYmplY3RDYWxsYmFjayk7ICAgXAorICAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgfQorQUNUSVZFX0RPTV9PQkpFQ1RfVFlQRVMoTUFLRV9DQVNFKQorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjdW5kZWYgTUFL
RV9DQVNFCisgICAgfQorfQorfTsKKwordm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NFcGlsb2d1ZSgp
Cit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworCisgICAgLy8gUnVuIHRocm91Z2ggYWxs
IG9iamVjdHMgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IG1ha2luZyB0aGVpciB3cmFwcGVycyB3ZWFr
CisgICAgLy8gYWdhaW4uCisgICAgR0NFcGlsb2d1ZVZpc2l0b3IgZXBpbG9ndWVWaXNpdG9yOwor
ICAgIHZpc2l0QWN0aXZlRE9NT2JqZWN0c0luQ3VycmVudFRocmVhZCgmZXBpbG9ndWVWaXNpdG9y
KTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBDaGVjayBhbGwgc3Vydml2YWxzIGFyZSB3ZWFr
LgorICAgIERPTU9iamVjdFZpc2l0b3IgZG9tT2JqZWN0VmlzaXRvcjsKKyAgICB2aXNpdERPTU9i
amVjdHNJbkN1cnJlbnRUaHJlYWQoJmRvbU9iamVjdFZpc2l0b3IpOworCisgICAgRW5zdXJlV2Vh
a0RPTU5vZGVWaXNpdG9yIHdlYWtET01Ob2RlVmlzaXRvcjsKKyAgICB2aXNpdERPTU5vZGVzSW5D
dXJyZW50VGhyZWFkKCZ3ZWFrRE9NTm9kZVZpc2l0b3IpOworCisgICAgZW51bWVyYXRlRE9NT2Jq
ZWN0TWFwKGdjUHJvdGVjdGVkTWFwKCkpOworICAgIGVudW1lcmF0ZUdsb2JhbEhhbmRsZXMoKTsK
KyNlbmRpZgorfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEdDQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhHQ0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhHQ0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
VjhHQ0NvbnRyb2xsZXJfaAorI2RlZmluZSBWOEdDQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDx2
OC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTkRFQlVHCisKKyNkZWZpbmUg
R2xvYmFsSGFuZGxlVHlwZUxpc3QoVikgICBcCisgICAgVihQUk9YWSkgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIFYoTlBPQkpFQ1QpICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKFNDSEVE
VUxFRF9BQ1RJT04pICAgICAgICAgICBcCisgICAgVihFVkVOVF9MSVNURU5FUikgICAgICAgICAg
ICAgXAorICAgIFYoTk9ERV9GSUxURVIpICAgICAgICAgICAgICAgIFwKKyAgICBWKFNDUklQVElO
U1RBTkNFKSAgICAgICAgICAgICBcCisgICAgVihTQ1JJUFRWQUxVRSkKKworCisgICAgLy8gSG9z
dCBpbmZvcm1hdGlvbiBvZiBwZXJzaXN0ZW50IGhhbmRsZXMuCisgICAgZW51bSBHbG9iYWxIYW5k
bGVUeXBlIHsKKyNkZWZpbmUgRU5VTShuYW1lKSBuYW1lLAorICAgICAgICBHbG9iYWxIYW5kbGVU
eXBlTGlzdChFTlVNKQorI3VuZGVmIEVOVU0KKyAgICB9OworCisgICAgY2xhc3MgR2xvYmFsSGFu
ZGxlSW5mbyB7CisgICAgcHVibGljOgorICAgICAgICBHbG9iYWxIYW5kbGVJbmZvKHZvaWQqIGhv
c3QsIEdsb2JhbEhhbmRsZVR5cGUgdHlwZSkgOiBtX2hvc3QoaG9zdCksIG1fdHlwZSh0eXBlKSB7
IH0KKyAgICAgICAgdm9pZCogbV9ob3N0OworICAgICAgICBHbG9iYWxIYW5kbGVUeXBlIG1fdHlw
ZTsKKyAgICB9OworCisjZW5kaWYgLy8gTkRFQlVHCisKKyAgICBjbGFzcyBWOEdDQ29udHJvbGxl
ciB7CisgICAgcHVibGljOgorICAgICAgICAvLyBQcm90ZWN0L1VucHJvdGVjdCBKUyB3cmFwcGVy
cyBvZiBhIERPTSBvYmplY3QuCisgICAgICAgIHN0YXRpYyB2b2lkIGdjUHJvdGVjdCh2b2lkKiBk
b21PYmplY3QpOworICAgICAgICBzdGF0aWMgdm9pZCBnY1VucHJvdGVjdCh2b2lkKiBkb21PYmpl
Y3QpOworCisjaWZuZGVmIE5ERUJVRworICAgICAgICAvLyBGb3IgZGVidWdnaW5nIGFuZCBsZWFr
IGRldGVjdGlvbiBwdXJwb3NlLgorICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlckdsb2JhbEhh
bmRsZShHbG9iYWxIYW5kbGVUeXBlLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPik7
CisgICAgICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodm9pZCosIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpWYWx1ZT4pOworI2VuZGlmCisKKyAgICAgICAgc3RhdGljIHZvaWQgZ2NQ
cm9sb2d1ZSgpOworICAgICAgICBzdGF0aWMgdm9pZCBnY0VwaWxvZ3VlKCk7CisgICAgfTsKKwor
fQorCisjZW5kaWYgLy8gVjhHQ0NvbnRyb2xsZXJfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
eGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAkocmV2aXNpb24g
NDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw2NiArNjUsNiBAQCBWOEV4dGVuc2lvbkxpc3QgVjhQcm94eTo6bV9leHRlbnNpb25z
OwogY29uc3QgY2hhciogVjhQcm94eTo6a0NvbnRleHREZWJ1Z0RhdGFUeXBlID0gInR5cGUiOwog
Y29uc3QgY2hhciogVjhQcm94eTo6a0NvbnRleHREZWJ1Z0RhdGFWYWx1ZSA9ICJ2YWx1ZSI7CiAK
LS8vIEJlZ2luIFY4R0NDb250cm9sbGVyLmNwcAotCi0jaWZuZGVmIE5ERUJVRwotLy8gS2VlcHMg
dHJhY2sgb2YgZ2xvYmFsIGhhbmRsZXMgY3JlYXRlZCAobm90IEpTIHdyYXBwZXJzCi0vLyBvZiBE
T00gb2JqZWN0cykuIE9mdGVuIHRoZXNlIGdsb2JhbCBoYW5kbGVzIGFyZSBzb3VyY2UKLS8vIG9m
IGxlYWtzLgotLy8KLS8vIElmIHlvdSB3YW50IHRvIGxldCBhIEMrKyBvYmplY3QgaG9sZCBhIHBl
cnNpc3RlbnQgaGFuZGxlCi0vLyB0byBhIEpTIG9iamVjdCwgeW91IHNob3VsZCByZWdpc3RlciB0
aGUgaGFuZGxlIGhlcmUgdG8KLS8vIGtlZXAgdHJhY2sgb2YgbGVha3MuCi0vLwotLy8gV2hlbiBj
cmVhdGluZyBhIHBlcnNpc3RlbnQgaGFuZGxlLCBjYWxsOgotLy8KLS8vICNpZm5kZWYgTkRFQlVH
Ci0vLyAgICBWOEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJHbG9iYWxIYW5kbGUodHlwZSwgaG9zdCwg
aGFuZGxlKTsKLS8vICNlbmRpZgotLy8KLS8vIFdoZW4gcmVsZWFzaW5nIHRoZSBoYW5kbGUsIGNh
bGw6Ci0vLwotLy8gI2lmbmRlZiBOREVCVUcKLS8vICAgIFY4R0NDb250cm9sbGVyOjp1bnJlZ2lz
dGVyR2xvYmFsSGFuZGxlKHR5cGUsIGhvc3QsIGhhbmRsZSk7Ci0vLyAjZW5kaWYKLS8vCi10eXBl
ZGVmIEhhc2hNYXA8djg6OlZhbHVlKiwgR2xvYmFsSGFuZGxlSW5mbyo+IEdsb2JhbEhhbmRsZU1h
cDsKLQotc3RhdGljIEdsb2JhbEhhbmRsZU1hcCYgZ2xvYmFsSGFuZGxlTWFwKCkKLXsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEdsb2JhbEhhbmRsZU1hcCwgc3RhdGljR2xvYmFsSGFuZGxlTWFw
LCAoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY0dsb2JhbEhhbmRsZU1hcDsKLX0KLQotLy8gVGhlIGZ1
bmN0aW9uIGlzIHRoZSBwbGFjZSB0byBzZXQgdGhlIGJyZWFrIHBvaW50IHRvIGluc3BlY3QKLS8v
IGxpdmUgZ2xvYmFsIGhhbmRsZXMuIExlYWtzIGFyZSBvZnRlbiBjb21lIGZyb20gbGVha2VkIGds
b2JhbCBoYW5kbGVzLgotc3RhdGljIHZvaWQgZW51bWVyYXRlR2xvYmFsSGFuZGxlcygpCi17Ci0g
ICAgZm9yIChHbG9iYWxIYW5kbGVNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xvYmFsSGFuZGxlTWFwKCku
YmVnaW4oKSwgZW5kID0gZ2xvYmFsSGFuZGxlTWFwKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBHbG9iYWxIYW5kbGVJbmZvKiBpbmZvID0gaXQtPnNlY29uZDsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKGluZm8pOwotICAgICAgICB2ODo6VmFsdWUqIGhhbmRsZSA9IGl0LT5maXJz
dDsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7Ci0gICAgfQotfQotCi12b2lkIFY4R0ND
b250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShHbG9iYWxIYW5kbGVUeXBlIHR5cGUsIHZv
aWQqIGhvc3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gaGFuZGxlKQotewotICAgIEFTU0VS
VCghZ2xvYmFsSGFuZGxlTWFwKCkuY29udGFpbnMoKmhhbmRsZSkpOwotICAgIGdsb2JhbEhhbmRs
ZU1hcCgpLnNldCgqaGFuZGxlLCBuZXcgR2xvYmFsSGFuZGxlSW5mbyhob3N0LCB0eXBlKSk7Ci19
Ci0KLXZvaWQgVjhHQ0NvbnRyb2xsZXI6OnVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodm9pZCogaG9z
dCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBoYW5kbGUpCi17Ci0gICAgQVNTRVJUKGdsb2Jh
bEhhbmRsZU1hcCgpLmNvbnRhaW5zKCpoYW5kbGUpKTsKLSAgICBHbG9iYWxIYW5kbGVJbmZvKiBp
bmZvID0gZ2xvYmFsSGFuZGxlTWFwKCkudGFrZSgqaGFuZGxlKTsKLSAgICBBU1NFUlQoaW5mby0+
bV9ob3N0ID09IGhvc3QpOwotICAgIGRlbGV0ZSBpbmZvOwotfQotI2VuZGlmIC8vIGlmbmRlZiBO
REVCVUcKLQotLy8gRW5kIFY4R0NDb250cm9sbGVyLmNwcAotCiB2b2lkIGJhdGNoQ29uZmlndXJl
QXR0cmlidXRlcyh2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2UsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90bywgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSog
YXR0cmlidXRlcywgc2l6ZV90IGF0dHJpYnV0ZUNvdW50KQogewogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgewpAQCAtMTUwLDQ5ICs5MCw2IEBAIHZvaWQg
YmF0Y2hDb25maWd1cmVDb25zdGFudHModjg6OkhhbmRsZTwKIHR5cGVkZWYgSGFzaE1hcDxOb2Rl
Kiwgdjg6Ok9iamVjdCo+IERPTU5vZGVNYXA7CiB0eXBlZGVmIEhhc2hNYXA8dm9pZCosIHY4OjpP
YmplY3QqPiBET01PYmplY3RNYXA7CiAKLSNpZm5kZWYgTkRFQlVHCi0KLXN0YXRpYyB2b2lkIGVu
dW1lcmF0ZURPTU9iamVjdE1hcChET01PYmplY3RNYXAmIHdyYXBwZXJNYXApCi17Ci0gICAgZm9y
IChET01PYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gd3JhcHBlck1hcC5iZWdpbigpLCBlbmQgPSB3
cmFwcGVyTWFwLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4gd3JhcHBlcihpdC0+c2Vjb25kKTsKLSAgICAgICAgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsK
LSAgICAgICAgdm9pZCogb2JqZWN0ID0gaXQtPmZpcnN0OwotICAgICAgICBVTlVTRURfUEFSQU0o
dHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwotICAgIH0KLX0KLQotc3RhdGlj
IHZvaWQgZW51bWVyYXRlRE9NTm9kZU1hcChET01Ob2RlTWFwJiBub2RlTWFwKQotewotICAgIGZv
ciAoRE9NTm9kZU1hcDo6aXRlcmF0b3IgaXQgPSBub2RlTWFwLmJlZ2luKCksIGVuZCA9IG5vZGVN
YXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOb2RlKiBub2RlID0gaXQtPmZp
cnN0OwotICAgICAgICBVTlVTRURfUEFSQU0obm9kZSk7Ci0gICAgICAgIEFTU0VSVCh2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PihpdC0+c2Vjb25kKS5Jc1dlYWsoKSk7Ci0gICAgfQotfQotCi1j
bGFzcyBET01PYmplY3RWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0
b3IgewotcHVibGljOgotICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKHZvaWQqIG9iamVjdCwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKLSAgICB7Ci0gICAgICAgIFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUod3JhcHBl
cik7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9i
amVjdCk7Ci0gICAgfQotfTsKLQotY2xhc3MgRW5zdXJlV2Vha0RPTU5vZGVWaXNpdG9yIDogcHVi
bGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IgewotcHVibGljOgotICAgIHZvaWQgdmlz
aXRET01XcmFwcGVyKE5vZGUqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3Jh
cHBlcikKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwotICAgICAgICBBU1NF
UlQod3JhcHBlci5Jc1dlYWsoKSk7Ci0gICAgfQotfTsKLQotI2VuZGlmIC8vIE5ERUJVRwotCiAj
aWYgRU5BQkxFKFNWRykKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFByb3h5Ojpjb252ZXJ0U1ZH
RWxlbWVudEluc3RhbmNlVG9WOE9iamVjdChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlKQog
ewpAQCAtMjgzLDI5OCArMTgwLDYgQEAgU1ZHRWxlbWVudCogVjhQcm94eTo6c3ZnQ29udGV4dCh2
b2lkKiBvYgogCiAjZW5kaWYKIAotLy8gQmVnaW4gVjhHQ0NvbnRyb2xsZXIuY3BwCi0KLS8vIEEg
bWFwIGZyb20gYSBET00gbm9kZSB0byBpdHMgSlMgd3JhcHBlciwgdGhlIHdyYXBwZXIKLS8vIGlz
IGtlcHQgYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHN1cnZpdmUgR0NzLgotc3RhdGljIERPTU9i
amVjdE1hcCYgZ2NQcm90ZWN0ZWRNYXAoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRE9N
T2JqZWN0TWFwLCBzdGF0aWNHY1Byb3RlY3RlZE1hcCwgKCkpOwotICAgIHJldHVybiBzdGF0aWNH
Y1Byb3RlY3RlZE1hcDsKLX0KLQotdm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NQcm90ZWN0KHZvaWQq
IGRvbU9iamVjdCkKLXsKLSAgICBpZiAoIWRvbU9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChnY1Byb3RlY3RlZE1hcCgpLmNvbnRhaW5zKGRvbU9iamVjdCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIWdldERPTU9iamVjdE1hcCgpLmNvbnRhaW5zKGRvbU9iamVjdCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIENyZWF0ZSBhIG5ldyAoc3Ryb25nKSBwZXJzaXN0ZW50IGhh
bmRsZSBmb3IgdGhlIG9iamVjdC4KLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGRvbU9iamVjdCk7Ci0gICAgaWYgKHdyYXBwZXIu
SXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnY1Byb3RlY3RlZE1hcCgpLnNldChk
b21PYmplY3QsICp2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKLX0K
LQotdm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NVbnByb3RlY3Qodm9pZCogZG9tT2JqZWN0KQotewot
ICAgIGlmICghZG9tT2JqZWN0KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFnY1Byb3RlY3Rl
ZE1hcCgpLmNvbnRhaW5zKGRvbU9iamVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERp
c3Bvc2UgdGhlIHN0cm9uZyByZWZlcmVuY2UuCi0gICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gd3JhcHBlcihnY1Byb3RlY3RlZE1hcCgpLnRha2UoZG9tT2JqZWN0KSk7Ci0gICAgd3JhcHBl
ci5EaXNwb3NlKCk7Ci19Ci0KLWNsYXNzIEdDUHJvbG9ndWVWaXNpdG9yIDogcHVibGljIERPTVdy
YXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgewotcHVibGljOgotICAgIHZvaWQgdmlzaXRET01XcmFw
cGVyKHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCh3cmFwcGVyLklzV2VhaygpKTsKLSAgICAgICAgVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVy
KTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1F
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjYXNlIFY4Q2xhc3NJbmRl
eDo6VFlQRTogeyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTkFNRSogaW1wbCA9
IHN0YXRpY19jYXN0PE5BTUUqPihvYmplY3QpOyAgXAotICAgICAgICAgICAgaWYgKGltcGwtPmhh
c1BlbmRpbmdBY3Rpdml0eSgpKSAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHdyYXBwZXIu
Q2xlYXJXZWFrKCk7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9Ci0gICAgQUNUSVZFX0RP
TV9PQkpFQ1RfVFlQRVMoTUFLRV9DQVNFKQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotI3VuZGVmIE1BS0VfQ0FTRQotICAgICAgICB9Ci0KLSAgICAvLyBBZGRp
dGlvbmFsIGhhbmRsaW5nIG9mIG1lc3NhZ2UgcG9ydCBlbnN1cmluZyB0aGF0IGVudGFuZ2xlZCBw
b3J0cyBhbHNvCi0gICAgLy8gaGF2ZSB0aGVpciB3cmFwcGVycyBlbnRhbmdsZWQuIFRoaXMgc2hv
dWxkIGlkZWFsbHkgYmUgaGFuZGxlZCB3aGVuIHRoZQotICAgIC8vIHBvcnRzIGFyZSBhY3R1YWxs
eSBlbnRhbmdsZWQgaW4gTWVzc2FnZVBvcnQ6OmVudGFuZ2xlLCBidXQgdG8gYXZvaWQKLSAgICAv
LyBmb3JraW5nIE1lc3NhZ2VQb3J0LiogdGhpcyBpcyBwb3N0cG9uZWQgdG8gR0MgdGltZS4gSGF2
aW5nIHRoaXMgcG9zdHBvbmVkCi0gICAgLy8gaGFzIHRoZSBkcmF3YmFjayB0aGF0IHRoZSB3cmFw
cGVycyBhcmUgImVudGFuZ2xlZC91bmVudGFuZ2xlZCIgZm9yIGVhY2gKLSAgICAvLyBHQyBldmVu
IHRob3VnaCB0aGVpciBlbnRhZ2xlbWVudCBtb3N0IGxpa2VseSBpcyBzdGlsbCB0aGUgc2FtZS4K
LSAgICBpZiAodHlwZSA9PSBWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JUKSB7Ci0gICAgICAgIC8v
IEdldCB0aGUgcG9ydCBhbmQgaXRzIGVudGFuZ2xlZCBwb3J0LgotICAgICAgICBNZXNzYWdlUG9y
dCogcG9ydDEgPSBzdGF0aWNfY2FzdDxNZXNzYWdlUG9ydCo+KG9iamVjdCk7Ci0gICAgICAgIE1l
c3NhZ2VQb3J0KiBwb3J0MiA9IHBvcnQxLT5sb2NhbGx5RW50YW5nbGVkUG9ydCgpOwotCi0gICAg
ICAgIC8vIElmIHdlIGFyZSByZW1vdGVseSBlbnRhbmdsZWQsIHRoZW4gbWFyayB0aGlzIG9iamVj
dCBhcyByZWFjaGFibGUKLSAgICAgICAgLy8gKHdlIGNhbid0IGRldGVybWluZSByZWFjaGFiaWxp
dHkgZGlyZWN0bHkgYXMgdGhlIHJlbW90ZSBvYmplY3QgaXMKLSAgICAgICAgLy8gb3V0LW9mLXBy
b2MpLgotICAgICAgICBpZiAocG9ydDEtPmlzRW50YW5nbGVkKCkgJiYgIXBvcnQyKQotICAgICAg
ICAgICAgd3JhcHBlci5DbGVhcldlYWsoKTsKLQotICAgICAgICBpZiAocG9ydDIpIHsKLSAgICAg
ICAgICAgIC8vIEFzIHBvcnRzIGFyZSBhbHdheXMgZW50YW5nbGVkIGluIHBhaXJzIG9ubHkgcGVy
Zm9ybSB0aGUgZW50YW5nbGVtZW50Ci0gICAgICAgICAgICAvLyBvbmNlIGZvciBlYWNoIHBhaXIg
KHNlZSBBU1NFUlQgaW4gTWVzc2FnZVBvcnQ6OnVuZW50YW5nbGUoKSkuCi0gICAgICAgICAgICBp
ZiAocG9ydDEgPCBwb3J0MikgewotICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBwb3J0MVdyYXBwZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
Ok1FU1NBR0VQT1JULCBwb3J0MSk7Ci0gICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHBvcnQyV3JhcHBlciA9IFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6TUVTU0FHRVBPUlQsIHBvcnQyKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocG9ydDFXcmFw
cGVyLT5Jc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KHBvcnQxV3JhcHBlciktPlNldEludGVybmFsRmllbGQoVjhDdXN0b206OmtNZXNzYWdl
UG9ydEVudGFuZ2xlZFBvcnRJbmRleCwgcG9ydDJXcmFwcGVyKTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQocG9ydDJXcmFwcGVyLT5Jc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHBvcnQyV3JhcHBlciktPlNldEludGVybmFsRmllbGQoVjhD
dXN0b206OmtNZXNzYWdlUG9ydEVudGFuZ2xlZFBvcnRJbmRleCwgcG9ydDFXcmFwcGVyKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUg
d3JhcHBlciBlbnRhbmdsZW1lbnQgd2hlbiBhIHBvcnQgaXMgbm90IGVudGFuZ2xlZC4KLSAgICAg
ICAgICAgIGlmIChWOFByb3h5Ojpkb21PYmplY3RIYXNKU1dyYXBwZXIocG9ydDEpKSB7Ci0gICAg
ICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBWOFByb3h5Ojpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBwb3J0MSk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHdyYXBwZXItPklzT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlciktPlNldEludGVybmFsRmllbGQoVjhD
dXN0b206OmtNZXNzYWdlUG9ydEVudGFuZ2xlZFBvcnRJbmRleCwgdjg6OlVuZGVmaW5lZCgpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLX07Ci0KLWNsYXNzIEdyb3VwZXJJ
dGVtIHsKLXB1YmxpYzoKLSAgICBHcm91cGVySXRlbSh1aW50cHRyX3QgZ3JvdXBJZCwgTm9kZSog
bm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikgCi0gICAgICAgIDogbV9n
cm91cElkKGdyb3VwSWQpCi0gICAgICAgICwgbV9ub2RlKG5vZGUpCi0gICAgICAgICwgbV93cmFw
cGVyKHdyYXBwZXIpIAotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgIHVpbnRwdHJfdCBncm91
cElkKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cElkOyB9Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZTsgfQotICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBw
ZXIoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXI7IH0KLQotcHJpdmF0ZToKLSAgICB1aW50cHRy
X3QgbV9ncm91cElkOwotICAgIE5vZGUqIG1fbm9kZTsKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiBtX3dyYXBwZXI7Ci19OwotCi1ib29sIG9wZXJhdG9yPChjb25zdCBHcm91cGVySXRl
bSYgYSwgY29uc3QgR3JvdXBlckl0ZW0mIGIpCi17Ci0gICAgcmV0dXJuIGEuZ3JvdXBJZCgpIDwg
Yi5ncm91cElkKCk7Ci19Ci0KLXR5cGVkZWYgVmVjdG9yPEdyb3VwZXJJdGVtPiBHcm91cGVyTGlz
dDsKLQotY2xhc3MgT2JqZWN0R3JvdXBlclZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxO
b2RlPjo6VmlzaXRvciB7Ci1wdWJsaWM6Ci0gICAgT2JqZWN0R3JvdXBlclZpc2l0b3IoKQotICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IGdyb3VwZXJfLnJlc2VydmVDYXBhY2l0eShub2RlX21hcC5z
aXplKCkpOyAgPwotICAgIH0KLQotICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKE5vZGUqIG5vZGUs
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCi0gICAgewotCi0gICAgICAgIC8v
IElmIHRoZSBub2RlIGlzIGluIGRvY3VtZW50LCBwdXQgaXQgaW4gdGhlIG93bmVyRG9jdW1lbnQn
cyBvYmplY3QgZ3JvdXAuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIGFuIGltYWdlIGVsZW1l
bnQgd2FzIGNyZWF0ZWQgYnkgSmF2YVNjcmlwdCAibmV3IEltYWdlIiwKLSAgICAgICAgLy8gaXQg
aXMgbm90IGluIGEgZG9jdW1lbnQuIEhvd2V2ZXIsIGlmIHRoZSBsb2FkIGV2ZW50IGhhcyBub3QK
LSAgICAgICAgLy8gYmVlbiBmaXJlZCAoc3RpbGwgb25sb2FkaW5nKSwgaXQgaXMgdHJlYXRlZCBh
cyBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE90aGVyd2lzZSwgdGhl
IG5vZGUgaXMgcHV0IGluIGFuIG9iamVjdCBncm91cCBpZGVudGlmaWVkIGJ5IHRoZSByb290Ci0g
ICAgICAgIC8vIGVsZW1lbnQgb2YgdGhlIHRyZWUgdG8gd2hpY2ggaXQgYmVsb25ncy4KLSAgICAg
ICAgdWludHB0cl90IGdyb3VwSWQ7Ci0gICAgICAgIGlmIChub2RlLT5pbkRvY3VtZW50KCkgfHwg
KG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpICYmICFzdGF0aWNfY2FzdDxIVE1M
SW1hZ2VFbGVtZW50Kj4obm9kZSktPmhhdmVGaXJlZExvYWRFdmVudCgpKSkKLSAgICAgICAgICAg
IGdyb3VwSWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+ZG9jdW1lbnQoKSk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgTm9kZSogcm9vdCA9IG5vZGU7Ci0gICAgICAg
ICAgICB3aGlsZSAocm9vdC0+cGFyZW50KCkpCi0gICAgICAgICAgICAgICAgcm9vdCA9IHJvb3Qt
PnBhcmVudCgpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBhbG9uZSBpbiBpdHMg
RE9NIHRyZWUgKGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCBvciBhbnkKLSAgICAgICAgICAgIC8vIGNo
aWxkcmVuKSB0aGVuIHRoZSBncm91cCB3aWxsIGJlIGZpbHRlcmVkIG91dCBsYXRlciBhbnl3YXku
Ci0gICAgICAgICAgICBpZiAocm9vdCA9PSBub2RlICYmICFub2RlLT5oYXNDaGlsZE5vZGVzKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBncm91cElkID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHJvb3QpOwotICAgICAgICB9Ci0gICAgICAgIG1fZ3JvdXBl
ci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJZCwgbm9kZSwgd3JhcHBlcikpOwotICAgIH0KLQot
ICAgIHZvaWQgYXBwbHlHcm91cGluZygpCi0gICAgewotICAgICAgICAvLyBHcm91cCBieSBzb3J0
aW5nIGJ5IHRoZSBncm91cCBpZC4KLSAgICAgICAgc3RkOjpzb3J0KG1fZ3JvdXBlci5iZWdpbigp
LCBtX2dyb3VwZXIuZW5kKCkpOwotCi0gICAgICAgIC8vIEZJWE1FIFNob3VsZCBwcm9iYWJseSB3
b3JrIGluIGl0ZXJhdG9ycyBoZXJlLCBidXQgaW5kZXhlcyB3ZXJlIGVhc2llciBmb3IgbXkgc2lt
cGxlIG1pbmQuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncm91cGVyLnNpemUo
KTsgKSB7Ci0gICAgICAgICAgICAvLyBTZWVrIHRvIHRoZSBuZXh0IGtleSAob3IgdGhlIGVuZCBv
ZiB0aGUgbGlzdCkuCi0gICAgICAgICAgICBzaXplX3QgbmV4dEtleUluZGV4ID0gbV9ncm91cGVy
LnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgbV9ncm91cGVyLnNp
emUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JvdXBlcltpXS5ncm91cElkKCkg
IT0gbV9ncm91cGVyW2pdLmdyb3VwSWQoKSkgewotICAgICAgICAgICAgICAgICAgICBuZXh0S2V5
SW5kZXggPSBqOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChuZXh0S2V5SW5kZXggPiBpKTsK
LQotICAgICAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGEgZ3JvdXAgaWYgaXQgaGFzIG1v
cmUgdGhhbiBvbmUgb2JqZWN0LiBJZiBpdCBvbmx5Ci0gICAgICAgICAgICAvLyBoYXMgb25lIG9i
amVjdCwgaXQgaGFzIG5vdGhpbmcgZWxzZSB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUuCi0g
ICAgICAgICAgICBpZiAobmV4dEtleUluZGV4IC0gaSA8PSAxKSB7Ci0gICAgICAgICAgICAgICAg
aSA9IG5leHRLZXlJbmRleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBncm91
cDsKLSAgICAgICAgICAgIGdyb3VwLnJlc2VydmVDYXBhY2l0eShuZXh0S2V5SW5kZXggLSBpKTsK
LSAgICAgICAgICAgIGZvciAoOyBpIDwgbmV4dEtleUluZGV4OyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9ncm91cGVyW2ldLm5vZGUoKTsKLSAgICAgICAgICAgICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIgPSBtX2dyb3VwZXJbaV0ud3JhcHBlcigp
OwotICAgICAgICAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgICAgIGdyb3VwLmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAvKiBGSVhNRTog
UmUtZW5hYmxlZCB0aGlzIGNvZGUgdG8gYXZvaWQgR0NpbmcgdGhlc2Ugd3JhcHBlcnMhCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSB0aGlzIGRlcGVuZHMgb24gbG9va2lu
ZyB1cCB0aGUgd3JhcHBlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBH
QywgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggaXNvbGF0ZWQgd29ybGQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2UncmUgaW4sIHNvIGl0J3MgdW5jbGVhciB3aGljaCBtYXAgdG8gbG9v
ayBpbi4uLgotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgc3R5bGVkIGFuZCB0
aGVyZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUKLSAgICAgICAgICAgICAgICAvLyBzdHls
ZSBkZWNsYXJhdGlvbiwgd2UgbmVlZCB0byBrZWVwIHRoYXQgc3R5bGUgZGVjbGFyYXRpb24KLSAg
ICAgICAgICAgICAgICAvLyB3cmFwcGVyIGFsaXZlIGFzIHdlbGwsIHNvIHdlIGFkZCBpdCB0byB0
aGUgb2JqZWN0IGdyb3VwLgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc1N0eWxlZEVsZW1l
bnQoKSkgewotICAgICAgICAgICAgICAgICAgU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOwotICAgICAgICAgICAgICAgICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKLSAg
ICAgICAgICAgICAgICAgIGlmIChzdHlsZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoc3R5bGUpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgIGdyb3Vw
LmFwcGVuZCh3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGdy
b3VwLnNpemUoKSA+IDEpCi0gICAgICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RHcm91cCgm
Z3JvdXBbMF0sIGdyb3VwLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChpID09IG5leHRL
ZXlJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JvdXBlckxpc3Qg
bV9ncm91cGVyOwotfTsKLQotLy8gQ3JlYXRlIG9iamVjdCBncm91cHMgZm9yIERPTSB0cmVlIG5v
ZGVzLgotdm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NQcm9sb2d1ZSgpCi17Ci0gICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIERPTU9iamVjdFZpc2l0b3IgZG9t
T2JqZWN0VmlzaXRvcjsKLSAgICB2aXNpdERPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJmRvbU9i
amVjdFZpc2l0b3IpOwotI2VuZGlmCi0KLSAgICAvLyBSdW4gdGhyb3VnaCBhbGwgb2JqZWN0cyB3
aXRoIHBvc3NpYmxlIHBlbmRpbmcgYWN0aXZpdHkgbWFraW5nIHRoZWlyCi0gICAgLy8gd3JhcHBl
cnMgbm9uIHdlYWsgaWYgdGhlcmUgaXMgcGVuZGluZyBhY3Rpdml0eS4KLSAgICBHQ1Byb2xvZ3Vl
VmlzaXRvciBwcm9sb2d1ZVZpc2l0b3I7Ci0gICAgdmlzaXRBY3RpdmVET01PYmplY3RzSW5DdXJy
ZW50VGhyZWFkKCZwcm9sb2d1ZVZpc2l0b3IpOwotCi0gICAgLy8gQ3JlYXRlIG9iamVjdCBncm91
cHMuCi0gICAgT2JqZWN0R3JvdXBlclZpc2l0b3Igb2JqZWN0R3JvdXBlclZpc2l0b3I7Ci0gICAg
dmlzaXRET01Ob2Rlc0luQ3VycmVudFRocmVhZCgmb2JqZWN0R3JvdXBlclZpc2l0b3IpOwotICAg
IG9iamVjdEdyb3VwZXJWaXNpdG9yLmFwcGx5R3JvdXBpbmcoKTsKLX0KLQotY2xhc3MgR0NFcGls
b2d1ZVZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciB7Ci1wdWJs
aWM6Ci0gICAgdm9pZCB2aXNpdERPTVdyYXBwZXIodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVyKQotICAgIHsKLSAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdy
YXBwZXJUeXBlIHR5cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNhc2UgVjhDbGFz
c0luZGV4OjpUWVBFOiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICBOQU1FKiBpbXBsID0gc3RhdGljX2Nhc3Q8TkFNRSo+KG9iamVjdCk7ICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgIGlmIChpbXBsLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBBU1NFUlQoIXdyYXBwZXIuSXNXZWFr
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHdyYXBwZXIu
TWFrZVdlYWsoaW1wbCwgJndlYWtBY3RpdmVET01PYmplY3RDYWxsYmFjayk7ICAgXAotICAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfQotQUNUSVZFX0RPTV9PQkpFQ1RfVFlQRVMo
TUFLRV9DQVNFKQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0jdW5kZWYgTUFLRV9DQVNFCi0gICAgfQotfQotfTsKLQotdm9pZCBWOEdDQ29udHJv
bGxlcjo6Z2NFcGlsb2d1ZSgpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotCi0gICAg
Ly8gUnVuIHRocm91Z2ggYWxsIG9iamVjdHMgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IG1ha2luZyB0
aGVpciB3cmFwcGVycyB3ZWFrCi0gICAgLy8gYWdhaW4uCi0gICAgR0NFcGlsb2d1ZVZpc2l0b3Ig
ZXBpbG9ndWVWaXNpdG9yOwotICAgIHZpc2l0QWN0aXZlRE9NT2JqZWN0c0luQ3VycmVudFRocmVh
ZCgmZXBpbG9ndWVWaXNpdG9yKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBDaGVjayBhbGwg
c3Vydml2YWxzIGFyZSB3ZWFrLgotICAgIERPTU9iamVjdFZpc2l0b3IgZG9tT2JqZWN0VmlzaXRv
cjsKLSAgICB2aXNpdERPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoJmRvbU9iamVjdFZpc2l0b3Ip
OwotCi0gICAgRW5zdXJlV2Vha0RPTU5vZGVWaXNpdG9yIHdlYWtET01Ob2RlVmlzaXRvcjsKLSAg
ICB2aXNpdERPTU5vZGVzSW5DdXJyZW50VGhyZWFkKCZ3ZWFrRE9NTm9kZVZpc2l0b3IpOwotCi0g
ICAgZW51bWVyYXRlRE9NT2JqZWN0TWFwKGdjUHJvdGVjdGVkTWFwKCkpOwotICAgIGVudW1lcmF0
ZUdsb2JhbEhhbmRsZXMoKTsKLSNlbmRpZgotfQotCi0vLyBFbmQgVjhHQ0NvbnRyb2xsZXIuY3Bw
Ci0KIHR5cGVkZWYgSGFzaE1hcDxpbnQsIHY4OjpGdW5jdGlvblRlbXBsYXRlKj4gRnVuY3Rpb25U
ZW1wbGF0ZU1hcDsKIAogYm9vbCBBbGxvd0FsbG9jYXRpb246Om1fY3VycmVudCA9IGZhbHNlOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTU1hcC5oIgogI2luY2x1ZGUg
IlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIKKyNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlY4SW5kZXguaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHY4
Lmg+CkBAIC02NDYsNTQgKzY0Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0
dXJuIGhvbGRlcjsKICAgICB9CiAKLS8vIEJlZ2luIFY4R0NDb250cm9sbGVyLmgKLQotI2lmbmRl
ZiBOREVCVUcKLQotI2RlZmluZSBHbG9iYWxIYW5kbGVUeXBlTGlzdChWKSAgIFwKLSAgICBWKFBS
T1hZKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVihOUE9CSkVDVCkgICAgICAgICAgICAg
ICAgICAgXAotICAgIFYoU0NIRURVTEVEX0FDVElPTikgICAgICAgICAgIFwKLSAgICBWKEVWRU5U
X0xJU1RFTkVSKSAgICAgICAgICAgICBcCi0gICAgVihOT0RFX0ZJTFRFUikgICAgICAgICAgICAg
ICAgXAotICAgIFYoU0NSSVBUSU5TVEFOQ0UpICAgICAgICAgICAgIFwKLSAgICBWKFNDUklQVFZB
TFVFKQotCi0KLSAgICAvLyBIb3N0IGluZm9ybWF0aW9uIG9mIHBlcnNpc3RlbnQgaGFuZGxlcy4K
LSAgICBlbnVtIEdsb2JhbEhhbmRsZVR5cGUgewotI2RlZmluZSBFTlVNKG5hbWUpIG5hbWUsCi0g
ICAgICAgIEdsb2JhbEhhbmRsZVR5cGVMaXN0KEVOVU0pCi0jdW5kZWYgRU5VTQotICAgIH07Ci0K
LSAgICBjbGFzcyBHbG9iYWxIYW5kbGVJbmZvIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdsb2Jh
bEhhbmRsZUluZm8odm9pZCogaG9zdCwgR2xvYmFsSGFuZGxlVHlwZSB0eXBlKSA6IG1faG9zdCho
b3N0KSwgbV90eXBlKHR5cGUpIHsgfQotICAgICAgICB2b2lkKiBtX2hvc3Q7Ci0gICAgICAgIEds
b2JhbEhhbmRsZVR5cGUgbV90eXBlOwotICAgIH07Ci0KLSNlbmRpZiAvLyBOREVCVUcKLQotICAg
IGNsYXNzIFY4R0NDb250cm9sbGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIFByb3RlY3Qv
VW5wcm90ZWN0IEpTIHdyYXBwZXJzIG9mIGEgRE9NIG9iamVjdC4KLSAgICAgICAgc3RhdGljIHZv
aWQgZ2NQcm90ZWN0KHZvaWQqIGRvbU9iamVjdCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdjVW5w
cm90ZWN0KHZvaWQqIGRvbU9iamVjdCk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIC8vIEZv
ciBkZWJ1Z2dpbmcgYW5kIGxlYWsgZGV0ZWN0aW9uIHB1cnBvc2UuCi0gICAgICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyR2xvYmFsSGFuZGxlKEdsb2JhbEhhbmRsZVR5cGUsIHZvaWQqLCB2ODo6UGVy
c2lzdGVudDx2ODo6VmFsdWU+KTsKLSAgICAgICAgc3RhdGljIHZvaWQgdW5yZWdpc3Rlckdsb2Jh
bEhhbmRsZSh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPik7Ci0jZW5kaWYKLQotICAg
ICAgICBzdGF0aWMgdm9pZCBnY1Byb2xvZ3VlKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdjRXBp
bG9ndWUoKTsKLSAgICB9OwotCi0vLyBFbmQgVjhHQ0NvbnRyb2xsZXIuaAotCiB9CiAKICNlbmRp
ZiAvLyBWOFByb3h5X2gK
</data>
<flag name="review"
          id="16916"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>