<?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>6609</bug_id>
          
          <creation_ts>2006-01-16 23:43:12 -0800</creation_ts>
          <short_desc>Use Selection instead of SelectionController where possible</short_desc>
          <delta_ts>2006-01-17 10:13:58 -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>HTML Editing</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Duncan Wilcox">duncan</reporter>
          <assigned_to name="Justin Garcia">justin.garcia</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28653</commentid>
    <comment_count>0</comment_count>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2006-01-16 23:43:12 -0800</bug_when>
    <thetext>This patch replaces the use of SelectionController with Selection in the edit commands.

It also cleans up the relationship between Selection and SelectionController: SelectionController used to 
need to be friend to Selection to call validate() on it, now validation is enforced on every update of 
Selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28654</commentid>
    <comment_count>1</comment_count>
      <attachid>5733</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2006-01-16 23:43:43 -0800</bug_when>
    <thetext>Created attachment 5733
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28658</commentid>
    <comment_count>2</comment_count>
      <attachid>5733</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-17 00:31:28 -0800</bug_when>
    <thetext>Comment on attachment 5733
patch

Looks great, r=me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5733</attachid>
            <date>2006-01-16 23:43:43 -0800</date>
            <delta_ts>2006-01-17 00:31:28 -0800</delta_ts>
            <desc>patch</desc>
            <filename>Selection.patch</filename>
            <type>text/plain</type>
            <size>35337</size>
            <attacher name="Duncan Wilcox">duncan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25f
Y29tbWFuZC5jcHAJKHJldmlzaW9uIDEyMTE5KQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Jl
cGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAw
LDcgQEAgYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5TcGVjaWFsRWxlbQogdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgLy8gY29sbGVjdCBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgY3VycmVudCBzZWxlY3Rpb24sIHByaW9yIHRvIGRlbGV0aW5nIHRoZSBz
ZWxlY3Rpb24KLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVj
dGlvbigpOworICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKICAg
ICBBU1NFUlQoc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwogICAgIAogICAgIGlmIChtX21h
dGNoU3R5bGUpCkBAIC04OTYsNyArODk2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6Y29tcGxldGVIVAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKG1fc2VsZWN0UmVw
bGFjZW1lbnQpCi0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVy
KHN0YXJ0LCBlbmQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihTZWxlY3Rpb24oc3RhcnQsIGVuZCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAg
ICBlbHNlCiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmQsIFNFTF9ERUZBVUxUX0FGRklO
SVRZKTsKICAgICAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9TZWxlY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvU2VsZWN0aW9uLmgJKHJldmlzaW9uIDEy
MTE5KQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICNkZWZpbmUgU0VMX0RFRkFVTFRfQUZGSU5JVFkg
RE9XTlNUUkVBTQogCiAgICAgU2VsZWN0aW9uKCk7CisgICAgU2VsZWN0aW9uKGNvbnN0IFBvc2l0
aW9uICYsIEVBZmZpbml0eSk7CiAgICAgU2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uICYsIGNvbnN0
IFBvc2l0aW9uICYsIEVBZmZpbml0eSk7CiAKICAgICBFU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlOyB9CkBAIC00OSwxMiArNTAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRB
ZmZpbml0eShFQWZmaW5pdHkgYWZmaW5pdHkpIHsgbV9hZmZpbml0eSA9IGFmZmluaXR5OyB9CiAg
ICAgRUFmZmluaXR5IGFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4gbV9hZmZpbml0eTsgfQogCi0g
ICAgdm9pZCBjbGVhcigpOwotCiAgICAgdm9pZCBzZXRCYXNlKFBvc2l0aW9uIGJhc2UpIHsgbV9i
YXNlID0gYmFzZTsgfQogICAgIHZvaWQgc2V0RXh0ZW50KFBvc2l0aW9uIGV4dGVudCkgeyBtX2V4
dGVudCA9IGV4dGVudDsgfQotICAgIHZvaWQgc2V0U3RhcnQoUG9zaXRpb24gc3RhcnQpIHsgbV9z
dGFydCA9IHN0YXJ0OyB9Ci0gICAgdm9pZCBzZXRFbmQoUG9zaXRpb24gZW5kKSB7IG1fZW5kID0g
ZW5kOyB9CiAgICAgUG9zaXRpb24gYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQogICAg
IFBvc2l0aW9uIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50OyB9CiAgICAgUG9zaXRp
b24gc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CkBAIC02NywzMCArNjQsMzMgQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc0Jhc2VGaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUlz
Rmlyc3Q7IH0KIAorICAgIGJvb2wgZXhwYW5kVXNpbmdHcmFudWxhcml0eShFVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5KTsKKyAgICBFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9ncmFudWxhcml0eTsgfQorCiAgICAgUGFzc1JlZlB0cjxSYW5nZUltcGw+
IHRvUmFuZ2UoKSBjb25zdDsKIAogICAgIHZvaWQgZGVidWdQb3NpdGlvbigpIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOyAvLyBmb3IgYWNj
ZXNzIHRvIHZhbGlkYXRlOyBzaG91bGQgYmUgZml4ZWQgbGF0ZXIKLSAgICB2b2lkIHZhbGlkYXRl
KEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBDSEFSQUNURVIpOworICAgIHZvaWQgdmFs
aWRhdGUoKTsKICAgICB2b2lkIGFkanVzdEZvckVkaXRhYmxlQ29udGVudCgpOwogCi0gICAgUG9z
aXRpb24gbV9iYXNlOyAgICAgICAgICAgICAgLy8gYmFzZSBwb3NpdGlvbiBmb3IgdGhlIHNlbGVj
dGlvbgotICAgIFBvc2l0aW9uIG1fZXh0ZW50OyAgICAgICAgICAgIC8vIGV4dGVudCBwb3NpdGlv
biBmb3IgdGhlIHNlbGVjdGlvbgotICAgIFBvc2l0aW9uIG1fc3RhcnQ7ICAgICAgICAgICAgIC8v
IHN0YXJ0IHBvc2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCi0gICAgUG9zaXRpb24gbV9lbmQ7ICAg
ICAgICAgICAgICAgLy8gZW5kIHBvc2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCisgICAgUG9zaXRp
b24gbV9iYXNlOyAgICAgICAgICAgICAgICAgIC8vIGJhc2UgcG9zaXRpb24gZm9yIHRoZSBzZWxl
Y3Rpb24KKyAgICBQb3NpdGlvbiBtX2V4dGVudDsgICAgICAgICAgICAgICAgLy8gZXh0ZW50IHBv
c2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCisgICAgUG9zaXRpb24gbV9zdGFydDsgICAgICAgICAg
ICAgICAgIC8vIHN0YXJ0IHBvc2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCisgICAgUG9zaXRpb24g
bV9lbmQ7ICAgICAgICAgICAgICAgICAgIC8vIGVuZCBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlv
bgogCi0gICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7ICAgICAgICAgLy8gdGhlIHVwc3RyZWFtL2Rv
d25zdHJlYW0gYWZmaW5pdHkgb2YgdGhlIGNhcmV0CisgICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7
ICAgICAgICAgICAgIC8vIHRoZSB1cHN0cmVhbS9kb3duc3RyZWFtIGFmZmluaXR5IG9mIHRoZSBj
YXJldAorICAgIEVUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsgICAvLyBncmFudWxhcml0
eSBvZiBzdGFydC9lbmQgc2VsZWN0aW9uCiAKICAgICAvLyB0aGVzZSBhcmUgY2FjaGVkLCBjYW4g
YmUgcmVjYWxjdWxhdGVkIGJ5IHZhbGlkYXRlKCkKLSAgICBFU3RhdGUgbV9zdGF0ZTsgICAgICAg
ICAgICAgICAvLyB0aGUgc3RhdGUgb2YgdGhlIHNlbGVjdGlvbgotICAgIGJvb2wgbV9iYXNlSXNG
aXJzdDsgICAgICAgICAgIC8vIHRydWUgaWYgYmFzZSBpcyBiZWZvcmUgdGhlIGV4dGVudAorICAg
IEVTdGF0ZSBtX3N0YXRlOyAgICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhdGUgb2YgdGhlIHNl
bGVjdGlvbgorICAgIGJvb2wgbV9iYXNlSXNGaXJzdDsgICAgICAgICAgICAgICAvLyB0cnVlIGlm
IGJhc2UgaXMgYmVmb3JlIHRoZSBleHRlbnQKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgU2VsZWN0aW9uICZhLCBjb25zdCBTZWxlY3Rpb24gJmIpCiB7Ci0gICAgcmV0dXJuIGEu
c3RhcnQoKSA9PSBiLnN0YXJ0KCkgJiYgYS5lbmQoKSA9PSBiLmVuZCgpICYmIGEuYWZmaW5pdHko
KSA9PSBiLmFmZmluaXR5KCk7CisgICAgcmV0dXJuIGEuc3RhcnQoKSA9PSBiLnN0YXJ0KCkgJiYg
YS5lbmQoKSA9PSBiLmVuZCgpICYmIGEuYWZmaW5pdHkoKSA9PSBiLmFmZmluaXR5KCkgJiYgYS5n
cmFudWxhcml0eSgpID09IGIuZ3JhbnVsYXJpdHkoKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBTZWxlY3Rpb24gJmEsIGNvbnN0IFNlbGVjdGlvbiAmYikKSW5kZXg6IFdlYkNv
cmUva2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAJKHJldmlzaW9uIDEy
MTE5KQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
dXBkYXRlU3RhcnRFbmQoUAogICAgIGlmICghbV91c2VFbmRpbmdTZWxlY3Rpb24gJiYgKG5ld1N0
YXJ0ICE9IG1fc3RhcnQgfHwgbmV3RW5kICE9IG1fZW5kKSkKICAgICAgICAgbV91c2VFbmRpbmdT
ZWxlY3Rpb24gPSB0cnVlOwogCi0gICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRy
b2xsZXIobmV3U3RhcnQsIG5ld0VuZCwgVlBfREVGQVVMVF9BRkZJTklUWSkpOworICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24obmV3U3RhcnQsIG5ld0VuZCwgVlBfREVGQVVMVF9BRkZJ
TklUWSkpOwogICAgIG1fc3RhcnQgPSBuZXdTdGFydDsKICAgICBtX2VuZCA9IG5ld0VuZDsKIH0K
QEAgLTM0OSw4ICszNDksNiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgICAgIGFwcGx5QmxvY2tTdHlsZShtX3N0eWxlLmdldCgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgIAotICAgIHNldEVuZGluZ1NlbGVjdGlvbk5lZWRzTGF5b3V0KCk7CiB9
CiAKIEVkaXRBY3Rpb24gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdApJ
bmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcAko
cmV2aXNpb24gMTIxMTkpCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIEluc2VydFRl
eHRDb21tYW5kOjppbnB1dChjb25zdCBET01TCiB7CiAgICAgYXNzZXJ0KHRleHQuZmluZCgnXG4n
KSA9PSAtMSk7CiAKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IGVuZGluZ1Nl
bGVjdGlvbigpOworICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsK
ICAgICBib29sIGFkanVzdERvd25zdHJlYW0gPSBpc1N0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlv
bihzZWxlY3Rpb24uc3RhcnQoKS5kb3duc3RyZWFtKCksIERPV05TVFJFQU0pKTsKIAogICAgIC8v
IERlbGV0ZSB0aGUgY3VycmVudCBzZWxlY3Rpb24sIG9yIGNvbGxhcHNlIHdoaXRlc3BhY2UsIGFz
IG5lZWRlZApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0
KGNvbnN0IERPTVMKICAgICAgICAgbV9jaGFyYWN0ZXJzQWRkZWQgKz0gdGV4dC5sZW5ndGgoKTsK
ICAgICB9CiAKLSAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgRE9XTlNUUkVBTSkpOworICAgIHNldEVuZGluZ1NlbGVj
dGlvbihTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIERPV05TVFJFQU0pKTsK
IAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4K
ICAgICAvLyBGSVhNRTogSW1wcm92ZSB0eXBpbmcgc3R5bGUuCkluZGV4OiBXZWJDb3JlL2todG1s
L2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2Nv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMjExOSkKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNl
cnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAy
LDcgKzEwMiw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6YXAKIHZv
aWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgYm9v
bCBzcGxpdFRleHQgPSBmYWxzZTsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9
IGVuZGluZ1NlbGVjdGlvbigpOworICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxl
Y3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21t
YW5kLmgJKHJldmlzaW9uIDEyMTE5KQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2NvbXBvc2l0
ZV9lZGl0X2NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBhcHBseVN0eWxlKERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0
eWxlLCBET006OlBvc2l0aW9uIHN0YXJ0LCBET006OlBvc2l0aW9uIGVuZCwgRWRpdEFjdGlvbiBl
ZGl0aW5nQWN0aW9uPUVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzKTsKICAgICB2b2lkIGRlbGV0
ZUtleVByZXNzZWQoKTsKICAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbihib29sIHNtYXJ0RGVsZXRl
PWZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGU9dHJ1ZSk7Ci0gICAgdm9pZCBkZWxl
dGVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmc2VsZWN0aW9uLCBib29sIHNt
YXJ0RGVsZXRlPWZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGU9dHJ1ZSk7CisgICAg
dm9pZCBkZWxldGVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzZWxlY3Rpb24sIGJvb2wgc21h
cnREZWxldGU9ZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZT10cnVlKTsKICAgICB2
b2lkIGRlbGV0ZVRleHRGcm9tTm9kZShET006OlRleHRJbXBsICpub2RlLCBpbnQgb2Zmc2V0LCBp
bnQgY291bnQpOwogICAgIHZvaWQgaW5wdXRUZXh0KGNvbnN0IERPTTo6RE9NU3RyaW5nICZ0ZXh0
LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCA9IGZhbHNlKTsKICAgICB2b2lkIGluc2VydE5vZGVB
ZnRlcihET006Ok5vZGVJbXBsICppbnNlcnRDaGlsZCwgRE9NOjpOb2RlSW1wbCAqcmVmQ2hpbGQp
OwpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVh
a19jb21tYW5kLmNwcAkocmV2aXNpb24gMTIxMTkpCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcv
aW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkw
LDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjppbnNlcnROb2RlQgogdm9pZCBJbnNl
cnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBkZWxldGVTZWxlY3Rpb24oKTsK
LSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOwor
ICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKIAogICAgIEVsZW1l
bnRJbXBsICpicmVha05vZGUgPSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAg
Tm9kZUltcGwgKm5vZGVUb0luc2VydCA9IGJyZWFrTm9kZTsKQEAgLTExNiw3ICsxMTYsNyBAQCB2
b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgYm9vbCBo
YXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBwb3Mubm9k
ZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudCgpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyUG9zaXRpb24obm9kZVRv
SW5zZXJ0LCBwb3MpOwogICAgICAgICAgICAgaWYgKGhhc1RyYWlsaW5nQlIpCi0gICAgICAgICAg
ICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24obmV4
dCwgMCksIERPV05TVFJFQU0pKTsKKyAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
U2VsZWN0aW9uKFBvc2l0aW9uKG5leHQsIDApLCBET1dOU1RSRUFNKSk7CiAgICAgICAgICAgICBl
bHNlIGlmICghZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgYW4gImV4dHJhIiBCUiBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gCiAgICAgICAg
ICAgICAgICAgRWxlbWVudEltcGwgKmV4dHJhQnJlYWtOb2RlID0gY3JlYXRlQnJlYWtFbGVtZW50
KGRvY3VtZW50KCkpOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0eXBp
bmdTdHlsZSA9IGRvY3VtZW50KCktPmZyYW1lKCktPnR5cGluZ1N0eWxlKCk7CiAgICAgCiAgICAg
aWYgKHR5cGluZ1N0eWxlICYmIHR5cGluZ1N0eWxlLT5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAg
U2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb25CZWZvcmVTdHlsZSA9IGVuZGluZ1NlbGVjdGlv
bigpOworICAgICAgICBTZWxlY3Rpb24gc2VsZWN0aW9uQmVmb3JlU3R5bGUgPSBlbmRpbmdTZWxl
Y3Rpb24oKTsKICAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZSwgUG9zaXRpb24obm9kZVRv
SW5zZXJ0LCAwKSwgUG9zaXRpb24obm9kZVRvSW5zZXJ0LCBtYXhEZWVwT2Zmc2V0KG5vZGVUb0lu
c2VydCkpKTsKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkJlZm9yZVN0eWxl
KTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvU2VsZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvU2VsZWN0aW9uLmNwcAkocmV2aXNpb24g
MTIxMTkpCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvU2VsZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMzEgKzMwLDM3IEBACiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorI2lu
Y2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlv
bnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTZWxlY3Rpb246OlNlbGVjdGlvbigpCiAg
ICAgOiBtX2FmZmluaXR5KERPV05TVFJFQU0pCisgICAgLCBtX2dyYW51bGFyaXR5KENIQVJBQ1RF
UikKICAgICAsIG1fc3RhdGUoTk9ORSkKICAgICAsIG1fYmFzZUlzRmlyc3QodHJ1ZSkKIHsKIH0K
IAotU2VsZWN0aW9uOjpTZWxlY3Rpb24oY29uc3QgUG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0
aW9uICZleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0eSkKLSAgICA6IG1fYmFzZShiYXNlKSwgbV9l
eHRlbnQoZXh0ZW50KQorU2VsZWN0aW9uOjpTZWxlY3Rpb24oY29uc3QgUG9zaXRpb24gJnBvcywg
RUFmZmluaXR5IGFmZmluaXR5KQorICAgIDogbV9iYXNlKHBvcyksIG1fZXh0ZW50KHBvcykKICAg
ICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCisgICAgLCBtX2dyYW51bGFyaXR5KENIQVJBQ1RFUikK
ICAgICAsIG1fc3RhdGUoTk9ORSkKICAgICAsIG1fYmFzZUlzRmlyc3QodHJ1ZSkKIHsKICAgICB2
YWxpZGF0ZSgpOwogfQogCi12b2lkIFNlbGVjdGlvbjo6Y2xlYXIoKQorU2VsZWN0aW9uOjpTZWxl
Y3Rpb24oY29uc3QgUG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZp
bml0eSBhZmZpbml0eSkKKyAgICA6IG1fYmFzZShiYXNlKSwgbV9leHRlbnQoZXh0ZW50KQorICAg
ICwgbV9hZmZpbml0eShhZmZpbml0eSkKKyAgICAsIG1fZ3JhbnVsYXJpdHkoQ0hBUkFDVEVSKQor
ICAgICwgbV9zdGF0ZShOT05FKQorICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogewotICAgIG1f
YWZmaW5pdHkgPSBTRUxfREVGQVVMVF9BRkZJTklUWTsKLSAgICBtX2Jhc2UuY2xlYXIoKTsKLSAg
ICBtX2V4dGVudC5jbGVhcigpOworICAgIHZhbGlkYXRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmFu
Z2VJbXBsPiBTZWxlY3Rpb246OnRvUmFuZ2UoKSBjb25zdApAQCAtMTE3LDcgKzEyMywxNyBAQCBQ
YXNzUmVmUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uOjp0b1JhbmdlCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBTZWxlY3Rpb246OnZhbGlkYXRlKEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCitib29sIFNlbGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0eShFVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIGlmIChpc05vbmUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5OworICAgIHZhbGlkYXRl
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2VsZWN0aW9uOjp2YWxpZGF0ZSgpCiB7
CiAgICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHJlbmRlcmVkIHBvc2l0aW9ucywgaWYgcG9z
c2libGUuCiAgICAgUG9zaXRpb24gb3JpZ2luYWxCYXNlKG1fYmFzZSk7CkBAIC0xNjgsNyArMTg0
LDcgQEAgdm9pZCBTZWxlY3Rpb246OnZhbGlkYXRlKEVUZXh0R3JhbnVsYXJpdAogICAgIH0KICAg
ICAKICAgICAvLyBFeHBhbmQgdGhlIHNlbGVjdGlvbiBpZiByZXF1ZXN0ZWQuCi0gICAgc3dpdGNo
IChncmFudWxhcml0eSkgeworICAgIHN3aXRjaCAobV9ncmFudWxhcml0eSkgewogICAgICAgICBj
YXNlIENIQVJBQ1RFUjoKICAgICAgICAgICAgIC8vIERvbid0IGRvIGFueSBleHBhbnNpb24uCiAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVjdGlv
bkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTIxMTkpCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcv
U2VsZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIHB1
YmxpYzoKICNkZWZpbmUgU0VMX0RFRkFVTFRfQUZGSU5JVFkgRE9XTlNUUkVBTQogCiAgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlcigpOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgU2VsZWN0
aW9uICZzZWwpOwogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgUmFuZ2VJbXBsICosIEVB
ZmZpbml0eSBhZmZpbml0eSk7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJik7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBWaXNpYmxlUG9zaXRp
b24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwpAQCAtNjMsNiArNjQsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBtb3ZlVG8oY29uc3QgUG9zaXRpb24gJiwgY29uc3QgUG9zaXRpb24gJiwgRUFm
ZmluaXR5KTsKICAgICB2b2lkIG1vdmVUbyhjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICYpOwog
CisgICAgY29uc3QgU2VsZWN0aW9uICZzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbDsg
fQorCiAgICAgU2VsZWN0aW9uOjpFU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3NlbC5z
dGF0ZSgpOyB9CiAKICAgICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX3Nl
bC5hZmZpbml0eSgpOyB9CkBAIC0xODUsNiArMTg4LDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBTZWxlY3Rpb25DbwogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLX0gLy8gbmFt
ZXNwYWNlIGtodG1sCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBLSFRNTF9F
RElUSU5HX1NFTEVDVElPTkNPTlRST0xMRVJfSApJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5n
L2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAkocmV2aXNpb24gMTIxMTkpCisrKyBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxNCw3ICszMTQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxl
dGVTZWxlY3RpCiAgICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVT
ZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmc2VsZWN0aW9uLCBib29sIHNtYXJ0
RGVsZXRlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUpCit2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpkZWxldGVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzZWxlY3Rpb24sIGJvb2wg
c21hcnREZWxldGUsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSkKIHsKICAgICBpZiAoc2Vs
ZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQoZG9jdW1lbnQoKSwgc2VsZWN0aW9uLCBzbWFydERlbGV0ZSwgbWVy
Z2VCbG9ja3NBZnRlckRlbGV0ZSkpOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXQKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
cmViYWxhbmNlV2hpdGVzcGFjZSgpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rp
b24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKKyAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gZW5kaW5n
U2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpKSB7CiAgICAg
ICAgIEVkaXRDb21tYW5kUHRyIHN0YXJ0Q21kKG5ldyBSZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFu
ZChkb2N1bWVudCgpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpKSk7CiAgICAgICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKHN0YXJ0Q21kKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1s
L2VkaXRpbmcvbW92ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJKHJldmlzaW9uIDEyMTE5KQorKysg
V2ViQ29yZS9raHRtbC9lZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIE1vdmVTZWxlY3Rpb25Db21tYW5kOjp+TW92ZVNlbGVj
dGlvbkNvbW0KIAogdm9pZCBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAg
U2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKKyAgICBT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCk7CiAgICAgQVNTRVJUKHNlbGVj
dGlvbi5pc1JhbmdlKCkpOwogCiAgICAgUG9zaXRpb24gcG9zID0gbV9wb3NpdGlvbjsKSW5kZXg6
IFdlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQu
Y3BwCShyZXZpc2lvbiAxMjExOSkKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19ibG9j
a3F1b3RlX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQg
QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgRE9NOjpFbGVtZW50SW1wbCAq
YnJlYWtOb2RlOwogICAgIFFQdHJMaXN0PERPTTo6Tm9kZUltcGw+IGFuY2VzdG9yczsKICAgICAK
LSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOwor
ICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKICAgICBpZiAoc2Vs
ZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCkluZGV4OiBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5oCShyZXZpc2lvbiAx
MjExOSkKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBEZWxldGVTZWxlY3Rpb25D
b21tYW5kIDogcHVibGljIENvCiB7IAogcHVibGljOgogICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQoRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBib29sIHNtYXJ0RGVsZXRlPWZhbHNlLCBi
b29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGU9dHJ1ZSk7Ci0gICAgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZChET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xs
ZXIgJnNlbGVjdGlvbiwgYm9vbCBzbWFydERlbGV0ZT1mYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0Fm
dGVyRGVsZXRlPXRydWUpOworICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQoRE9NOjpEb2N1bWVu
dEltcGwgKmRvY3VtZW50LCBjb25zdCBTZWxlY3Rpb24gJnNlbGVjdGlvbiwgYm9vbCBzbWFydERl
bGV0ZT1mYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlPXRydWUpOwogCiAgICAgdmly
dHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
bigpIGNvbnN0OwpAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV90cmFpbGlu
Z1doaXRlc3BhY2VWYWxpZDsKIAogICAgIC8vIFRoaXMgZGF0YSBpcyB0cmFuc2llbnQgYW5kIHNo
b3VsZCBiZSBjbGVhcmVkIGF0IHRoZSBlbmQgb2YgdGhlIGRvQXBwbHkgZnVuY3Rpb24uCi0gICAg
U2VsZWN0aW9uQ29udHJvbGxlciBtX3NlbGVjdGlvblRvRGVsZXRlOworICAgIFNlbGVjdGlvbiBt
X3NlbGVjdGlvblRvRGVsZXRlOwogICAgIERPTTo6UG9zaXRpb24gbV91cHN0cmVhbVN0YXJ0Owog
ICAgIERPTTo6UG9zaXRpb24gbV9kb3duc3RyZWFtU3RhcnQ7CiAgICAgRE9NOjpQb3NpdGlvbiBt
X3Vwc3RyZWFtRW5kOwpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuaAkocmV2
aXNpb24gMTIxMTkpCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDE0ICsyOCwxMyBAQAogCiAjaW5jbHVkZSAiU2hhcmVkLmgiCiAj
aW5jbHVkZSAiZWRpdF9hY3Rpb25zLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIlNlbGVjdGlvbi5oIgogCi1uYW1lc3BhY2UgRE9NIHsKLSAgICBjbGFzcyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7Ci0gICAgY2xhc3MgRG9jdW1lbnRJbXBsOwot
fQorbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3BhY2Uga2h0bWwgeworY2xhc3MgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOworY2xhc3MgRG9jdW1lbnRJbXBsOworY2xhc3MgVmlz
aWJsZVBvc2l0aW9uOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8g
RWRpdENvbW1hbmQKQEAgLTY0LDE4ICs2MywxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIERP
TTo6RG9jdW1lbnRJbXBsICogY29uc3QgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3Vt
ZW50LmdldCgpOyB9CiAKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHN0YXJ0aW5nU2VsZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGluZ1NlbGVjdGlvbjsgfQotICAgIFNlbGVjdGlvbkNv
bnRyb2xsZXIgZW5kaW5nU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRpbmdTZWxlY3Rp
b247IH0KKyAgICBTZWxlY3Rpb24gc3RhcnRpbmdTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0aW5nU2VsZWN0aW9uOyB9CisgICAgU2VsZWN0aW9uIGVuZGluZ1NlbGVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZW5kaW5nU2VsZWN0aW9uOyB9CiAKLSAgICB2b2lkIHNldEVuZGluZ1Nl
bGVjdGlvbk5lZWRzTGF5b3V0KGJvb2wgZmxhZz10cnVlKSB7IG1fZW5kaW5nU2VsZWN0aW9uLnNl
dE5lZWRzTGF5b3V0KGZsYWcpOyB9Ci0gICAgICAgIAogICAgIEVDb21tYW5kU3RhdGUgc3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgdm9pZCBzZXRTdGF0ZShFQ29tbWFuZFN0
YXRlIHN0YXRlKSB7IG1fc3RhdGUgPSBzdGF0ZTsgfQogCi0gICAgdm9pZCBzZXRTdGFydGluZ1Nl
bGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzKTsKKyAgICB2b2lkIHNldFN0YXJ0
aW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmcyk7CiAgICAgdm9pZCBzZXRTdGFydGluZ1Nl
bGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApOwogICAgIHZvaWQgc2V0U3RhcnRpbmdT
ZWxlY3Rpb24oY29uc3QgRE9NOjpQb3NpdGlvbiAmcCwgRUFmZmluaXR5IGFmZmluaXR5KTsKLSAg
ICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzKTsK
KyAgICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJnMpOwogICAgIHZv
aWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCk7CiAgICAgdm9p
ZCBzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgRE9NOjpQb3NpdGlvbiAmcCwgRUFmZmluaXR5IGFm
ZmluaXR5KTsKIApAQCAtOTQsOCArOTEsOCBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPERPTTo6
RG9jdW1lbnRJbXBsPiBtX2RvY3VtZW50OwogICAgIEVDb21tYW5kU3RhdGUgbV9zdGF0ZTsKLSAg
ICBTZWxlY3Rpb25Db250cm9sbGVyIG1fc3RhcnRpbmdTZWxlY3Rpb247Ci0gICAgU2VsZWN0aW9u
Q29udHJvbGxlciBtX2VuZGluZ1NlbGVjdGlvbjsKKyAgICBTZWxlY3Rpb24gbV9zdGFydGluZ1Nl
bGVjdGlvbjsKKyAgICBTZWxlY3Rpb24gbV9lbmRpbmdTZWxlY3Rpb247CiAgICAgUmVmUHRyPERP
TTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBtX3R5cGluZ1N0eWxlOwogICAgIEVk
aXRDb21tYW5kICptX3BhcmVudDsKIH07CkBAIC0xMTYsMTMgKzExMywxMyBAQCBwdWJsaWM6CiAK
ICAgICBET006OkRvY3VtZW50SW1wbCAqIGNvbnN0IGRvY3VtZW50KCkgY29uc3Q7CiAKLSAgICBT
ZWxlY3Rpb25Db250cm9sbGVyIHN0YXJ0aW5nU2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgU2VsZWN0
aW9uQ29udHJvbGxlciBlbmRpbmdTZWxlY3Rpb24oKSBjb25zdDsKKyAgICBTZWxlY3Rpb24gc3Rh
cnRpbmdTZWxlY3Rpb24oKSBjb25zdDsKKyAgICBTZWxlY3Rpb24gZW5kaW5nU2VsZWN0aW9uKCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNv
bnRyb2xsZXIgJnMpIGNvbnN0OworICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3Qg
U2VsZWN0aW9uICZzKSBjb25zdDsKICAgICB2b2lkIHNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmcCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdGFydGluZ1NlbGVjdGlv
bihjb25zdCBET006OlBvc2l0aW9uICZwLCBFQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0OwotICAg
IHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJnMpIGNv
bnN0OworICAgIHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmcykgY29u
c3Q7CiAgICAgdm9pZCBzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZw
KSBjb25zdDsKICAgICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBET006OlBvc2l0aW9u
ICZwLCBFQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0OwogCkBAIC0xMzksNiArMTM2LDYgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBFZGl0Q29tbWFuZFB0ciAmZW1wdHlDb21tYW5kKCk7CiB9OwogCi19
IC8vIG5hbWVzcGFjZSBraHRtbAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
X19lZGl0X2NvbW1hbmRfaF9fCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvU2VsZWN0aW9u
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjExOSkKKysrIFdlYkNvcmUva2h0bWwvZWRp
dGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYs
MTMgQEAgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcgogewogfQogCitT
ZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFNlbGVjdGlvbiAm
c2VsKQorICAgIDogbV9zZWwoc2VsKQorICAgICwgbV9uZWVkc0xheW91dCh0cnVlKQorICAgICwg
bV9tb2RpZnlCaWFzU2V0KGZhbHNlKQoreworfQorCiBTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxl
Y3Rpb25Db250cm9sbGVyKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSkK
ICAgICA6IG1fc2VsKHBvcywgcG9zLCBhZmZpbml0eSkKICAgICAsIG1fbmVlZHNMYXlvdXQodHJ1
ZSkKQEAgLTEyOSw1NSArMTM2LDM3IEBAIFNlbGVjdGlvbkNvbnRyb2xsZXIgJlNlbGVjdGlvbkNv
bnRyb2xsZXIKIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZwb3MpCiB7Ci0gICAgbV9zZWwuc2V0QWZmaW5pdHkocG9zLmFmZmluaXR5KCkp
OwotICAgIG1fc2VsLnNldEJhc2UocG9zLmRlZXBFcXVpdmFsZW50KCkpOwotICAgIG1fc2VsLnNl
dEV4dGVudChwb3MuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgbV9zZWwudmFsaWRhdGUoKTsKKyAg
ICBtX3NlbCA9IFNlbGVjdGlvbihwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmRlZXBFcXVpdmFs
ZW50KCksIHBvcy5hZmZpbml0eSgpKTsKICAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAog
dm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZi
YXNlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmV4dGVudCkKIHsKLSAgICBtX3NlbC5zZXRBZmZp
bml0eShiYXNlLmFmZmluaXR5KCkpOwotICAgIG1fc2VsLnNldEJhc2UoYmFzZS5kZWVwRXF1aXZh
bGVudCgpKTsKLSAgICBtX3NlbC5zZXRFeHRlbnQoZXh0ZW50LmRlZXBFcXVpdmFsZW50KCkpOwot
ICAgIG1fc2VsLnZhbGlkYXRlKCk7CisgICAgbV9zZWwgPSBTZWxlY3Rpb24oYmFzZS5kZWVwRXF1
aXZhbGVudCgpLCBleHRlbnQuZGVlcEVxdWl2YWxlbnQoKSwgYmFzZS5hZmZpbml0eSgpKTsKICAg
ICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpt
b3ZlVG8oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmbykKIHsKLSAgICBtX3NlbC5zZXRBZmZp
bml0eShvLm1fc2VsLmFmZmluaXR5KCkpOwotICAgIG1fc2VsLnNldEJhc2Uoby5tX3NlbC5zdGFy
dCgpKTsKLSAgICBtX3NlbC5zZXRFeHRlbnQoby5tX3NlbC5lbmQoKSk7Ci0gICAgbV9zZWwudmFs
aWRhdGUoKTsKKyAgICBtX3NlbCA9IG8ubV9zZWw7CiAgICAgbV9uZWVkc0xheW91dCA9IHRydWU7
CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZw
b3MsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKLSAgICBtX3NlbC5zZXRBZmZpbml0eShhZmZpbml0
eSk7Ci0gICAgbV9zZWwuc2V0QmFzZShwb3MpOwotICAgIG1fc2VsLnNldEV4dGVudChwb3MpOwot
ICAgIG1fc2VsLnZhbGlkYXRlKCk7CisgICAgbV9zZWwgPSBTZWxlY3Rpb24ocG9zLCBhZmZpbml0
eSk7CiAgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6bW92ZVRvKGNvbnN0IFJhbmdlSW1wbCAqciwgRUFmZmluaXR5IGFmZmluaXR5KQogewot
ICAgIG1fc2VsLnNldEFmZmluaXR5KGFmZmluaXR5KTsKLSAgICBtX3NlbC5zZXRCYXNlKHN0YXJ0
UG9zaXRpb24ocikpOwotICAgIG1fc2VsLnNldEV4dGVudChlbmRQb3NpdGlvbihyKSk7Ci0gICAg
bV9zZWwudmFsaWRhdGUoKTsKKyAgICBtX3NlbCA9IFNlbGVjdGlvbihzdGFydFBvc2l0aW9uKHIp
LCBlbmRQb3NpdGlvbihyKSwgYWZmaW5pdHkpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwog
fQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAmYmFz
ZSwgY29uc3QgUG9zaXRpb24gJmV4dGVudCwgRUFmZmluaXR5IGFmZmluaXR5KQogewotICAgIG1f
c2VsLnNldEFmZmluaXR5KGFmZmluaXR5KTsKLSAgICBtX3NlbC5zZXRCYXNlKGJhc2UpOwotICAg
IG1fc2VsLnNldEV4dGVudChleHRlbnQpOwotICAgIG1fc2VsLnZhbGlkYXRlKCk7CisgICAgbV9z
ZWwgPSBTZWxlY3Rpb24oYmFzZSwgZXh0ZW50LCBhZmZpbml0eSk7CiAgICAgbV9uZWVkc0xheW91
dCA9IHRydWU7CiB9CiAKQEAgLTUwNyw4ICs0OTYsOCBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmV4cGFuZFVzaW5nR3JhCiB7CiAgICAgaWYgKGlzTm9uZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgbV9zZWwudmFsaWRhdGUoZ3JhbnVsYXJpdHkpOworCisgICAgbV9z
ZWwuZXhwYW5kVXNpbmdHcmFudWxhcml0eShncmFudWxhcml0eSk7CiAgICAgbV9uZWVkc0xheW91
dCA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01NTMsNDAgKzU0MiwzMSBAQCBpbnQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6eFBvc0ZvclZlcnRpY2FsCiAKIHZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6Y2xlYXIoKQogewotICAgIG1fc2VsLmNsZWFyKCk7Ci0gICAgbV9zZWwudmFsaWRh
dGUoKTsKKyAgICBtX3NlbCA9IFNlbGVjdGlvbigpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVl
OwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZwb3MpCiB7Ci0gICAgbV9zZWwuc2V0QWZmaW5pdHkocG9zLmFmZmluaXR5KCkpOwot
ICAgIG1fc2VsLnNldEJhc2UocG9zLmRlZXBFcXVpdmFsZW50KCkpOwotICAgIG1fc2VsLnZhbGlk
YXRlKCk7CisgICAgbV9zZWwgPSBTZWxlY3Rpb24ocG9zLmRlZXBFcXVpdmFsZW50KCksIG1fc2Vs
LmV4dGVudCgpLCBwb3MuYWZmaW5pdHkoKSk7CiAgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9
CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmcG9zKQogewotICAgIG1fc2VsLnNldEFmZmluaXR5KHBvcy5hZmZpbml0eSgpKTsKLSAg
ICBtX3NlbC5zZXRFeHRlbnQocG9zLmRlZXBFcXVpdmFsZW50KCkpOwotICAgIG1fc2VsLnZhbGlk
YXRlKCk7CisgICAgbV9zZWwgPSBTZWxlY3Rpb24obV9zZWwuYmFzZSgpLCBwb3MuZGVlcEVxdWl2
YWxlbnQoKSwgcG9zLmFmZmluaXR5KCkpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQog
CiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgUG9zaXRpb24gJnBvcywg
RUFmZmluaXR5IGFmZmluaXR5KQogewotICAgIG1fc2VsLnNldEFmZmluaXR5KGFmZmluaXR5KTsK
LSAgICBtX3NlbC5zZXRCYXNlKHBvcyk7Ci0gICAgbV9zZWwudmFsaWRhdGUoKTsKKyAgICBtX3Nl
bCA9IFNlbGVjdGlvbihwb3MsIG1fc2VsLmV4dGVudCgpLCBhZmZpbml0eSk7CiAgICAgbV9uZWVk
c0xheW91dCA9IHRydWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50
KGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKLSAgICBtX3NlbC5z
ZXRBZmZpbml0eShhZmZpbml0eSk7Ci0gICAgbV9zZWwuc2V0RXh0ZW50KHBvcyk7Ci0gICAgbV9z
ZWwudmFsaWRhdGUoKTsKKyAgICBtX3NlbCA9IFNlbGVjdGlvbihtX3NlbC5iYXNlKCksIHBvcywg
YWZmaW5pdHkpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCkluZGV4OiBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkocmV2
aXNpb24gMTIxMTkpCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OkRlbGV0ZVNlbGVjdGlvbkMKIHsKIH0KIAotRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZChEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25z
dCBTZWxlY3Rpb25Db250cm9sbGVyICZzZWxlY3Rpb24sIGJvb2wgc21hcnREZWxldGUsIGJvb2wg
bWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSkKK0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OkRlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQoRG9jdW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgU2VsZWN0aW9uICZz
ZWxlY3Rpb24sIGJvb2wgc21hcnREZWxldGUsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSkK
ICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KSwgCiAgICAgICBtX2hhc1NlbGVj
dGlvblRvRGVsZXRlKHRydWUpLCAKICAgICAgIG1fc21hcnREZWxldGUoc21hcnREZWxldGUpLCAK
QEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0
ZVR5CiAgICAgICAgIC8vIHRoZW4gc3RhcnQgdHlwaW5nLiBJbiB0aGlzIGNhc2UsIHRoZSB0eXBp
bmcgc3R5bGUgaXMgYXBwbGllZCByaWdodCBub3csIGFuZAogICAgICAgICAvLyBpcyBub3QgcmV0
YWluZWQgdW50aWwgdGhlIG5leHQgdHlwaW5nIGFjdGlvbi4KIAotICAgICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihQb3NpdGlvbihpbnNlcnRlZFBsYWNlaG9sZGVy
LCAwKSwgRE9XTlNUUkVBTSkpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9u
KFBvc2l0aW9uKGluc2VydGVkUGxhY2Vob2xkZXIsIDApLCBET1dOU1RSRUFNKSk7CiAgICAgICAg
IGFwcGx5U3R5bGUobV90eXBpbmdTdHlsZS5nZXQoKSwgRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsK
ICAgICAgICAgbV90eXBpbmdTdHlsZSA9IDA7CiAgICAgfQpAQCAtNjMzLDcgKzYzMyw3IEBAIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHkKIAogdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKIHsKLSAgICBtX3NlbGVjdGlvblRv
RGVsZXRlLmNsZWFyKCk7CisgICAgbV9zZWxlY3Rpb25Ub0RlbGV0ZSA9IFNlbGVjdGlvbigpOwog
ICAgIG1fdXBzdHJlYW1TdGFydC5jbGVhcigpOwogICAgIG1fZG93bnN0cmVhbVN0YXJ0LmNsZWFy
KCk7CiAgICAgbV91cHN0cmVhbUVuZC5jbGVhcigpOwpAQCAtNjgzLDcgKzY4Myw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKGhhbmRsZVNwZWNpYWxD
YXNlQlJEZWxldGUoKSkgewogICAgICAgICBjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRl
KGZhbHNlKTsKICAgICAgICAgZGVidWdQb3NpdGlvbigiZW5kaW5nUG9zaXRpb24gICAiLCBtX2Vu
ZGluZ1Bvc2l0aW9uKTsKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRy
b2xsZXIobV9lbmRpbmdQb3NpdGlvbiwgYWZmaW5pdHkpKTsKKyAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSkpOwogICAgICAgICBj
bGVhclRyYW5zaWVudFN0YXRlKCk7CiAgICAgICAgIHJlYmFsYW5jZVdoaXRlc3BhY2UoKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtNzEyLDcgKzcxMiw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgY2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZShhZGRl
ZFBsYWNlaG9sZGVyKTsKIAogICAgIGRlYnVnUG9zaXRpb24oImVuZGluZ1Bvc2l0aW9uICAgIiwg
bV9lbmRpbmdQb3NpdGlvbik7Ci0gICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRy
b2xsZXIobV9lbmRpbmdQb3NpdGlvbiwgYWZmaW5pdHkpKTsKKyAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5KSk7CiAgICAgY2xlYXJUcmFu
c2llbnRTdGF0ZSgpOwogICAgIHJlYmFsYW5jZVdoaXRlc3BhY2UoKTsKIH0KSW5kZXg6IFdlYkNv
cmUva2h0bWwvZWRpdGluZy90eXBpbmdfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAkocmV2aXNpb24gMTIxMTkpCisrKyBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJ0eXBpbmdf
Y29tbWFuZC5oIgorI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUg
Imluc2VydF90ZXh0X2NvbW1hbmQuaCIKICNpbmNsdWRlICJpbnNlcnRfbGluZV9icmVha19jb21t
YW5kLmgiCkBAIC02Nyw3ICs2OCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJl
c3NlZChEb2MKICAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0RWRpdENv
bW1hbmQuZ2V0KCkpLT5kZWxldGVLZXlQcmVzc2VkKCk7CiAgICAgfQogICAgIGVsc2UgewotICAg
ICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsK
KyAgICAgICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgVmlzaWJsZVBvc2l0aW9u
KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSkucHJldmlvdXMoKS5pc051
bGwoKSkgewogICAgICAgICAgICAgLy8gZG8gbm90aGluZyBmb3IgYSBkZWxldGUga2V5IGF0IHRo
ZSBzdGFydCBvZiBhbiBlZGl0YWJsZSBlbGVtZW50LgogICAgICAgICB9CkBAIC05Miw3ICs5Myw3
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXMKICAgICAgICAgc3Rh
dGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5mb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCgpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgU2VsZWN0aW9u
Q29udHJvbGxlciBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgICAgIFNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChzZWxlY3Rpb24uaXNDYXJldCgpICYmIGlzRW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRp
b24oc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHsKICAgICAgICAg
ICAgIC8vIGRvIG5vdGhpbmcgZm9yIGEgZGVsZXRlIGtleSBhdCB0aGUgc3RhcnQgb2YgYW4gZWRp
dGFibGUgZWxlbWVudC4KICAgICAgICAgfQpAQCAtMzI0LDcgKzMyNSw3IEBAIHZvaWQgVHlwaW5n
Q29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXIKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxl
dGVLZXlQcmVzc2VkKCkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvblRvRGVs
ZXRlOworICAgIFNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICAKICAgICBzd2l0Y2gg
KGVuZGluZ1NlbGVjdGlvbigpLnN0YXRlKCkpIHsKICAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0
aW9uOjpSQU5HRToKQEAgLTMzOCw3ICszMzksNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0
ZUtleVByZXNzZWQoKQogICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRp
b24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5hZmZpbml0eSgpKS5wcmV2aW91cygpLmRlZXBFcXVp
dmFsZW50KCk7CiAgICAgICAgICAgICBQb3NpdGlvbiBlbmQgPSBWaXNpYmxlUG9zaXRpb24ocG9z
LCBlbmRpbmdTZWxlY3Rpb24oKS5hZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAg
ICAgICAgaWYgKHN0YXJ0LmlzTm90TnVsbCgpICYmIGVuZC5pc05vdE51bGwoKSAmJiBzdGFydC5u
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBlbmQubm9kZSgpLT5yb290RWRpdGFibGVF
bGVtZW50KCkpCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBTZWxlY3Rpb25D
b250cm9sbGVyKHN0YXJ0LCBlbmQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICAgICAgICAg
ICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IFNlbGVjdGlvbihzdGFydCwgZW5kLCBTRUxfREVGQVVM
VF9BRkZJTklUWSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IGtodG1sOjpTZWxlY3Rpb246Ok5PTkU6CkBAIC0zNTUsNyArMzU2LDcgQEAgdm9pZCBUeXBpbmdD
b21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCgpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb25U
b0RlbGV0ZTsKKyAgICBTZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgCiAgICAgc3dp
dGNoIChlbmRpbmdTZWxlY3Rpb24oKS5zdGF0ZSgpKSB7CiAgICAgICAgIGNhc2Uga2h0bWw6OlNl
bGVjdGlvbjo6UkFOR0U6CkBAIC0zNjksNyArMzcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpm
b3J3YXJkRGVsZXRlS2V5UHJlcwogICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxl
UG9zaXRpb24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5hZmZpbml0eSgpKS5uZXh0KCkuZGVlcEVx
dWl2YWxlbnQoKTsKICAgICAgICAgICAgIFBvc2l0aW9uIGVuZCA9IFZpc2libGVQb3NpdGlvbihw
b3MsIGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAg
ICAgICAgICBpZiAoc3RhcnQuaXNOb3ROdWxsKCkgJiYgZW5kLmlzTm90TnVsbCgpICYmIHN0YXJ0
Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IGVuZC5ub2RlKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IFNlbGVjdGlv
bkNvbnRyb2xsZXIoc3RhcnQsIGVuZCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOworICAgICAgICAg
ICAgICAgIHNlbGVjdGlvblRvRGVsZXRlID0gU2VsZWN0aW9uKHN0YXJ0LCBlbmQsIFNFTF9ERUZB
VUxUX0FGRklOSVRZKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2Uga2h0bWw6OlNlbGVjdGlvbjo6Tk9ORToKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9l
ZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9lZGl0
X2NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMjExOSkKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9l
ZGl0X2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMTMgQEAKIAogI2lu
Y2x1ZGUgInhtbC9kb21fcG9zaXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudEltcGwuaCIKKyNp
bmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwu
aCIKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKIAogI2luY2x1ZGUgPGt4bWxj
b3JlL0Fzc2VydGlvbnMuaD4KIAotdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7Ci11c2luZyBET006
OlBvc2l0aW9uOwotdXNpbmcgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7Ci11
c2luZyBET006OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGw7CituYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNkZWZpbmUgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoYXJnKSBkbyB7IFwKICAg
ICAgICAgaWYgKCp0aGlzID09IDApIHsgcmV0dXJuIGFyZzsgfSBcCkBAIC00OSw4ICs0Nyw2IEBA
IHVzaW5nIERPTTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW0KICAgICAgICAgaWYgKCp0
aGlzID09IDApIHsgcmV0dXJuOyB9IFwKICAgICB9IHdoaWxlICgwKQogCi1uYW1lc3BhY2Uga2h0
bWwgewotCiBFZGl0Q29tbWFuZFB0cjo6RWRpdENvbW1hbmRQdHIoKQogewogfQpAQCAtMTA3LDE5
ICsxMDMsMTkgQEAgRG9jdW1lbnRJbXBsICogY29uc3QgRWRpdENvbW1hbmRQdHI6OmRvYwogICAg
IHJldHVybiBnZXQoKS0+ZG9jdW1lbnQoKTsKIH0KIAotU2VsZWN0aW9uQ29udHJvbGxlciBFZGl0
Q29tbWFuZFB0cjo6c3RhcnRpbmdTZWxlY3Rpb24oKSBjb25zdAorU2VsZWN0aW9uIEVkaXRDb21t
YW5kUHRyOjpzdGFydGluZ1NlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgSUZfSU1QTF9OVUxMX1JF
VFVSTl9BUkcoU2VsZWN0aW9uQ29udHJvbGxlcigpKTsKKyAgICBJRl9JTVBMX05VTExfUkVUVVJO
X0FSRyhTZWxlY3Rpb24oKSk7CiAgICAgcmV0dXJuIGdldCgpLT5zdGFydGluZ1NlbGVjdGlvbigp
OwogfQogCi1TZWxlY3Rpb25Db250cm9sbGVyIEVkaXRDb21tYW5kUHRyOjplbmRpbmdTZWxlY3Rp
b24oKSBjb25zdAorU2VsZWN0aW9uIEVkaXRDb21tYW5kUHRyOjplbmRpbmdTZWxlY3Rpb24oKSBj
b25zdAogewotICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJHKFNlbGVjdGlvbkNvbnRyb2xsZXIo
KSk7CisgICAgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoU2VsZWN0aW9uKCkpOwogICAgIHJldHVy
biBnZXQoKS0+ZW5kaW5nU2VsZWN0aW9uKCk7CiB9CiAKLXZvaWQgRWRpdENvbW1hbmRQdHI6OnNl
dFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJnMpIGNvbnN0Cit2
b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24g
JnMpIGNvbnN0CiB7CiAgICAgSUZfSU1QTF9OVUxMX1JFVFVSTjsKICAgICBnZXQoKS0+c2V0U3Rh
cnRpbmdTZWxlY3Rpb24ocyk7CkBAIC0xMzQsMTEgKzEzMCwxMSBAQCB2b2lkIEVkaXRDb21tYW5k
UHRyOjpzZXRTdGFydGluZ1NlbGVjdGlvCiB2b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRTdGFydGlu
Z1NlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmcCwgRUFmZmluaXR5IGFmZmluaXR5KSBjb25zdAog
ewogICAgIElGX0lNUExfTlVMTF9SRVRVUk47Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzID0g
U2VsZWN0aW9uQ29udHJvbGxlcihwLCBhZmZpbml0eSk7CisgICAgU2VsZWN0aW9uIHMgPSBTZWxl
Y3Rpb24ocCwgYWZmaW5pdHkpOwogICAgIGdldCgpLT5zZXRTdGFydGluZ1NlbGVjdGlvbihzKTsK
IH0KIAotdm9pZCBFZGl0Q29tbWFuZFB0cjo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVj
dGlvbkNvbnRyb2xsZXIgJnMpIGNvbnN0Cit2b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRFbmRpbmdT
ZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzKSBjb25zdAogewogICAgIElGX0lNUExfTlVMTF9S
RVRVUk47CiAgICAgZ2V0KCktPnNldEVuZGluZ1NlbGVjdGlvbihzKTsKQEAgLTE1Myw3ICsxNDks
NyBAQCB2b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRFbmRpbmdTZWxlY3Rpb24oCiB2b2lkIEVkaXRD
b21tYW5kUHRyOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgUG9zaXRpb24gJnAsIEVBZmZpbml0
eSBhZmZpbml0eSkgY29uc3QKIHsKICAgICBJRl9JTVBMX05VTExfUkVUVVJOOwotICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIgcyA9IFNlbGVjdGlvbkNvbnRyb2xsZXIocCwgYWZmaW5pdHkpOworICAg
IFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHAsIGFmZmluaXR5KTsKICAgICBnZXQoKS0+c2V0RW5k
aW5nU2VsZWN0aW9uKHMpOwogfQogCkBAIC0xOTIsNyArMTg4LDcgQEAgRWRpdENvbW1hbmQ6OkVk
aXRDb21tYW5kKERvY3VtZW50SW1wbCAqZAogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAg
ICBBU1NFUlQobV9kb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgbV9zdGFydGluZ1NlbGVjdGlvbiA9
IG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpOworICAgIG1fc3RhcnRpbmdTZWxlY3Rp
b24gPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBt
X2VuZGluZ1NlbGVjdGlvbiA9IG1fc3RhcnRpbmdTZWxlY3Rpb247CiB9CiAKQEAgLTI3Niw3ICsy
NzIsNyBAQCBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgCiAgICAgcmV0
dXJuIEVkaXRBY3Rpb25VbnNwZWNpZmllZDsKIH0KIAotdm9pZCBFZGl0Q29tbWFuZDo6c2V0U3Rh
cnRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmcykKK3ZvaWQgRWRpdENv
bW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmcykKIHsKICAgICBm
b3IgKEVkaXRDb21tYW5kICpjbWQgPSB0aGlzOyBjbWQ7IGNtZCA9IGNtZC0+bV9wYXJlbnQpCiAg
ICAgICAgIGNtZC0+bV9zdGFydGluZ1NlbGVjdGlvbiA9IHM7CkBAIC0yODQsMTkgKzI4MCwxOSBA
QCB2b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1NlbGVjdGlvbihjCiAKIHZvaWQgRWRpdENv
bW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkKIHsK
LSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHMgPSBTZWxlY3Rpb25Db250cm9sbGVyKHApOworICAg
IFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHAuZGVlcEVxdWl2YWxlbnQoKSwgcC5hZmZpbml0eSgp
KTsKICAgICBmb3IgKEVkaXRDb21tYW5kICpjbWQgPSB0aGlzOyBjbWQ7IGNtZCA9IGNtZC0+bV9w
YXJlbnQpCiAgICAgICAgIGNtZC0+bV9zdGFydGluZ1NlbGVjdGlvbiA9IHM7CiB9CiAKIHZvaWQg
RWRpdENvbW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uICZwLCBFQWZm
aW5pdHkgYWZmaW5pdHkpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzID0gU2VsZWN0aW9u
Q29udHJvbGxlcihwLCBhZmZpbml0eSk7CisgICAgU2VsZWN0aW9uIHMgPSBTZWxlY3Rpb24ocCwg
YWZmaW5pdHkpOwogICAgIGZvciAoRWRpdENvbW1hbmQgKmNtZCA9IHRoaXM7IGNtZDsgY21kID0g
Y21kLT5tX3BhcmVudCkKICAgICAgICAgY21kLT5tX3N0YXJ0aW5nU2VsZWN0aW9uID0gczsKIH0K
IAotdm9pZCBFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNv
bnRyb2xsZXIgJnMpCit2b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3Qg
U2VsZWN0aW9uICZzKQogewogICAgIGZvciAoRWRpdENvbW1hbmQgKmNtZCA9IHRoaXM7IGNtZDsg
Y21kID0gY21kLT5tX3BhcmVudCkKICAgICAgICAgY21kLT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7
CkBAIC0zMDQsMTQgKzMwMCwxNCBAQCB2b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rp
b24oY29uCiAKIHZvaWQgRWRpdENvbW1hbmQ6OnNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24gJnApCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzID0gU2VsZWN0aW9u
Q29udHJvbGxlcihwKTsKKyAgICBTZWxlY3Rpb24gcyA9IFNlbGVjdGlvbihwLmRlZXBFcXVpdmFs
ZW50KCksIHAuYWZmaW5pdHkoKSk7CiAgICAgZm9yIChFZGl0Q29tbWFuZCAqY21kID0gdGhpczsg
Y21kOyBjbWQgPSBjbWQtPm1fcGFyZW50KQogICAgICAgICBjbWQtPm1fZW5kaW5nU2VsZWN0aW9u
ID0gczsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFBv
c2l0aW9uICZwLCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxl
ciBzID0gU2VsZWN0aW9uQ29udHJvbGxlcihwLCBhZmZpbml0eSk7CisgICAgU2VsZWN0aW9uIHMg
PSBTZWxlY3Rpb24ocCwgYWZmaW5pdHkpOwogICAgIGZvciAoRWRpdENvbW1hbmQgKmNtZCA9IHRo
aXM7IGNtZDsgY21kID0gY21kLT5tX3BhcmVudCkKICAgICAgICAgY21kLT5tX2VuZGluZ1NlbGVj
dGlvbiA9IHM7CiB9CkBAIC0zNTgsNCArMzU0LDQgQEAgdm9pZCBFZGl0Q29tbWFuZDo6dXBkYXRl
TGF5b3V0KCkgY29uc3QKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2Uga2h0bWwKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAxMjExOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ1LDcgKzEwNDUsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgRnJh
bWVQcml2YXRlICpkOwogICBmcmllbmQgY2xhc3MgRnJhbWVQcml2YXRlOwotICBmcmllbmQgY2xh
c3Mga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI7CiAKIHB1YmxpYzogIAogICBmcmllbmQgY2xh
c3MgTWFjRnJhbWU7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEyMTE5KQorKysgV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2OSw4ICsyNDY5LDkgQEAgRWRpdENvbW1h
bmRQdHIgRnJhbWU6Omxhc3RFZGl0Q29tbWFuZCgpCiAKIHZvaWQgRnJhbWU6OmFwcGxpZWRFZGl0
aW5nKEVkaXRDb21tYW5kUHRyICZjbWQpCiB7Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlv
bihjbWQuZW5kaW5nU2VsZWN0aW9uKCkpKSB7Ci0gICAgICAgIHNldFNlbGVjdGlvbihjbWQuZW5k
aW5nU2VsZWN0aW9uKCksIGZhbHNlKTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbChjbWQu
ZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkg
eworICAgICAgICBzZXRTZWxlY3Rpb24oc2VsLCBmYWxzZSk7CiAgICAgfQogCiAgICAgLy8gTm93
IHNldCB0aGUgdHlwaW5nIHN0eWxlIGZyb20gdGhlIGNvbW1hbmQuIENsZWFyIGl0IHdoZW4gZG9u
ZS4KQEAgLTI0OTksOCArMjUwMCw5IEBAIHZvaWQgRnJhbWU6OmFwcGxpZWRFZGl0aW5nKEVkaXRD
b21tYW5kUHQKIAogdm9pZCBGcmFtZTo6dW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciAm
Y21kKQogewotICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY21kLnN0YXJ0aW5nU2VsZWN0
aW9uKCkpKSB7Ci0gICAgICAgIHNldFNlbGVjdGlvbihjbWQuc3RhcnRpbmdTZWxlY3Rpb24oKSwg
dHJ1ZSk7CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWwoY21kLnN0YXJ0aW5nU2VsZWN0aW9u
KCkpOworICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkgeworICAgICAgICBzZXRT
ZWxlY3Rpb24oc2VsLCB0cnVlKTsKICAgICB9CiAgICAgTWFjKHRoaXMpLT5yZWdpc3RlckNvbW1h
bmRGb3JSZWRvKGNtZCk7CiAgICAgTWFjKHRoaXMpLT5yZXNwb25kVG9DaGFuZ2VkQ29udGVudHMo
KTsKQEAgLTI1MDksOCArMjUxMSw5IEBAIHZvaWQgRnJhbWU6OnVuYXBwbGllZEVkaXRpbmcoRWRp
dENvbW1hbmQKIAogdm9pZCBGcmFtZTo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciAm
Y21kKQogewotICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY21kLmVuZGluZ1NlbGVjdGlv
bigpKSkgewotICAgICAgICBzZXRTZWxlY3Rpb24oY21kLmVuZGluZ1NlbGVjdGlvbigpLCB0cnVl
KTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbChjbWQuZW5kaW5nU2VsZWN0aW9uKCkpOwor
ICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkgeworICAgICAgICBzZXRTZWxlY3Rp
b24oc2VsLCB0cnVlKTsKICAgICB9CiAgICAgTWFjKHRoaXMpLT5yZWdpc3RlckNvbW1hbmRGb3JV
bmRvKGNtZCk7CiAgICAgTWFjKHRoaXMpLT5yZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsK
</data>
<flag name="review"
          id="1297"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>