<?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>96955</bug_id>
          
          <creation_ts>2012-09-17 14:46:21 -0700</creation_ts>
          <short_desc>Refactored the arguments object so it doesn&apos;t dictate closure layout</short_desc>
          <delta_ts>2012-09-17 18:14:31 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>722286</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-17 14:46:21 -0700</bug_when>
    <thetext>Refactored the arguments object so it doesn&apos;t dictate closure layout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722305</commentid>
    <comment_count>1</comment_count>
      <attachid>164459</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-17 15:09:57 -0700</bug_when>
    <thetext>Created attachment 164459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722307</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-17 15:12:33 -0700</bug_when>
    <thetext>Oliver asked if it&apos;s common for websites to capture arguments by name and use the arguments object at the same time. There seems to one idiom where it is common: by-hand implementation of function.bind. 

I don&apos;t believe I&apos;ve made this case worse than it is today, since this case reifies the arguments object to pass it to slice, etc., which disables our optimizations. Also, I don&apos;t believe this patch is incompatible with optimization, if we first eliminated the reification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722397</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-17 18:14:31 -0700</bug_when>
    <thetext>Committed r128832: &lt;http://trac.webkit.org/changeset/128832&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164459</attachid>
            <date>2012-09-17 15:09:57 -0700</date>
            <delta_ts>2012-09-17 16:09:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96955-20120917150933.patch</filename>
            <type>text/plain</type>
            <size>53156</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI4ODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBA
CisyMDEyLTA5LTE3ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVmYWN0b3JlZCB0aGUgYXJndW1lbnRzIG9iamVjdCBzbyBpdCBkb2Vzbid0IGRpY3RhdGUg
Y2xvc3VyZSBsYXlvdXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk2OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjph
cmd1bWVudEFmdGVyQ2FwdHVyZSk6IEhlbHBlciBmdW5jdGlvbiBmb3IgYWNjZXNzaW5nIGFuCisg
ICAgICAgIGFyZ3VtZW50IHRoYXQgaGFzIGJlZW4gbW92ZWQgZm9yIGNhcHR1cmUuCisKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOiBHZW5lcmF0ZSBtZXRhZGF0YSBm
b3IgYXJndW1lbnRzCisgICAgICAgIHRoYXQgYXJlIGNhcHR1cmVkLiBXZSBkb24ndCBtb3ZlIGFu
eSBhcmd1bWVudHMgeWV0LCBidXQgd2UgZG8gdXNlIHRoaXMKKyAgICAgICAgbWV0YWRhdGEgdG8g
dGVsbCB0aGUgYXJndW1lbnRzIG9iamVjdCBpZiBhbiBhcmd1bWVudCBpcyBzdG9yZWQgaW4gdGhl
CisgICAgICAgIGFjdGl2YXRpb24uCisKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOiBVcGRhdGVkIGZvciB0aGUgYXJndW1lbnRzIG9iamVj
dCBub3QKKyAgICAgICAgbWFsbG9jJ2luZyBhIHNlcGFyYXRlIGJhY2tpbmcgc3RvcmUsIGFuZCBm
b3IgYSByZW5hbWUgZnJvbSBkZWxldGVkQXJndW1lbnRzCisgICAgICAgIHRvIHNsb3dBcmd1bWVu
dHMuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEV4ZWNT
dGF0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAg
ICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wp
OiBVcGRhdGVkIGZvciBzbWFsbCBpbnRlcmZhY2UgY2hhbmdlcy4KKworICAgICAgICAqIHJ1bnRp
bWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpBcmd1bWVudHM6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjcmVh
dGVTdHJpY3RNb2RlQ2FsbGVySWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6
OmNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkFyZ3Vt
ZW50czo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmdldE93blBy
b3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnB1dEJ5SW5kZXgpOgorICAg
ICAgICAoSlNDOjpBcmd1bWVudHM6OnB1dCk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpkZWxldGVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpBcmd1bWVudHM6OnRlYXJPZmYpOiBNb3ZlZCBhbGwgZGF0YSBpbmxpbmUgaW50
byB0aGUgb2JqZWN0LCBmb3Igc3BlZWQsCisgICAgICAgIGFuZCByZWZhY3RvcmVkIGFsbCBpbnRl
cm5hbCBhcmd1bWVudCBhY2Nlc3NlcyB0byB1c2UgaGVscGVyIGZ1bmN0aW9ucywgc28KKyAgICAg
ICAgd2UgY2FuIGNoYW5nZSB0aGUgaW1wbGVtZW50YXRpb24gd2l0aG91dCBjaGFuZ2luZyBsb3Rz
IG9mIGNvZGUuCisKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpkaWRUZWFyT2ZmQWN0aXZhdGlv
bik6IFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYWNjb3VudAorICAgICAgICBmb3IgYXJndW1lbnRz
IHRoYXQgd2VyZSBtb3ZlZCBieSB0aGUgYWN0aXZhdGlvbiBvYmplY3QuIFdlIGRvIHRoaXMgYWNj
b3VudGluZworICAgICAgICB0aHJvdWdoIGEgc2lkZSB2ZWN0b3IgdGhhdCB0ZWxscyB1cyB3aGVy
ZSBvdXIgYXJndW1lbnRzIHdpbGwgYmUgaW4gdGhlCisgICAgICAgIGFjdGl2YXRpb24uCisKKyAg
ICAgICAgKEpTQzo6QXJndW1lbnRzOjp0ZWFyT2ZmRm9ySW5saW5lQ2FsbEZyYW1lKToKKyAgICAg
ICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAg
KEpTQzo6QXJndW1lbnRzOjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmlzVG9y
bk9mZik6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6QXJndW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6QXJndW1lbnRzOjphbGxvY2F0ZVNsb3dBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBcmd1
bWVudHM6OnRyeURlbGV0ZUFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjp0cnlT
ZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6dHJ5R2V0QXJndW1lbnQpOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmlzRGVsZXRlZEFyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6QXJndW1lbnRzOjppc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjphcmd1
bWVudCk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24pOgorCisgICAg
ICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9u
OjpjcmVhdGUpOgorICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3Rp
dmF0aW9uOjpjYXB0dXJlU3RhcnQpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN0b3Jh
Z2VTaXplKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpyZWdpc3Rlck9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6aXNWYWxpZCk6IFRoZSBhY3RpdmF0aW9uIG9iamVj
dCBpcyBubyBsb25nZXIgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIGNvcHlpbmcgZXh0cmEgYXJn
dW1lbnRzIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuIFRoZSBhcmd1bW5lbnRzIG9iamVjdAorICAg
ICAgICBkb2VzIHRoaXMgaW5zdGVhZC4gVGhpcyBtZWFucyB3ZSBjYW4gYWxsb2NhdGUgYW5kIGlu
aXRpYWxpemUgYW4gYWN0aXZhdGlvbgorICAgICAgICB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHRo
ZSBjYWxsIGZyYW1lJ3MgYXJndW1lbnQgY291bnQuCisKKyAgICAgICAgKiBydW50aW1lL1N5bWJv
bFRhYmxlLmg6CisgICAgICAgIChKU0M6OlNsb3dBcmd1bWVudDo6U2xvd0FyZ3VtZW50KToKKyAg
ICAgICAgKFNsb3dBcmd1bWVudCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTaGFy
ZWRTeW1ib2xUYWJsZTo6cGFyYW1ldGVyQ291bnQpOgorICAgICAgICAoU2hhcmVkU3ltYm9sVGFi
bGUpOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6c2xvd0FyZ3VtZW50cyk6Cisg
ICAgICAgIChKU0M6OlNoYXJlZFN5bWJvbFRhYmxlOjpzZXRTbG93QXJndW1lbnRzKTogQWRkZWQg
ZGF0YSBzdHJ1Y3R1cmVzIHRvIGJhY2sKKyAgICAgICAgdGhlIGFsZ29yaXRobXMgYWJvdmUuCisK
IDIwMTItMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBJ
ZiBhIHByb3RvdHlwZSBoYXMgaW5kZXhlZCBzZXR0ZXJzIGFuZCBpdHMgaW5zdGFuY2VzIGhhdmUg
aW5kZXhlZCBzdG9yYWdlLCB0aGVuIGFsbCBwdXRfYnlfdmFsJ3Mgc2hvdWxkIGhhdmUgYSBiYWQg
dGltZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMTI4NTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ0LDYgKzE1NDQsMjUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgfQogI2VuZGlmCiAKKyAgICBpbmxpbmUgSlNWYWx1ZSBFeGVjU3RhdGU6OmFyZ3Vt
ZW50QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIGlmIChhcmd1
bWVudCA+PSBhcmd1bWVudENvdW50KCkpCisgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICAgICAgaWYgKCFjb2RlQmxvY2soKSkKKyAgICAgICAgICAgIHJldHVybiB0aGlz
W2FyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KV0uanNWYWx1ZSgpOworCisgICAgICAgIGlmIChhcmd1
bWVudCA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5zeW1ib2xUYWJsZSgpLT5w
YXJhbWV0ZXJDb3VudCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzW2FyZ3VtZW50T2Zmc2V0
KGFyZ3VtZW50KV0uanNWYWx1ZSgpOworCisgICAgICAgIGNvbnN0IFNsb3dBcmd1bWVudCogc2xv
d0FyZ3VtZW50cyA9IGNvZGVCbG9jaygpLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCk7
CisgICAgICAgIGlmICghc2xvd0FyZ3VtZW50cyB8fCBzbG93QXJndW1lbnRzW2FyZ3VtZW50XS5z
dGF0dXMgPT0gU2xvd0FyZ3VtZW50OjpOb3JtYWwpCisgICAgICAgICAgICByZXR1cm4gdGhpc1th
cmd1bWVudE9mZnNldChhcmd1bWVudCldLmpzVmFsdWUoKTsKKworICAgICAgICBBU1NFUlQoc2xv
d0FyZ3VtZW50c1thcmd1bWVudF0uc3RhdHVzID09IFNsb3dBcmd1bWVudDo6Q2FwdHVyZWQpOwor
ICAgICAgICByZXR1cm4gdGhpc1tzbG93QXJndW1lbnRzW2FyZ3VtZW50XS5pbmRleElmQ2FwdHVy
ZWRdLmpzVmFsdWUoKTsKKyAgICB9CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpbmxpbmUg
dm9pZCBERkdDb2RlQmxvY2tzOjptYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTI4NTQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyMywxOCArNDIzLDE5IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihGdW4KICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgY2FwdHVyZXNBbnlBcmd1bWVu
dCA9IGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8
fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOyAvLyBNYXkgcmVpZnkgYXJndW1lbnRzIG9iamVjdC4K
LSAgICBpZiAoIWNhcHR1cmVzQW55QXJndW1lbnQgJiYgZnVuY3Rpb25Cb2R5LT5oYXNDYXB0dXJl
ZFZhcmlhYmxlcygpKSB7CisgICAgYm9vbCBtYXlSZWlmeUFyZ3VtZW50c09iamVjdCA9IGNvZGVC
bG9jay0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8fCBtX3Nob3Vs
ZEVtaXREZWJ1Z0hvb2tzOworICAgIGJvb2wgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSA9IGZh
bHNlOworICAgIGlmIChmdW5jdGlvbkJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkpIHsKICAg
ICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9uQm9keS0+cGFy
YW1ldGVycygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmICghZnVuY3Rpb25Cb2R5LT5jYXB0dXJlcyhwYXJh
bWV0ZXJzW2ldKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNhcHR1
cmVzQW55QXJndW1lbnQgPSB0cnVlOworICAgICAgICAgICAgY2FwdHVyZXNBbnlBcmd1bWVudEJ5
TmFtZSA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChjYXB0dXJlc0FueUFyZ3VtZW50KSB7CisgICAgaWYgKG1heVJlaWZ5QXJndW1lbnRzT2Jq
ZWN0IHx8IGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUpIHsKICAgICAgICAgc3ltYm9sVGFibGUt
PnNldENhcHR1cmVNb2RlKFNoYXJlZFN5bWJvbFRhYmxlOjpBbGxPZlRoZVRoaW5ncyk7CiAgICAg
ICAgIHN5bWJvbFRhYmxlLT5zZXRDYXB0dXJlU3RhcnQoLUNhbGxGcmFtZTo6b2Zmc2V0Rm9yKHN5
bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIH0gZWxzZSB7
CkBAIC00NDIsNiArNDQzLDE2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihGdW4KICAgICAgICAgc3ltYm9sVGFibGUtPnNldENhcHR1cmVTdGFydChtX2NvZGVCbG9jay0+
bV9udW1WYXJzKTsKICAgICB9CiAKKyAgICBpZiAobWF5UmVpZnlBcmd1bWVudHNPYmplY3QgJiYg
Y2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSkgeworICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291
bnQgPSBzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICAgICAgT3duQXJyYXlQdHI8
U2xvd0FyZ3VtZW50PiBzbG93QXJndW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgU2xvd0FyZ3Vt
ZW50W3BhcmFtZXRlckNvdW50XSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFy
YW1ldGVyQ291bnQ7ICsraSkgeworICAgICAgICAgICAgc2xvd0FyZ3VtZW50c1tpXS5zdGF0dXMg
PSBTbG93QXJndW1lbnQ6OkNhcHR1cmVkOworICAgICAgICAgICAgc2xvd0FyZ3VtZW50c1tpXS5p
bmRleElmQ2FwdHVyZWQgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpOworICAgICAgICB9
CisgICAgICAgIHN5bWJvbFRhYmxlLT5zZXRTbG93QXJndW1lbnRzKHNsb3dBcmd1bWVudHMucmVs
ZWFzZSgpKTsKKyAgICB9CisKICAgICBSZWdpc3RlcklEKiBjYWxsZWVSZWdpc3RlciA9IHJlc29s
dmVDYWxsZWUoZnVuY3Rpb25Cb2R5KTsgLy8gTWF5IHB1c2ggdG8gdGhlIHNjb3BlIGNoYWluIGFu
ZC9vciBhZGQgYSBjYXB0dXJlZCB2YXIuCiAKICAgICBjb25zdCBEZWNsYXJhdGlvblN0YWNrczo6
RnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjayA9IGZ1bmN0aW9uQm9keS0+ZnVuY3Rpb25TdGFj
aygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxMjg1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTc4LDcgKzExNzgsNyBAQCB2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmNvZGVC
bG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwogICAgIGlmIChhY3RpdmF0aW9uQ2VsbCkgewotICAg
ICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJndW1lbnRzQ2VsbCktPmRpZFRlYXJPZmZBY3RpdmF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwganNDYXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb25D
ZWxsKSk7CisgICAgICAgIGpzQ2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHNDZWxsKS0+ZGlkVGVh
ck9mZkFjdGl2YXRpb24oZXhlYywganNDYXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb25DZWxs
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAganNDYXN0PEFyZ3VtZW50cyo+KGFyZ3Vt
ZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjg1NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzk4LDI4ICsyNzk4LDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRP
ZkRhdGEoKSksCi0gICAgICAgICAgICAgICAgc2NyYXRjaFJlZyk7Ci0KICAgICAgICAgICAgIC8v
IFR3byByZWFsbHkgbGFtZSBjaGVja3MuCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAog
ICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIE5vTm9kZSwKICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJn
dW1lbnRzRGF0YSwgbnVtQXJndW1lbnRzKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgT0JKRUNUX09GRlNFVE9GKEFyZ3VtZW50cywgbV9u
dW1Bcmd1bWVudHMpKSkpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAg
ICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVNvdXJjZSgpLCBOb05vZGUsCiAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZywgT0JKRUNUX09GRlNFVE9G
KEFyZ3VtZW50c0RhdGEsIGRlbGV0ZWRBcmd1bWVudHMpKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZVJlZywgT0JKRUNUX09GRlNFVE9GKEFyZ3VtZW50cywgbV9zbG93QXJndW1lbnRz
KSkpKTsKICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUocHJvcGVydHlSZWcsIHNjcmF0Y2gy
UmVnKTsKICAgICAgICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2gyUmVnKTsKICAgICAgICAgICAg
IG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyUmVnLCBzY3JhdGNoMlJlZyk7CiAgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hSZWcsIE9CSkVDVF9PRkZTRVRPRihBcmd1bWVudHNEYXRhLCByZWdpc3Rl
cnMpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJndW1lbnRzLCBtX3JlZ2lzdGVycykpLAogICAgICAgICAgICAgICAg
IHNjcmF0Y2hSZWcpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cigK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxMjg1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1NSwyOCArMzA1NSwyNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkFyCiAgIAogICAgIEFTU0VSVCht
b2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBBcnJheTo6
QXJndW1lbnRzKSk7CiAgICAgCi0gICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZkRhdGEoKSksCi0gICAg
ICAgIHNjcmF0Y2hSZWcpOwotCiAgICAgLy8gVHdvIHJlYWxseSBsYW1lIGNoZWNrcy4KICAgICBz
cGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVNvdXJjZSgpLCBO
b05vZGUsCiAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgT0JKRUNUX09GRlNFVE9GKEFyZ3VtZW50c0RhdGEsIG51
bUFyZ3VtZW50cykpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJndW1lbnRzLCBtX251bUFyZ3VtZW50cykpKSk7CiAgICAg
c3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwg
Tm9Ob2RlLAogICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAogICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygK
LSAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJndW1lbnRzRGF0
YSwgZGVsZXRlZEFyZ3VtZW50cykpKSk7CisgICAgICAgICAgICAgICAgYmFzZVJlZywgT0JKRUNU
X09GRlNFVE9GKEFyZ3VtZW50cywgbV9zbG93QXJndW1lbnRzKSkpKTsKICAgICAKICAgICBtX2pp
dC5tb3ZlKHByb3BlcnR5UmVnLCByZXN1bHRSZWcpOwogICAgIG1faml0Lm5lZzMyKHJlc3VsdFJl
Zyk7CiAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0UmVnLCByZXN1bHRSZWcpOwog
ICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hSZWcsIE9CSkVDVF9PRkZTRVRPRihBcmd1bWVudHNEYXRhLCByZWdpc3RlcnMpKSwKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgT0JKRUNUX09GRlNFVE9GKEFyZ3Vt
ZW50cywgbV9yZWdpc3RlcnMpKSwKICAgICAgICAgc2NyYXRjaFJlZyk7CiAgICAgCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKQEAgLTMxMTYsMTggKzMxMTIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEFyZ3VtZW50cwogICAgIAogICAgIEFTU0VSVChtb2RlQWxyZWFkeUNoZWNr
ZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBBcnJheTo6QXJndW1lbnRzKSk7CiAg
ICAgCi0gICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZkRhdGEoKSksCi0gICAgICAgIHJlc3VsdFJlZyk7
Ci0KICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVNv
dXJjZSgpLCBOb05vZGUsCiAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRSZWcsIE9CSkVDVF9PRkZTRVRPRihBcmd1bWVudHNEYXRhLCBvdmVycm9kZUxl
bmd0aCkpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJndW1lbnRzLCBtX292ZXJyb2RlTGVuZ3RoKSkpKTsKICAgICAKICAg
ICBtX2ppdC5sb2FkMzIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJl
ZywgT0JKRUNUX09GRlNFVE9GKEFyZ3VtZW50c0RhdGEsIG51bUFyZ3VtZW50cykpLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJndW1l
bnRzLCBtX251bUFyZ3VtZW50cykpLAogICAgICAgICByZXN1bHRSZWcpOwogICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxMjg1NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vIFJl
YWQgYSByZWdpc3RlciBmb3IgYSBub24tY29uc3RhbnQgCiAgICAgICAgIFJlZ2lzdGVyJiB1bmNo
ZWNrZWRSKGludCk7CiAKLSAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50cy4KKyAgICAgICAg
Ly8gQWNjZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVu
dHMgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
LSAxOyB9CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0
IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50XS5wYXlsb2FkKCk7IH0K
ICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldChpbnQgYXJndW1lbnQpIHsgcmV0dXJu
IHNfZmlyc3RBcmd1bWVudE9mZnNldCAtIGFyZ3VtZW50OyB9CkBAIC0yMDgsNiArMjA4LDggQEAg
bmFtZXNwYWNlIEpTQyAgewogICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSgpIHsgcmV0dXJuIHRo
aXNbdGhpc0FyZ3VtZW50T2Zmc2V0KCldLmpzVmFsdWUoKTsgfQogICAgICAgICB2b2lkIHNldFRo
aXNWYWx1ZShKU1ZhbHVlIHZhbHVlKSB7IHRoaXNbdGhpc0FyZ3VtZW50T2Zmc2V0KCldID0gdmFs
dWU7IH0KIAorICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1
bWVudCk7CisKICAgICAgICAgc3RhdGljIGludCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSB7IHJldHVybiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgfQogCiAgICAgICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlc2UuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDEyODU0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
Myw3ICs0NzMsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsCiAg
ICAgaWYgKG9sZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgb2xkQ29k
ZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgaWYgKEpTVmFsdWUgYXJndW1lbnRz
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihvbGRD
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKS5qc1ZhbHVlKCkpIHsKICAgICAgICAgICAg
IGlmIChhY3RpdmF0aW9uKQotICAgICAgICAgICAgICAgIGpzQ2FzdDxBcmd1bWVudHMqPihhcmd1
bWVudHMpLT5kaWRUZWFyT2ZmQWN0aXZhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwganND
YXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb24pKTsKKyAgICAgICAgICAgICAgICBqc0Nhc3Q8
QXJndW1lbnRzKj4oYXJndW1lbnRzKS0+ZGlkVGVhck9mZkFjdGl2YXRpb24oY2FsbEZyYW1lLCBq
c0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbikpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGpzQ2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHMpLT50ZWFyT2ZmKGNhbGxG
cmFtZSk7CiAgICAgICAgIH0KQEAgLTQ1MDgsNyArNDUwOCw3IEBAIHNraXBfaWRfY3VzdG9tX3Nl
bGY6CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSk7CiAgICAgICAg
IGlmIChKU1ZhbHVlIGFyZ3VtZW50c1ZhbHVlID0gY2FsbEZyYW1lLT5yKHVubW9kaWZpZWRBcmd1
bWVudHNSZWdpc3Rlcihhcmd1bWVudHMpKS5qc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIGlmIChK
U1ZhbHVlIGFjdGl2YXRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+cihhY3RpdmF0aW9uKS5qc1ZhbHVl
KCkpCi0gICAgICAgICAgICAgICAgYXNBcmd1bWVudHMoYXJndW1lbnRzVmFsdWUpLT5kaWRUZWFy
T2ZmQWN0aXZhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYXNBY3RpdmF0aW9uKGFjdGl2
YXRpb25WYWx1ZSkpOworICAgICAgICAgICAgICAgIGFzQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVl
KS0+ZGlkVGVhck9mZkFjdGl2YXRpb24oY2FsbEZyYW1lLCBhc0FjdGl2YXRpb24oYWN0aXZhdGlv
blZhbHVlKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYXNBcmd1bWVudHMo
YXJndW1lbnRzVmFsdWUpLT50ZWFyT2ZmKGNhbGxGcmFtZSk7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMjg1NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMyMyw3ICsyMzIzLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZf
YQogICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwog
ICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNDYXN0PEFyZ3VtZW50cyo+KHN0YWNrRnJhbWUu
YXJnc1swXS5qc1ZhbHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGFjdGl2YXRpb25WYWx1ZSA9IHN0
YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCkpIHsKLSAgICAgICAgYXJndW1lbnRzLT5kaWRUZWFy
T2ZmQWN0aXZhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwganNDYXN0PEpTQWN0aXZhdGlv
bio+KGFjdGl2YXRpb25WYWx1ZSkpOworICAgICAgICBhcmd1bWVudHMtPmRpZFRlYXJPZmZBY3Rp
dmF0aW9uKGNhbGxGcmFtZSwganNDYXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb25WYWx1ZSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFyZ3VtZW50cy0+dGVhck9mZihjYWxsRnJh
bWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAxMjg1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDc1LDcgKzE0NzUsNyBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGVhcl9vZmZfCiAgICAgQVNTRVJUKGV4ZWMt
PmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwogICAgIEFyZ3VtZW50cyogYXJndW1lbnRz
ID0ganNDYXN0PEFyZ3VtZW50cyo+KGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCkpLmpzVmFsdWUoKSk7CiAgICAgaWYgKEpTVmFsdWUg
YWN0aXZhdGlvblZhbHVlID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCkpCi0gICAgICAgIGFyZ3Vt
ZW50cy0+ZGlkVGVhck9mZkFjdGl2YXRpb24oZ2xvYmFsRGF0YSwganNDYXN0PEpTQWN0aXZhdGlv
bio+KGFjdGl2YXRpb25WYWx1ZSkpOworICAgICAgICBhcmd1bWVudHMtPmRpZFRlYXJPZmZBY3Rp
dmF0aW9uKGV4ZWMsIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uVmFsdWUpKTsKICAg
ICBlbHNlCiAgICAgICAgIGFyZ3VtZW50cy0+dGVhck9mZihleGVjKTsKICAgICBMTElOVF9FTkQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAko
cmV2aXNpb24gMTI4NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDEwIEBAIHZvaWQgQXJndW1lbnRz
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0
dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKICAgICBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIGlmICh0aGlzT2Jq
ZWN0LT5kLT5yZWdpc3RlckFycmF5KQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlz
T2JqZWN0LT5kLT5yZWdpc3RlckFycmF5LmdldCgpLCB0aGlzT2JqZWN0LT5kLT5udW1Bcmd1bWVu
dHMpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5kLT5jYWxsZWUpOwotICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5kLT5hY3RpdmF0aW9uKTsKKyAgICBpZiAodGhpc09i
amVjdC0+bV9yZWdpc3RlckFycmF5KQorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlz
T2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCksIHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRz
KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsZWUpOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24pOwogfQogCiB2b2lkIEFyZ3VtZW50
czo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQXJndW1lbnRz
OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIAogdm9pZCBBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50
cyhFeGVjU3RhdGUqIGV4ZWMsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1aW50MzJfdCBsZW5ndGgp
CiB7Ci0gICAgaWYgKFVOTElLRUxZKGQtPm92ZXJyb2RlTGVuZ3RoKSkgeworICAgIGlmIChVTkxJ
S0VMWShtX292ZXJyb2RlTGVuZ3RoKSkgewogICAgICAgICBsZW5ndGggPSBtaW4oZ2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpLCBsZW5ndGgpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CkBAIC02Niw4ICs2Niw4
IEBAIHZvaWQgQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXQKICAgICB9CiAgICAg
QVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgoZXhlYykpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFkLT5kZWxldGVkQXJndW1lbnRz
IHx8ICFkLT5kZWxldGVkQXJndW1lbnRzW2ldKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRB
cmd1bWVudChpLCBhcmd1bWVudChpKS5nZXQoKSk7CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVl
ID0gdHJ5R2V0QXJndW1lbnQoaSkpCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50
KGksIHZhbHVlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1
bWVudChpLCBnZXQoZXhlYywgaSkpOwogICAgIH0KQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBBcmd1
bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdAogCiB2b2lkIEFyZ3VtZW50czo6ZmlsbEFy
Z0xpc3QoRXhlY1N0YXRlKiBleGVjLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncykKIHsKLSAg
ICBpZiAoVU5MSUtFTFkoZC0+b3ZlcnJvZGVMZW5ndGgpKSB7CisgICAgaWYgKFVOTElLRUxZKG1f
b3ZlcnJvZGVMZW5ndGgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgCiAgICAgICAgICAgICBhcmdzLmFw
cGVuZChnZXQoZXhlYywgaSkpOyAKQEAgLTgzLDggKzgzLDggQEAgdm9pZCBBcmd1bWVudHM6OmZp
bGxBcmdMaXN0KEV4ZWNTdGF0ZSogZQogICAgIH0KICAgICB1aW50MzJfdCBsZW5ndGggPSB0aGlz
LT5sZW5ndGgoZXhlYyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIWQtPmRlbGV0ZWRBcmd1bWVu
dHNbaV0pCi0gICAgICAgICAgICBhcmdzLmFwcGVuZChhcmd1bWVudChpKS5nZXQoKSk7CisgICAg
ICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gdHJ5R2V0QXJndW1lbnQoaSkpCisgICAgICAgICAgICBh
cmdzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFyZ3MuYXBwZW5k
KGdldChleGVjLCBpKSk7CiAgICAgfQpAQCAtOTMsOCArOTMsOCBAQCB2b2lkIEFyZ3VtZW50czo6
ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBlCiBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxB
cmd1bWVudHMqPihjZWxsKTsKLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50
cyAmJiAoIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIXRoaXNPYmplY3QtPmQt
PmRlbGV0ZWRBcmd1bWVudHNbaV0pKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVj
dC0+YXJndW1lbnQoaSkuZ2V0KCkpOworICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVj
dC0+dHJ5R2V0QXJndW1lbnQoaSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTAzLDEwICsxMDMsMTAgQEAgYm9vbCBB
cmd1bWVudHM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZQogICAgIAogdm9pZCBBcmd1bWVudHM6
OmNyZWF0ZVN0cmljdE1vZGVDYWxsZXJJZk5lY2Vzc2FyeShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgaWYgKGQtPm92ZXJyb2RlQ2FsbGVyKQorICAgIGlmIChtX292ZXJyb2RlQ2FsbGVyKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBkLT5vdmVycm9kZUNhbGxlciA9IHRydWU7CisgICAgbV9vdmVy
cm9kZUNhbGxlciA9IHRydWU7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAg
ICAgZGVzY3JpcHRvci5zZXRBY2Nlc3NvckRlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0KCktPnRocm93
VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBBY2Nl
c3Nvcik7CiAgICAgbWV0aG9kVGFibGUoKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpcywgZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlciwgZGVzY3JpcHRvciwgZmFsc2UpOwpAQCAtMTE0
LDEwICsxMTQsMTAgQEAgdm9pZCBBcmd1bWVudHM6OmNyZWF0ZVN0cmljdE1vZGVDYWxsZXJJZgog
CiB2b2lkIEFyZ3VtZW50czo6Y3JlYXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVjZXNzYXJ5KEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBpZiAoZC0+b3ZlcnJvZGVDYWxsZWUpCisgICAgaWYgKG1fb3Zl
cnJvZGVDYWxsZWUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBkLT5vdmVycm9kZUNhbGxl
ZSA9IHRydWU7CisgICAgbV9vdmVycm9kZUNhbGxlZSA9IHRydWU7CiAgICAgUHJvcGVydHlEZXNj
cmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgZGVzY3JpcHRvci5zZXRBY2Nlc3NvckRlc2NyaXB0b3Io
Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RW51
bSB8IERvbnREZWxldGUgfCBBY2Nlc3Nvcik7CiAgICAgbWV0aG9kVGFibGUoKS0+ZGVmaW5lT3du
UHJvcGVydHkodGhpcywgZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlZSwgZGVzY3Jp
cHRvciwgZmFsc2UpOwpAQCAtMTI3LDI2ICsxMjcsMjYgQEAgYm9vbCBBcmd1bWVudHM6OmdldE93
blByb3BlcnR5U2xvdChKU0NlbAogewogICAgIEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxBcmd1bWVudHMqPihjZWxsKTsKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTsKLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50cyAmJiAoIXRoaXNP
YmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1
bWVudHNbaV0pKSB7CisgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRB
cmd1bWVudChpKSkgewogICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCk7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+YXJndW1lbnQoaSkuZ2V0KCkp
OworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoICYmIExJS0VMWSghdGhpc09iamVjdC0+ZC0+b3ZlcnJvZGVMZW5ndGgpKSB7Ci0gICAgICAg
IHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+ZC0+bnVtQXJndW1lbnRzKSk7Cisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoICYmIExJ
S0VMWSghdGhpc09iamVjdC0+bV9vdmVycm9kZUxlbmd0aCkpIHsKKyAgICAgICAgc2xvdC5zZXRW
YWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5tX251bUFyZ3VtZW50cykpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jYWxsZWUgJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5kLT5vdmVycm9kZUNhbGxlZSkp
IHsKLSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5kLT5pc1N0cmljdE1vZGUpIHsKLSAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+ZC0+Y2FsbGVlLmdldCgpKTsKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUgJiYgTElLRUxZKCF0
aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3Qt
Pm1faXNTdHJpY3RNb2RlKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3Qt
Pm1fY2FsbGVlLmdldCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShleGVj
KTsKICAgICB9CiAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jYWxsZXIgJiYgdGhpc09iamVjdC0+ZC0+aXNTdHJpY3RNb2RlKQorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlciAmJiB0aGlzT2JqZWN0LT5tX2lz
U3RyaWN0TW9kZSkKICAgICAgICAgdGhpc09iamVjdC0+Y3JlYXRlU3RyaWN0TW9kZUNhbGxlcklm
TmVjZXNzYXJ5KGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKQEAgLTE1NiwyNiArMTU2
LDI2IEBAIGJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IKIHsKICAgICBB
cmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4ob2JqZWN0KTsKICAgICB1
bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSA8IHRoaXNPYmpl
Y3QtPmQtPm51bUFyZ3VtZW50cyAmJiAoIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHMg
fHwgIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pKSB7CisgICAgaWYgKEpTVmFs
dWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVudChpKSkgewogICAgICAgICBBU1NF
UlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5hcmd1bWVudChpKS5nZXQoKSwgTm9uZSk7CisgICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgTm9uZSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5kLT5vdmVycm9kZUxlbmd0aCkp
IHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3Qt
PmQtPm51bUFyZ3VtZW50cyksIERvbnRFbnVtKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJy
b2RlTGVuZ3RoKSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIo
dGhpc09iamVjdC0+bV9udW1Bcmd1bWVudHMpLCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jYWxsZWUgJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5kLT5vdmVycm9kZUNhbGxlZSkp
IHsKLSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5kLT5pc1N0cmljdE1vZGUpIHsKLSAgICAgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5kLT5jYWxsZWUuZ2V0KCks
IERvbnRFbnVtKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jYWxsZWUgJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSkgeworICAg
ICAgICBpZiAoIXRoaXNPYmplY3QtPm1faXNTdHJpY3RNb2RlKSB7CisgICAgICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVt
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHRoaXNPYmpl
Y3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShleGVjKTsKICAgICB9CiAKLSAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIgJiYgdGhp
c09iamVjdC0+ZC0+aXNTdHJpY3RNb2RlKQorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmNhbGxlciAmJiB0aGlzT2JqZWN0LT5tX2lzU3RyaWN0TW9kZSkKICAg
ICAgICAgdGhpc09iamVjdC0+Y3JlYXRlU3RyaWN0TW9kZUNhbGxlcklmTmVjZXNzYXJ5KGV4ZWMp
OwogICAgIAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CkBAIC0xODQsOSArMTg0
LDEwIEBAIGJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IKIHZvaWQgQXJn
dW1lbnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQogewogICAgIEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxBcmd1bWVudHMqPihv
YmplY3QpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5kLT5udW1B
cmd1bWVudHM7ICsraSkgewotICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1
bWVudHMgfHwgIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pCi0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIFN0cmluZzo6bnVtYmVyKGkpKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRz
OyArK2kpIHsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0FyZ3VtZW50KGkpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhl
YywgU3RyaW5nOjpudW1iZXIoaSkpKTsKICAgICB9CiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykgewogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY2FsbGVlKTsKQEAgLTE5OCwxMCArMTk5LDggQEAgdm9pZCBBcmd1bWVudHM6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYgogdm9pZCBBcmd1bWVudHM6OnB1dEJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFy
Z3VtZW50cyo+KGNlbGwpOwotICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRoaXNP
YmplY3QtPmQtPm51bUFyZ3VtZW50cykgJiYgKCF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1l
bnRzIHx8ICF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzW2ldKSkgewotICAgICAgICB0
aGlzT2JqZWN0LT5hcmd1bWVudChpKS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0
LCB2YWx1ZSk7CisgICAgaWYgKHRoaXNPYmplY3QtPnRyeVNldEFyZ3VtZW50KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgaSwgdmFsdWUpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJpbmc6Om51bWJlcihpKSksIHZhbHVlLCBzbG90
KTsKQEAgLTIxMSwyOCArMjEwLDI1IEBAIHZvaWQgQXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3QKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRz
Kj4oY2VsbCk7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAg
aWYgKGkgPCB0aGlzT2JqZWN0LT5kLT5udW1Bcmd1bWVudHMgJiYgKCF0aGlzT2JqZWN0LT5kLT5k
ZWxldGVkQXJndW1lbnRzIHx8ICF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzW2ldKSkg
ewotICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAg
IHRoaXNPYmplY3QtPmFyZ3VtZW50KGkpLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmpl
Y3QsIHZhbHVlKTsKKyAgICBpZiAodGhpc09iamVjdC0+dHJ5U2V0QXJndW1lbnQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBpLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgIXRoaXNPYmpl
Y3QtPmQtPm92ZXJyb2RlTGVuZ3RoKSB7Ci0gICAgICAgIHRoaXNPYmplY3QtPmQtPm92ZXJyb2Rl
TGVuZ3RoID0gdHJ1ZTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGggJiYgIXRoaXNPYmplY3QtPm1fb3ZlcnJvZGVMZW5ndGgpIHsKKyAgICAgICAg
dGhpc09iamVjdC0+bV9vdmVycm9kZUxlbmd0aCA9IHRydWU7CiAgICAgICAgIHRoaXNPYmplY3Qt
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIERvbnRF
bnVtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlZSAmJiAhdGhpc09iamVjdC0+ZC0+b3ZlcnJvZGVD
YWxsZWUpIHsKLSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5kLT5pc1N0cmljdE1vZGUpIHsKLSAg
ICAgICAgICAgIHRoaXNPYmplY3QtPmQtPm92ZXJyb2RlQ2FsbGVlID0gdHJ1ZTsKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUgJiYgIXRoaXNPYmpl
Y3QtPm1fb3ZlcnJvZGVDYWxsZWUpIHsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX2lzU3Ry
aWN0TW9kZSkgeworICAgICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycm9kZUNhbGxlZSA9IHRy
dWU7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBEb250RW51bSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgdGhpc09iamVjdC0+Y3JlYXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVj
ZXNzYXJ5KGV4ZWMpOwogICAgIH0KIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNhbGxlciAmJiB0aGlzT2JqZWN0LT5kLT5pc1N0cmljdE1vZGUpCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyICYmIHRoaXNP
YmplY3QtPm1faXNTdHJpY3RNb2RlKQogICAgICAgICB0aGlzT2JqZWN0LT5jcmVhdGVTdHJpY3RN
b2RlQ2FsbGVySWZOZWNlc3NhcnkoZXhlYyk7CiAKICAgICBKU09iamVjdDo6cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwpAQCAtMjQxLDIwICsyMzcsMTIg
QEAgdm9pZCBBcmd1bWVudHM6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdAogYm9vbCBBcmd1bWVu
dHM6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaSkgCiB7CiAgICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3Vt
ZW50cyo+KGNlbGwpOwotICAgIGlmIChpIDwgdGhpc09iamVjdC0+ZC0+bnVtQXJndW1lbnRzKSB7
CisgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX251bUFyZ3VtZW50cykgewogICAgICAgICBpZiAo
IUJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChjZWxsLCBleGVjLCBpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1
bWVudHMpIHsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHMgPSBh
ZG9wdEFycmF5UHRyKG5ldyBib29sW3RoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50c10pOwotICAg
ICAgICAgICAgbWVtc2V0KHRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHMuZ2V0KCksIDAs
IHNpemVvZihib29sKSAqIHRoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50cyk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzW2ldKSB7Ci0gICAg
ICAgICAgICB0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzW2ldID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKHRoaXNPYmplY3QtPnRyeURlbGV0ZUFyZ3VtZW50KGkpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIH0KIApAQCAtMjY1LDM1ICsy
NTMsMjggQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogYwogCiAgICAg
QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KGNlbGwpOwogICAgIHVu
c2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpIDwgdGhpc09iamVj
dC0+ZC0+bnVtQXJndW1lbnRzKSB7CisgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX251bUFyZ3Vt
ZW50cykgewogICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAg
ICAgICAgIGlmICghQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1l
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIXRoaXNPYmplY3Qt
PmQtPmRlbGV0ZWRBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPmQtPmRlbGV0
ZWRBcmd1bWVudHMgPSBhZG9wdEFycmF5UHRyKG5ldyBib29sW3RoaXNPYmplY3QtPmQtPm51bUFy
Z3VtZW50c10pOwotICAgICAgICAgICAgbWVtc2V0KHRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1
bWVudHMuZ2V0KCksIDAsIHNpemVvZihib29sKSAqIHRoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1l
bnRzW2ldKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzW2ld
ID0gdHJ1ZTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPnRyeURlbGV0ZUFyZ3VtZW50KGkpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgIXRoaXNPYmplY3Qt
PmQtPm92ZXJyb2RlTGVuZ3RoKSB7Ci0gICAgICAgIHRoaXNPYmplY3QtPmQtPm92ZXJyb2RlTGVu
Z3RoID0gdHJ1ZTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGggJiYgIXRoaXNPYmplY3QtPm1fb3ZlcnJvZGVMZW5ndGgpIHsKKyAgICAgICAgdGhp
c09iamVjdC0+bV9vdmVycm9kZUxlbmd0aCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNh
bGxlZSAmJiAhdGhpc09iamVjdC0+ZC0+b3ZlcnJvZGVDYWxsZWUpIHsKLSAgICAgICAgaWYgKCF0
aGlzT2JqZWN0LT5kLT5pc1N0cmljdE1vZGUpIHsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPmQt
Pm92ZXJyb2RlQ2FsbGVlID0gdHJ1ZTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jYWxsZWUgJiYgIXRoaXNPYmplY3QtPm1fb3ZlcnJvZGVDYWxsZWUpIHsK
KyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX2lzU3RyaWN0TW9kZSkgeworICAgICAgICAgICAg
dGhpc09iamVjdC0+bV9vdmVycm9kZUNhbGxlZSA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICB0aGlzT2JqZWN0LT5jcmVhdGVTdHJpY3RNb2RlQ2Fs
bGVlSWZOZWNlc3NhcnkoZXhlYyk7CiAgICAgfQogICAgIAotICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlciAmJiB0aGlzT2JqZWN0LT5kLT5pc1N0cmlj
dE1vZGUpCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2Fs
bGVyICYmIHRoaXNPYmplY3QtPm1faXNTdHJpY3RNb2RlKQogICAgICAgICB0aGlzT2JqZWN0LT5j
cmVhdGVTdHJpY3RNb2RlQ2FsbGVySWZOZWNlc3NhcnkoZXhlYyk7CiAKICAgICByZXR1cm4gSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CkBA
IC0zMDMsNDcgKzI4NCw0NiBAQCBib29sIEFyZ3VtZW50czo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplCiB7CiAgICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KG9i
amVjdCk7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYg
KGkgPCB0aGlzT2JqZWN0LT5kLT5udW1Bcmd1bWVudHMpIHsKKyAgICBpZiAoaSA8IHRoaXNPYmpl
Y3QtPm1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgIEFTU0VSVChpIDwgUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4KTsKICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB5ZXQgcHJlc2Vu
dCBvbiB0aGUgb2JqZWN0LCBhbmQgaXMgbm90IHlldCBtYXJrZWQgYXMgZGVsZXRlZCwgdGhlbiBh
ZGQgaXQgbm93LgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgaWYgKCghdGhp
c09iamVjdC0+ZC0+ZGVsZXRlZEFyZ3VtZW50cyB8fCAhdGhpc09iamVjdC0+ZC0+ZGVsZXRlZEFy
Z3VtZW50c1tpXSkgJiYgIUpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0
TWF5QmVJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmFyZ3VtZW50KGkpLmdl
dCgpKTsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0RlbGV0ZWRBcmd1bWVudChpKSAmJiAh
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+dHJ5
R2V0QXJndW1lbnQoaSk7CisgICAgICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICAgICAg
b2JqZWN0LT5wdXREaXJlY3RNYXlCZUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwor
ICAgICAgICB9CiAgICAgICAgIGlmICghQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1
bWVudHMpIHsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHMgPSBh
ZG9wdEFycmF5UHRyKG5ldyBib29sW3RoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50c10pOwotICAg
ICAgICAgICAgbWVtc2V0KHRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHMuZ2V0KCksIDAs
IHNpemVvZihib29sKSAqIHRoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50cyk7Ci0gICAgICAgIH0K
ICAgICAgICAgLy8gRnJvbSBFUyA1LjEsIDEwLjYgQXJndW1lbnRzIE9iamVjdAogICAgICAgICAv
LyA1LiBJZiB0aGUgdmFsdWUgb2YgaXNNYXBwZWQgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgotICAg
ICAgICBpZiAoIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsKKyAgICAgICAg
aWYgKHRoaXNPYmplY3QtPmlzQXJndW1lbnQoaSkpIHsKICAgICAgICAgICAgIC8vIGEuIElmIElz
QWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4KICAgICAgICAgICAgIGlmIChk
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgICAgICAgICAvLyBp
LiBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBtYXAgcGFzc2luZyBQLCBh
bmQgZmFsc2UgYXMgdGhlIGFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5k
LT5kZWxldGVkQXJndW1lbnRzW2ldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0
LT50cnlEZWxldGVBcmd1bWVudChpKTsKICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGIuIEVsc2UK
ICAgICAgICAgICAgICAgICAvLyBpLiBJZiBEZXNjLltbVmFsdWVdXSBpcyBwcmVzZW50LCB0aGVu
CiAgICAgICAgICAgICAgICAgLy8gMS4gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgbWFwIHBhc3NpbmcgUCwgRGVzYy5bW1ZhbHVlXV0sIGFuZCBUaHJvdyBhcyB0aGUgYXJndW1l
bnRzLgogICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPmFyZ3VtZW50KGkpLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXNPYmplY3QsIGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIHRo
aXNPYmplY3QtPnRyeVNldEFyZ3VtZW50KGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwgZGVzY3JpcHRv
ci52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAvLyBpaS4gSWYgRGVzYy5bW1dyaXRhYmxlXV0g
aXMgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIGZhbHNlLCB0aGVuCiAgICAgICAgICAgICAgICAg
Ly8gMS4gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgbWFwIHBhc3Npbmcg
UCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgogICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9y
LndyaXRhYmxlUHJlc2VudCgpICYmICFkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHNbaV0gPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT50cnlEZWxldGVBcmd1bWVudChpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgIXRoaXNP
YmplY3QtPmQtPm92ZXJyb2RlTGVuZ3RoKSB7Ci0gICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwganNOdW1iZXIodGhpc09iamVjdC0+
ZC0+bnVtQXJndW1lbnRzKSwgRG9udEVudW0pOwotICAgICAgICB0aGlzT2JqZWN0LT5kLT5vdmVy
cm9kZUxlbmd0aCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmNhbGxlZSAmJiAhdGhpc09iamVjdC0+ZC0+b3ZlcnJvZGVDYWxsZWUp
IHsKLSAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lLCB0aGlzT2JqZWN0LT5kLT5jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKLSAgICAg
ICAgdGhpc09iamVjdC0+ZC0+b3ZlcnJvZGVDYWxsZWUgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIgJiYgdGhpc09iamVj
dC0+ZC0+aXNTdHJpY3RNb2RlKQorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCAmJiAhdGhpc09iamVjdC0+bV9vdmVycm9kZUxlbmd0aCkgeworICAg
ICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsIGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRzKSwgRG9udEVudW0pOworICAg
ICAgICB0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlICYmICF0aGlzT2Jq
ZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSB7CisgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0
KCksIERvbnRFbnVtKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycm9kZUNhbGxlZSA9IHRy
dWU7CisgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNhbGxlciAmJiB0aGlzT2JqZWN0LT5tX2lzU3RyaWN0TW9kZSkKICAgICAgICAgdGhpc09iamVj
dC0+Y3JlYXRlU3RyaWN0TW9kZUNhbGxlcklmTmVjZXNzYXJ5KGV4ZWMpOwogCiAgICAgcmV0dXJu
IEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCBzaG91bGRUaHJvdyk7CkBAIC0zNTQsMTggKzMzNCwxOCBAQCB2b2lkIEFyZ3VtZW50
czo6dGVhck9mZihDYWxsRnJhbWUqIGNhbGxGCiAgICAgaWYgKGlzVG9ybk9mZigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIWQtPm51bUFyZ3VtZW50cykKKyAgICBpZiAoIW1fbnVtQXJn
dW1lbnRzKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNdXN0IGJlIGNhbGxlZCBmb3IgdGhl
IHNhbWUgY2FsbCBmcmFtZSBmcm9tIHdoaWNoIGl0IHdhcyBjcmVhdGVkLgotICAgIEFTU0VSVChi
aXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oY2FsbEZyYW1lKSA9PSBkLT5yZWdp
c3RlcnMpOworICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
Y2FsbEZyYW1lKSA9PSBtX3JlZ2lzdGVycyk7CiAgICAgCi0gICAgZC0+cmVnaXN0ZXJBcnJheSA9
IGFkb3B0QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPltkLT5udW1Bcmd1bWVudHNd
KTsKLSAgICBkLT5yZWdpc3RlcnMgPSBkLT5yZWdpc3RlckFycmF5LmdldCgpICsgQ2FsbEZyYW1l
OjpvZmZzZXRGb3IoZC0+bnVtQXJndW1lbnRzICsgMSk7CisgICAgbV9yZWdpc3RlckFycmF5ID0g
YWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W21fbnVtQXJndW1lbnRzXSk7
CisgICAgbV9yZWdpc3RlcnMgPSBtX3JlZ2lzdGVyQXJyYXkuZ2V0KCkgKyBDYWxsRnJhbWU6Om9m
ZnNldEZvcihtX251bUFyZ3VtZW50cyArIDEpOwogCiAgICAgaWYgKCFjYWxsRnJhbWUtPmlzSW5s
aW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkLT5udW1B
cmd1bWVudHM7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50KGkpLnNldChjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSwgdGhpcywgY2FsbEZyYW1lLT5hcmd1bWVudChpKSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9udW1Bcmd1bWVudHM7ICsraSkKKyAgICAgICAgICAgIHRyeVNl
dEFyZ3VtZW50KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBpLCBjYWxsRnJhbWUtPmFyZ3VtZW50
QWZ0ZXJDYXB0dXJlKGkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzczLDE2ICsz
NTMsNDEgQEAgdm9pZCBBcmd1bWVudHM6OnRlYXJPZmYoQ2FsbEZyYW1lKiBjYWxsRgogICAgICAg
ICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSwgY2FsbEZy
YW1lLT5pbmxpbmVDYWxsRnJhbWUoKSk7CiB9CiAKK3ZvaWQgQXJndW1lbnRzOjpkaWRUZWFyT2Zm
QWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbikKK3sK
KyAgICBBU1NFUlQoYWN0aXZhdGlvbik7CisgICAgaWYgKGlzVG9ybk9mZigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fbnVtQXJndW1lbnRzKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgdGVhck9mZihleGVjKTsKKworICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCk7CisgICAgY29uc3QgU2xvd0FyZ3VtZW50KiBz
bG93QXJndW1lbnRzID0gc3ltYm9sVGFibGUtPnNsb3dBcmd1bWVudHMoKTsKKyAgICBpZiAoIXNs
b3dBcmd1bWVudHMpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChzeW1ib2xUYWJsZS0+
Y2FwdHVyZU1vZGUoKSA9PSBTaGFyZWRTeW1ib2xUYWJsZTo6QWxsT2ZUaGVUaGluZ3MpOworICAg
IG1fYWN0aXZhdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY3RpdmF0aW9uKTsK
KworICAgIGFsbG9jYXRlU2xvd0FyZ3VtZW50cygpOworICAgIHNpemVfdCBwYXJhbWV0ZXJDb3Vu
dCA9IHN5bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkKKyAgICAgICAgbV9zbG93QXJndW1lbnRzW2ldID0g
c2xvd0FyZ3VtZW50c1tpXTsKK30KKwogdm9pZCBBcmd1bWVudHM6OnRlYXJPZmYoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAgIGlm
IChpc1Rvcm5PZmYoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmICghZC0+bnVtQXJn
dW1lbnRzKQorICAgIGlmICghbV9udW1Bcmd1bWVudHMpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBkLT5yZWdpc3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVu
a25vd24+W2QtPm51bUFyZ3VtZW50c10pOwotICAgIGQtPnJlZ2lzdGVycyA9IGQtPnJlZ2lzdGVy
QXJyYXkuZ2V0KCkgKyBDYWxsRnJhbWU6Om9mZnNldEZvcihkLT5udW1Bcmd1bWVudHMgKyAxKTsK
KyAgICBtX3JlZ2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5r
bm93bj5bbV9udW1Bcmd1bWVudHNdKTsKKyAgICBtX3JlZ2lzdGVycyA9IG1fcmVnaXN0ZXJBcnJh
eS5nZXQoKSArIENhbGxGcmFtZTo6b2Zmc2V0Rm9yKG1fbnVtQXJndW1lbnRzICsgMSk7CiAKICAg
ICB0ZWFyT2ZmRm9ySW5saW5lQ2FsbEZyYW1lKAogICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQsCkBAIC0zOTEsNyArMzk2LDcgQEAgdm9pZCBBcmd1bWVudHM6OnRlYXJPZmYoQ2FsbEZyYW1l
KiBjYWxsRgogCiB2b2lkIEFyZ3VtZW50czo6dGVhck9mZkZvcklubGluZUNhbGxGcmFtZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFJlZ2lzdGVyKiByZWdpc3RlcnMsIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZC0+bnVt
QXJndW1lbnRzOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbnVtQXJndW1l
bnRzOyArK2kpIHsKICAgICAgICAgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50c1tpICsgMV07CiAgICAgICAgIC8vIEluIHRoZSBmdXR1cmUgd2UnbGwg
c3VwcG9ydCBkaXNwbGFjZWQgcmVjb3ZlcmllcyAoaW5kaWNhdGluZyB0aGF0IHRoZQogICAgICAg
ICAvLyBhcmd1bWVudCB3YXMgZmx1c2hlZCB0byBhIGRpZmZlcmVudCBsb2NhdGlvbiksIGJ1dCBm
b3Igbm93IHdlIGRvbid0IGRvCkBAIC00MjcsNyArNDMyLDcgQEAgdm9pZCBBcmd1bWVudHM6OnRl
YXJPZmZGb3JJbmxpbmVDYWxsRnJhbQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBhcmd1bWVudChpKS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICB0cnlTZXRBcmd1bWVudChnbG9iYWxE
YXRhLCBpLCB2YWx1ZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gMTI4NTQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDMxICszMyw5
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgc3RydWN0IEFyZ3VtZW50c0RhdGEgewotICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcmd1bWVudHNEYXRhKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBBcmd1bWVudHNEYXRhKCkgeyB9Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxKU0FjdGl2YXRpb24+IGFjdGl2YXRpb247Ci0KLSAgICAgICAgdW5z
aWduZWQgbnVtQXJndW1lbnRzOwotCi0gICAgICAgIC8vIFdlIG1ha2UgdGhlc2UgZnVsbCBieXRl
IGJvb2xlYW5zIHRvIG1ha2UgdGhlbSBlYXN5IHRvIHRlc3QgZnJvbSB0aGUgSklULAotICAgICAg
ICAvLyBhbmQgYmVjYXVzZSBldmVuIGlmIHRoZXkgd2VyZSBzaW5nbGUtYml0IGJvb2xlYW5zIHdl
IHN0aWxsIHdvdWxkbid0IHNhdmUKLSAgICAgICAgLy8gYW55IHNwYWNlLgotICAgICAgICBib29s
IG92ZXJyb2RlTGVuZ3RoOyAKLSAgICAgICAgYm9vbCBvdmVycm9kZUNhbGxlZTsKLSAgICAgICAg
Ym9vbCBvdmVycm9kZUNhbGxlcjsKLSAgICAgICAgYm9vbCBpc1N0cmljdE1vZGU7Ci0KLSAgICAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnaXN0ZXJzOwotICAgICAgICBPd25BcnJh
eVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5OwotCi0gICAgICAgIE93
bkFycmF5UHRyPGJvb2w+IGRlbGV0ZWRBcmd1bWVudHM7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVy
PEpTRnVuY3Rpb24+IGNhbGxlZTsKLSAgICB9OwotCiAgICAgY2xhc3MgQXJndW1lbnRzIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgeworICAgICAgICBmcmllbmQgY2xhc3MgSklUOworICAgICAg
ICBmcmllbmQgY2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKICAgICBwdWJsaWM6CiAgICAgICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCkBAIC05NCwzMCArNzIsMjIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QgCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShkLT5vdmVycm9kZUxl
bmd0aCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9vdmVycm9kZUxlbmd0aCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBkLT5udW1Bcmd1bWVudHM7IAor
ICAgICAgICAgICAgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyAKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWlu
dDMyX3QgbGVuZ3RoKTsKICAgICAgICAgdm9pZCB0ZWFyT2ZmKENhbGxGcmFtZSopOwogICAgICAg
ICB2b2lkIHRlYXJPZmYoQ2FsbEZyYW1lKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci0gICAgICAgIGJv
b2wgaXNUb3JuT2ZmKCkgY29uc3QgeyByZXR1cm4gZC0+cmVnaXN0ZXJBcnJheTsgfQotICAgICAg
ICB2b2lkIGRpZFRlYXJPZmZBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNUb3Ju
T2ZmKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZC0+YWN0aXZhdGlv
bi5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgYWN0aXZhdGlvbik7Ci0gICAgICAgICAgICBkLT5yZWdp
c3RlcnMgPSAmYWN0aXZhdGlvbi0+cmVnaXN0ZXJBdCgwKTsKLSAgICAgICAgfQorICAgICAgICBi
b29sIGlzVG9ybk9mZigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJBcnJheTsgfQorICAgICAg
ICB2b2lkIGRpZFRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSosIEpTQWN0aXZhdGlvbiopOwog
CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEFyZ3VtZW50cywgZCk7IH0KLQogICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKQEAgLTEzOCwxMSArMTA4LDM0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZXJJZk5lY2Vzc2FyeShFeGVj
U3RhdGUqKTsKICAgICAgICAgdm9pZCBjcmVhdGVTdHJpY3RNb2RlQ2FsbGVlSWZOZWNlc3Nhcnko
RXhlY1N0YXRlKik7CiAKKyAgICAgICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCk7CisgICAgICAg
IGJvb2wgdHJ5U2V0QXJndW1lbnQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1Zh
bHVlKTsKKyAgICAgICAgSlNWYWx1ZSB0cnlHZXRBcmd1bWVudChzaXplX3QgYXJndW1lbnQpOwor
ICAgICAgICBib29sIGlzRGVsZXRlZEFyZ3VtZW50KHNpemVfdCk7CisgICAgICAgIGJvb2wgdHJ5
RGVsZXRlQXJndW1lbnQoc2l6ZV90KTsKICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiYgYXJndW1lbnQoc2l6ZV90KTsKKyAgICAgICAgdm9pZCBhbGxvY2F0ZVNsb3dBcmd1bWVudHMo
KTsKIAogICAgICAgICB2b2lkIGluaXQoQ2FsbEZyYW1lKik7CiAKLSAgICAgICAgT3duUHRyPEFy
Z3VtZW50c0RhdGE+IGQ7CisgICAgICAgIFdyaXRlQmFycmllcjxKU0FjdGl2YXRpb24+IG1fYWN0
aXZhdGlvbjsKKworICAgICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKKworICAgICAgICAv
LyBXZSBtYWtlIHRoZXNlIGZ1bGwgYnl0ZSBib29sZWFucyB0byBtYWtlIHRoZW0gZWFzeSB0byB0
ZXN0IGZyb20gdGhlIEpJVCwKKyAgICAgICAgLy8gYW5kIGJlY2F1c2UgZXZlbiBpZiB0aGV5IHdl
cmUgc2luZ2xlLWJpdCBib29sZWFucyB3ZSBzdGlsbCB3b3VsZG4ndCBzYXZlCisgICAgICAgIC8v
IGFueSBzcGFjZS4KKyAgICAgICAgYm9vbCBtX292ZXJyb2RlTGVuZ3RoOyAKKyAgICAgICAgYm9v
bCBtX292ZXJyb2RlQ2FsbGVlOworICAgICAgICBib29sIG1fb3ZlcnJvZGVDYWxsZXI7CisgICAg
ICAgIGJvb2wgbV9pc1N0cmljdE1vZGU7CisKKyAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiogbV9yZWdpc3RlcnM7CisgICAgICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtu
b3duPiA+IG1fcmVnaXN0ZXJBcnJheTsKKworICAgICAgICBPd25BcnJheVB0cjxTbG93QXJndW1l
bnQ+IG1fc2xvd0FyZ3VtZW50czsKKworICAgICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4g
bV9jYWxsZWU7CiAgICAgfTsKIAogICAgIEFyZ3VtZW50cyogYXNBcmd1bWVudHMoSlNWYWx1ZSk7
CkBAIC0xNTUsMTkgKzE0OCw3NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBBcmd1
bWVudHM6OkFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgOiBKU05vbkZp
bmFsT2JqZWN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCi0gICAgICAgICwgZChhZG9wdFB0cihu
ZXcgQXJndW1lbnRzRGF0YSkpCiAgICAgewogICAgIH0KIAogICAgIGlubGluZSBBcmd1bWVudHM6
OkFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgTm9QYXJhbWV0ZXJzVHlwZSkKICAgICAg
ICAgOiBKU05vbkZpbmFsT2JqZWN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCi0gICAgICAgICwg
ZChhZG9wdFB0cihuZXcgQXJndW1lbnRzRGF0YSkpCiAgICAgewogICAgIH0KIAotICAgIGlubGlu
ZSBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBBcmd1bWVudHM6OmFyZ3VtZW50KHNpemVfdCBp
KQorICAgIGlubGluZSB2b2lkIEFyZ3VtZW50czo6YWxsb2NhdGVTbG93QXJndW1lbnRzKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX3Nsb3dBcmd1bWVudHMpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fc2xvd0FyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IFNsb3dBcmd1bWVudFtt
X251bUFyZ3VtZW50c10pOworICAgIH0KKworICAgIGlubGluZSBib29sIEFyZ3VtZW50czo6dHJ5
RGVsZXRlQXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGQt
PnJlZ2lzdGVyc1tDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpXTsKKyAgICAgICAgaWYgKCFp
c0FyZ3VtZW50KGFyZ3VtZW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YWxsb2NhdGVTbG93QXJndW1lbnRzKCk7CisgICAgICAgIG1fc2xvd0FyZ3VtZW50c1thcmd1bWVu
dF0uc3RhdHVzID0gU2xvd0FyZ3VtZW50OjpEZWxldGVkOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBBcmd1bWVudHM6OnRyeVNldEFyZ3VtZW50KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKCFpc0FyZ3VtZW50KGFyZ3VtZW50KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdGhpcy0+YXJndW1lbnQoYXJndW1lbnQpLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlubGlu
ZSBKU1ZhbHVlIEFyZ3VtZW50czo6dHJ5R2V0QXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KQorICAg
IHsKKyAgICAgICAgaWYgKCFpc0FyZ3VtZW50KGFyZ3VtZW50KSkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB0aGlzLT5hcmd1bWVudChhcmd1bWVudCkuZ2V0
KCk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgQXJndW1lbnRzOjppc0RlbGV0ZWRBcmd1bWVu
dChzaXplX3QgYXJndW1lbnQpCisgICAgeworICAgICAgICBpZiAoYXJndW1lbnQgPj0gbV9udW1B
cmd1bWVudHMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghbV9zbG93
QXJndW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9zbG93
QXJndW1lbnRzW2FyZ3VtZW50XS5zdGF0dXMgIT0gU2xvd0FyZ3VtZW50OjpEZWxldGVkKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgYm9vbCBBcmd1bWVudHM6OmlzQXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KQorICAg
IHsKKyAgICAgICAgaWYgKGFyZ3VtZW50ID49IG1fbnVtQXJndW1lbnRzKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9zbG93QXJndW1lbnRzICYmIG1fc2xvd0FyZ3Vt
ZW50c1thcmd1bWVudF0uc3RhdHVzID09IFNsb3dBcmd1bWVudDo6RGVsZXRlZCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaW5s
aW5lIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIEFyZ3VtZW50czo6YXJndW1lbnQoc2l6ZV90
IGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQXJndW1lbnQoYXJndW1lbnQpKTsK
KyAgICAgICAgaWYgKCFtX3Nsb3dBcmd1bWVudHMgfHwgbV9zbG93QXJndW1lbnRzW2FyZ3VtZW50
XS5zdGF0dXMgPT0gU2xvd0FyZ3VtZW50OjpOb3JtYWwpCisgICAgICAgICAgICByZXR1cm4gbV9y
ZWdpc3RlcnNbQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCldOworCisgICAgICAg
IEFTU0VSVChtX3Nsb3dBcmd1bWVudHNbYXJndW1lbnRdLnN0YXR1cyA9PSBTbG93QXJndW1lbnQ6
OkNhcHR1cmVkKTsKKyAgICAgICAgaWYgKCFtX2FjdGl2YXRpb24pCisgICAgICAgICAgICByZXR1
cm4gbV9yZWdpc3RlcnNbbV9zbG93QXJndW1lbnRzW2FyZ3VtZW50XS5pbmRleElmQ2FwdHVyZWRd
OworCisgICAgICAgIHJldHVybiBtX2FjdGl2YXRpb24tPnJlZ2lzdGVyQXQobV9zbG93QXJndW1l
bnRzW2FyZ3VtZW50XS5pbmRleElmQ2FwdHVyZWQpOwogICAgIH0KIAogICAgIGlubGluZSB2b2lk
IEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xNzYs
MTcgKzIyNiwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKIAogICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwotICAgICAgICBkLT5udW1Bcmd1bWVudHMgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVpbnRlcnBy
ZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSk7Ci0gICAgICAgIGQtPmNhbGxlZS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMs
IGNhbGxlZSk7Ci0gICAgICAgIGQtPm92ZXJyb2RlTGVuZ3RoID0gZmFsc2U7Ci0gICAgICAgIGQt
Pm92ZXJyb2RlQ2FsbGVlID0gZmFsc2U7Ci0gICAgICAgIGQtPm92ZXJyb2RlQ2FsbGVyID0gZmFs
c2U7Ci0gICAgICAgIGQtPmlzU3RyaWN0TW9kZSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlz
U3RyaWN0TW9kZSgpOworICAgICAgICBtX251bUFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpOworICAgICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpOworICAgICAgICBt
X2NhbGxlZS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIGNhbGxlZSk7CisgICAg
ICAgIG1fb3ZlcnJvZGVMZW5ndGggPSBmYWxzZTsKKyAgICAgICAgbV9vdmVycm9kZUNhbGxlZSA9
IGZhbHNlOworICAgICAgICBtX292ZXJyb2RlQ2FsbGVyID0gZmFsc2U7CisgICAgICAgIG1faXNT
dHJpY3RNb2RlID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCk7CiAKICAg
ICAgICAgLy8gVGhlIGJ5dGVjb2RlIGdlbmVyYXRvciBvbWl0cyBvcF90ZWFyX29mZl9hY3RpdmF0
aW9uIGluIGNhc2VzIG9mIG5vCiAgICAgICAgIC8vIGRlY2xhcmVkIHBhcmFtZXRlcnMsIHNvIHdl
IG5lZWQgdG8gdGVhciBvZmYgaW1tZWRpYXRlbHkuCi0gICAgICAgIGlmIChkLT5pc1N0cmljdE1v
ZGUgfHwgIWNhbGxlZS0+anNFeGVjdXRhYmxlKCktPnBhcmFtZXRlckNvdW50KCkpCisgICAgICAg
IGlmIChtX2lzU3RyaWN0TW9kZSB8fCAhY2FsbGVlLT5qc0V4ZWN1dGFibGUoKS0+cGFyYW1ldGVy
Q291bnQoKSkKICAgICAgICAgICAgIHRlYXJPZmYoY2FsbEZyYW1lKTsKICAgICB9CiAKQEAgLTE5
NiwxNyArMjQ2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwogCiAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlLmdldCgpOwotICAgICAgICBkLT5udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWludGVy
cHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7Ci0gICAgICAgIGQtPmNhbGxlZS5z
ZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIGNhbGxlZSk7Ci0gICAgICAgIGQtPm92
ZXJyb2RlTGVuZ3RoID0gZmFsc2U7Ci0gICAgICAgIGQtPm92ZXJyb2RlQ2FsbGVlID0gZmFsc2U7
Ci0gICAgICAgIGQtPm92ZXJyb2RlQ2FsbGVyID0gZmFsc2U7Ci0gICAgICAgIGQtPmlzU3RyaWN0
TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1
dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICBtX3JlZ2lzdGVy
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICAgICAg
bV9jYWxsZWUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBjYWxsZWUpOworICAg
ICAgICBtX292ZXJyb2RlTGVuZ3RoID0gZmFsc2U7CisgICAgICAgIG1fb3ZlcnJvZGVDYWxsZWUg
PSBmYWxzZTsKKyAgICAgICAgbV9vdmVycm9kZUNhbGxlciA9IGZhbHNlOworICAgICAgICBtX2lz
U3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKIAogICAgICAgICAvLyBUaGUgYnl0
ZWNvZGUgZ2VuZXJhdG9yIG9taXRzIG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24gaW4gY2FzZXMgb2Yg
bm8KICAgICAgICAgLy8gZGVjbGFyZWQgcGFyYW1ldGVycywgc28gd2UgbmVlZCB0byB0ZWFyIG9m
ZiBpbW1lZGlhdGVseS4KLSAgICAgICAgaWYgKGQtPmlzU3RyaWN0TW9kZSB8fCAhY2FsbGVlLT5q
c0V4ZWN1dGFibGUoKS0+cGFyYW1ldGVyQ291bnQoKSkKKyAgICAgICAgaWYgKG1faXNTdHJpY3RN
b2RlIHx8ICFjYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpKQogICAgICAg
ICAgICAgdGVhck9mZihjYWxsRnJhbWUsIGlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNp
b24gMTI4NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgc3RhdGljIEpTQWN0aXZhdGlvbiogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVj
dXRhYmxlKQogICAgICAgICB7Ci0gICAgICAgICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBKU0Fj
dGl2YXRpb246OnN0b3JhZ2VTaXplKGNhbGxGcmFtZSwgZnVuY3Rpb25FeGVjdXRhYmxlLT5zeW1i
b2xUYWJsZSgpKTsKKyAgICAgICAgICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IEpTQWN0aXZhdGlv
bjo6c3RvcmFnZVNpemUoZnVuY3Rpb25FeGVjdXRhYmxlLT5zeW1ib2xUYWJsZSgpKTsKICAgICAg
ICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoCiAgICAgICAgICAgICAgICAg
Tm90TnVsbCwKICAgICAgICAgICAgICAgICBhbGxvY2F0ZUNlbGw8SlNBY3RpdmF0aW9uPigKQEAg
LTk4LDggKzk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE5FVkVSX0lOTElORSBQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXRBcmd1bWVudHNHZXR0ZXIoKTsKIAogICAgICAgICBz
dGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHNpemVfdCBzdG9yYWdlU2l6ZSk7Ci0gICAgICAg
IHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNpemUoQ2FsbEZyYW1lKiwgU2hhcmVkU3ltYm9sVGFibGUq
KTsKLSAgICAgICAgc3RhdGljIGludCBjYXB0dXJlU3RhcnQoQ2FsbEZyYW1lKiwgU2hhcmVkU3lt
Ym9sVGFibGUqKTsKKyAgICAgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZShTaGFyZWRTeW1i
b2xUYWJsZSopOworICAgICAgICBzdGF0aWMgaW50IGNhcHR1cmVTdGFydChTaGFyZWRTeW1ib2xU
YWJsZSopOwogCiAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCgpOwogICAgICAgICBzaXplX3Qg
c3RvcmFnZVNpemUoKTsKQEAgLTE0MiwyNiArMTQyLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW5saW5lIGludCBKU0FjdGl2YXRpb246
OmNhcHR1cmVTdGFydChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlKQorICAgIGlubGluZSBpbnQgSlNBY3RpdmF0aW9uOjpjYXB0dXJlU3RhcnQoU2hh
cmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAgIHsKICAgICAgICAgaWYgKHN5bWJvbFRh
YmxlLT5jYXB0dXJlTW9kZSgpID09IFNoYXJlZFN5bWJvbFRhYmxlOjpBbGxPZlRoZVRoaW5ncykK
LSAgICAgICAgICAgIHJldHVybiAtQ2FsbEZyYW1lOjpvZmZzZXRGb3Ioc3RkOjptYXg8c2l6ZV90
PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHN5bWJvbFRhYmxlLT5w
YXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSkpOworICAgICAgICAgICAgcmV0dXJuIC1DYWxs
RnJhbWU6Om9mZnNldEZvcihzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlz
KCkpOwogICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUtPmNhcHR1cmVTdGFydCgpOwogICAgIH0K
IAotICAgIGlubGluZSBzaXplX3QgSlNBY3RpdmF0aW9uOjpzdG9yYWdlU2l6ZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAgIGlubGluZSBz
aXplX3QgSlNBY3RpdmF0aW9uOjpzdG9yYWdlU2l6ZShTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUpCiAgICAgewotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUtPmNhcHR1cmVFbmQoKSAt
IGNhcHR1cmVTdGFydChjYWxsRnJhbWUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHN5
bWJvbFRhYmxlLT5jYXB0dXJlRW5kKCkgLSBjYXB0dXJlU3RhcnQoc3ltYm9sVGFibGUpOwogICAg
IH0KIAogICAgIGlubGluZSBpbnQgSlNBY3RpdmF0aW9uOjpyZWdpc3Rlck9mZnNldCgpCiAgICAg
ewotICAgICAgICByZXR1cm4gLWNhcHR1cmVTdGFydChDYWxsRnJhbWU6OmNyZWF0ZShyZWludGVy
cHJldF9jYXN0PFJlZ2lzdGVyKj4obV9yZWdpc3RlcnMpKSwgc3ltYm9sVGFibGUoKSk7CisgICAg
ICAgIHJldHVybiAtY2FwdHVyZVN0YXJ0KHN5bWJvbFRhYmxlKCkpOwogICAgIH0KIAogICAgIGlu
bGluZSBzaXplX3QgSlNBY3RpdmF0aW9uOjpzdG9yYWdlU2l6ZSgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gc3RvcmFnZVNpemUoQ2FsbEZyYW1lOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxSZWdp
c3Rlcio+KG1fcmVnaXN0ZXJzKSksIHN5bWJvbFRhYmxlKCkpOworICAgICAgICByZXR1cm4gc3Rv
cmFnZVNpemUoc3ltYm9sVGFibGUoKSk7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQgSlNBY3Rp
dmF0aW9uOjp0ZWFyT2ZmKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKQEAgLTIxNiw3ICsyMTYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6aXNW
YWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7Ci0gICAgICAgIGlmIChl
bnRyeS5nZXRJbmRleCgpIDwgY2FwdHVyZVN0YXJ0KENhbGxGcmFtZTo6Y3JlYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8UmVnaXN0ZXIqPihtX3JlZ2lzdGVycykpLCBzeW1ib2xUYWJsZSgpKSkKKyAgICAg
ICAgaWYgKGVudHJ5LmdldEluZGV4KCkgPCBjYXB0dXJlU3RhcnQoc3ltYm9sVGFibGUoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChlbnRyeS5nZXRJbmRleCgpID49
IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2
aXNpb24gMTI4NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgV2F0Y2hwb2ludDsKICAgICBjbGFzcyBXYXRjaHBvaW50U2V0OwogCisgICAgc3Ry
dWN0IFNsb3dBcmd1bWVudCB7CisgICAgICAgIGVudW0gU3RhdHVzIHsKKyAgICAgICAgICAgIE5v
cm1hbCA9IDAsCisgICAgICAgICAgICBDYXB0dXJlZCA9IDEsCisgICAgICAgICAgICBEZWxldGVk
ID0gMgorICAgICAgICB9OworCisgICAgICAgIFNsb3dBcmd1bWVudCgpCisgICAgICAgICAgICA6
IHN0YXR1cyhOb3JtYWwpCisgICAgICAgICAgICAsIGluZGV4SWZDYXB0dXJlZCgwKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBTdGF0dXMgc3RhdHVzOworICAgICAgICBpbnQgaW5k
ZXhJZkNhcHR1cmVkOyAvLyBJZiBzdGF0dXMgaXMgJ0NhcHR1cmVkJywgaW5kZXhJZkNhcHR1cmVk
IGlzIG91ciBpbmRleCBpbiB0aGUgQ2FsbEZyYW1lLgorICAgIH07CisKICAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCk7IH0KIAogICAgIC8vIFRoZSBiaXQgdHdpZGRsaW5nIGluIHRo
aXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lzdGVyIGluZGV4IGlzIGEKQEAgLTM1Nyw5
ICszNzQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBjYXB0dXJlRW5kKCkgeyBy
ZXR1cm4gbV9jYXB0dXJlRW5kOyB9CiAgICAgICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2Fw
dHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9CiAKKyAgICAgICAgaW50IHBh
cmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAx
OyB9CiAgICAgICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7IHJldHVybiBt
X3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQogICAgICAgICB2b2lkIHNldFBhcmFtZXRl
ckNvdW50SW5jbHVkaW5nVGhpcyhpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKSB7IG1f
cGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzID0gcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlz
OyB9CiAKKyAgICAgICAgLy8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1bWVudHM7IHBh
cmFtZXRlckNvdW50KCkgaW4gbGVuZ3RoIGlmIHdlIGRvLgorICAgICAgICBjb25zdCBTbG93QXJn
dW1lbnQqIHNsb3dBcmd1bWVudHMoKSB7IHJldHVybiBtX3Nsb3dBcmd1bWVudHMuZ2V0KCk7IH0K
KyAgICAgICAgdm9pZCBzZXRTbG93QXJndW1lbnRzKFBhc3NPd25BcnJheVB0cjxTbG93QXJndW1l
bnQ+IHNsb3dBcmd1bWVudHMpIHsgbV9zbG93QXJndW1lbnRzID0gc2xvd0FyZ3VtZW50czsgfQor
CiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAK
ICAgICBwcml2YXRlOgpAQCAtMzc5LDggKzQwMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgQ2FwdHVyZU1vZGUgbV9jYXB0dXJlTW9kZTsKICAgICAgICAgaW50IG1fY2FwdHVyZVN0YXJ0
OwogICAgICAgICBpbnQgbV9jYXB0dXJlRW5kOworCisgICAgICAgIE93bkFycmF5UHRyPFNsb3dB
cmd1bWVudD4gbV9zbG93QXJndW1lbnRzOwogICAgIH07Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gU3ltYm9sVGFibGVfaAo=
</data>
<flag name="review"
          id="176234"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>