<?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>87813</bug_id>
          
          <creation_ts>2012-05-29 20:51:52 -0700</creation_ts>
          <short_desc>DFG CFA should infer types and values of captured variables</short_desc>
          <delta_ts>2012-05-30 10:09:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87205</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>636786</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-29 20:51:52 -0700</bug_when>
    <thetext>There is nothing that ought to fundamentally prevent a CFA from inferring the types and values of captured variables. The CFA just needs to be smart enough to know that when a world-clobbering action happens, the types and values of captured variables can become anything.

This should allow further optimization of reflective arguments accesses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636787</commentid>
    <comment_count>1</comment_count>
      <attachid>144687</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-29 20:55:20 -0700</bug_when>
    <thetext>Created attachment 144687
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636947</commentid>
    <comment_count>2</comment_count>
      <attachid>144731</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-30 00:14:16 -0700</bug_when>
    <thetext>Created attachment 144731
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637359</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-30 10:09:13 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/118932</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144687</attachid>
            <date>2012-05-29 20:55:20 -0700</date>
            <delta_ts>2012-05-30 00:14:16 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bettercfa_patch_1.diff</filename>
            <type>text/plain</type>
            <size>25583</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4ODg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDEyLTA1LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBzaG91bGQgaW5mZXIgdHlwZXMgYW5kIHZhbHVlcyBvZiBjYXB0dXJlZCB2YXJpYWJs
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODEz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBTdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphcmd1bWVudHNBcmVDYXB0dXJlZCk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXJndW1lbnRJc0NhcHR1cmVkKToKKyAgICAgICAgKENv
ZGVCbG9jayk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0U3RhdGU6OmNsb2JiZXJXb3JsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6
Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1l
cmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29y
cyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjp2YXJpYWJsZXMpOgorICAgICAgICAoQWJzdHJhY3RTdGF0ZSk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUp
OgorCiAyMDEyLTA1LTI5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUm9sbGVkIGJhY2sgaW4gcjExODY0Niwgbm93IHRoYXQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDExODg4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtNDYyLDExICs0NjIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
bmVlZHNGdWxsU2NvcGVDaGFpbigpICYmIGNvZGVUeXBlKCkgIT0gR2xvYmFsQ29kZTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgYm9vbCBhcmd1bWVudElzQ2FwdHVyZWQoaW50KSBjb25z
dAorICAgICAgICBib29sIGFyZ3VtZW50c0FyZUNhcHR1cmVkKCkgY29uc3QKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIG5lZWRzQWN0aXZhdGlvbigpIHx8IHVzZXNBcmd1bWVudHMoKTsK
ICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgYm9vbCBhcmd1bWVudElzQ2FwdHVyZWQoaW50
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzQXJlQ2FwdHVy
ZWQoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBsb2NhbElzQ2FwdHVyZWQo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIGludCBvcGVyYW5kKSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTE4
ODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsMjEgKzMzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi0jZGVmaW5lIENGQV9QUk9GSUxJTkcgMAotCi0jaWYgQ0ZBX1BST0ZJTElO
RwotI2RlZmluZSBQUk9GSUxFKGZsYWcpIFNhbXBsaW5nRmxhZ3M6OlNjb3BlZEZsYWcgc2NvcGVk
RmxhZyhmbGFnKQotI2Vsc2UKLSNkZWZpbmUgUFJPRklMRShmbGFnKSBkbyB7IH0gd2hpbGUgKGZh
bHNlKQotI2VuZGlmCi0KLS8vIFByb2ZpbGluZyBmbGFncwotI2RlZmluZSBGTEFHX0ZPUl9CTE9D
S19JTklUSUFMSVpBVElPTiAgMTcKLSNkZWZpbmUgRkxBR19GT1JfQkxPQ0tfRU5EICAgICAgICAg
ICAgIDE4Ci0jZGVmaW5lIEZMQUdfRk9SX0VYRUNVVElPTiAgICAgICAgICAgICAxOQotI2RlZmlu
ZSBGTEFHX0ZPUl9NRVJHRV9UT19TVUNDRVNTT1JTICAgMjAKLSNkZWZpbmUgRkxBR19GT1JfU1RS
VUNUVVJFX0NMT0JCRVJJTkcgIDIxCi0KIEFic3RyYWN0U3RhdGU6OkFic3RyYWN0U3RhdGUoR3Jh
cGgmIGdyYXBoKQogICAgIDogbV9jb2RlQmxvY2soZ3JhcGgubV9jb2RlQmxvY2spCiAgICAgLCBt
X2dyYXBoKGdyYXBoKQpAQCAtNjEsOCArNDYsNiBAQCBBYnN0cmFjdFN0YXRlOjp+QWJzdHJhY3RT
dGF0ZSgpIHsgfQogCiB2b2lkIEFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpY0Js
b2NrKiBiYXNpY0Jsb2NrKQogewotICAgIFBST0ZJTEUoRkxBR19GT1JfQkxPQ0tfSU5JVElBTEla
QVRJT04pOwotICAgIAogICAgIEFTU0VSVCghbV9ibG9jayk7CiAgICAgCiAgICAgQVNTRVJUKGJh
c2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2st
PnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKQEAgLTk3LDcgKzgwLDYgQEAgdm9pZCBB
YnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogCiB2b2lkIEFic3RyYWN0U3RhdGU6
OmluaXRpYWxpemUoR3JhcGgmIGdyYXBoKQogewotICAgIFBST0ZJTEUoRkxBR19GT1JfQkxPQ0tf
SU5JVElBTElaQVRJT04pOwogICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5tX2Jsb2Nrc1sw
XS5nZXQoKTsKICAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICByb290LT5j
ZmFIYXNWaXNpdGVkID0gZmFsc2U7CkBAIC0xNzcsNyArMTU5LDYgQEAgdm9pZCBBYnN0cmFjdFN0
YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogCiBib29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2lj
QmxvY2soTWVyZ2VNb2RlIG1lcmdlTW9kZSwgQnJhbmNoRGlyZWN0aW9uKiBicmFuY2hEaXJlY3Rp
b25QdHIpCiB7Ci0gICAgUFJPRklMRShGTEFHX0ZPUl9CTE9DS19FTkQpOwogICAgIEFTU0VSVCht
X2Jsb2NrKTsKICAgICAKICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2s7IC8vIFNhdmUg
dGhlIGJsb2NrIGZvciBzdWNjZXNzb3IgbWVyZ2luZy4KQEAgLTE5NywxNCArMTc4LDcgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTQogICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7
CiAjZW5kaWYKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2st
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7Ci0g
ICAgICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSAmJiBtX2dyYXBoW25vZGVJbmRleF0u
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAgIGlm
ICghZGVzdGluYXRpb24uaXNUb3AoKSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
bi5tYWtlVG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMuYXJndW1lbnQoYXJn
dW1lbnQpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKHNpemVfdCBsb2Nh
bCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyAr
K2xvY2FsKSB7CkBAIC0yMTIsMTQgKzE4Niw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFz
aWNCbG9jayhNZXJnZU0KICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyBzdGF0
ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9jYWwpOwogI2VuZGlmCiAgICAgICAgICAgICBBYnN0cmFj
dFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpOwot
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwobG9jYWwpOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUgJiYgbV9n
cmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzVG9wKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb24ubWFrZVRvcCgpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3Zh
cmlhYmxlcy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwp
KTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTI1MCw3ICsyMTcsNiBAQCB2b2lkIEFic3Ry
YWN0U3RhdGU6OnJlc2V0KCkKIAogYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZGV4SW5CbG9jaykKIHsKLSAgICBQUk9GSUxFKEZMQUdfRk9SX0VYRUNVVElPTik7CiAgICAg
QVNTRVJUKG1fYmxvY2spOwogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgICAgICAKQEAgLTI3
NCw3ICsyNDAsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwogICAgICAgICBjYW5FeGl0IHw9IHZhcmlhYmxl
QWNjZXNzRGF0YS0+cHJlZGljdGlvbigpID09IFByZWRpY3ROb25lOwogICAgICAgICBpZiAodmFy
aWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkubWFrZVRvcCgpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gbV92YXJp
YWJsZXMub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CiAgICAgICAgICAgICBpZiAodmFsdWUuaXND
bGVhcigpKQpAQCAtMjg4LDEzICsyNTQsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2Vk
OiB7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KSA9IG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS51bmxpbmtlZExvY2FsKCkp
OwogICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgaWYgKG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMu
b3BlcmFuZChub2RlLmxvY2FsKCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtNDY4LDcgKzQzNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlLm9w
KCkgPT0gVmFsdWVBZGQpIHsKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5C
bG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5n
IHwgUHJlZGljdEludDMyIHwgUHJlZGljdE51bWJlcik7CiAgICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NzQsMTIgKzc0MSwxMiBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RUb3A7CiAgICAgICAgICAgICAg
ICAgY2hlY2tlciA9IGlzQW55UHJlZGljdGlvbjsKLSAgICAgICAgICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0VG9wOwogICAgICAgICAgICAgY2hlY2tl
ciA9IGlzQW55UHJlZGljdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwogICAgICAgICB9CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKICAgICAgICAg
ICAgICFjaGVja2VyKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQpAQCAtODY2LDcgKzgz
Myw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlQXJyYXlQcmVk
aWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSB8fCAhbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIGNs
b2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC05NjAs
NyArOTI3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogI2Vu
ZGlmCiAgICAgICAgICAgICApIHsKICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0
QnlWYWwpOwotICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTEyNDMsNyArMTIxMCwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja0Fy
Z3VtZW50c05vdENyZWF0ZWQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgIWlzRW1wdHlQcmVkaWN0aW9uKAorICAg
ICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgpA
QCAtMTI1MSwyMCArMTIyMSwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGlz
IG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAgICAgLy8gb2Yg
R2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMgYSBj
bG9iYmVyaW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9wdGlt
aXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzTnVtYmVyKG5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KAorICAgICAgICAgICAgIWlzRW1wdHlQcmVkaWN0aW9uKAorICAgICAgICAgICAgICAgIG1f
dmFyaWFibGVzLm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRz
UmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKICAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVy
cyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgYXJndW1lbnRzIG9iamVjdCBoYWQgYSBnZXR0ZXIKICAg
ICAgICAgLy8gaW5zdGFsbGVkIG9uIHRoZSBsZW5ndGggcHJvcGVydHkuCi0gICAgICAgIGNsb2Ji
ZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBtYWtlIG5v
IGd1YXJhbnRlZSBhYm91dCB3aGF0IHRoaXMgcmV0dXJucyBiZWNhdXNlIGl0IGRvZXMgbm90CiAg
ICAgICAgIC8vIHNwZWN1bGF0ZSB0aGF0IHRoZSBsZW5ndGggcHJvcGVydHkgaXMgYWN0dWFsbHkg
YSBsZW5ndGguCiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CkBAIC0xMjgw
LDEwICsxMjUxLDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2Fm
ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1
Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCiAgICAgICAgIC8vIGEg
Z2V0dGVyLiBXZSBkb24ndCBzcGVjdWxhdGUgYWdhaW5zdCB0aGlzLgotICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAvLyBCdXQgd2UgZG8gc3BlY3VsYXRlIHRo
YXQgdGhlIGluZGV4IGlzIGFuIGludGVnZXIuCiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CiAgICAgICAgIC8vIEFuZCB0aGUgcmVzdWx0IGlzIHVu
a25vd24uCkBAIC0xMzI2LDcgKzEyOTcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQ2VsbFByZWRpY3Rpb24obV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOwotICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTUwNCw3ICsxNDc1LDcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlJZERpcmVj
dDoKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7Ci0gICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVz
KGluZGV4SW5CbG9jayk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6CkBAIC0xNTQ3LDcgKzE1MTgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICBjYXNl
IFJlc29sdmVHbG9iYWw6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Y2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
Lm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE1NzAsMTYgKzE1
NDEsMzUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIHJl
dHVybiBtX2lzVmFsaWQ7CiB9CiAKK2lubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJX
b3JsZChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2sp
Cit7CisgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGNvbnN0
IEJpdFZlY3RvciYgY2FwdHVyZWRWYXJzID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNh
cHR1cmVkVmFyczsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGNhcHR1cmVkVmFycy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIGlmICghY2FwdHVyZWRWYXJzLnF1aWNrR2V0KGkpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV92YXJpYWJsZXMubG9jYWwoaSku
bWFrZVRvcCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IG1fY29kZUJsb2NrLT5tX251bUNhcHR1cmVkVmFyczsgaS0tOykKKyAgICAgICAgICAgIG1f
dmFyaWFibGVzLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICB9CisgICAgaWYgKG1fY29kZUJsb2Nr
LT5hcmd1bWVudHNBcmVDYXB0dXJlZCgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3Zh
cmlhYmxlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQorICAgICAgICAgICAgbV92YXJpYWJs
ZXMuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgIH0KKyAgICBjbG9iYmVyU3RydWN0dXJlcyhp
bmRleEluQmxvY2spOworfQorCiBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3Ry
dWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spCiB7Ci0gICAgUFJPRklMRShGTEFHX0ZPUl9T
VFJVQ1RVUkVfQ0xPQkJFUklORyk7CiAgICAgaWYgKCFtX2hhdmVTdHJ1Y3R1cmVzKQogICAgICAg
ICByZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4SW5CbG9jayArIDE7IGktLTspCiAg
ICAgICAgIGZvck5vZGUobV9ibG9jay0+YXQoaSkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2kpCisgICAgZm9yIChzaXplX3QgaSA9IG1fdmFyaWFibGVzLm51bWJlck9mQXJndW1lbnRzKCk7
IGktLTspCiAgICAgICAgIG1fdmFyaWFibGVzLmFyZ3VtZW50KGkpLmNsb2JiZXJTdHJ1Y3R1cmVz
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5udW1iZXJPZkxvY2Fs
cygpOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IG1fdmFyaWFibGVzLm51bWJlck9mTG9jYWxz
KCk7IGktLTspCiAgICAgICAgIG1fdmFyaWFibGVzLmxvY2FsKGkpLmNsb2JiZXJTdHJ1Y3R1cmVz
KCk7CiAgICAgbV9oYXZlU3RydWN0dXJlcyA9IGZhbHNlOwogfQpAQCAtMTU5OSw0NiArMTU4OSw1
NiBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgZGF0YUxv
ZygiICAgICAgICAgIEl0J3MgbGl2ZSwgbm9kZSBAJXUuXG4iLCBub2RlSW5kZXgpOwogI2VuZGlm
CiAgICAgCi0gICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICBjYXNlIFBoaToKLSAgICBjYXNl
IFNldEFyZ3VtZW50OgotICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIC8vIFRoZSBibG9jayB0cmFu
c2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgorICAgIGlmIChub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgc291cmNlID0gaW5WYXJpYWJs
ZTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgICBUcmFuc2ZlcmluZyAiKTsKICAgICAgICAgc291cmNlLmR1bXAoV1RG
OjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZygiIGZyb20gaGVhZCB0byB0YWlsLlxuIik7
CisgICAgICAgIGRhdGFMb2coIiBmcm9tIGxhc3QgYWNjZXNzIGR1ZSB0byBjYXB0dXJlZCB2YXJp
YWJsZS5cbiIpOwogI2VuZGlmCi0gICAgICAgIGJyZWFrOworICAgIH0gZWxzZSB7CisgICAgICAg
IHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNl
dEFyZ3VtZW50OgorICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgLy8gVGhlIGJsb2Nr
IHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCisgICAgICAgICAgICBzb3Vy
Y2UgPSBpblZhcmlhYmxlOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICBUcmFuc2ZlcmluZyAiKTsKKyAgICAg
ICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICBkYXRhTG9n
KCIgZnJvbSBoZWFkIHRvIHRhaWwuXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKLSAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAvLyBUaGUgYmxvY2sgcmVm
aW5lcyB0aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KLSAgICAgICAgc291
cmNlID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAg
ICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBzcGVj
dWxhdGlvbnMuCisgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJbmRleCk7CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIg
ICAgICAgICAgUmVmaW5pbmcgdG8gIik7Ci0gICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZp
bGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICAgICAgUmVmaW5pbmcgdG8gIik7CisgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFG
aWxlKCkpOworICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKICNlbmRpZgotICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgY2FzZSBTZXRMb2NhbDoK
LSAgICAgICAgLy8gVGhlIGJsb2NrIHNldHMgdGhlIHZhcmlhYmxlLCBhbmQgcG90ZW50aWFsbHkg
cmVmaW5lcyBpdCwgYm90aAotICAgICAgICAvLyBiZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcgaXQu
Ci0gICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVG
b3JtYXQoKSkKLSAgICAgICAgICAgIHNvdXJjZS5zZXQoUHJlZGljdERvdWJsZSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFy
aWFibGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBib3RoCisgICAgICAgICAgICAvLyBi
ZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcgaXQuCisgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogVGhpcyB1bm5lY2Vzc2FyaWx5IGxvc2VzIHByZWNpc2lvbi4KKyAgICAgICAg
ICAgICAgICBzb3VyY2Uuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgICAg
ICAgICBTZXR0aW5nIHRvICIpOwotICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkp
OwotICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAg
IFNldHRpbmcgdG8gIik7CisgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkp
OworICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKICNlbmRpZgotICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgfQogICAgIAogICAgIGlmIChkZXN0aW5hdGlvbiA9PSBzb3VyY2UpIHsKQEAgLTE2Njks
MjcgKzE2NjksMTEgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAog
ICAgIAogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewogICAgICAgICBB
YnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJn
dW1lbnQpOwotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZnJvbS0+dmFyaWFibGVzQXRU
YWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUg
JiYgbV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkp
IHsKLSAgICAgICAgICAgIGlmIChkZXN0aW5hdGlvbi5pc1RvcCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgZGVzdGluYXRpb24ubWFrZVRvcCgpOwotICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQogICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBm
cm9tLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+dmFyaWFibGVzQXRIZWFk
LmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3Vt
ZW50KSk7CiAgICAgfQogICAgIAogICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBm
cm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9j
YWwpOwotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZnJvbS0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGxvY2FsKTsKLSAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUgJiYgbV9ncmFw
aFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAg
ICAgICAgIGlmIChkZXN0aW5hdGlvbi5pc1RvcCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgZGVzdGluYXRpb24ubWFrZVRvcCgpOwotICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQogICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1
ZXNBdFRhaWwubG9jYWwobG9jYWwpLCB0by0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKSwg
ZnJvbS0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CiAgICAgfQogCkBAIC0xNzA0LDgg
KzE2ODgsNiBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiBpbmxp
bmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycygKICAgICBHcmFwaCYgZ3Jh
cGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEJyYW5jaERpcmVjdGlvbiBicmFuY2hEaXJlY3Rp
b24pCiB7Ci0gICAgUFJPRklMRShGTEFHX0ZPUl9NRVJHRV9UT19TVUNDRVNTT1JTKTsKLQogICAg
IE5vZGUmIHRlcm1pbmFsID0gZ3JhcGhbYmFzaWNCbG9jay0+bGFzdCgpXTsKICAgICAKICAgICBB
U1NFUlQodGVybWluYWwuaXNUZXJtaW5hbCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxMTg4ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTM2LDYgKzEzNiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmb3JOb2RlKG5vZGVVc2Uu
aW5kZXgoKSk7CiAgICAgfQogICAgIAorICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiB2YXJp
YWJsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzOworICAgIH0KKyAgICAK
ICAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lubmluZyBDRkEgdG8gaW5pdGlhbGl6ZSB0aGUg
YWJzdHJhY3QgdmFsdWVzIG9mCiAgICAgLy8gYXJndW1lbnRzLCBhbmQgdG8gaW5kaWNhdGUgd2hp
Y2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9yIENGQQogICAgIC8vIGV4ZWN1dGlvbi4KQEAg
LTIwOCw3ICsyMTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CiAgICAg
CiBwcml2YXRlOgotICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQpOworICAgIHZv
aWQgY2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleEluQmxvY2sp
OworICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAg
ICAKICAgICBib29sIG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24s
IEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGVJbmRleCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDExODg4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTgsMTIgKzM4NTgsMTYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6IHsKLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OnRhZ0ZvcihtX2pp
dC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSwKLSAgICAgICAgICAgICAg
ICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgaWYgKCFp
c0VtcHR5UHJlZGljdGlvbigKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9w
ZXJhbmQoCisgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
Ojp0YWdGb3IobV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSksCisg
ICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkp
OworICAgICAgICB9CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMzg3MiwxMiArMzg3NiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjp0YWdGb3IobV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSks
Ci0gICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7
CisgICAgICAgIGlmICghaXNFbXB0eVByZWRpY3Rpb24oCisgICAgICAgICAgICAgICAgbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgp
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBl
ZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMy
KAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS5jb2RlT3JpZ2luKSksCisgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBBU1NF
UlQoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSwg
cmVzdWx0R1BSKTsKQEAgLTM5MjksMTIgKzM5MzcsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJl
c3VsdFBheWxvYWQuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRU
YWcuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAg
bV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAot
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQuYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSksCi0gICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgICAgIGlmICghaXNFbXB0eVByZWRpY3Rpb24o
CisgICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAorICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9y
aWdpbikpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAg
ICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9q
aXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSksCisgICAgICAgICAgICAg
ICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRl
eEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MTE4ODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4MCwxMiArMzg4MCwxNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAg
IAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBl
ZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0
cigKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKKyAgICAgICAgaWYgKCFpc0Vt
cHR5UHJlZGljdGlvbigKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJh
bmQoCisgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJG
b3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKKyAgICAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCisgICAgICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1l
bnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKKyAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgQVNTRVJUKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6QXJn
dW1lbnRDb3VudCksIHJlc3VsdEdQUik7CkBAIC0zOTM1LDEyICszOTM5LDE2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGluZGV4R1BS
ID0gaW5kZXguZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQXJndW1l
bnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKLSAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKKyAgICAgICAg
aWYgKCFpc0VtcHR5UHJlZGljdGlvbigKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxl
cygpLm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJndW1lbnRz
UmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCisgICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKKyAgICAgICAgfQog
CiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIsIHJlc3VsdEdQ
Uik7CiAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CkBAIC00
MDI0LDEyICs0MDMyLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOiB7
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVk
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRy
KAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOworICAgICAgICBpZiAoIWlzRW1w
dHlQcmVkaWN0aW9uKAorICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFu
ZCgKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVu
dHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOworICAgICAgICB9CiAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144731</attachid>
            <date>2012-05-30 00:14:16 -0700</date>
            <delta_ts>2012-05-30 00:44:37 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>bettercfa_patch_2.diff</filename>
            <type>text/plain</type>
            <size>25599</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4ODg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDEyLTA1LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBzaG91bGQgaW5mZXIgdHlwZXMgYW5kIHZhbHVlcyBvZiBjYXB0dXJlZCB2YXJpYWJs
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODEz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBTbGlnaHQgc3BlZWQtdXAgaW4gVjgvZWFybGV5LWJveWVyICh+MSUpLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXJndW1lbnRz
QXJlQ2FwdHVyZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFyZ3VtZW50SXNDYXB0dXJl
ZCk6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRl
LmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpjbG9iYmVyV29ybGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjptZXJnZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
bWVyZ2VUb1N1Y2Nlc3NvcnMpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzKToKKyAgICAgICAgKEFi
c3RyYWN0U3RhdGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKwogMjAxMi0wNS0yOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJvbGxlZCBiYWNrIGluIHIxMTg2NDYsIG5vdyB0aGF0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxMTg4ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2MiwxMSArNDYyLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuIG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSAmJiBjb2RlVHlwZSgpICE9IEds
b2JhbENvZGU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGJvb2wgYXJndW1lbnRJc0Nh
cHR1cmVkKGludCkgY29uc3QKKyAgICAgICAgYm9vbCBhcmd1bWVudHNBcmVDYXB0dXJlZCgpIGNv
bnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBuZWVkc0FjdGl2YXRpb24oKSB8fCB1
c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGJvb2wgYXJndW1l
bnRJc0NhcHR1cmVkKGludCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50c0FyZUNhcHR1cmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wg
bG9jYWxJc0NhcHR1cmVkKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBpbnQgb3Bl
cmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHJldmlzaW9uIDExODg4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDIxICszMyw2IEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotI2RlZmluZSBDRkFfUFJPRklMSU5HIDAKLQot
I2lmIENGQV9QUk9GSUxJTkcKLSNkZWZpbmUgUFJPRklMRShmbGFnKSBTYW1wbGluZ0ZsYWdzOjpT
Y29wZWRGbGFnIHNjb3BlZEZsYWcoZmxhZykKLSNlbHNlCi0jZGVmaW5lIFBST0ZJTEUoZmxhZykg
ZG8geyB9IHdoaWxlIChmYWxzZSkKLSNlbmRpZgotCi0vLyBQcm9maWxpbmcgZmxhZ3MKLSNkZWZp
bmUgRkxBR19GT1JfQkxPQ0tfSU5JVElBTElaQVRJT04gIDE3Ci0jZGVmaW5lIEZMQUdfRk9SX0JM
T0NLX0VORCAgICAgICAgICAgICAxOAotI2RlZmluZSBGTEFHX0ZPUl9FWEVDVVRJT04gICAgICAg
ICAgICAgMTkKLSNkZWZpbmUgRkxBR19GT1JfTUVSR0VfVE9fU1VDQ0VTU09SUyAgIDIwCi0jZGVm
aW5lIEZMQUdfRk9SX1NUUlVDVFVSRV9DTE9CQkVSSU5HICAyMQotCiBBYnN0cmFjdFN0YXRlOjpB
YnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1fY29kZUJsb2NrKGdyYXBoLm1fY29k
ZUJsb2NrKQogICAgICwgbV9ncmFwaChncmFwaCkKQEAgLTYxLDggKzQ2LDYgQEAgQWJzdHJhY3RT
dGF0ZTo6fkFic3RyYWN0U3RhdGUoKSB7IH0KIAogdm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJh
c2ljQmxvY2soQmFzaWNCbG9jayogYmFzaWNCbG9jaykKIHsKLSAgICBQUk9GSUxFKEZMQUdfRk9S
X0JMT0NLX0lOSVRJQUxJWkFUSU9OKTsKLSAgICAKICAgICBBU1NFUlQoIW1fYmxvY2spOwogICAg
IAogICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMo
KSA9PSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CkBAIC05Nyw3
ICs4MCw2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKIAogdm9p
ZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKIHsKLSAgICBQUk9GSUxF
KEZMQUdfRk9SX0JMT0NLX0lOSVRJQUxJWkFUSU9OKTsKICAgICBCYXNpY0Jsb2NrKiByb290ID0g
Z3JhcGgubV9ibG9ja3NbMF0uZ2V0KCk7CiAgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRy
dWU7CiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwpAQCAtMTc3LDcgKzE1OSw2IEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKIAogYm9vbCBBYnN0cmFj
dFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTW9kZSBtZXJnZU1vZGUsIEJyYW5jaERpcmVjdGlv
biogYnJhbmNoRGlyZWN0aW9uUHRyKQogewotICAgIFBST0ZJTEUoRkxBR19GT1JfQkxPQ0tfRU5E
KTsKICAgICBBU1NFUlQobV9ibG9jayk7CiAgICAgCiAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2Jsb2NrOyAvLyBTYXZlIHRoZSBibG9jayBmb3Igc3VjY2Vzc29yIG1lcmdpbmcuCkBAIC0xOTcs
MTQgKzE3OCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU0KICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyBzdGF0ZSBmb3IgYXJndW1lbnQgJXp1
LlxuIiwgYXJndW1lbnQpOwogI2VuZGlmCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0
aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1l
bnQoYXJndW1lbnQpOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUgJiYgbV9n
cmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzVG9wKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb24ubWFrZVRvcCgpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3Rp
bmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Zm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewpAQCAtMjEyLDE0ICsxODYsNyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRpZgogICAg
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWls
LmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+
dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGlmIChub2RlSW5kZXgg
IT0gTm9Ob2RlICYmIG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc1RvcCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1ha2VUb3AoKTsKLSAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3Rp
bmF0aW9uLCBtX3ZhcmlhYmxlcy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwobG9jYWwpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChk
ZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKGxvY2FsKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yNTAsNyArMjE3
LDYgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpyZXNldCgpCiAKIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spCiB7Ci0gICAgUFJPRklMRShGTEFHX0ZPUl9F
WEVDVVRJT04pOwogICAgIEFTU0VSVChtX2Jsb2NrKTsKICAgICBBU1NFUlQobV9pc1ZhbGlkKTsK
ICAgICAgICAgCkBAIC0yNzQsNyArMjQwLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKICAgICAgICAgY2Fu
RXhpdCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBQcmVkaWN0Tm9uZTsK
ICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KSA9IG1fdmFyaWFibGVzLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgp
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92
YXJpYWJsZXMub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwogICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKQEAgLTI4OCwxMyArMjU0LDE0IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0TG9jYWxVbmxpbmtlZDogewotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgp
OworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkgPSBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUu
dW5saW5rZWRMb2NhbCgpKTsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
ICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTQ2OCw3ICs0MzUsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBpZiAobm9kZS5vcCgpID09IFZhbHVlQWRkKSB7Ci0gICAgICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoUHJlZGljdFN0cmluZyB8IFByZWRpY3RJbnQzMiB8IFByZWRpY3ROdW1iZXIpOwogICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzc0
LDEyICs3NDEsMTIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0VG9w
OwogICAgICAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVByZWRpY3Rpb247Ci0gICAgICAgICAg
ICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdFRvcDsKICAg
ICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVByZWRpY3Rpb247Ci0gICAgICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUu
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQogICAgICAgICBub2RlLnNldENh
bkV4aXQoCiAgICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkKQEAgLTg2Niw3ICs4MzMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoIWlzQWN0
aW9uYWJsZUFycmF5UHJlZGljdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KSkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
Ci0gICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtOTYwLDcgKzkyNyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICNlbmRpZgogICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICBBU1NFUlQo
bm9kZS5vcCgpID09IFB1dEJ5VmFsKTsKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGlu
ZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjQzLDcgKzEyMTAsMTAgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgotICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICFpc0VtcHR5
UHJlZGljdGlvbigKKyAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKAorICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdp
bikpLm1fdHlwZSkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFy
Z3VtZW50c0xlbmd0aDoKQEAgLTEyNTEsMjAgKzEyMjEsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBO
b3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0byBmb3JjZSBjb25zdGFudCBmb2xkaW5n
CiAgICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNlIEdldE15QXJndW1l
bnRzTGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCiAgICAgICAgIC8vIFdlIHBlcmZv
cm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCi0gICAgICAgIGlmIChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChqc051bWJlcihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMSkpOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICFpc0VtcHR5UHJlZGljdGlvbigKKyAg
ICAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNh
ZmU6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8vIFRoaXMgcG90
ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50cyBvYmplY3Qg
aGFkIGEgZ2V0dGVyCiAgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3RoIHByb3BlcnR5
LgotICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAvLyBXZSBj
dXJyZW50bHkgbWFrZSBubyBndWFyYW50ZWUgYWJvdXQgd2hhdCB0aGlzIHJldHVybnMgYmVjYXVz
ZSBpdCBkb2VzIG5vdAogICAgICAgICAvLyBzcGVjdWxhdGUgdGhhdCB0aGUgbGVuZ3RoIHByb3Bl
cnR5IGlzIGFjdHVhbGx5IGEgbGVuZ3RoLgogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFr
ZVRvcCgpOwpAQCAtMTI4MCwxMCArMTI1MSwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbFNhZmU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBj
bG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhh
cwogICAgICAgICAvLyBhIGdldHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4K
LSAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgLy8gQnV0IHdl
IGRvIHNwZWN1bGF0ZSB0aGF0IHRoZSBpbmRleCBpcyBhbiBpbnRlZ2VyLgogICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwogICAgICAgICAvLyBBbmQg
dGhlIHJlc3VsdCBpcyB1bmtub3duLgpAQCAtMTMyNiw3ICsxMjk3LDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICB9CiAgICAgICAgIGlmIChpc0Nl
bGxQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSkKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKLSAgICAg
ICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE1MDQsNyAr
MTQ3NSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBj
YXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOwotICAgICAgICBj
bG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgpAQCAtMTU0Nyw3ICsxNTE4LDcgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJp
Y3RQdXQ6CiAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOgogICAgICAgICBub2RlLnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CkBAIC0xNTcwLDE2ICsxNTQxLDM1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICByZXR1cm4gbV9pc1ZhbGlkOwogfQogCitpbmxpbmUgdm9pZCBBYnN0cmFj
dFN0YXRlOjpjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgdW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQoreworICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkg
eworICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFycyA9IGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBjYXB0
dXJlZFZhcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIWNhcHR1cmVkVmFycy5x
dWlja0dldChpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fdmFy
aWFibGVzLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBtX2NvZGVCbG9jay0+bV9udW1DYXB0dXJlZFZhcnM7IGktLTsp
CisgICAgICAgICAgICBtX3ZhcmlhYmxlcy5sb2NhbChpKS5tYWtlVG9wKCk7CisgICAgfQorICAg
IGlmIChtX2NvZGVCbG9jay0+YXJndW1lbnRzQXJlQ2FwdHVyZWQoKSkgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gbV92YXJpYWJsZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKKyAgICAg
ICAgICAgIG1fdmFyaWFibGVzLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAgICB9CisgICAgY2xv
YmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKK30KKwogaW5saW5lIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewotICAgIFBS
T0ZJTEUoRkxBR19GT1JfU1RSVUNUVVJFX0NMT0JCRVJJTkcpOwogICAgIGlmICghbV9oYXZlU3Ry
dWN0dXJlcykKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleEluQmxv
Y2sgKyAxOyBpLS07KQogICAgICAgICBmb3JOb2RlKG1fYmxvY2stPmF0KGkpKS5jbG9iYmVyU3Ry
dWN0dXJlcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVy
T2ZBcmd1bWVudHMoKTsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZhcmlhYmxlcy5udW1i
ZXJPZkFyZ3VtZW50cygpOyBpLS07KQogICAgICAgICBtX3ZhcmlhYmxlcy5hcmd1bWVudChpKS5j
bG9iYmVyU3RydWN0dXJlcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJs
ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZhcmlhYmxl
cy5udW1iZXJPZkxvY2FscygpOyBpLS07KQogICAgICAgICBtX3ZhcmlhYmxlcy5sb2NhbChpKS5j
bG9iYmVyU3RydWN0dXJlcygpOwogICAgIG1faGF2ZVN0cnVjdHVyZXMgPSBmYWxzZTsKIH0KQEAg
LTE1OTksNDYgKzE1ODksNTYgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0
ZUF0VAogICAgIGRhdGFMb2coIiAgICAgICAgICBJdCdzIGxpdmUsIG5vZGUgQCV1LlxuIiwgbm9k
ZUluZGV4KTsKICNlbmRpZgogICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgY2Fz
ZSBQaGk6Ci0gICAgY2FzZSBTZXRBcmd1bWVudDoKLSAgICBjYXNlIEZsdXNoOgotICAgICAgICAv
LyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFpbC4KKyAgICBp
ZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgIHNv
dXJjZSA9IGluVmFyaWFibGU7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgVHJhbnNmZXJpbmcgIik7CiAgICAgICAg
IHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIiBmcm9tIGhl
YWQgdG8gdGFpbC5cbiIpOworICAgICAgICBkYXRhTG9nKCIgZnJvbSBsYXN0IGFjY2VzcyBkdWUg
dG8gY2FwdHVyZWQgdmFyaWFibGUuXG4iKTsKICNlbmRpZgotICAgICAgICBicmVhazsKKyAgICB9
IGVsc2UgeworICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBjYXNlIFBoaToK
KyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAg
ICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgor
ICAgICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgVHJhbnNm
ZXJpbmcgIik7CisgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAg
ICAgICAgICAgZGF0YUxvZygiIGZyb20gaGVhZCB0byB0YWlsLlxuIik7CisjZW5kaWYKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAg
Ly8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBzcGVjdWxhdGlv
bnMuCi0gICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgY2FzZSBH
ZXRMb2NhbDoKKyAgICAgICAgICAgIC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRo
IGFkZGl0aW9uYWwgc3BlY3VsYXRpb25zLgorICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShu
b2RlSW5kZXgpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgZGF0YUxvZygiICAgICAgICAgIFJlZmluaW5nIHRvICIpOwotICAgICAgICBzb3VyY2Uu
ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAg
ICAgZGF0YUxvZygiICAgICAgICAgIFJlZmluaW5nIHRvICIpOworICAgICAgICAgICAgc291cmNl
LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5k
aWYKLSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAg
IGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgIC8vIFRoZSBibG9jayBzZXRzIHRoZSB2YXJpYWJsZSwg
YW5kIHBvdGVudGlhbGx5IHJlZmluZXMgaXQsIGJvdGgKLSAgICAgICAgLy8gYmVmb3JlIGFuZCBh
ZnRlciBzZXR0aW5nIGl0LgotICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICBzb3VyY2Uuc2V0KFByZWRpY3RE
b3VibGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgLy8gVGhlIGJs
b2NrIHNldHMgdGhlIHZhcmlhYmxlLCBhbmQgcG90ZW50aWFsbHkgcmVmaW5lcyBpdCwgYm90aAor
ICAgICAgICAgICAgLy8gYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgorICAgICAgICAgICAg
aWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgdW5uZWNlc3NhcmlseSBsb3NlcyBwcmVj
aXNpb24uCisgICAgICAgICAgICAgICAgc291cmNlLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBkYXRhTG9nKCIgICAgICAgICAgU2V0dGluZyB0byAiKTsKLSAgICAgICAgc291cmNlLmR1bXAo
V1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgICBTZXR0aW5nIHRvICIpOworICAgICAgICAgICAgc291cmNlLmR1bXAo
V1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoZGVzdGluYXRpb24gPT0gc291
cmNlKSB7CkBAIC0xNjY5LDI3ICsxNjY5LDExIEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlKEJhc2ljQmwKICAgICAKICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1l
bnQpIHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRI
ZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGZy
b20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgIGlmIChub2Rl
SW5kZXggIT0gTm9Ob2RlICYmIG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoZGVzdGluYXRpb24uaXNUb3AoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1ha2VU
b3AoKTsKLSAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nr
cyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8t
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkpOwogICAgIH0KICAgICAKICAgICBmb3IgKHNpemVfdCBsb2Nh
bCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsr
bG9jYWwpIHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVz
QXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAgICAgIGlmIChub2RlSW5kZXggIT0g
Tm9Ob2RlICYmIG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoZGVzdGluYXRpb24uaXNUb3AoKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1ha2VUb3AoKTsKLSAg
ICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5h
dGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVh
ZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwogICAg
IH0KIApAQCAtMTcwNCw4ICsxNjg4LDYgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVy
Z2UoQmFzaWNCbAogaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMo
CiAgICAgR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCcmFuY2hEaXJlY3Rp
b24gYnJhbmNoRGlyZWN0aW9uKQogewotICAgIFBST0ZJTEUoRkxBR19GT1JfTUVSR0VfVE9fU1VD
Q0VTU09SUyk7Ci0KICAgICBOb2RlJiB0ZXJtaW5hbCA9IGdyYXBoW2Jhc2ljQmxvY2stPmxhc3Qo
KV07CiAgICAgCiAgICAgQVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTE4
ODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Zm9yTm9kZShub2RlVXNlLmluZGV4KCkpOwogICAgIH0KICAgICAKKyAgICBPcGVyYW5kczxBYnN0
cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxl
czsKKyAgICB9CisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRv
IGluaXRpYWxpemUgdGhlIGFic3RyYWN0IHZhbHVlcyBvZgogICAgIC8vIGFyZ3VtZW50cywgYW5k
IHRvIGluZGljYXRlIHdoaWNoIGJsb2NrcyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKICAgICAv
LyBleGVjdXRpb24uCkBAIC0yMDgsNyArMjEzLDggQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChG
SUxFKiBvdXQpOwogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVu
c2lnbmVkKTsKKyAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jayk7CiAgICAgCiAgICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXgpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMTg4ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODU4LDEyICszODU4LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOiB7
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjp0YWdGb3IobV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSks
Ci0gICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7
CisgICAgICAgIGlmICghaXNFbXB0eVByZWRpY3Rpb24oCisgICAgICAgICAgICAgICAgbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgp
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6dGFnRm9yKG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUu
Y29kZU9yaWdpbikpLAorICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgfQogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4NzIsMTIgKzM4NzYsMTYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIEFyZ3Vt
ZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJy
YW5jaDMyKAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6dGFnRm9yKG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5v
ZGUuY29kZU9yaWdpbikpLAotICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSkpOworICAgICAgICBpZiAoIWlzRW1wdHlQcmVkaWN0aW9uKAorICAgICAg
ICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKKyAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5t
X3R5cGUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAg
IEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6dGFnRm9yKG1faml0LmFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLAorICAgICAgICAgICAgICAgICAgICBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgQVNTRVJUKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6
QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7CkBAIC0zOTI5LDEyICszOTM3LDE2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0
VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6dGFnRm9yKG1faml0
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLAotICAgICAgICAgICAgICAg
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICBpZiAoIWlz
RW1wdHlQcmVkaWN0aW9uKAorICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3Bl
cmFuZCgKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAorICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6dGFnRm9yKG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikp
LAorICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpKTsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgaW5kZXhHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDExODg4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4ODAsMTIgKzM4ODAsMTYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
IEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3RQdHIoCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8s
Ci0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCi0gICAgICAgICAgICAg
ICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7Cisg
ICAgICAgIGlmICghaXNFbXB0eVByZWRpY3Rpb24oCisgICAgICAgICAgICAgICAgbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmFy
Z3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQ
dHIoCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7CisgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghbm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihS
ZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwpAQCAtMzkzNSwxMiArMzkz
OSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6
Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCi0gICAg
ICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdp
bikpKSk7CisgICAgICAgIGlmICghaXNFbXB0eVByZWRpY3Rpb24oCisgICAgICAgICAgICAgICAg
bV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5n
cmFwaCgpLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpIHsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgQXJndW1lbnRz
RXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAor
ICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikp
KSk7CisgICAgICAgIH0KIAogICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIGlu
ZGV4R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkgewpAQCAtNDAyNCwxMiArNDAzMiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrQXJndW1l
bnRzTm90Q3JlYXRlZDogewotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
QXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywK
LSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKKyAg
ICAgICAgaWYgKCFpc0VtcHR5UHJlZGljdGlvbigKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnZh
cmlhYmxlcygpLm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0
cigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCisgICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKKyAgICAg
ICAgfQogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0K
</data>
<flag name="review"
          id="151657"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>