<?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>49708</bug_id>
          
          <creation_ts>2010-11-17 19:30:32 -0800</creation_ts>
          <short_desc>Stop recompiling functions to regenerate exception info.</short_desc>
          <delta_ts>2010-11-18 18:35:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>310676</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-17 19:30:32 -0800</bug_when>
    <thetext>Instead only hold info as necessary – keep divot info is the inspector is enabled, line number info is debugging or profiling, and handler info for functions with try/catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310677</commentid>
    <comment_count>1</comment_count>
      <attachid>74196</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-17 19:31:02 -0800</bug_when>
    <thetext>Created attachment 74196
Preliminary patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311225</commentid>
    <comment_count>2</comment_count>
      <attachid>74336</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-18 18:20:22 -0800</bug_when>
    <thetext>Created attachment 74336
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311228</commentid>
    <comment_count>3</comment_count>
      <attachid>74336</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-11-18 18:25:52 -0800</bug_when>
    <thetext>Comment on attachment 74336
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=74336&amp;action=review

&gt; WebKitTools/DumpRenderTree/mac/DumpRenderTree.mm:992
&gt; +//    return shouldOpenWebInspector(pathOrURL) || strstr(pathOrURL, &quot;inspector-enabled/&quot;);

Fix this!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311229</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-18 18:35:43 -0800</bug_when>
    <thetext>fixed in r72360</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74196</attachid>
            <date>2010-11-17 19:31:02 -0800</date>
            <delta_ts>2010-11-18 18:20:22 -0800</delta_ts>
            <desc>Preliminary patch</desc>
            <filename>NoRecompile.patch</filename>
            <type>text/plain</type>
            <size>54838</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gNzIxNjAp
CisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjU5LDEzICsxMjU5LDEwIEBAIHN0YXRpYyBIYXNoU2V0PENvZGVCbG9jayo+IGxpdmVD
b2RlQmxvY2sKICAgICBtYWNybyhpbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKSBcCiAgICAgbWFj
cm8oY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcykgXAogICAgIG1hY3JvKHN0cmluZ1N3aXRjaEp1
bXBUYWJsZXMpIFwKLSAgICBtYWNybyhmdW5jdGlvblJlZ2lzdGVySW5mb3MpCi0KLSNkZWZpbmUg
Rk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUl9FWENFUFRJT05fSU5GTyhtYWNybykgXAorICAgIG1hY3Jv
KGV2YWxDb2RlQ2FjaGUpIFwKICAgICBtYWNybyhleHByZXNzaW9uSW5mbykgXAogICAgIG1hY3Jv
KGxpbmVJbmZvKSBcCi0gICAgbWFjcm8oZ2V0QnlJZEV4Y2VwdGlvbkluZm8pIFwKLSAgICBtYWNy
byhwY1ZlY3RvcikKKyAgICBtYWNybyhjYWxsUmV0dXJuSW5kZXhWZWN0b3IpCiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiBzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNvbnN0IFZlY3RvcjxUPiYg
dmVjdG9yKQpAQCAtMTI3OSw3ICsxMjc2LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0
aWNzKCkKICAgICAjZGVmaW5lIERFRklORV9WQVJTKG5hbWUpIHNpemVfdCBuYW1lIyNJc05vdEVt
cHR5ID0gMDsgc2l6ZV90IG5hbWUjI1RvdGFsU2l6ZSA9IDA7CiAgICAgICAgIEZPUl9FQUNIX01F
TUJFUl9WRUNUT1IoREVGSU5FX1ZBUlMpCiAgICAgICAgIEZPUl9FQUNIX01FTUJFUl9WRUNUT1Jf
UkFSRV9EQVRBKERFRklORV9WQVJTKQotICAgICAgICBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SX0VY
Q0VQVElPTl9JTkZPKERFRklORV9WQVJTKQogICAgICN1bmRlZiBERUZJTkVfVkFSUwogCiAgICAg
Ly8gTm9uLXZlY3RvciBkYXRhIG1lbWJlcnMKQEAgLTEyODgsNyArMTI4NCw2IEBAIHZvaWQgQ29k
ZUJsb2NrOjpkdW1wU3RhdGlzdGljcygpCiAgICAgc2l6ZV90IHN5bWJvbFRhYmxlSXNOb3RFbXB0
eSA9IDA7CiAgICAgc2l6ZV90IHN5bWJvbFRhYmxlVG90YWxTaXplID0gMDsKIAotICAgIHNpemVf
dCBoYXNFeGNlcHRpb25JbmZvID0gMDsKICAgICBzaXplX3QgaGFzUmFyZURhdGEgPSAwOwogCiAg
ICAgc2l6ZV90IGlzRnVuY3Rpb25Db2RlID0gMDsKQEAgLTEzMDgsMTMgKzEzMDMsNiBAQCB2b2lk
IENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgc3ltYm9sVGFibGVUb3Rh
bFNpemUgKz0gKGNvZGVCbG9jay0+bV9zeW1ib2xUYWJsZS5jYXBhY2l0eSgpICogKHNpemVvZihT
eW1ib2xUYWJsZTo6S2V5VHlwZSkgKyBzaXplb2YoU3ltYm9sVGFibGU6Ok1hcHBlZFR5cGUpKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29kZUJsb2NrLT5tX2V4Y2VwdGlvbkluZm8pIHsK
LSAgICAgICAgICAgIGhhc0V4Y2VwdGlvbkluZm8rKzsKLSAgICAgICAgICAgICNkZWZpbmUgR0VU
X1NUQVRTKG5hbWUpIGlmICghY29kZUJsb2NrLT5tX2V4Y2VwdGlvbkluZm8tPm1fIyNuYW1lLmlz
RW1wdHkoKSkgeyBuYW1lIyNJc05vdEVtcHR5Kys7IG5hbWUjI1RvdGFsU2l6ZSArPSBzaXplSW5C
eXRlcyhjb2RlQmxvY2stPm1fZXhjZXB0aW9uSW5mby0+bV8jI25hbWUpOyB9Ci0gICAgICAgICAg
ICAgICAgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUl9FWENFUFRJT05fSU5GTyhHRVRfU1RBVFMpCi0g
ICAgICAgICAgICAjdW5kZWYgR0VUX1NUQVRTCi0gICAgICAgIH0KLQogICAgICAgICBpZiAoY29k
ZUJsb2NrLT5tX3JhcmVEYXRhKSB7CiAgICAgICAgICAgICBoYXNSYXJlRGF0YSsrOwogICAgICAg
ICAgICAgI2RlZmluZSBHRVRfU1RBVFMobmFtZSkgaWYgKCFjb2RlQmxvY2stPm1fcmFyZURhdGEt
Pm1fIyNuYW1lLmlzRW1wdHkoKSkgeyBuYW1lIyNJc05vdEVtcHR5Kys7IG5hbWUjI1RvdGFsU2l6
ZSArPSBzaXplSW5CeXRlcyhjb2RlQmxvY2stPm1fcmFyZURhdGEtPm1fIyNuYW1lKTsgfQpAQCAt
MTM0Myw3ICsxMzMxLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAj
ZGVmaW5lIEdFVF9UT1RBTF9TSVpFKG5hbWUpIHRvdGFsU2l6ZSArPSBuYW1lIyNUb3RhbFNpemU7
CiAgICAgICAgIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IoR0VUX1RPVEFMX1NJWkUpCiAgICAgICAg
IEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfUkFSRV9EQVRBKEdFVF9UT1RBTF9TSVpFKQotICAgICAg
ICBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SX0VYQ0VQVElPTl9JTkZPKEdFVF9UT1RBTF9TSVpFKQog
ICAgICN1bmRlZiBHRVRfVE9UQUxfU0laRQogCiAgICAgdG90YWxTaXplICs9IHN5bWJvbFRhYmxl
VG90YWxTaXplOwpAQCAtMTM1OCwxMyArMTM0NSwxMSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0
YXRpc3RpY3MoKQogICAgIHByaW50ZigiTnVtYmVyIG9mIEdsb2JhbENvZGUgQ29kZUJsb2Nrczog
JXp1ICglLjNmJSUpXG4iLCBpc0dsb2JhbENvZGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaXNHbG9i
YWxDb2RlKSAqIDEwMC4wIC8gbGl2ZUNvZGVCbG9ja1NldC5zaXplKCkpOwogICAgIHByaW50Zigi
TnVtYmVyIG9mIEV2YWxDb2RlIENvZGVCbG9ja3M6ICV6dSAoJS4zZiUlKVxuIiwgaXNFdmFsQ29k
ZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpc0V2YWxDb2RlKSAqIDEwMC4wIC8gbGl2ZUNvZGVCbG9j
a1NldC5zaXplKCkpOwogCi0gICAgcHJpbnRmKCJOdW1iZXIgb2YgQ29kZUJsb2NrcyB3aXRoIGV4
Y2VwdGlvbiBpbmZvOiAlenUgKCUuM2YlJSlcbiIsIGhhc0V4Y2VwdGlvbkluZm8sIHN0YXRpY19j
YXN0PGRvdWJsZT4oaGFzRXhjZXB0aW9uSW5mbykgKiAxMDAuMCAvIGxpdmVDb2RlQmxvY2tTZXQu
c2l6ZSgpKTsKICAgICBwcmludGYoIk51bWJlciBvZiBDb2RlQmxvY2tzIHdpdGggcmFyZSBkYXRh
OiAlenUgKCUuM2YlJSlcbiIsIGhhc1JhcmVEYXRhLCBzdGF0aWNfY2FzdDxkb3VibGU+KGhhc1Jh
cmVEYXRhKSAqIDEwMC4wIC8gbGl2ZUNvZGVCbG9ja1NldC5zaXplKCkpOwogCiAgICAgI2RlZmlu
ZSBQUklOVF9TVEFUUyhuYW1lKSBwcmludGYoIk51bWJlciBvZiBDb2RlQmxvY2tzIHdpdGggIiAj
bmFtZSAiOiAlenVcbiIsIG5hbWUjI0lzTm90RW1wdHkpOyBwcmludGYoIlNpemUgb2YgYWxsICIg
I25hbWUgIjogJXp1XG4iLCBuYW1lIyNUb3RhbFNpemUpOyAKICAgICAgICAgRk9SX0VBQ0hfTUVN
QkVSX1ZFQ1RPUihQUklOVF9TVEFUUykKICAgICAgICAgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUl9S
QVJFX0RBVEEoUFJJTlRfU1RBVFMpCi0gICAgICAgIEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfRVhD
RVBUSU9OX0lORk8oUFJJTlRfU1RBVFMpCiAgICAgI3VuZGVmIFBSSU5UX1NUQVRTCiAKICAgICBw
cmludGYoIk51bWJlciBvZiBDb2RlQmxvY2tzIHdpdGggZXZhbENvZGVDYWNoZTogJXp1XG4iLCBl
dmFsQ29kZUNhY2hlSXNOb3RFbXB0eSk7CkBAIC0xMzk3LDcgKzEzODIsNiBAQCBDb2RlQmxvY2s6
OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92
aWRlcikKICAgICAsIG1fc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNldCkKICAgICAsIG1fc3ltYm9s
VGFibGUoc3ltVGFiKQotICAgICwgbV9leGNlcHRpb25JbmZvKGFkb3B0UHRyKG5ldyBFeGNlcHRp
b25JbmZvKSkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwogCkBAIC0xNTU2LDMzICsxNTQwLDYg
QEAgdm9pZCBDb2RlQmxvY2s6Om1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJgogICAgIG1hcmtTdGFj
ay5hcHBlbmQobV9nbG9iYWxPYmplY3QpOwogfQogCi1ib29sIENvZGVCbG9jazo6cmVwYXJzZUZv
ckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2FyeShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBp
ZiAobV9leGNlcHRpb25JbmZvKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEFTU0VSVCgh
bV9yYXJlRGF0YSB8fCAhbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkpOwot
ICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7
Ci0gICAgaWYgKG1fbmVlZHNGdWxsU2NvcGVDaGFpbikgewotICAgICAgICBpZiAoY29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUgJiYgIWNhbGxGcmFtZS0+cihhY3RpdmF0aW9uUmVnaXN0ZXIoKSku
anNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBjcmVhdGVBY3RpdmF0aW9uKGNhbGxGcmFtZSk7Ci0g
ICAgICAgICAgICBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgU2NvcGVDaGFpbiBzYyhzY29wZUNoYWluKTsKLSAgICAgICAgaW50IHNjb3Bl
RGVsdGEgPSBzYy5sb2NhbERlcHRoKCk7Ci0gICAgICAgIGlmIChtX2NvZGVUeXBlID09IEV2YWxD
b2RlKQotICAgICAgICAgICAgc2NvcGVEZWx0YSAtPSBzdGF0aWNfY2FzdDxFdmFsQ29kZUJsb2Nr
Kj4odGhpcyktPmJhc2VTY29wZURlcHRoKCk7Ci0gICAgICAgIGVsc2UgaWYgKG1fY29kZVR5cGUg
PT0gRnVuY3Rpb25Db2RlKQotICAgICAgICAgICAgc2NvcGVEZWx0YSsrOyAvLyBDb21waWxhdGlv
biBvZiBmdW5jdGlvbiBjb2RlIGFzc3VtZXMgYWN0aXZhdGlvbiBpcyBub3Qgb24gdGhlIHNjb3Bl
IGNoYWluIHlldC4KLSAgICAgICAgQVNTRVJUKHNjb3BlRGVsdGEgPj0gMCk7Ci0gICAgICAgIHdo
aWxlIChzY29wZURlbHRhLS0pCi0gICAgICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+
bmV4dDsKLSAgICB9Ci0KLSAgICBtX2V4Y2VwdGlvbkluZm8gPSBtX293bmVyRXhlY3V0YWJsZS0+
cmVwYXJzZUV4Y2VwdGlvbkluZm8oc2NvcGVDaGFpbiwgdGhpcyk7Ci0gICAgcmV0dXJuIG1fZXhj
ZXB0aW9uSW5mbzsKLX0KLQogSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIEFTU0VSVChieXRlY29k
ZU9mZnNldCA8IG1faW5zdHJ1Y3Rpb25Db3VudCk7CkBAIC0xNjAxLDQ2ICsxNTU4LDQ4IEBAIEhh
bmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY28KICAgICByZXR1cm4gMDsKIH0K
IAotaW50IENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KENhbGxGcmFtZSog
Y2FsbEZyYW1lLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK2ludCBDb2RlQmxvY2s6OmxpbmVO
dW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKICAgICBB
U1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBtX2luc3RydWN0aW9uQ291bnQpOwogCi0gICAgaWYgKCFy
ZXBhcnNlRm9yRXhjZXB0aW9uSW5mb0lmTmVjZXNzYXJ5KGNhbGxGcmFtZSkgfHwgIW1fZXhjZXB0
aW9uSW5mby0+bV9saW5lSW5mby5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX293bmVyRXhlY3V0
YWJsZS0+c291cmNlKCkuZmlyc3RMaW5lKCk7IC8vIEVtcHR5IGZ1bmN0aW9uIG9yIHVuYWJsZSB0
byByZXBhcnNlCisgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICByZXR1cm4gbV9vd25lckV4
ZWN1dGFibGUtPnNvdXJjZSgpLmZpcnN0TGluZSgpOworCisgICAgVmVjdG9yPExpbmVJbmZvPiYg
bGluZUluZm8gPSBtX3JhcmVEYXRhLT5tX2xpbmVJbmZvOwogCiAgICAgaW50IGxvdyA9IDA7Ci0g
ICAgaW50IGhpZ2ggPSBtX2V4Y2VwdGlvbkluZm8tPm1fbGluZUluZm8uc2l6ZSgpOworICAgIGlu
dCBoaWdoID0gbGluZUluZm8uc2l6ZSgpOwogICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICAg
ICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOwotICAgICAgICBpZiAobV9leGNl
cHRpb25JbmZvLT5tX2xpbmVJbmZvW21pZF0uaW5zdHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVP
ZmZzZXQpCisgICAgICAgIGlmIChsaW5lSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5
dGVjb2RlT2Zmc2V0KQogICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgaGlnaCA9IG1pZDsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIWxvdykKICAg
ICAgICAgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKS5maXJzdExpbmUoKTsKLSAg
ICByZXR1cm4gbV9leGNlcHRpb25JbmZvLT5tX2xpbmVJbmZvW2xvdyAtIDFdLmxpbmVOdW1iZXI7
CisgICAgcmV0dXJuIGxpbmVJbmZvW2xvdyAtIDFdLmxpbmVOdW1iZXI7CiB9CiAKLXZvaWQgQ29k
ZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZz
ZXQsIGludCYgZW5kT2Zmc2V0KQordm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5
dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LCBpbnQmIHN0
YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCkKIHsKICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQg
PCBtX2luc3RydWN0aW9uQ291bnQpOwogCi0gICAgaWYgKCFyZXBhcnNlRm9yRXhjZXB0aW9uSW5m
b0lmTmVjZXNzYXJ5KGNhbGxGcmFtZSkgfHwgIW1fZXhjZXB0aW9uSW5mby0+bV9leHByZXNzaW9u
SW5mby5zaXplKCkpIHsKLSAgICAgICAgLy8gV2UgZGlkbid0IHRoaW5rIGFueXRoaW5nIGNvdWxk
IHRocm93LiAgQXBwYXJlbnRseSB3ZSB3ZXJlIHdyb25nLgotICAgICAgICAvLyBBbHRlcm5hdGl2
ZWx5IHNvbWV0aGluZyB3ZW50IHdyb25nIHdoZW4gdHJ5aW5nIHRvIHJlcGFyc2UKKyAgICBpZiAo
IW1fcmFyZURhdGEpIHsKICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgICAgICBlbmRPZmZz
ZXQgPSAwOwogICAgICAgICBkaXZvdCA9IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAg
ICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9yYXJlRGF0
YS0+bV9leHByZXNzaW9uSW5mbzsKKwogICAgIGludCBsb3cgPSAwOwotICAgIGludCBoaWdoID0g
bV9leGNlcHRpb25JbmZvLT5tX2V4cHJlc3Npb25JbmZvLnNpemUoKTsKKyAgICBpbnQgaGlnaCA9
IGV4cHJlc3Npb25JbmZvLnNpemUoKTsKICAgICB3aGlsZSAobG93IDwgaGlnaCkgewogICAgICAg
ICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAgaWYgKG1fZXhjZXB0
aW9uSW5mby0+bV9leHByZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVj
b2RlT2Zmc2V0KQorICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0cnVjdGlvbk9m
ZnNldCA8PSBieXRlY29kZU9mZnNldCkKICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGhpZ2ggPSBtaWQ7CkBAIC0xNjU0LDkgKzE2MTMsOSBAQCB2
b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBzdGFydE9mZnNldCA9IG1fZXhjZXB0aW9uSW5mby0+bV9leHByZXNzaW9u
SW5mb1tsb3cgLSAxXS5zdGFydE9mZnNldDsKLSAgICBlbmRPZmZzZXQgPSBtX2V4Y2VwdGlvbklu
Zm8tPm1fZXhwcmVzc2lvbkluZm9bbG93IC0gMV0uZW5kT2Zmc2V0OwotICAgIGRpdm90ID0gbV9l
eGNlcHRpb25JbmZvLT5tX2V4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmRpdm90UG9pbnQgKyBtX3Nv
dXJjZU9mZnNldDsKKyAgICBzdGFydE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLnN0
YXJ0T2Zmc2V0OworICAgIGVuZE9mZnNldCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmVuZE9m
ZnNldDsKKyAgICBkaXZvdCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmRpdm90UG9pbnQgKyBt
X3NvdXJjZU9mZnNldDsKICAgICByZXR1cm47CiB9CiAKQEAgLTE3MjMsMTcgKzE2ODIsMTQgQEAg
dm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KCkKICAgICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5r
VG9GaXQoKTsKICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7CiAKLSAgICBp
ZiAobV9leGNlcHRpb25JbmZvKSB7Ci0gICAgICAgIG1fZXhjZXB0aW9uSW5mby0+bV9leHByZXNz
aW9uSW5mby5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2V4Y2VwdGlvbkluZm8tPm1fbGluZUlu
Zm8uc2hyaW5rVG9GaXQoKTsKLSAgICB9Ci0KICAgICBpZiAobV9yYXJlRGF0YSkgewogICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7CiAgICAgICAg
IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBtX3JhcmVEYXRh
LT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9y
YXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CiAgICAg
ICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvLnNocmlua1RvRml0KCk7CisgICAg
ICAgIG1fcmFyZURhdGEtPm1fbGluZUluZm8uc2hyaW5rVG9GaXQoKTsKICAgICB9CiB9CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA3MjE2MCkKKysrIEph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
NyArMTAyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwogICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2Fs
bCBjYWxsUmV0dXJuTG9jYXRpb247CiAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBo
b3RQYXRoQmVnaW47CiAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlcjsK
QEAgLTE1NiwxNyArMTU1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSog
Y2FjaGVkUHJvdG90eXBlU3RydWN0dXJlOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgRnVuY3Rpb25S
ZWdpc3RlckluZm8gewotICAgICAgICBGdW5jdGlvblJlZ2lzdGVySW5mbyh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgaW50IGZ1bmN0aW9uUmVnaXN0ZXJJbmRleCkKLSAgICAgICAgICAgIDogYnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICAsIGZ1bmN0aW9uUmVnaXN0
ZXJJbmRleChmdW5jdGlvblJlZ2lzdGVySW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICBpbnQgZnVuY3Rpb25SZWdp
c3RlckluZGV4OwotICAgIH07Ci0KICAgICBzdHJ1Y3QgR2xvYmFsUmVzb2x2ZUluZm8gewogICAg
ICAgICBHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKICAgICAgICAg
ICAgIDogc3RydWN0dXJlKDApCkBAIC0yNTQsMTUgKzI0Miw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIH0KICNlbmRpZgogCi0gICAgc3RydWN0IEV4Y2VwdGlvbkluZm8gOiBGYXN0QWxsb2NCYXNl
IHsKLSAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87
Ci0gICAgICAgIFZlY3RvcjxMaW5lSW5mbz4gbV9saW5lSW5mbzsKLQotI2lmIEVOQUJMRShKSVQp
Ci0gICAgICAgIFZlY3RvcjxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldD4gbV9jYWxs
UmV0dXJuSW5kZXhWZWN0b3I7Ci0jZW5kaWYKLSAgICB9OwotCiAgICAgY2xhc3MgQ29kZUJsb2Nr
IDogcHVibGljIEZhc3RBbGxvY0Jhc2UgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAg
IHByb3RlY3RlZDoKQEAgLTMwNyw4ICsyODYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBpbnQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zm
c2V0KENhbGxGcmFtZSosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgdm9pZCBl
eHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChDYWxsRnJhbWUqLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQp
OworICAgICAgICBpbnQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KTsKKyAgICAgICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwg
aW50JiBlbmRPZmZzZXQpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdm9pZCBhZGRDYWxs
ZXIoQ2FsbExpbmtJbmZvKiBjYWxsZXIpCkBAIC0zNDUsMTEgKzMyNCwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeUNob3A8TWV0aG9kQ2FsbExpbmtJbmZv
LCB2b2lkKiwgZ2V0TWV0aG9kQ2FsbExpbmtJbmZvUmV0dXJuTG9jYXRpb24+KG1fbWV0aG9kQ2Fs
bExpbmtJbmZvcy5iZWdpbigpLCBtX21ldGhvZENhbGxMaW5rSW5mb3Muc2l6ZSgpLCByZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpKTsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFyZXBhcnNlRm9yRXhjZXB0
aW9uSW5mb0lmTmVjZXNzYXJ5KGNhbGxGcmFtZSkpCisgICAgICAgICAgICBpZiAoIW1fcmFyZURh
dGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICByZXR1cm4gYmluYXJ5
Q2hvcDxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldCwgdW5zaWduZWQsIGdldENhbGxS
ZXR1cm5PZmZzZXQ+KGNhbGxSZXR1cm5JbmRleFZlY3RvcigpLmJlZ2luKCksIGNhbGxSZXR1cm5J
bmRleFZlY3RvcigpLnNpemUoKSwgZ2V0SklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLT5ieXRlY29kZU9mZnNldDsKKyAgICAgICAgICAgIFZlY3RvcjxDYWxsUmV0dXJu
T2Zmc2V0VG9CeXRlY29kZU9mZnNldD4mIGNhbGxJbmRpY2VzID0gbV9yYXJlRGF0YS0+bV9jYWxs
UmV0dXJuSW5kZXhWZWN0b3I7CisgICAgICAgICAgICBpZiAoIWNhbGxJbmRpY2VzLnNpemUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIHJldHVybiBiaW5hcnlDaG9w
PENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCwgZ2V0Q2FsbFJldHVy
bk9mZnNldD4oY2FsbEluZGljZXMuYmVnaW4oKSwgY2FsbEluZGljZXMuc2l6ZSgpLCBnZXRKSVRD
b2RlKCkub2Zmc2V0T2YocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSktPmJ5dGVjb2RlT2Zmc2V0Owog
ICAgICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCkBAIC00NDksMTggKzQz
MSwzNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVy
KGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5sZXIpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFubGVyKTsg
fQogICAgICAgICBIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgQVNT
RVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tp
bmRleF07IH0KIAotICAgICAgICBib29sIGhhc0V4Y2VwdGlvbkluZm8oKSBjb25zdCB7IHJldHVy
biBtX2V4Y2VwdGlvbkluZm87IH0KLSAgICAgICAgdm9pZCBjbGVhckV4Y2VwdGlvbkluZm8oKSB7
IG1fZXhjZXB0aW9uSW5mby5jbGVhcigpOyB9Ci0gICAgICAgIFBhc3NPd25QdHI8RXhjZXB0aW9u
SW5mbz4gZXh0cmFjdEV4Y2VwdGlvbkluZm8oKTsKLQotICAgICAgICB2b2lkIGFkZEV4cHJlc3Np
b25JbmZvKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mIGV4cHJlc3Npb25JbmZvKSB7IEFTU0VS
VChtX2V4Y2VwdGlvbkluZm8pOyBtX2V4Y2VwdGlvbkluZm8tPm1fZXhwcmVzc2lvbkluZm8uYXBw
ZW5kKGV4cHJlc3Npb25JbmZvKTsgfQotCi0gICAgICAgIHNpemVfdCBudW1iZXJPZkxpbmVJbmZv
cygpIGNvbnN0IHsgQVNTRVJUKG1fZXhjZXB0aW9uSW5mbyk7IHJldHVybiBtX2V4Y2VwdGlvbklu
Zm8tPm1fbGluZUluZm8uc2l6ZSgpOyB9Ci0gICAgICAgIHZvaWQgYWRkTGluZUluZm8oY29uc3Qg
TGluZUluZm8mIGxpbmVJbmZvKSB7IEFTU0VSVChtX2V4Y2VwdGlvbkluZm8pOyBtX2V4Y2VwdGlv
bkluZm8tPm1fbGluZUluZm8uYXBwZW5kKGxpbmVJbmZvKTsgfQotICAgICAgICBMaW5lSW5mbyYg
bGFzdExpbmVJbmZvKCkgeyBBU1NFUlQobV9leGNlcHRpb25JbmZvKTsgcmV0dXJuIG1fZXhjZXB0
aW9uSW5mby0+bV9saW5lSW5mby5sYXN0KCk7IH0KKyAgICAgICAgdm9pZCBhZGRFeHByZXNzaW9u
SW5mbyhjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiBleHByZXNzaW9uSW5mbykKKyAgICAgICAg
eworICAgICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAg
bV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mby5hcHBlbmQoZXhwcmVzc2lvbkluZm8pOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhZGRMaW5lSW5mbyh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCwgaW50IGxpbmVObykKKyAgICAgICAgeworICAgICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5l
Y2Vzc2FyeSgpOworICAgICAgICAgICAgVmVjdG9yPExpbmVJbmZvPiYgbGluZUluZm8gPSBtX3Jh
cmVEYXRhLT5tX2xpbmVJbmZvOworICAgICAgICAgICAgaWYgKCFsaW5lSW5mby5zaXplKCkgfHwg
bGluZUluZm8ubGFzdCgpLmxpbmVOdW1iZXIgIT0gbGluZU5vKSB7CisgICAgICAgICAgICAgICAg
TGluZUluZm8gaW5mbyA9IHsgYnl0ZWNvZGVPZmZzZXQsIGxpbmVObyB9OworICAgICAgICAgICAg
ICAgIGxpbmVJbmZvLmFwcGVuZChpbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX3JhcmVEYXRhICYmIG1f
cmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaGFzTGlu
ZUluZm8oKSB7IHJldHVybiBtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPm1fbGluZUluZm8uc2l6
ZSgpOyB9CisgICAgICAgIGJvb2wgbmVlZHNDYWxsUmV0dXJuSW5kaWNlcygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3JhcmVEYXRhICYmCisgICAgICAgICAgICAgICAgKG1fcmFy
ZURhdGEtPm1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpIHx8IG1fcmFyZURhdGEtPm1fbGluZUluZm8u
c2l6ZSgpIHx8IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpKTsKKyAgICAg
ICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgVmVjdG9yPENhbGxSZXR1cm5PZmZzZXRU
b0J5dGVjb2RlT2Zmc2V0PiYgY2FsbFJldHVybkluZGV4VmVjdG9yKCkgeyBBU1NFUlQobV9leGNl
cHRpb25JbmZvKTsgcmV0dXJuIG1fZXhjZXB0aW9uSW5mby0+bV9jYWxsUmV0dXJuSW5kZXhWZWN0
b3I7IH0KKyAgICAgICAgVmVjdG9yPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0PiYg
Y2FsbFJldHVybkluZGV4VmVjdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAgY3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY2Fs
bFJldHVybkluZGV4VmVjdG9yOworICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICAvLyBDb25z
dGFudCBQb29sCkBAIC01MjgsOCArNTI4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgcHJpbnRQdXRCeUlkT3AoRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1
Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYsIGNvbnN0IGNoYXIqIG9wKSBjb25zdDsKICNlbmRpZgog
Ci0gICAgICAgIGJvb2wgcmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2FyeShDYWxsRnJh
bWUqKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQpAQCAt
NTgwLDggKzU3OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFN5bWJvbFRhYmxlKiBt
X3N5bWJvbFRhYmxlOwogCi0gICAgICAgIE93blB0cjxFeGNlcHRpb25JbmZvPiBtX2V4Y2VwdGlv
bkluZm87Ci0KICAgICAgICAgc3RydWN0IFJhcmVEYXRhIDogRmFzdEFsbG9jQmFzZSB7CiAgICAg
ICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiAKQEAgLTU5
NCw2ICs1OTAsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKICAgICAgICAgICAgIEV2YWxD
b2RlQ2FjaGUgbV9ldmFsQ29kZUNhY2hlOworCisgICAgICAgICAgICAvLyBFeHByZXNzaW9uIGlu
Zm8gLSBwcmVzZW50IGlmIGRlYnVnZ2luZy4KKyAgICAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9u
UmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgICAgICAgICAgLy8gTGluZSBpbmZvIC0g
cHJlc2VudCBpZiBwcm9maWxpbmcgb3IgZGVidWdnaW5nLgorICAgICAgICAgICAgVmVjdG9yPExp
bmVJbmZvPiBtX2xpbmVJbmZvOworI2lmIEVOQUJMRShKSVQpCisgICAgICAgICAgICBWZWN0b3I8
Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQ+IG1fY2FsbFJldHVybkluZGV4VmVjdG9y
OworI2VuZGlmCiAgICAgICAgIH07CiAgICAgICAgIE93blB0cjxSYXJlRGF0YT4gbV9yYXJlRGF0
YTsKICAgICB9OwpAQCAtNjY4LDEyICs2NzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBpbmxpbmUgUGFzc093blB0cjxFeGNlcHRpb25JbmZvPiBDb2RlQmxv
Y2s6OmV4dHJhY3RFeGNlcHRpb25JbmZvKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2V4Y2Vw
dGlvbkluZm8pOwotICAgICAgICByZXR1cm4gbV9leGNlcHRpb25JbmZvLnJlbGVhc2UoKTsKLSAg
ICB9Ci0KICAgICBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCiAgICAg
ewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCShyZXZpc2lvbiA3MjE1
OSkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVjU3Rh
dGUqIGV4ZWMpCiAKICAgICAgICAgaWYgKGJsb2NrUGVyY2VudCA+PSAxKSB7CiAgICAgICAgICAg
ICAvL0luc3RydWN0aW9uKiBjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
OwotICAgICAgICAgICAgcHJpbnRmKCIjJWQ6ICVzOiVkOiAlZCAvICVsbGQgKCUuM2YlJSlcbiIs
IGkgKyAxLCByZWNvcmQtPm1fZXhlY3V0YWJsZS0+c291cmNlVVJMKCkudXRmOCgpLmRhdGEoKSwg
Y29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoZXhlYywgMCksIHJlY29yZC0+
bV9zYW1wbGVDb3VudCwgbV9zYW1wbGVDb3VudCwgYmxvY2tQZXJjZW50KTsKKyAgICAgICAgICAg
IHByaW50ZigiIyVkOiAlczolZDogJWQgLyAlbGxkICglLjNmJSUpXG4iLCBpICsgMSwgcmVjb3Jk
LT5tX2V4ZWN1dGFibGUtPnNvdXJjZVVSTCgpLnV0ZjgoKS5kYXRhKCksIGNvZGVCbG9jay0+bGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KDApLCByZWNvcmQtPm1fc2FtcGxlQ291bnQsIG1fc2Ft
cGxlQ291bnQsIGJsb2NrUGVyY2VudCk7CiAgICAgICAgICAgICBpZiAoaSA8IDEwKSB7CiAgICAg
ICAgICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCx1bnNpZ25lZD4gbGluZUNvdW50czsKICAgICAg
ICAgICAgICAgICBjb2RlQmxvY2stPmR1bXAoZXhlYyk7CkBAIC0zNDcsNyArMzQ3LDcgQEAgdm9p
ZCBTYW1wbGluZ1Rvb2w6OmR1bXAoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgICAg
ICBpbnQgY291bnQgPSByZWNvcmQtPm1fc2FtcGxlc1tvcF07CiAgICAgICAgICAgICAgICAgICAg
IGlmIChjb3VudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgWyUgNGRd
IGhhcyBzYW1wbGUgY291bnQ6ICUgNGRcbiIsIG9wLCBjb3VudCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsaW5lID0gY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQoZXhlYywgb3ApOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGluZSA9
IGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KG9wKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVDb3VudHMuc2V0KGxpbmUsIChsaW5lQ291bnRzLmNvbnRhaW5zKGxp
bmUpID8gbGluZUNvdW50cy5nZXQobGluZSkgOiAwKSArIGNvdW50KTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gNzIxNjApCisrKyBK
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTMsMTEgKzE1Myw2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlKCkKICAgICBpZiAoKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYmICFtX2NvZGVCbG9j
ay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpICYmICFtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygp
KSB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2RlKQogICAgICAgICBzeW1ib2xUYWJsZSgpLmNsZWFy
KCk7CiAKLSNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICBpZiAoIW1fcmVnZW5lcmF0
aW5nRm9yRXhjZXB0aW9uSW5mbyAmJiAhbV91c2VzRXhjZXB0aW9ucyAmJiAobV9jb2RlVHlwZSA9
PSBGdW5jdGlvbkNvZGUgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSkpCi0gICAgICAgIG1fY29k
ZUJsb2NrLT5jbGVhckV4Y2VwdGlvbkluZm8oKTsKLSNlbmRpZgotCiAgICAgbV9jb2RlQmxvY2st
PnNocmlua1RvRml0KCk7CiB9CiAKQEAgLTE5OSw5ICsxOTQsMTAgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6cHJlc2VydmVMYXN0VmFyKAogICAgICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVS
ZWdpc3RlcnMubGFzdCgpOwogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBjb25zdCBEZWJ1Z2dlciogZGVidWdnZXIsIGNv
bnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUHJv
Z3JhbUNvZGVCbG9jayogY29kZUJsb2NrKQotICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcygh
IWRlYnVnZ2VyKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1O
b2RlKiBwcm9ncmFtTm9kZSwgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX3No
b3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkp
CiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi5nbG9iYWxPYmplY3Qo
KS0+c3VwcG9ydHNQcm9maWxpbmcoKSkKKyAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZv
KHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKICAg
ICAsIG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9s
VGFibGUpCiAgICAgLCBtX3Njb3BlTm9kZShwcm9ncmFtTm9kZSkKQEAgLTIxNyw3ICsyMTMsNyBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgLCBtX2hhc0Ny
ZWF0ZWRBY3RpdmF0aW9uKHRydWUpCiAgICAgLCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAg
LCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKLSAgICAsIG1fZ2xvYmFsRGF0YSgmc2NvcGVDaGFpbi5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2Jh
bERhdGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1f
bGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQ
b3NpdGlvbigwKQpAQCAtMjkzLDkgKzI4OSwxMCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoUHJvCiAgICAgY29kZUJsb2NrLT5tX251bUNhcHR1cmVkVmFycyA9IGNvZGVC
bG9jay0+bV9udW1WYXJzOwogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBjb25zdCBEZWJ1Z2dlciogZGVidWdn
ZXIsIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKCEh
ZGVidWdnZXIpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25C
b2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBjb25zdCBTY29wZUNoYWluJiBzY29wZUNoYWluLCBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9zaG91
bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQog
ICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCkt
PnN1cHBvcnRzUHJvZmlsaW5nKCkpCisgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhz
Y29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCiAgICAg
LCBtX3Njb3BlQ2hhaW4oJnNjb3BlQ2hhaW4pCiAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRh
YmxlKQogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5KQpAQCAtMzEwLDcgKzMwNyw3IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW4KICAgICAsIG1faGFzQ3Jl
YXRlZEFjdGl2YXRpb24oZmFsc2UpCiAgICAgLCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAg
LCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKLSAgICAsIG1fZ2xvYmFsRGF0YSgmc2NvcGVDaGFpbi5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2Jh
bERhdGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1f
bGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQ
b3NpdGlvbigwKQpAQCAtMzkxLDcgKzM4OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihGdW4KICAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ld
LnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KTsKICAgICAgICAgfQogICAg
IH0KLSAgICBib29sIGNhbkxhemlseUNyZWF0ZUZ1bmN0aW9ucyA9ICFmdW5jdGlvbkJvZHktPm5l
ZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgJiYgIWRlYnVnZ2VyOworICAgIGJv
b2wgY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVlZHNBY3RpdmF0
aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdIb29rczsKICAg
ICBpZiAoIWNhbkxhemlseUNyZWF0ZUZ1bmN0aW9ucyAmJiAhbV9oYXNDcmVhdGVkQWN0aXZhdGlv
bikgewogICAgICAgICBtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uID0gdHJ1ZTsKICAgICAgICAgZW1p
dE9wY29kZShvcF9jcmVhdGVfYWN0aXZhdGlvbik7CkBAIC00MjMsNyArNDIwLDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bgogICAgICAgICAgICAgYWRkVmFyKGlk
ZW50LCB2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCk7
CiAgICAgfQogICAgIAotICAgIGlmIChkZWJ1Z2dlcikKKyAgICBpZiAobV9zaG91bGRFbWl0RGVi
dWdIb29rcykKICAgICAgICAgY29kZUJsb2NrLT5tX251bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9j
ay0+bV9udW1WYXJzOwogCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1
bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwpAQCAtNDYxLDkgKzQ1OCwxMCBAQCBCeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuCiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBjb25zdCBEZWJ1Z2dl
ciogZGVidWdnZXIsIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIDogbV9zaG91bGRFbWl0
RGVidWdIb29rcyghIWRlYnVnZ2VyKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBt
X3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmRlYnVnZ2Vy
KCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi5nbG9iYWxPYmpl
Y3QoKS0+c3VwcG9ydHNQcm9maWxpbmcoKSkKKyAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJ
bmZvKHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkK
ICAgICAsIG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKICAgICAsIG1fc3ltYm9sVGFibGUoc3lt
Ym9sVGFibGUpCiAgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkKQEAgLTQ3OCw3ICs0NzYsNyBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhCiAgICAgLCBtX2hhc0Ny
ZWF0ZWRBY3RpdmF0aW9uKHRydWUpCiAgICAgLCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAg
LCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKLSAgICAsIG1fZ2xvYmFsRGF0YSgmc2NvcGVDaGFpbi5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2Jh
bERhdGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1f
bGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQ
b3NpdGlvbigwKQpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDcyMTYwKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDkgKzkxLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldER1bXBzR2VuZXJhdGVk
Q29kZShib29sIGR1bXBzR2VuZXJhdGVkQ29kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBz
R2VuZXJhdGVkQ29kZSgpOwogCi0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2Rl
KiwgY29uc3QgRGVidWdnZXIqLCBjb25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBQcm9n
cmFtQ29kZUJsb2NrKik7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5v
ZGUqLCBjb25zdCBEZWJ1Z2dlciosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENv
ZGVCbG9jayopOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIGNvbnN0IERl
YnVnZ2VyKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRhYmxlKiwgRXZhbENvZGVCbG9jayop
OworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIGNvbnN0IFNjb3BlQ2hh
aW4mLCBTeW1ib2xUYWJsZSosIFByb2dyYW1Db2RlQmxvY2sqKTsKKyAgICAgICAgQnl0ZWNvZGVH
ZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJs
ZSosIENvZGVCbG9jayopOworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIGNv
bnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIEV2YWxDb2RlQmxvY2sqKTsKIAogICAgICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7
IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25z
dCB7IHJldHVybiAqbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzOyB9CkBAIC0yMDUsMTAgKzIw
NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICAvLyBOb2RlOjpl
bWl0Q29kZSBhc3N1bWVzIHRoYXQgZHN0LCBpZiBwcm92aWRlZCwgaXMgZWl0aGVyIGEgbG9jYWwg
b3IgYSByZWZlcmVuY2VkIHRlbXBvcmFyeS4KICAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRz
dCA9PSBpZ25vcmVkUmVzdWx0KCkgfHwgIWRzdC0+aXNUZW1wb3JhcnkoKSB8fCBkc3QtPnJlZkNv
dW50KCkpOwotICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+bnVtYmVyT2ZMaW5lSW5mb3Mo
KSB8fCBtX2NvZGVCbG9jay0+bGFzdExpbmVJbmZvKCkubGluZU51bWJlciAhPSBuLT5saW5lTm8o
KSkgewotICAgICAgICAgICAgICAgIExpbmVJbmZvIGluZm8gPSB7IGluc3RydWN0aW9ucygpLnNp
emUoKSwgbi0+bGluZU5vKCkgfTsKLSAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkTGlu
ZUluZm8oaW5mbyk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRMaW5lSW5mbyhuLT5s
aW5lTm8oKSk7CisKICAgICAgICAgICAgIGlmIChtX2VtaXROb2RlRGVwdGggPj0gc19tYXhFbWl0
Tm9kZURlcHRoKQogICAgICAgICAgICAgICAgIHJldHVybiBlbWl0VGhyb3dFeHByZXNzaW9uVG9v
RGVlcEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgKyttX2VtaXROb2RlRGVwdGg7CkBAIC0yMjQs
MTAgKzIyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdE5vZGVJbkNv
bmRpdGlvbkNvbnRleHQoRXhwcmVzc2lvbk5vZGUqIG4sIExhYmVsKiB0cnVlVGFyZ2V0LCBMYWJl
bCogZmFsc2VUYXJnZXQsIGJvb2wgZmFsbFRocm91Z2hNZWFuc1RydWUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPm51bWJlck9mTGluZUluZm9zKCkgfHwgbV9jb2Rl
QmxvY2stPmxhc3RMaW5lSW5mbygpLmxpbmVOdW1iZXIgIT0gbi0+bGluZU5vKCkpIHsKLSAgICAg
ICAgICAgICAgICBMaW5lSW5mbyBpbmZvID0geyBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG4tPmxp
bmVObygpIH07Ci0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZExpbmVJbmZvKGluZm8p
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkTGluZUluZm8obi0+bGluZU5vKCkpOwog
ICAgICAgICAgICAgaWYgKG1fZW1pdE5vZGVEZXB0aCA+PSBzX21heEVtaXROb2RlRGVwdGgpIHsK
ICAgICAgICAgICAgICAgICBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIzOCw3ICsyMzMsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGVtaXRFeHByZXNzaW9uSW5mbyh1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAg
ICAgeyAKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX3Nob3VsZEVtaXRSaWNoU291cmNl
SW5mbykKKyAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgIGRpdm90IC09IG1f
Y29kZUJsb2NrLT5zb3VyY2VPZmZzZXQoKTsKICAgICAgICAgICAgIGlmIChkaXZvdCA+IEV4cHJl
c3Npb25SYW5nZUluZm86Ok1heERpdm90KSB7CiAgICAgICAgICAgICAgICAgLy8gT3ZlcmZsb3cg
aGFzIG9jY3VycmVkLCB3ZSBjYW4gb25seSBnaXZlIGxpbmUgbnVtYmVyIGluZm8gZm9yIGVycm9y
cyBmb3IgdGhpcyByZWdpb24KQEAgLTUwMiw2ICs1MDAsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Ym9keS0+aWRlbnQoKSwgYm9keS0+c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVudHMoKSwgYm9k
eS0+cGFyYW1ldGVycygpLCBib2R5LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGluZU5vKCksIGJv
ZHktPmxhc3RMaW5lKCkpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBhZGRMaW5lSW5mbyh1
bnNpZ25lZCBsaW5lTm8pCisgICAgICAgIHsKKyNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykK
KyAgICAgICAgICAgIGlmIChtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbykKKyNlbmRpZgorICAg
ICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRMaW5lSW5mbyhpbnN0cnVjdGlvbnMoKS5zaXpl
KCksIGxpbmVObyk7CisgICAgICAgIH0KKwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW5pdExh
enlSZWdpc3RlcihSZWdpc3RlcklEKik7CiAKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYg
aW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpOyB9CkBA
IC01MTgsNiArNTI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBtX3Nob3Vs
ZEVtaXREZWJ1Z0hvb2tzOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rczsK
KyAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbzsKIAogICAgICAgICBjb25z
dCBTY29wZUNoYWluKiBtX3Njb3BlQ2hhaW47CiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJv
bFRhYmxlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gNzIxNjApCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwOCwxMyArNjA4LDEzIEBAIE5FVkVSX0lOTElO
RSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWwKICAgICBjb2RlQmxvY2sgPSBjYWxsZXJGcmFt
ZS0+Y29kZUJsb2NrKCk7CiAjaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKElOVEVSUFJFVEVSKQog
ICAgIGlmIChjYWxsZXJGcmFtZS0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKQotICAgICAgICBi
eXRlY29kZU9mZnNldCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNh
bGxGcmFtZS0+cmV0dXJuUEMoKSk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2Nr
LT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUtPnJldHVyblBDKCkpOwogICAgIGVsc2UKLSAgICAg
ICAgYnl0ZWNvZGVPZmZzZXQgPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxlckZyYW1l
LCBjYWxsRnJhbWUtPnJldHVyblZQQygpKTsKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjb2Rl
QmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZS0+cmV0dXJuVlBDKCkpOwogI2VsaWYgRU5B
QkxFKEpJVCkKLSAgICBieXRlY29kZU9mZnNldCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQo
Y2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7CisgICAgYnl0ZWNvZGVPZmZzZXQg
PSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7CiAjZWxz
ZQotICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxsZXJG
cmFtZSwgY2FsbEZyYW1lLT5yZXR1cm5WUEMoKSk7CisgICAgYnl0ZWNvZGVPZmZzZXQgPSBjb2Rl
QmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZS0+cmV0dXJuVlBDKCkpOwogI2VuZGlmCiAK
ICAgICBjYWxsRnJhbWUgPSBjYWxsZXJGcmFtZTsKQEAgLTYyNSwxMiArNjI1LDE1IEBAIHN0YXRp
YyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3IoQ2FsbEZyYW0KIHsKICAgICBleGNlcHRpb24tPmNs
ZWFyQXBwZW5kU291cmNlVG9NZXNzYWdlKCk7CiAKKyAgICBpZiAoIWNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmhhc0V4cHJlc3Npb25JbmZvKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGludCBz
dGFydE9mZnNldCA9IDA7CiAgICAgaW50IGVuZE9mZnNldCA9IDA7CiAgICAgaW50IGRpdm90UG9p
bnQgPSAwOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoY2Fs
bEZyYW1lLCBieXRlY29kZU9mZnNldCwgZGl2b3RQb2ludCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCk7CisgICAgY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCwgZGl2b3RQb2ludCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAKICAgICBp
bnQgZXhwcmVzc2lvblN0YXJ0ID0gZGl2b3RQb2ludCAtIHN0YXJ0T2Zmc2V0OwogICAgIGludCBl
eHByZXNzaW9uU3RvcCA9IGRpdm90UG9pbnQgKyBlbmRPZmZzZXQ7CkBAIC02NjksNyArNjcyLDcg
QEAgc3RhdGljIHZvaWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbQogICAgIGV4Y2VwdGlv
bi0+cHV0RGlyZWN0KGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5n
KGdsb2JhbERhdGEsIG1lc3NhZ2UpKTsKIH0KIAotTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJ
bnRlcnByZXRlcjo6dGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVl
JiBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGJvb2wgZXhwbGljaXRU
aHJvdykKK05FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnRocm93RXhjZXB0
aW9uKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUsIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKICAgICBib29sIGlzSW50ZXJydXB0ID0gZmFsc2U7CkBAIC02Nzcs
MTMgKzY4MCwxOCBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAg
ICAgLy8gU2V0IHVwIHRoZSBleGNlcHRpb24gb2JqZWN0CiAgICAgaWYgKGV4Y2VwdGlvblZhbHVl
LmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGFzT2JqZWN0KGV4
Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgaWYgKCFleHBsaWNpdFRocm93ICYmIGV4Y2VwdGlvbi0+
aXNFcnJvckluc3RhbmNlKCkgJiYgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlv
biktPmFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpKQorCisgICAgICAgIGlmIChleGNlcHRpb24tPmlz
RXJyb3JJbnN0YW5jZSgpICYmIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24p
LT5hcHBlbmRTb3VyY2VUb01lc3NhZ2UoKSkKICAgICAgICAgICAgIGFwcGVuZFNvdXJjZVRvRXJy
b3IoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhjZXB0aW9uKSwgYnl0
ZWNvZGVPZmZzZXQpOwogCi0gICAgICAgIC8vIEZJWE1FOiBzaG91bGQgb25seSByZWFsbHkgYmUg
YWRkaW5nIHRoZXNlIHByb3BlcnRpZXMgdG8gVk0gZ2VuZXJhdGVkIGV4Y2VwdGlvbnMsCi0gICAg
ICAgIC8vIGJ1dCB0aGUgaW5zcGVjdG9yIGN1cnJlbnRseSByZXF1aXJlcyB0aGVzZSBmb3IgYWxs
IHRocm93biBvYmplY3RzLgotICAgICAgICBpZiAoIWhhc0Vycm9ySW5mbyhjYWxsRnJhbWUsIGV4
Y2VwdGlvbikpCi0gICAgICAgICAgICBhZGRFcnJvckluZm8oY2FsbEZyYW1lLCBleGNlcHRpb24s
IGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZSwgYnl0ZWNv
ZGVPZmZzZXQpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2UoKSk7CisgICAg
ICAgIC8vIFVzaW5nIGhhc0V4cHJlc3Npb25JbmZvIHRvIGltcGx5IHdlIGFyZSBpbnRlcmVzdGVk
IGluIHJpY2ggZXhjZXB0aW9uIGluZm8uCisgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0V4cHJl
c3Npb25JbmZvKCkgJiYgIWhhc0Vycm9ySW5mbyhjYWxsRnJhbWUsIGV4Y2VwdGlvbikpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmhhc0xpbmVJbmZvKCkpOworCisgICAgICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIG9ubHkgcmVhbGx5IGJlIGFkZGluZyB0aGVzZSBwcm9wZXJ0aWVz
IHRvIFZNIGdlbmVyYXRlZCBleGNlcHRpb25zLAorICAgICAgICAgICAgLy8gYnV0IHRoZSBpbnNw
ZWN0b3IgY3VycmVudGx5IHJlcXVpcmVzIHRoZXNlIGZvciBhbGwgdGhyb3duIG9iamVjdHMuCisg
ICAgICAgICAgICBhZGRFcnJvckluZm8oY2FsbEZyYW1lLCBleGNlcHRpb24sIGNvZGVCbG9jay0+
bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKS0+c291cmNlKCkpOworICAgICAgICB9CiAKICAgICAgICAgQ29tcGxU
eXBlIGV4Y2VwdGlvblR5cGUgPSBleGNlcHRpb24tPmV4Y2VwdGlvblR5cGUoKTsKICAgICAgICAg
aXNJbnRlcnJ1cHQgPSBleGNlcHRpb25UeXBlID09IEludGVycnVwdGVkIHx8IGV4Y2VwdGlvblR5
cGUgPT0gVGVybWluYXRlZDsKQEAgLTY5Miw3ICs3MDAsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxl
ckluZm8qIEludGVycHJldGVyOjp0CiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxG
cmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7CiAgICAgICAgIERlYnVn
Z2VyQ2FsbEZyYW1lIGRlYnVnZ2VyQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUp
OwogICAgICAgICBib29sIGhhc0hhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oZGVi
dWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCks
IGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZSwgYnl0ZWNv
ZGVPZmZzZXQpLCBoYXNIYW5kbGVyKTsKKyAgICAgICAgZGVidWdnZXItPmV4Y2VwdGlvbihkZWJ1
Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwg
Y29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLCBo
YXNIYW5kbGVyKTsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRs
ZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgpAQCAtNDU5Niw3ICs0
NjA0LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgaW50IGV4ID0gdlBDWzFdLnUu
b3BlcmFuZDsKICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPnIoZXgpLmpzVmFs
dWUoKTsKIAotICAgICAgICBoYW5kbGVyID0gdGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBleGNl
cHRpb25WYWx1ZSwgdlBDIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpLCB0cnVl
KTsKKyAgICAgICAgaGFuZGxlciA9IHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9u
VmFsdWUsIHZQQyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSk7CiAgICAgICAg
IGlmICghaGFuZGxlcikKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwg
ZXhjZXB0aW9uVmFsdWUpOwogCkBAIC00NzYzLDcgKzQ3NzEsNyBAQCBza2lwX2lkX2N1c3RvbV9z
ZWxmOgogICAgICAgICAgICAgLy8gY2Fubm90IGZhdGhvbSBpZiB3ZSBkb24ndCBhc3NpZ24gdG8g
dGhlIGV4Y2VwdGlvblZhbHVlIGJlZm9yZSBicmFuY2hpbmcpCiAgICAgICAgICAgICBleGNlcHRp
b25WYWx1ZSA9IGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGdsb2JhbERhdGEp
OwogICAgICAgICB9Ci0gICAgICAgIGhhbmRsZXIgPSB0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUs
IGV4Y2VwdGlvblZhbHVlLCB2UEMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCks
IGZhbHNlKTsKKyAgICAgICAgaGFuZGxlciA9IHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhj
ZXB0aW9uVmFsdWUsIHZQQyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSk7CiAg
ICAgICAgIGlmICghaGFuZGxlcikKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGNhbGxG
cmFtZSwgZXhjZXB0aW9uVmFsdWUpOwogCkBAIC00ODM4LDE1ICs0ODQ2LDE1IEBAIHZvaWQgSW50
ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENhbGxlcihDYWwKICAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IDA7CiAjaWYgRU5BQkxFKElOVEVSUFJFVEVSKQogICAgIGlmICghY2FsbGVyRnJhbWUt
Pmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjYWxs
ZXJDb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxlckZyYW1lLCBjYWxsRnJhbWUtPnJldHVy
blZQQygpKTsKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsZXJDb2RlQmxvY2stPmJ5dGVj
b2RlT2Zmc2V0KGNhbGxGcmFtZS0+cmV0dXJuVlBDKCkpOwogI2lmIEVOQUJMRShKSVQpCiAgICAg
ZWxzZQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxlckNvZGVCbG9jay0+Ynl0ZWNvZGVP
ZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7CisgICAgICAgIGJ5dGVj
b2RlT2Zmc2V0ID0gY2FsbGVyQ29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUtPnJl
dHVyblBDKCkpOwogI2VuZGlmCiAjZWxzZQotICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbGVyQ29k
ZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxsZXJGcmFtZSwgY2FsbEZyYW1lLT5yZXR1cm5QQygp
KTsKKyAgICBieXRlY29kZU9mZnNldCA9IGNhbGxlckNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQo
Y2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKICNlbmRpZgotICAgIGxpbmVOdW1iZXIgPSBjYWxsZXJD
b2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChjYWxsZXJGcmFtZSwgYnl0ZWNv
ZGVPZmZzZXQgLSAxKTsKKyAgICBsaW5lTnVtYmVyID0gY2FsbGVyQ29kZUJsb2NrLT5saW5lTnVt
YmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQgLSAxKTsKICAgICBzb3VyY2VJRCA9
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCk7CiAgICAgc291
cmNlVVJMID0gY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlVVJMKCk7
CiAgICAgZnVuY3Rpb24gPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDcyMTU5KQorKysgSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBs
ZXIoKSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0KCk7IH0KIAogICAgICAgICBORVZFUl9JTkxJTkUg
SlNWYWx1ZSBjYWxsRXZhbChDYWxsRnJhbWUqLCBSZWdpc3RlckZpbGUqLCBSZWdpc3RlciogYXJn
diwgaW50IGFyZ2MsIGludCByZWdpc3Rlck9mZnNldCk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBI
YW5kbGVySW5mbyogdGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYsIEpTVmFsdWUmLCB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgYm9vbCk7CisgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5m
byogdGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYsIEpTVmFsdWUmLCB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCk7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERl
YnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpOwogCiAgICAgICAgIHZvaWQg
ZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiA3MjE2MCkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NTIsNyArNTUyLDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIq
IGZ1bgogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhpdGVyLT5mcm9tLCBGdW5jdGlvblB0
cihpdGVyLT50bykpOwogICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+aGFzRXhjZXB0aW9u
SW5mbygpKSB7CisgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0NhbGxSZXR1cm5JbmRpY2VzKCkp
IHsKICAgICAgICAgbV9jb2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3RvcigpLnJlc2VydmVD
YXBhY2l0eShtX2NhbGxzLnNpemUoKSk7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+
OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7
ICsraXRlcikKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3Io
KS5hcHBlbmQoQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQocGF0Y2hCdWZmZXIucmV0
dXJuQWRkcmVzc09mZnNldChpdGVyLT5mcm9tKSwgaXRlci0+Ynl0ZWNvZGVPZmZzZXQpKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gNzIxNjApCisrKyBKYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY3LDEzICsxMDY3LDEz
IEBAIHN0cnVjdCBFeGNlcHRpb25IYW5kbGVyIHsKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7CiB9Owotc3RhdGljIEV4Y2VwdGlvbkhhbmRsZXIgaml0
VGhyb3coSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSBleGNlcHRpb25WYWx1ZSwgUmV0dXJuQWRkcmVzc1B0ciBmYXVsdExvY2F0aW9uLCBib29s
IGV4cGxpY2l0VGhyb3cpCitzdGF0aWMgRXhjZXB0aW9uSGFuZGxlciBqaXRUaHJvdyhKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlLCBSZXR1cm5BZGRyZXNzUHRyIGZhdWx0TG9jYXRpb24pCiB7CiAgICAgQVNTRVJUKGV4
Y2VwdGlvblZhbHVlKTsKIAotICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXQoY2FsbEZyYW1lLCBmYXVsdExvY2F0aW9uKTsKKyAgICB1
bnNpZ25lZCB2UENJbmRleCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0
KGZhdWx0TG9jYXRpb24pOwogICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsK
LSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IGdsb2JhbERhdGEtPmludGVycHJldGVyLT50aHJv
d0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCB2UENJbmRleCwgZXhwbGljaXRU
aHJvdyk7IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxsRnJhbWUgJiBleGNlcHRpb25WYWx1ZSEKKyAg
ICBIYW5kbGVySW5mbyogaGFuZGxlciA9IGdsb2JhbERhdGEtPmludGVycHJldGVyLT50aHJvd0V4
Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCB2UENJbmRleCk7IC8vIFRoaXMgbWF5
IHVwZGF0ZSBjYWxsRnJhbWUgJiBleGNlcHRpb25WYWx1ZSEKICAgICBnbG9iYWxEYXRhLT5leGNl
cHRpb24gPSBleGNlcHRpb25WYWx1ZTsKIAogICAgIHZvaWQqIGNhdGNoUm91dGluZSA9IGhhbmRs
ZXIgPyBoYW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkgOiBGdW5jdGlvblB0
cihjdGlPcFRocm93Tm90Q2F1Z2h0KS52YWx1ZSgpOwpAQCAtMTM4NCw3ICsxMzg0LDcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHJlZ2lzdGVyX2ZpbAogICAgICAgICAvLyBSZXdpbmQg
dG8gdGhlIHByZXZpb3VzIGNhbGwgZnJhbWUgYmVjYXVzZSBvcF9jYWxsIGFscmVhZHkgb3B0aW1p
c3RpY2FsbHkKICAgICAgICAgLy8gbW92ZWQgdGhlIGNhbGwgZnJhbWUgZm9yd2FyZC4KICAgICAg
ICAgQ2FsbEZyYW1lKiBvbGRDYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0g
ICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGppdFRocm93KHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YSwgb2xkQ2FsbEZyYW1lLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Iob2xkQ2FsbEZy
YW1lKSwgUmV0dXJuQWRkcmVzc1B0cihvbGRDYWxsRnJhbWUtPnJldHVyblBDKCkpLCBmYWxzZSk7
CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGppdFRocm93KHN0YWNrRnJhbWUu
Z2xvYmFsRGF0YSwgb2xkQ2FsbEZyYW1lLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Iob2xkQ2Fs
bEZyYW1lKSwgUmV0dXJuQWRkcmVzc1B0cihvbGRDYWxsRnJhbWUtPnJldHVyblBDKCkpKTsKICAg
ICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwogICAg
ICAgICBjYWxsRnJhbWUgPSBoYW5kbGVyLmNhbGxGcmFtZTsKICAgICB9CkBAIC0yMDA2LDcgKzIw
MDYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfY2FsbF9hcml0CiAgICAgICAg
IGlmICghc3RhY2tGcmFtZS5yZWdpc3RlckZpbGUtPmdyb3cobmV3RW5kKSkgewogICAgICAgICAg
ICAgLy8gUmV3aW5kIHRvIHRoZSBwcmV2aW91cyBjYWxsIGZyYW1lIGJlY2F1c2Ugb3BfY2FsbCBh
bHJlYWR5IG9wdGltaXN0aWNhbGx5CiAgICAgICAgICAgICAvLyBtb3ZlZCB0aGUgY2FsbCBmcmFt
ZSBmb3J3YXJkLgotICAgICAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhy
b3coc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBvbGRDYWxsRnJhbWUsIGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihvbGRDYWxsRnJhbWUpLCBwYywgZmFsc2UpOworICAgICAgICAgICAgRXhjZXB0aW9u
SGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBvbGRDYWxs
RnJhbWUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihvbGRDYWxsRnJhbWUpLCBwYyk7CiAgICAg
ICAgICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhoYW5kbGVyLmNhdGNoUm91dGluZSk7CiAg
ICAgICAgICAgICByZXR1cm4gaGFuZGxlci5jYWxsRnJhbWU7CiAgICAgICAgIH0KQEAgLTIwMjEs
NyArMjAyMSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9jYWxsX2FyaXQKICAg
ICAgICAgaWYgKCFzdGFja0ZyYW1lLnJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdFbmQpKSB7CiAgICAg
ICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHByZXZpb3VzIGNhbGwgZnJhbWUgYmVjYXVzZSBvcF9j
YWxsIGFscmVhZHkgb3B0aW1pc3RpY2FsbHkKICAgICAgICAgICAgIC8vIG1vdmVkIHRoZSBjYWxs
IGZyYW1lIGZvcndhcmQuCi0gICAgICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBq
aXRUaHJvdyhzdGFja0ZyYW1lLmdsb2JhbERhdGEsIG9sZENhbGxGcmFtZSwgY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKG9sZENhbGxGcmFtZSksIHBjLCBmYWxzZSk7CisgICAgICAgICAgICBFeGNl
cHRpb25IYW5kbGVyIGhhbmRsZXIgPSBqaXRUaHJvdyhzdGFja0ZyYW1lLmdsb2JhbERhdGEsIG9s
ZENhbGxGcmFtZSwgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKG9sZENhbGxGcmFtZSksIHBjKTsK
ICAgICAgICAgICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNTKGhhbmRsZXIuY2F0Y2hSb3V0aW5l
KTsKICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyLmNhbGxGcmFtZTsKICAgICAgICAgfQpAQCAt
MjA2NSw3ICsyMDY1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX2NvbnN0cnVj
dAogICAgICAgICBpZiAoIXN0YWNrRnJhbWUucmVnaXN0ZXJGaWxlLT5ncm93KG5ld0VuZCkpIHsK
ICAgICAgICAgICAgIC8vIFJld2luZCB0byB0aGUgcHJldmlvdXMgY2FsbCBmcmFtZSBiZWNhdXNl
IG9wX2NhbGwgYWxyZWFkeSBvcHRpbWlzdGljYWxseQogICAgICAgICAgICAgLy8gbW92ZWQgdGhl
IGNhbGwgZnJhbWUgZm9yd2FyZC4KLSAgICAgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxl
ciA9IGppdFRocm93KHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgb2xkQ2FsbEZyYW1lLCBjcmVhdGVT
dGFja092ZXJmbG93RXJyb3Iob2xkQ2FsbEZyYW1lKSwgcGMsIGZhbHNlKTsKKyAgICAgICAgICAg
IEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGppdFRocm93KHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YSwgb2xkQ2FsbEZyYW1lLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Iob2xkQ2FsbEZyYW1lKSwg
cGMpOwogICAgICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoaGFuZGxlci5jYXRjaFJv
dXRpbmUpOwogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIuY2FsbEZyYW1lOwogICAgICAgICB9
CkBAIC0yMDgwLDcgKzIwODAsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfY29u
c3RydWN0CiAgICAgICAgIGlmICghc3RhY2tGcmFtZS5yZWdpc3RlckZpbGUtPmdyb3cobmV3RW5k
KSkgewogICAgICAgICAgICAgLy8gUmV3aW5kIHRvIHRoZSBwcmV2aW91cyBjYWxsIGZyYW1lIGJl
Y2F1c2Ugb3BfY2FsbCBhbHJlYWR5IG9wdGltaXN0aWNhbGx5CiAgICAgICAgICAgICAvLyBtb3Zl
ZCB0aGUgY2FsbCBmcmFtZSBmb3J3YXJkLgotICAgICAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBo
YW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBvbGRDYWxsRnJhbWUsIGNy
ZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihvbGRDYWxsRnJhbWUpLCBwYywgZmFsc2UpOworICAgICAg
ICAgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS5nbG9i
YWxEYXRhLCBvbGRDYWxsRnJhbWUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihvbGRDYWxsRnJh
bWUpLCBwYyk7CiAgICAgICAgICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhoYW5kbGVyLmNh
dGNoUm91dGluZSk7CiAgICAgICAgICAgICByZXR1cm4gaGFuZGxlci5jYWxsRnJhbWU7CiAgICAg
ICAgIH0KQEAgLTMyMzgsNyArMzIzOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF90aHJvdykKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgRXhjZXB0aW9uSGFuZGxl
ciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNh
bGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSwgU1RVQl9SRVRVUk5fQUREUkVT
UywgdHJ1ZSk7CisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tG
cmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBd
LmpzVmFsdWUoKSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CiAgICAgU1RVQl9TRVRfUkVUVVJOX0FE
RFJFU1MoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwogICAgIHJldHVybiBoYW5kbGVyLmNhbGxGcmFt
ZTsKIH0KQEAgLTM1OTUsNyArMzU5NSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2
bV90aHJvdykKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotICAgIEV4
Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGppdFRocm93KGdsb2JhbERhdGEsIHN0YWNrRnJhbWUu
Y2FsbEZyYW1lLCBnbG9iYWxEYXRhLT5leGNlcHRpb24sIGdsb2JhbERhdGEtPmV4Y2VwdGlvbkxv
Y2F0aW9uLCBmYWxzZSk7CisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3co
Z2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiwg
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24pOwogICAgIFNUVUJfU0VUX1JFVFVSTl9BRERS
RVNTKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKICAgICByZXR1cm4gaGFuZGxlci5jYWxsRnJhbWU7
CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCShyZXZpc2lvbiA3MjE1
OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA1MSw4ICsxMDUxLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKG1hcmtTdGFjaywgKm1fbWFya0xpc3RTZXQp
OwogICAgIGlmIChtX2dsb2JhbERhdGEtPmV4Y2VwdGlvbikKICAgICAgICAgbWFya1N0YWNrLmFw
cGVuZChtX2dsb2JhbERhdGEtPmV4Y2VwdGlvbik7Ci0gICAgaWYgKG1fZ2xvYmFsRGF0YS0+ZnVu
Y3Rpb25Db2RlQmxvY2tCZWluZ1JlcGFyc2VkKQotICAgICAgICBtX2dsb2JhbERhdGEtPmZ1bmN0
aW9uQ29kZUJsb2NrQmVpbmdSZXBhcnNlZC0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogICAg
IGlmIChtX2dsb2JhbERhdGEtPmZpcnN0U3RyaW5naWZpZXJUb01hcmspCiAgICAgICAgIEpTT05P
YmplY3Q6Om1hcmtTdHJpbmdpZmllcnMobWFya1N0YWNrLCBtX2dsb2JhbERhdGEtPmZpcnN0U3Ry
aW5naWZpZXJUb01hcmspOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDcyMTU5KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIEpTT2JqZWN0KiBFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGVybmEKIAogICAgIEFTU0VSVCghbV9ldmFsQ29kZUJsb2NrKTsK
ICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBn
bG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlQ2hhaW4ubG9jYWxEZXB0aCgp
KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3
IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBnbG9iYWxPYmplY3QtPmRlYnVnZ2Vy
KCksIHNjb3BlQ2hhaW4sIG1fZXZhbENvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbV9ldmFsQ29k
ZUJsb2NrLmdldCgpKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9y
KGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihldmFsTm9kZS5nZXQoKSwgc2NvcGVDaGFp
biwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkp
KSk7CiAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOwogICAgIAogICAgIGV2YWxOb2RlLT5kZXN0
cm95RGF0YSgpOwpAQCAtMTU2LDcgKzE1Niw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJs
ZTo6Y29tcGlsZUludGUKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVD
aGFpbi5nbG9iYWxPYmplY3QoKTsKICAgICAKICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9w
dFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3Qs
IHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdl
bmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCks
IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgJmdsb2JhbE9iamVjdC0+c3lt
Ym9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKSkpOworICAgIE93blB0cjxCeXRl
Y29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihw
cm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFpbiwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUo
KSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKSkpOwogICAgIGdlbmVyYXRvci0+Z2VuZXJhdGUo
KTsKIAogICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOwpAQCAtMTkzLDcgKzE5Myw3IEBA
IEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAgIEFTU0VSVCgh
bV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihu
ZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNv
dXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlKSk7Ci0gICAg
T3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2Rl
R2VuZXJhdG9yKGJvZHkuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFp
biwgbV9jb2RlQmxvY2tGb3JDYWxsLT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNhbGwu
Z2V0KCkpKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW4sIG1fY29kZUJs
b2NrRm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkpOwog
ICAgIGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0g
bV9jb2RlQmxvY2tGb3JDYWxsLT5tX251bVBhcmFtZXRlcnM7CiAgICAgQVNTRVJUKG1fbnVtUGFy
YW1ldGVyc0ZvckNhbGwpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAgIEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpOwogICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9u
Q29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92
aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCB0cnVlKSk7Ci0gICAgT3duUHRyPEJ5dGVj
b2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJv
ZHkuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0Lmdl
dCgpKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRy
KG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluLCBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0
KCkpKSk7CiAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOwogICAgIG1fbnVtUGFyYW1ldGVyc0Zv
ckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5tX251bVBhcmFtZXRlcnM7CiAg
ICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7CkBAIC0yNjQsNzIgKzI2NCw2
IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjptYXJrQWdncmVnYXRlKE0KICAgICAgICAgbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKIH0KIAotUGFz
c093blB0cjxFeGNlcHRpb25JbmZvPiBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRp
b25JbmZvKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCi17Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7Ci0gICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7Ci0gICAgUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IG5ld0Z1bmN0aW9uQm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8
RnVuY3Rpb25Cb2R5Tm9kZT4oc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdCwgMCwgMCwgbV9z
b3VyY2UsIG1fcGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0
IDogSlNQYXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKCFuZXdGdW5jdGlvbkJvZHkp
Ci0gICAgICAgIHJldHVybiBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+KCk7Ci0gICAgQVNTRVJU
KG5ld0Z1bmN0aW9uQm9keS0+aXNTdHJpY3RNb2RlKCkgPT0gaXNTdHJpY3RNb2RlKCkpOwotICAg
IGlmIChtX2ZvcmNlVXNlc0FyZ3VtZW50cykKLSAgICAgICAgbmV3RnVuY3Rpb25Cb2R5LT5zZXRV
c2VzQXJndW1lbnRzKCk7Ci0gICAgbmV3RnVuY3Rpb25Cb2R5LT5maW5pc2hQYXJzaW5nKG1fcGFy
YW1ldGVycywgbV9uYW1lKTsKLQotICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihzY29wZUNoYWlu
Tm9kZSk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4uZ2xv
YmFsT2JqZWN0KCk7Ci0KLSAgICBPd25QdHI8Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2soYWRvcHRQ
dHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBjb2RlQmxvY2st
Pm1faXNDb25zdHJ1Y3RvcikpKTsKLSAgICBnbG9iYWxEYXRhLT5mdW5jdGlvbkNvZGVCbG9ja0Jl
aW5nUmVwYXJzZWQgPSBuZXdDb2RlQmxvY2suZ2V0KCk7Ci0KLSAgICBPd25QdHI8Qnl0ZWNvZGVH
ZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IobmV3RnVu
Y3Rpb25Cb2R5LmdldCgpLCBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG5l
d0NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbmV3Q29kZUJsb2NrLmdldCgpKSkpOwotICAgIGdl
bmVyYXRvci0+c2V0UmVnZW5lcmF0aW5nRm9yRXhjZXB0aW9uSW5mbyhzdGF0aWNfY2FzdDxGdW5j
dGlvbkNvZGVCbG9jayo+KGNvZGVCbG9jaykpOwotICAgIGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsK
LQotICAgIEFTU0VSVChuZXdDb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA9PSBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChnbG9i
YWxEYXRhLT5jYW5Vc2VKSVQoKSkgewotICAgICAgICBKSVRDb2RlIG5ld0pJVENvZGUgPSBKSVQ6
OmNvbXBpbGUoZ2xvYmFsRGF0YSwgbmV3Q29kZUJsb2NrLmdldCgpLCAwLCBjb2RlQmxvY2stPm1f
aXNDb25zdHJ1Y3RvciA/IGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKS5zdGFydCgpIDog
Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5zdGFydCgpKTsKLSAgICAgICAgQVNTRVJUKGNvZGVC
bG9jay0+bV9pc0NvbnN0cnVjdG9yID8gbmV3SklUQ29kZS5zaXplKCkgPT0gZ2VuZXJhdGVkSklU
Q29kZUZvckNvbnN0cnVjdCgpLnNpemUoKSA6IG5ld0pJVENvZGUuc2l6ZSgpID09IGdlbmVyYXRl
ZEpJVENvZGVGb3JDYWxsKCkuc2l6ZSgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGdsb2JhbERh
dGEtPmZ1bmN0aW9uQ29kZUJsb2NrQmVpbmdSZXBhcnNlZCA9IDA7Ci0KLSAgICByZXR1cm4gbmV3
Q29kZUJsb2NrLT5leHRyYWN0RXhjZXB0aW9uSW5mbygpOwotfQotCi1QYXNzT3duUHRyPEV4Y2Vw
dGlvbkluZm8+IEV2YWxFeGVjdXRhYmxlOjpyZXBhcnNlRXhjZXB0aW9uSW5mbyhTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIEpTT2Jq
ZWN0KiBleGNlcHRpb24gPSAwOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3Bl
Q2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwotICAgIFJlZlB0cjxFdmFsTm9kZT4gbmV3RXZhbEJvZHkg
PSBnbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNlPEV2YWxOb2RlPihzY29wZUNoYWluTm9kZS0+Z2xv
YmFsT2JqZWN0LCAwLCAwLCBtX3NvdXJjZSwgMCwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3Ry
aWN0IDogSlNQYXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKG5ld0V2YWxCb2R5
LT5pc1N0cmljdE1vZGUoKSA9PSBpc1N0cmljdE1vZGUoKSk7Ci0gICAgaWYgKCFuZXdFdmFsQm9k
eSkKLSAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4oKTsKLQotICAgIFNj
b3BlQ2hhaW4gc2NvcGVDaGFpbihzY29wZUNoYWluTm9kZSk7Ci0gICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCk7Ci0KLSAgICBPd25QdHI8
RXZhbENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrKGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKHRo
aXMsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVDaGFpbi5sb2NhbERl
cHRoKCkpKSk7Ci0KLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9w
dFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IobmV3RXZhbEJvZHkuZ2V0KCksIGdsb2JhbE9iamVj
dC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgbmV3Q29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBu
ZXdDb2RlQmxvY2suZ2V0KCkpKSk7Ci0gICAgZ2VuZXJhdG9yLT5zZXRSZWdlbmVyYXRpbmdGb3JF
eGNlcHRpb25JbmZvKHN0YXRpY19jYXN0PEV2YWxDb2RlQmxvY2sqPihjb2RlQmxvY2spKTsKLSAg
ICBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7Ci0KLSAgICBBU1NFUlQobmV3Q29kZUJsb2NrLT5pbnN0
cnVjdGlvbkNvdW50KCkgPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpOwotCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBpZiAoZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpIHsKLSAgICAgICAg
SklUQ29kZSBuZXdKSVRDb2RlID0gSklUOjpjb21waWxlKGdsb2JhbERhdGEsIG5ld0NvZGVCbG9j
ay5nZXQoKSwgMCwgZ2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5zdGFydCgpKTsKLSAgICAgICAg
QVNTRVJUKG5ld0pJVENvZGUuc2l6ZSgpID09IGdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuc2l6
ZSgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBuZXdDb2RlQmxvY2stPmV4dHJhY3RF
eGNlcHRpb25JbmZvKCk7Ci19Ci0KIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpyZWNvbXBpbGUo
RXhlY1N0YXRlKikKIHsKICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKQEAgLTM3Niwx
MCArMzEwLDQgQEAgVVN0cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKAogICAg
IHJldHVybiBidWlsZGVyLnRvVVN0cmluZygpOwogfQogCi1QYXNzT3duUHRyPEV4Y2VwdGlvbklu
Zm8+IFByb2dyYW1FeGVjdXRhYmxlOjpyZXBhcnNlRXhjZXB0aW9uSW5mbyhTY29wZUNoYWluTm9k
ZSosIENvZGVCbG9jayopCi17Ci0gICAgLy8gQ29kZUJsb2NrcyBmb3IgcHJvZ3JhbSBjb2RlIGFy
ZSB0cmFuc2llbnQgYW5kIHRoZXJlZm9yZSBkbyBub3QgZ2FpbiBmcm9tIGZyb20gdGhyb3dpbmcg
b3V0IHRoZWlyIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KLSAgICByZXR1cm4gUGFzc093blB0cjxF
eGNlcHRpb25JbmZvPigpOwotfQotCiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkocmV2aXNpb24gNzIxNTkpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDggKzE3Nyw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMgfHwgbV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwg
Q2F0Y2hGZWF0dXJlKTsgfQogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXMgJiBTdHJpY3RNb2RlRmVhdHVyZTsgfQogCi0gICAgICAgIHZpcnR1YWwg
UGFzc093blB0cjxFeGNlcHRpb25JbmZvPiByZXBhcnNlRXhjZXB0aW9uSW5mbyhTY29wZUNoYWlu
Tm9kZSosIENvZGVCbG9jayopID0gMDsKLQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBy
ZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJs
ZXMsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKICAgICAgICAgewpAQCAtMjI5LDggKzIy
Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJu
YWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKIAotICAgICAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8RXhjZXB0aW9uSW5mbz4gcmVwYXJzZUV4Y2VwdGlvbkluZm8oU2NvcGVDaGFpbk5vZGUq
LCBDb2RlQmxvY2sqKTsKLQogICAgICAgICBPd25QdHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29k
ZUJsb2NrOwogICAgIH07CiAKQEAgLTI3Miw4ICsyNjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CiAKLSAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IHJlcGFy
c2VFeGNlcHRpb25JbmZvKFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2NrKik7Ci0KICAgICAgICAg
T3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fcHJvZ3JhbUNvZGVCbG9jazsKICAgICB9OwogCkBA
IC0zNjUsOCArMzU5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBjb21w
aWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVD
aGFpbk5vZGUqKTsKIAotICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4g
cmVwYXJzZUV4Y2VwdGlvbkluZm8oU2NvcGVDaGFpbk5vZGUqLCBDb2RlQmxvY2sqKTsKLQogICAg
ICAgICB1bnNpZ25lZCBtX251bUNhcHR1cmVkVmFyaWFibGVzIDogMzE7CiAgICAgICAgIGJvb2wg
bV9mb3JjZVVzZXNBcmd1bWVudHMgOiAxOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA3MjE1OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw2IEBAIEpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIGhlYXAodGhpcykK
ICAgICAsIGhlYWQoMCkKICAgICAsIGR5bmFtaWNHbG9iYWxPYmplY3QoMCkKLSAgICAsIGZ1bmN0
aW9uQ29kZUJsb2NrQmVpbmdSZXBhcnNlZCgwKQogICAgICwgZmlyc3RTdHJpbmdpZmllclRvTWFy
aygwKQogICAgICwgbWFya1N0YWNrKGpzQXJyYXlWUHRyKQogICAgICwgY2FjaGVkVVRDT2Zmc2V0
KE5hTikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24g
NzIxNTkpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH07CiAK
ICAgICAgICAgYm9vbCBpc1NoYXJlZEluc3RhbmNlKCkgeyByZXR1cm4gZ2xvYmFsRGF0YVR5cGUg
PT0gQVBJU2hhcmVkOyB9CisgICAgICAgIGJvb2wgdXNpbmdBUEkoKSB7IHJldHVybiBnbG9iYWxE
YXRhVHlwZSAhPSBEZWZhdWx0OyB9CiAgICAgICAgIHN0YXRpYyBib29sIHNoYXJlZEluc3RhbmNl
RXhpc3RzKCk7CiAgICAgICAgIHN0YXRpYyBKU0dsb2JhbERhdGEmIHNoYXJlZEluc3RhbmNlKCk7
CiAKQEAgLTIwNSw3ICsyMDYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBIYXNoU2V0
PEpTT2JqZWN0Kj4gYXJyYXlWaXNpdGVkRWxlbWVudHM7CiAKLSAgICAgICAgQ29kZUJsb2NrKiBm
dW5jdGlvbkNvZGVCbG9ja0JlaW5nUmVwYXJzZWQ7CiAgICAgICAgIFN0cmluZ2lmaWVyKiBmaXJz
dFN0cmluZ2lmaWVyVG9NYXJrOwogCiAgICAgICAgIE1hcmtTdGFjayBtYXJrU3RhY2s7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiA3MjE1OSkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjU0LDkgKzI1NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBEZWJ1Z2dl
ciogZGVidWdnZXIoKSBjb25zdCB7IHJldHVybiBkKCktPmRlYnVnZ2VyOyB9CiAgICAgICAgIHZv
aWQgc2V0RGVidWdnZXIoRGVidWdnZXIqIGRlYnVnZ2VyKSB7IGQoKS0+ZGVidWdnZXIgPSBkZWJ1
Z2dlcjsgfQotICAgICAgICAKKwogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQcm9maWxp
bmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICAKKyAgICAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAg
ICAgICAgU2NvcGVDaGFpbiYgZ2xvYmFsU2NvcGVDaGFpbigpIHsgcmV0dXJuIGQoKS0+Z2xvYmFs
U2NvcGVDaGFpbjsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0dsb2JhbE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTI3Niw3ICsyNzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUp
OwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSgpIHsgcmV0dXJuICpkKCktPmds
b2JhbERhdGEuZ2V0KCk7IH0KKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKCkgY29u
c3QgeyByZXR1cm4gKmQoKS0+Z2xvYmFsRGF0YS5nZXQoKTsgfQogICAgICAgICBKU0dsb2JhbE9i
amVjdERhdGEqIGQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdERh
dGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDcyMTU5KQor
KysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMzg1LDcgKzIxMzg1LDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWls
ZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRp
YmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmds
aXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAo
CiAJCQkJRW5nbGlzaCwKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5j
cHAJKHJldmlzaW9uIDcyMTU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDI2IEBAIGJvb2wgSlNET01XaW5k
b3dCYXNlOjpzdXBwb3J0c1Byb2ZpbGluZygKICNlbmRpZgogfQogCitib29sIEpTRE9NV2luZG93
QmFzZTo6c3VwcG9ydHNSaWNoU291cmNlSW5mbygpIGNvbnN0Cit7CisjaWYgIUVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKSB8fCAhRU5BQkxFKElOU1BFQ1RPUikKKyAgICByZXR1cm4gZmFsc2U7
CisjZWxzZQorICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZy
YW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wg
ZW5hYmxlZCA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZW5hYmxlZCgpOworICAgIEFT
U0VSVChlbmFibGVkIHx8ICFkZWJ1Z2dlcigpKTsKKyAgICBBU1NFUlQoZW5hYmxlZCB8fCAhc3Vw
cG9ydHNQcm9maWxpbmcoKSk7CisgICAgcmV0dXJuIGVuYWJsZWQ7CisjZW5kaWYKK30KKwogYm9v
bCBKU0RPTVdpbmRvd0Jhc2U6OnNob3VsZEludGVycnVwdFNjcmlwdCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGltcGwoKS0+ZnJhbWUoKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmgJKHJldmlzaW9uIDcyMTU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgdmlydHVhbCBKU0M6OkV4ZWNTdGF0ZSogZ2xvYmFsRXhlYygpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQcm9maWxpbmcoKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSBjb25zdDsKICAgICAgICAgdmly
dHVhbCBib29sIHNob3VsZEludGVycnVwdFNjcmlwdCgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wg
YWxsb3dzQWNjZXNzRnJvbShKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0OwpJbmRleDogV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJl
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3MjE1OSkKKysrIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTcwNiw3ICs3MDYsNiBAQAogCQkJaXNhID0gUEJYUHJvamVj
dDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjlDMzA4OTAyQzZEMDA4QTlFRkMg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJEdW1wUmVuZGVyVHJl
ZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxv
cG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJ
CQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDcyMTU5KQor
KysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC05ODgsNyArOTg4LDggQEAgc3RhdGljIGJvb2wgc2hvdWxkT3BlbldlYklu
c3BlY3Rvcihjb25zdAogCiBzdGF0aWMgYm9vbCBzaG91bGRFbmFibGVEZXZlbG9wZXJFeHRyYXMo
Y29uc3QgY2hhciogcGF0aE9yVVJMKQogewotICAgIHJldHVybiBzaG91bGRPcGVuV2ViSW5zcGVj
dG9yKHBhdGhPclVSTCkgfHwgc3Ryc3RyKHBhdGhPclVSTCwgImluc3BlY3Rvci1lbmFibGVkLyIp
OworLy8gICAgcmV0dXJuIHNob3VsZE9wZW5XZWJJbnNwZWN0b3IocGF0aE9yVVJMKSB8fCBzdHJz
dHIocGF0aE9yVVJMLCAiaW5zcGVjdG9yLWVuYWJsZWQvIik7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGlu
ZygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74336</attachid>
            <date>2010-11-18 18:20:22 -0800</date>
            <delta_ts>2010-11-18 18:25:52 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>NoRecompile.2.patch</filename>
            <type>text/plain</type>
            <size>57509</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyMzU4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTAtMTEtMTggIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0OTcwOCAtIFN0b3AgcmVjb21waWxpbmcg
ZnVuY3Rpb25zIHRvIHJlZ2VuZXJhdGUgZXhjZXB0aW9uIGluZm8uCisKKyAgICAgICAgSW5zdGVh
ZCBvbmx5IGhvbGQgaW5mbyBhcyBuZWNlc3Nhcnkg4oCTIGtlZXAgZGl2b3QgaW5mbyBpcyB0aGUg
aW5zcGVjdG9yCisgICAgICAgIGlzIGVuYWJsZWQsIGxpbmUgbnVtYmVyIGluZm8gaXMgZGVidWdn
aW5nIG9yIHByb2ZpbGluZywgYW5kIGhhbmRsZXIKKyAgICAgICAgaW5mbyBmb3IgZnVuY3Rpb25z
IHdpdGggdHJ5L2NhdGNoLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5lTnVtYmVy
Rm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4cHJlc3Npb25S
YW5nZUZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtU
b0ZpdCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEV4
cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRMaW5lSW5mbyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzRXhwcmVzc2lvbkluZm8pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omhhc0xpbmVJbmZvKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpuZWVk
c0NhbGxSZXR1cm5JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsUmV0dXJu
SW5kZXhWZWN0b3IpOgorICAgICAgICAqIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHA6CisgICAg
ICAgIChKU0M6OlNhbXBsaW5nVG9vbDo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRMaW5lSW5mbyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kQ2FsbEZy
YW1lKToKKyAgICAgICAgKEpTQzo6YXBwZW5kU291cmNlVG9FcnJvcik6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUxh
c3RDYWxsZXIpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAg
ICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAg
ICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OmppdFRocm93KToKKyAgICAg
ICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKiBydW50
aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNv
bnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0
YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OnVzaW5nQVBJKToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpzdXBwb3J0c1Jp
Y2hTb3VyY2VJbmZvKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Omdsb2JhbERhdGEp
OgorCiAyMDEwLTExLTE4ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAg
UnViYmVyLXN0YW1wZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gNzIzNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYxLDEzICsxMjYxLDEwIEBAIHN0
YXRpYyBIYXNoU2V0PENvZGVCbG9jayo+IGxpdmVDb2RlQmxvY2sKICAgICBtYWNybyhpbW1lZGlh
dGVTd2l0Y2hKdW1wVGFibGVzKSBcCiAgICAgbWFjcm8oY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxl
cykgXAogICAgIG1hY3JvKHN0cmluZ1N3aXRjaEp1bXBUYWJsZXMpIFwKLSAgICBtYWNybyhmdW5j
dGlvblJlZ2lzdGVySW5mb3MpCi0KLSNkZWZpbmUgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUl9FWENF
UFRJT05fSU5GTyhtYWNybykgXAorICAgIG1hY3JvKGV2YWxDb2RlQ2FjaGUpIFwKICAgICBtYWNy
byhleHByZXNzaW9uSW5mbykgXAogICAgIG1hY3JvKGxpbmVJbmZvKSBcCi0gICAgbWFjcm8oZ2V0
QnlJZEV4Y2VwdGlvbkluZm8pIFwKLSAgICBtYWNybyhwY1ZlY3RvcikKKyAgICBtYWNybyhjYWxs
UmV0dXJuSW5kZXhWZWN0b3IpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdGF0aWMgc2l6ZV90
IHNpemVJbkJ5dGVzKGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQpAQCAtMTI4MSw3ICsxMjc4LDYg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAjZGVmaW5lIERFRklORV9W
QVJTKG5hbWUpIHNpemVfdCBuYW1lIyNJc05vdEVtcHR5ID0gMDsgc2l6ZV90IG5hbWUjI1RvdGFs
U2l6ZSA9IDA7CiAgICAgICAgIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IoREVGSU5FX1ZBUlMpCiAg
ICAgICAgIEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfUkFSRV9EQVRBKERFRklORV9WQVJTKQotICAg
ICAgICBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SX0VYQ0VQVElPTl9JTkZPKERFRklORV9WQVJTKQog
ICAgICN1bmRlZiBERUZJTkVfVkFSUwogCiAgICAgLy8gTm9uLXZlY3RvciBkYXRhIG1lbWJlcnMK
QEAgLTEyOTAsNyArMTI4Niw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGljcygpCiAg
ICAgc2l6ZV90IHN5bWJvbFRhYmxlSXNOb3RFbXB0eSA9IDA7CiAgICAgc2l6ZV90IHN5bWJvbFRh
YmxlVG90YWxTaXplID0gMDsKIAotICAgIHNpemVfdCBoYXNFeGNlcHRpb25JbmZvID0gMDsKICAg
ICBzaXplX3QgaGFzUmFyZURhdGEgPSAwOwogCiAgICAgc2l6ZV90IGlzRnVuY3Rpb25Db2RlID0g
MDsKQEAgLTEzMTAsMTMgKzEzMDUsNiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3Mo
KQogICAgICAgICAgICAgc3ltYm9sVGFibGVUb3RhbFNpemUgKz0gKGNvZGVCbG9jay0+bV9zeW1i
b2xUYWJsZS5jYXBhY2l0eSgpICogKHNpemVvZihTeW1ib2xUYWJsZTo6S2V5VHlwZSkgKyBzaXpl
b2YoU3ltYm9sVGFibGU6Ok1hcHBlZFR5cGUpKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
Y29kZUJsb2NrLT5tX2V4Y2VwdGlvbkluZm8pIHsKLSAgICAgICAgICAgIGhhc0V4Y2VwdGlvbklu
Zm8rKzsKLSAgICAgICAgICAgICNkZWZpbmUgR0VUX1NUQVRTKG5hbWUpIGlmICghY29kZUJsb2Nr
LT5tX2V4Y2VwdGlvbkluZm8tPm1fIyNuYW1lLmlzRW1wdHkoKSkgeyBuYW1lIyNJc05vdEVtcHR5
Kys7IG5hbWUjI1RvdGFsU2l6ZSArPSBzaXplSW5CeXRlcyhjb2RlQmxvY2stPm1fZXhjZXB0aW9u
SW5mby0+bV8jI25hbWUpOyB9Ci0gICAgICAgICAgICAgICAgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RP
Ul9FWENFUFRJT05fSU5GTyhHRVRfU1RBVFMpCi0gICAgICAgICAgICAjdW5kZWYgR0VUX1NUQVRT
Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoY29kZUJsb2NrLT5tX3JhcmVEYXRhKSB7CiAgICAg
ICAgICAgICBoYXNSYXJlRGF0YSsrOwogICAgICAgICAgICAgI2RlZmluZSBHRVRfU1RBVFMobmFt
ZSkgaWYgKCFjb2RlQmxvY2stPm1fcmFyZURhdGEtPm1fIyNuYW1lLmlzRW1wdHkoKSkgeyBuYW1l
IyNJc05vdEVtcHR5Kys7IG5hbWUjI1RvdGFsU2l6ZSArPSBzaXplSW5CeXRlcyhjb2RlQmxvY2st
Pm1fcmFyZURhdGEtPm1fIyNuYW1lKTsgfQpAQCAtMTM0NSw3ICsxMzMzLDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAjZGVmaW5lIEdFVF9UT1RBTF9TSVpFKG5hbWUp
IHRvdGFsU2l6ZSArPSBuYW1lIyNUb3RhbFNpemU7CiAgICAgICAgIEZPUl9FQUNIX01FTUJFUl9W
RUNUT1IoR0VUX1RPVEFMX1NJWkUpCiAgICAgICAgIEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfUkFS
RV9EQVRBKEdFVF9UT1RBTF9TSVpFKQotICAgICAgICBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SX0VY
Q0VQVElPTl9JTkZPKEdFVF9UT1RBTF9TSVpFKQogICAgICN1bmRlZiBHRVRfVE9UQUxfU0laRQog
CiAgICAgdG90YWxTaXplICs9IHN5bWJvbFRhYmxlVG90YWxTaXplOwpAQCAtMTM2MCwxMyArMTM0
NywxMSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3MoKQogICAgIHByaW50ZigiTnVt
YmVyIG9mIEdsb2JhbENvZGUgQ29kZUJsb2NrczogJXp1ICglLjNmJSUpXG4iLCBpc0dsb2JhbENv
ZGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaXNHbG9iYWxDb2RlKSAqIDEwMC4wIC8gbGl2ZUNvZGVC
bG9ja1NldC5zaXplKCkpOwogICAgIHByaW50ZigiTnVtYmVyIG9mIEV2YWxDb2RlIENvZGVCbG9j
a3M6ICV6dSAoJS4zZiUlKVxuIiwgaXNFdmFsQ29kZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpc0V2
YWxDb2RlKSAqIDEwMC4wIC8gbGl2ZUNvZGVCbG9ja1NldC5zaXplKCkpOwogCi0gICAgcHJpbnRm
KCJOdW1iZXIgb2YgQ29kZUJsb2NrcyB3aXRoIGV4Y2VwdGlvbiBpbmZvOiAlenUgKCUuM2YlJSlc
biIsIGhhc0V4Y2VwdGlvbkluZm8sIHN0YXRpY19jYXN0PGRvdWJsZT4oaGFzRXhjZXB0aW9uSW5m
bykgKiAxMDAuMCAvIGxpdmVDb2RlQmxvY2tTZXQuc2l6ZSgpKTsKICAgICBwcmludGYoIk51bWJl
ciBvZiBDb2RlQmxvY2tzIHdpdGggcmFyZSBkYXRhOiAlenUgKCUuM2YlJSlcbiIsIGhhc1JhcmVE
YXRhLCBzdGF0aWNfY2FzdDxkb3VibGU+KGhhc1JhcmVEYXRhKSAqIDEwMC4wIC8gbGl2ZUNvZGVC
bG9ja1NldC5zaXplKCkpOwogCiAgICAgI2RlZmluZSBQUklOVF9TVEFUUyhuYW1lKSBwcmludGYo
Ik51bWJlciBvZiBDb2RlQmxvY2tzIHdpdGggIiAjbmFtZSAiOiAlenVcbiIsIG5hbWUjI0lzTm90
RW1wdHkpOyBwcmludGYoIlNpemUgb2YgYWxsICIgI25hbWUgIjogJXp1XG4iLCBuYW1lIyNUb3Rh
bFNpemUpOyAKICAgICAgICAgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUihQUklOVF9TVEFUUykKICAg
ICAgICAgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUl9SQVJFX0RBVEEoUFJJTlRfU1RBVFMpCi0gICAg
ICAgIEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfRVhDRVBUSU9OX0lORk8oUFJJTlRfU1RBVFMpCiAg
ICAgI3VuZGVmIFBSSU5UX1NUQVRTCiAKICAgICBwcmludGYoIk51bWJlciBvZiBDb2RlQmxvY2tz
IHdpdGggZXZhbENvZGVDYWNoZTogJXp1XG4iLCBldmFsQ29kZUNhY2hlSXNOb3RFbXB0eSk7CkBA
IC0xMzk5LDcgKzEzODQsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvCiAgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKICAgICAsIG1fc291cmNlT2Zmc2V0
KHNvdXJjZU9mZnNldCkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltVGFiKQotICAgICwgbV9leGNl
cHRpb25JbmZvKGFkb3B0UHRyKG5ldyBFeGNlcHRpb25JbmZvKSkKIHsKICAgICBBU1NFUlQobV9z
b3VyY2UpOwogCkBAIC0xNTU4LDMzICsxNTQyLDYgQEAgdm9pZCBDb2RlQmxvY2s6Om1hcmtBZ2dy
ZWdhdGUoTWFya1N0YWNrJgogICAgIG1hcmtTdGFjay5hcHBlbmQobV9nbG9iYWxPYmplY3QpOwog
fQogCi1ib29sIENvZGVCbG9jazo6cmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2FyeShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBpZiAobV9leGNlcHRpb25JbmZvKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIEFTU0VSVCghbV9yYXJlRGF0YSB8fCAhbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkpOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgaWYgKG1fbmVlZHNGdWxsU2NvcGVD
aGFpbikgewotICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgIWNhbGxG
cmFtZS0+cihhY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBj
cmVhdGVBY3RpdmF0aW9uKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBzY29wZUNoYWluID0gY2Fs
bEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgICAgIH0KLSAgICAgICAgU2NvcGVDaGFpbiBzYyhz
Y29wZUNoYWluKTsKLSAgICAgICAgaW50IHNjb3BlRGVsdGEgPSBzYy5sb2NhbERlcHRoKCk7Ci0g
ICAgICAgIGlmIChtX2NvZGVUeXBlID09IEV2YWxDb2RlKQotICAgICAgICAgICAgc2NvcGVEZWx0
YSAtPSBzdGF0aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4odGhpcyktPmJhc2VTY29wZURlcHRoKCk7
Ci0gICAgICAgIGVsc2UgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICAg
ICAgc2NvcGVEZWx0YSsrOyAvLyBDb21waWxhdGlvbiBvZiBmdW5jdGlvbiBjb2RlIGFzc3VtZXMg
YWN0aXZhdGlvbiBpcyBub3Qgb24gdGhlIHNjb3BlIGNoYWluIHlldC4KLSAgICAgICAgQVNTRVJU
KHNjb3BlRGVsdGEgPj0gMCk7Ci0gICAgICAgIHdoaWxlIChzY29wZURlbHRhLS0pCi0gICAgICAg
ICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+bmV4dDsKLSAgICB9Ci0KLSAgICBtX2V4Y2Vw
dGlvbkluZm8gPSBtX293bmVyRXhlY3V0YWJsZS0+cmVwYXJzZUV4Y2VwdGlvbkluZm8oc2NvcGVD
aGFpbiwgdGhpcyk7Ci0gICAgcmV0dXJuIG1fZXhjZXB0aW9uSW5mbzsKLX0KLQogSGFuZGxlcklu
Zm8qIENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KQogewogICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IG1faW5zdHJ1Y3Rpb25Db3Vu
dCk7CkBAIC0xNjAzLDQ2ICsxNTYwLDQ4IEBAIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRs
ZXJGb3JCeXRlY28KICAgICByZXR1cm4gMDsKIH0KIAotaW50IENvZGVCbG9jazo6bGluZU51bWJl
ckZvckJ5dGVjb2RlT2Zmc2V0KENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCkKK2ludCBDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCkKIHsKICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBtX2lu
c3RydWN0aW9uQ291bnQpOwogCi0gICAgaWYgKCFyZXBhcnNlRm9yRXhjZXB0aW9uSW5mb0lmTmVj
ZXNzYXJ5KGNhbGxGcmFtZSkgfHwgIW1fZXhjZXB0aW9uSW5mby0+bV9saW5lSW5mby5zaXplKCkp
Ci0gICAgICAgIHJldHVybiBtX293bmVyRXhlY3V0YWJsZS0+c291cmNlKCkuZmlyc3RMaW5lKCk7
IC8vIEVtcHR5IGZ1bmN0aW9uIG9yIHVuYWJsZSB0byByZXBhcnNlCisgICAgaWYgKCFtX3JhcmVE
YXRhKQorICAgICAgICByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpLmZpcnN0TGlu
ZSgpOworCisgICAgVmVjdG9yPExpbmVJbmZvPiYgbGluZUluZm8gPSBtX3JhcmVEYXRhLT5tX2xp
bmVJbmZvOwogCiAgICAgaW50IGxvdyA9IDA7Ci0gICAgaW50IGhpZ2ggPSBtX2V4Y2VwdGlvbklu
Zm8tPm1fbGluZUluZm8uc2l6ZSgpOworICAgIGludCBoaWdoID0gbGluZUluZm8uc2l6ZSgpOwog
ICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAt
IGxvdykgLyAyOwotICAgICAgICBpZiAobV9leGNlcHRpb25JbmZvLT5tX2xpbmVJbmZvW21pZF0u
aW5zdHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIGlmIChsaW5lSW5m
b1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICAgICAg
bG93ID0gbWlkICsgMTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaGlnaCA9IG1pZDsKICAg
ICB9Ci0gICAgCisKICAgICBpZiAoIWxvdykKICAgICAgICAgcmV0dXJuIG1fb3duZXJFeGVjdXRh
YmxlLT5zb3VyY2UoKS5maXJzdExpbmUoKTsKLSAgICByZXR1cm4gbV9leGNlcHRpb25JbmZvLT5t
X2xpbmVJbmZvW2xvdyAtIDFdLmxpbmVOdW1iZXI7CisgICAgcmV0dXJuIGxpbmVJbmZvW2xvdyAt
IDFdLmxpbmVOdW1iZXI7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KQordm9pZCBD
b2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBpbnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCkK
IHsKICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBtX2luc3RydWN0aW9uQ291bnQpOwogCi0g
ICAgaWYgKCFyZXBhcnNlRm9yRXhjZXB0aW9uSW5mb0lmTmVjZXNzYXJ5KGNhbGxGcmFtZSkgfHwg
IW1fZXhjZXB0aW9uSW5mby0+bV9leHByZXNzaW9uSW5mby5zaXplKCkpIHsKLSAgICAgICAgLy8g
V2UgZGlkbid0IHRoaW5rIGFueXRoaW5nIGNvdWxkIHRocm93LiAgQXBwYXJlbnRseSB3ZSB3ZXJl
IHdyb25nLgotICAgICAgICAvLyBBbHRlcm5hdGl2ZWx5IHNvbWV0aGluZyB3ZW50IHdyb25nIHdo
ZW4gdHJ5aW5nIHRvIHJlcGFyc2UKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKICAgICAgICAgc3Rh
cnRPZmZzZXQgPSAwOwogICAgICAgICBlbmRPZmZzZXQgPSAwOwogICAgICAgICBkaXZvdCA9IDA7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5m
bz4mIGV4cHJlc3Npb25JbmZvID0gbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mbzsKKwogICAg
IGludCBsb3cgPSAwOwotICAgIGludCBoaWdoID0gbV9leGNlcHRpb25JbmZvLT5tX2V4cHJlc3Np
b25JbmZvLnNpemUoKTsKKyAgICBpbnQgaGlnaCA9IGV4cHJlc3Npb25JbmZvLnNpemUoKTsKICAg
ICB3aGlsZSAobG93IDwgaGlnaCkgewogICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBs
b3cpIC8gMjsKLSAgICAgICAgaWYgKG1fZXhjZXB0aW9uSW5mby0+bV9leHByZXNzaW9uSW5mb1tt
aWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICBpZiAoZXhw
cmVzc2lvbkluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkKICAg
ICAgICAgICAgIGxvdyA9IG1pZCArIDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhpZ2gg
PSBtaWQ7CkBAIC0xNjU2LDkgKzE2MTUsOSBAQCB2b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJh
bmdlRm9yQnl0ZWNvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGFydE9mZnNldCA9
IG1fZXhjZXB0aW9uSW5mby0+bV9leHByZXNzaW9uSW5mb1tsb3cgLSAxXS5zdGFydE9mZnNldDsK
LSAgICBlbmRPZmZzZXQgPSBtX2V4Y2VwdGlvbkluZm8tPm1fZXhwcmVzc2lvbkluZm9bbG93IC0g
MV0uZW5kT2Zmc2V0OwotICAgIGRpdm90ID0gbV9leGNlcHRpb25JbmZvLT5tX2V4cHJlc3Npb25J
bmZvW2xvdyAtIDFdLmRpdm90UG9pbnQgKyBtX3NvdXJjZU9mZnNldDsKKyAgICBzdGFydE9mZnNl
dCA9IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLnN0YXJ0T2Zmc2V0OworICAgIGVuZE9mZnNldCA9
IGV4cHJlc3Npb25JbmZvW2xvdyAtIDFdLmVuZE9mZnNldDsKKyAgICBkaXZvdCA9IGV4cHJlc3Np
b25JbmZvW2xvdyAtIDFdLmRpdm90UG9pbnQgKyBtX3NvdXJjZU9mZnNldDsKICAgICByZXR1cm47
CiB9CiAKQEAgLTE3MjUsMTcgKzE2ODQsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0
KCkKICAgICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzLnNocmlua1RvRml0KCk7CiAKLSAgICBpZiAobV9leGNlcHRpb25JbmZvKSB7Ci0gICAg
ICAgIG1fZXhjZXB0aW9uSW5mby0+bV9leHByZXNzaW9uSW5mby5zaHJpbmtUb0ZpdCgpOwotICAg
ICAgICBtX2V4Y2VwdGlvbkluZm8tPm1fbGluZUluZm8uc2hyaW5rVG9GaXQoKTsKLSAgICB9Ci0K
ICAgICBpZiAobV9yYXJlRGF0YSkgewogICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhh
bmRsZXJzLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaHJp
bmtUb0ZpdCgpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJs
ZXMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hK
dW1wVGFibGVzLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJl
c3Npb25JbmZvLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fbGluZUluZm8u
c2hyaW5rVG9GaXQoKTsKICAgICB9CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiA3MjM1MSkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
OwogICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CiAgICAg
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CiAgICAgICAgIENvZGVM
b2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlcjsKQEAgLTE1NiwxNyArMTU1LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlOwog
ICAgIH07CiAKLSAgICBzdHJ1Y3QgRnVuY3Rpb25SZWdpc3RlckluZm8gewotICAgICAgICBGdW5j
dGlvblJlZ2lzdGVySW5mbyh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IGZ1bmN0aW9uUmVn
aXN0ZXJJbmRleCkKLSAgICAgICAgICAgIDogYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQp
Ci0gICAgICAgICAgICAsIGZ1bmN0aW9uUmVnaXN0ZXJJbmRleChmdW5jdGlvblJlZ2lzdGVySW5k
ZXgpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0OwotICAgICAgICBpbnQgZnVuY3Rpb25SZWdpc3RlckluZGV4OwotICAgIH07Ci0KICAgICBz
dHJ1Y3QgR2xvYmFsUmVzb2x2ZUluZm8gewogICAgICAgICBHbG9iYWxSZXNvbHZlSW5mbyh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCkKICAgICAgICAgICAgIDogc3RydWN0dXJlKDApCkBAIC0yNTQs
MTUgKzI0Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KICNlbmRpZgogCi0gICAgc3RydWN0
IEV4Y2VwdGlvbkluZm8gOiBGYXN0QWxsb2NCYXNlIHsKLSAgICAgICAgVmVjdG9yPEV4cHJlc3Np
b25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87Ci0gICAgICAgIFZlY3RvcjxMaW5lSW5mbz4g
bV9saW5lSW5mbzsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIFZlY3RvcjxDYWxsUmV0dXJu
T2Zmc2V0VG9CeXRlY29kZU9mZnNldD4gbV9jYWxsUmV0dXJuSW5kZXhWZWN0b3I7Ci0jZW5kaWYK
LSAgICB9OwotCiAgICAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEZhc3RBbGxvY0Jhc2Ugewog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHByb3RlY3RlZDoKQEAgLTMwNyw4ICsyODYs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBo
YW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAg
ICBpbnQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KENhbGxGcmFtZSosIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9m
ZnNldChDYWxsRnJhbWUqLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwgaW50
JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpOworICAgICAgICBpbnQgbGluZU51bWJlckZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgdm9pZCBl
eHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
aW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpOwogCiAjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgdm9pZCBhZGRDYWxsZXIoQ2FsbExpbmtJbmZvKiBjYWxsZXIpCkBA
IC0zNDUsMTEgKzMyNCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAq
KGJpbmFyeUNob3A8TWV0aG9kQ2FsbExpbmtJbmZvLCB2b2lkKiwgZ2V0TWV0aG9kQ2FsbExpbmtJ
bmZvUmV0dXJuTG9jYXRpb24+KG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5iZWdpbigpLCBtX21ldGhv
ZENhbGxMaW5rSW5mb3Muc2l6ZSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKICAgICAgICAg
fQogCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KENhbGxGcmFtZSogY2FsbEZyYW1l
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCisgICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCFyZXBhcnNlRm9yRXhjZXB0aW9uSW5mb0lmTmVjZXNzYXJ5KGNhbGxGcmFt
ZSkpCisgICAgICAgICAgICBpZiAoIW1fcmFyZURhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IDE7Ci0gICAgICAgICAgICByZXR1cm4gYmluYXJ5Q2hvcDxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRl
Y29kZU9mZnNldCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KGNhbGxSZXR1cm5JbmRl
eFZlY3RvcigpLmJlZ2luKCksIGNhbGxSZXR1cm5JbmRleFZlY3RvcigpLnNpemUoKSwgZ2V0SklU
Q29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLT5ieXRlY29kZU9mZnNldDsK
KyAgICAgICAgICAgIFZlY3RvcjxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldD4mIGNh
bGxJbmRpY2VzID0gbV9yYXJlRGF0YS0+bV9jYWxsUmV0dXJuSW5kZXhWZWN0b3I7CisgICAgICAg
ICAgICBpZiAoIWNhbGxJbmRpY2VzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgICAgIHJldHVybiBiaW5hcnlDaG9wPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2Rl
T2Zmc2V0LCB1bnNpZ25lZCwgZ2V0Q2FsbFJldHVybk9mZnNldD4oY2FsbEluZGljZXMuYmVnaW4o
KSwgY2FsbEluZGljZXMuc2l6ZSgpLCBnZXRKSVRDb2RlKCkub2Zmc2V0T2YocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSktPmJ5dGVjb2RlT2Zmc2V0OwogICAgICAgICB9CiAjZW5kaWYKICNpZiBFTkFC
TEUoSU5URVJQUkVURVIpCkBAIC00NDksMTggKzQzMSwzNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5sZXIp
IHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNl
cHRpb25IYW5kbGVycy5hcHBlbmQoaGFubGVyKTsgfQogICAgICAgICBIYW5kbGVySW5mbyYgZXhj
ZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KIAotICAgICAgICBib29sIGhh
c0V4Y2VwdGlvbkluZm8oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbkluZm87IH0KLSAgICAg
ICAgdm9pZCBjbGVhckV4Y2VwdGlvbkluZm8oKSB7IG1fZXhjZXB0aW9uSW5mby5jbGVhcigpOyB9
Ci0gICAgICAgIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gZXh0cmFjdEV4Y2VwdGlvbkluZm8o
KTsKLQotICAgICAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKGNvbnN0IEV4cHJlc3Npb25SYW5n
ZUluZm8mIGV4cHJlc3Npb25JbmZvKSB7IEFTU0VSVChtX2V4Y2VwdGlvbkluZm8pOyBtX2V4Y2Vw
dGlvbkluZm8tPm1fZXhwcmVzc2lvbkluZm8uYXBwZW5kKGV4cHJlc3Npb25JbmZvKTsgfQotCi0g
ICAgICAgIHNpemVfdCBudW1iZXJPZkxpbmVJbmZvcygpIGNvbnN0IHsgQVNTRVJUKG1fZXhjZXB0
aW9uSW5mbyk7IHJldHVybiBtX2V4Y2VwdGlvbkluZm8tPm1fbGluZUluZm8uc2l6ZSgpOyB9Ci0g
ICAgICAgIHZvaWQgYWRkTGluZUluZm8oY29uc3QgTGluZUluZm8mIGxpbmVJbmZvKSB7IEFTU0VS
VChtX2V4Y2VwdGlvbkluZm8pOyBtX2V4Y2VwdGlvbkluZm8tPm1fbGluZUluZm8uYXBwZW5kKGxp
bmVJbmZvKTsgfQotICAgICAgICBMaW5lSW5mbyYgbGFzdExpbmVJbmZvKCkgeyBBU1NFUlQobV9l
eGNlcHRpb25JbmZvKTsgcmV0dXJuIG1fZXhjZXB0aW9uSW5mby0+bV9saW5lSW5mby5sYXN0KCk7
IH0KKyAgICAgICAgdm9pZCBhZGRFeHByZXNzaW9uSW5mbyhjb25zdCBFeHByZXNzaW9uUmFuZ2VJ
bmZvJiBleHByZXNzaW9uSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgY3JlYXRlUmFyZURh
dGFJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5m
by5hcHBlbmQoZXhwcmVzc2lvbkluZm8pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhZGRM
aW5lSW5mbyh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IGxpbmVObykKKyAgICAgICAgewor
ICAgICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgVmVj
dG9yPExpbmVJbmZvPiYgbGluZUluZm8gPSBtX3JhcmVEYXRhLT5tX2xpbmVJbmZvOworICAgICAg
ICAgICAgaWYgKCFsaW5lSW5mby5zaXplKCkgfHwgbGluZUluZm8ubGFzdCgpLmxpbmVOdW1iZXIg
IT0gbGluZU5vKSB7CisgICAgICAgICAgICAgICAgTGluZUluZm8gaW5mbyA9IHsgYnl0ZWNvZGVP
ZmZzZXQsIGxpbmVObyB9OworICAgICAgICAgICAgICAgIGxpbmVJbmZvLmFwcGVuZChpbmZvKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaGFzRXhwcmVzc2lvbklu
Zm8oKSB7IHJldHVybiBtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm8u
c2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaGFzTGluZUluZm8oKSB7IHJldHVybiBtX3JhcmVEYXRh
ICYmIG1fcmFyZURhdGEtPm1fbGluZUluZm8uc2l6ZSgpOyB9CisgICAgICAgIGJvb2wgbmVlZHND
YWxsUmV0dXJuSW5kaWNlcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3JhcmVE
YXRhICYmCisgICAgICAgICAgICAgICAgKG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm8uc2l6
ZSgpIHx8IG1fcmFyZURhdGEtPm1fbGluZUluZm8uc2l6ZSgpIHx8IG1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnMuc2l6ZSgpKTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICAgICAgVmVjdG9yPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0PiYgY2FsbFJldHVy
bkluZGV4VmVjdG9yKCkgeyBBU1NFUlQobV9leGNlcHRpb25JbmZvKTsgcmV0dXJuIG1fZXhjZXB0
aW9uSW5mby0+bV9jYWxsUmV0dXJuSW5kZXhWZWN0b3I7IH0KKyAgICAgICAgVmVjdG9yPENhbGxS
ZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0PiYgY2FsbFJldHVybkluZGV4VmVjdG9yKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAg
ICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY2FsbFJldHVybkluZGV4VmVjdG9yOworICAgICAg
ICB9CiAjZW5kaWYKIAogICAgICAgICAvLyBDb25zdGFudCBQb29sCkBAIC01MjgsOCArNTI4LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoRXhlY1N0YXRl
KiwgaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYsIGNv
bnN0IGNoYXIqIG9wKSBjb25zdDsKICNlbmRpZgogCi0gICAgICAgIGJvb2wgcmVwYXJzZUZvckV4
Y2VwdGlvbkluZm9JZk5lY2Vzc2FyeShDYWxsRnJhbWUqKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0K
ICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQpAQCAtNTgwLDggKzU3OCw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCi0gICAgICAgIE93
blB0cjxFeGNlcHRpb25JbmZvPiBtX2V4Y2VwdGlvbkluZm87Ci0KICAgICAgICAgc3RydWN0IFJh
cmVEYXRhIDogRmFzdEFsbG9jQmFzZSB7CiAgICAgICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+
IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiAKQEAgLTU5NCw2ICs1OTAsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CiAKICAgICAgICAgICAgIEV2YWxDb2RlQ2FjaGUgbV9ldmFsQ29kZUNhY2hlOwor
CisgICAgICAgICAgICAvLyBFeHByZXNzaW9uIGluZm8gLSBwcmVzZW50IGlmIGRlYnVnZ2luZy4K
KyAgICAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZv
OworICAgICAgICAgICAgLy8gTGluZSBpbmZvIC0gcHJlc2VudCBpZiBwcm9maWxpbmcgb3IgZGVi
dWdnaW5nLgorICAgICAgICAgICAgVmVjdG9yPExpbmVJbmZvPiBtX2xpbmVJbmZvOworI2lmIEVO
QUJMRShKSVQpCisgICAgICAgICAgICBWZWN0b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVP
ZmZzZXQ+IG1fY2FsbFJldHVybkluZGV4VmVjdG9yOworI2VuZGlmCiAgICAgICAgIH07CiAgICAg
ICAgIE93blB0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICB9OwpAQCAtNjY4LDEyICs2NzIs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBpbmxpbmUgUGFz
c093blB0cjxFeGNlcHRpb25JbmZvPiBDb2RlQmxvY2s6OmV4dHJhY3RFeGNlcHRpb25JbmZvKCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2V4Y2VwdGlvbkluZm8pOwotICAgICAgICByZXR1cm4g
bV9leGNlcHRpb25JbmZvLnJlbGVhc2UoKTsKLSAgICB9Ci0KICAgICBpbmxpbmUgUmVnaXN0ZXIm
IEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCiAgICAgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
YW1wbGluZ1Rvb2wuY3BwCShyZXZpc2lvbiA3MjM1MCkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NhbXBsaW5nVG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw3ICszMzcsNyBAQCB2
b2lkIFNhbXBsaW5nVG9vbDo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgaWYgKGJs
b2NrUGVyY2VudCA+PSAxKSB7CiAgICAgICAgICAgICAvL0luc3RydWN0aW9uKiBjb2RlID0gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAgICAgICAgICAgcHJpbnRmKCIjJWQ6
ICVzOiVkOiAlZCAvICVsbGQgKCUuM2YlJSlcbiIsIGkgKyAxLCByZWNvcmQtPm1fZXhlY3V0YWJs
ZS0+c291cmNlVVJMKCkudXRmOCgpLmRhdGEoKSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0
ZWNvZGVPZmZzZXQoZXhlYywgMCksIHJlY29yZC0+bV9zYW1wbGVDb3VudCwgbV9zYW1wbGVDb3Vu
dCwgYmxvY2tQZXJjZW50KTsKKyAgICAgICAgICAgIHByaW50ZigiIyVkOiAlczolZDogJWQgLyAl
bGxkICglLjNmJSUpXG4iLCBpICsgMSwgcmVjb3JkLT5tX2V4ZWN1dGFibGUtPnNvdXJjZVVSTCgp
LnV0ZjgoKS5kYXRhKCksIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KDAp
LCByZWNvcmQtPm1fc2FtcGxlQ291bnQsIG1fc2FtcGxlQ291bnQsIGJsb2NrUGVyY2VudCk7CiAg
ICAgICAgICAgICBpZiAoaSA8IDEwKSB7CiAgICAgICAgICAgICAgICAgSGFzaE1hcDx1bnNpZ25l
ZCx1bnNpZ25lZD4gbGluZUNvdW50czsKICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmR1bXAo
ZXhlYyk7CkBAIC0zNDcsNyArMzQ3LDcgQEAgdm9pZCBTYW1wbGluZ1Rvb2w6OmR1bXAoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSByZWNvcmQtPm1fc2Ft
cGxlc1tvcF07CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbnRmKCIgICAgWyUgNGRdIGhhcyBzYW1wbGUgY291bnQ6ICUgNGRcbiIs
IG9wLCBjb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW5lID0gY29k
ZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoZXhlYywgb3ApOworICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGluZSA9IGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KG9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudHMuc2V0
KGxpbmUsIChsaW5lQ291bnRzLmNvbnRhaW5zKGxpbmUpID8gbGluZUNvdW50cy5nZXQobGluZSkg
OiAwKSArIGNvdW50KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gNzIzNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsMTEgKzE1Myw2IEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKICAgICBpZiAoKG1fY29kZVR5cGUg
PT0gRnVuY3Rpb25Db2RlICYmICFtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpICYm
ICFtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2Rl
KQogICAgICAgICBzeW1ib2xUYWJsZSgpLmNsZWFyKCk7CiAKLSNpZiAhRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKLSAgICBpZiAoIW1fcmVnZW5lcmF0aW5nRm9yRXhjZXB0aW9uSW5mbyAmJiAhbV91
c2VzRXhjZXB0aW9ucyAmJiAobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgfHwgbV9jb2RlVHlw
ZSA9PSBFdmFsQ29kZSkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5jbGVhckV4Y2VwdGlvbkluZm8o
KTsKLSNlbmRpZgotCiAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KCk7CiB9CiAKQEAgLTE5
OSw5ICsxOTQsMTAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlc2VydmVMYXN0VmFyKAog
ICAgICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgpOwogfQogCi1CeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2Rl
LCBjb25zdCBEZWJ1Z2dlciogZGVidWdnZXIsIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4s
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrKQot
ICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyghIWRlYnVnZ2VyKQorQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgY29uc3QgU2Nv
cGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFtQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hh
aW4uZ2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxl
SG9va3Moc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+c3VwcG9ydHNQcm9maWxpbmcoKSkKKyAg
ICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCkt
PnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKICAgICAsIG1fc2NvcGVDaGFpbigmc2NvcGVDaGFp
bikKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiAgICAgLCBtX3Njb3BlTm9kZShw
cm9ncmFtTm9kZSkKQEAgLTIxNyw3ICsyMTMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoUHJvCiAgICAgLCBtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uKHRydWUpCiAgICAg
LCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKLSAg
ICAsIG1fZ2xvYmFsRGF0YSgmc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2JhbERhdGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5k
ZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAtMjkzLDkgKzI4OSwx
MCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgY29kZUJs
b2NrLT5tX251bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogfQogCi1CeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rp
b25Cb2R5LCBjb25zdCBEZWJ1Z2dlciogZGVidWdnZXIsIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3Bl
Q2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0g
ICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKCEhZGVidWdnZXIpCitCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBjb25z
dCBTY29wZUNoYWluJiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWlu
Lmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhv
b2tzKHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPnN1cHBvcnRzUHJvZmlsaW5nKCkpCisgICAg
LCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5z
dXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCiAgICAgLCBtX3Njb3BlQ2hhaW4oJnNjb3BlQ2hhaW4p
CiAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQogICAgICwgbV9zY29wZU5vZGUoZnVu
Y3Rpb25Cb2R5KQpAQCAtMzEwLDcgKzMwNyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihGdW4KICAgICAsIG1faGFzQ3JlYXRlZEFjdGl2YXRpb24oZmFsc2UpCiAgICAg
LCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKLSAg
ICAsIG1fZ2xvYmFsRGF0YSgmc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2JhbERhdGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5k
ZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAtMzg3LDcgKzM4NCw3
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW4KICAgICAgICAgICAg
ICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tz
OjpJc0NvbnN0YW50KTsKICAgICAgICAgfQogICAgIH0KLSAgICBib29sIGNhbkxhemlseUNyZWF0
ZUZ1bmN0aW9ucyA9ICFmdW5jdGlvbkJvZHktPm5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFy
aWFibGVzKCkgJiYgIWRlYnVnZ2VyOworICAgIGJvb2wgY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25z
ID0gIWZ1bmN0aW9uQm9keS0+bmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSAm
JiAhbV9zaG91bGRFbWl0RGVidWdIb29rczsKICAgICBpZiAoIWNhbkxhemlseUNyZWF0ZUZ1bmN0
aW9ucyAmJiAhbV9oYXNDcmVhdGVkQWN0aXZhdGlvbikgewogICAgICAgICBtX2hhc0NyZWF0ZWRB
Y3RpdmF0aW9uID0gdHJ1ZTsKICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfYWN0aXZhdGlv
bik7CkBAIC00MTksNyArNDE2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKEZ1bgogICAgICAgICAgICAgYWRkVmFyKGlkZW50LCB2YXJTdGFja1tpXS5zZWNvbmQgJiBE
ZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCk7CiAgICAgfQogICAgIAotICAgIGlmIChkZWJ1
Z2dlcikKKyAgICBpZiAobV9zaG91bGRFbWl0RGVidWdIb29rcykKICAgICAgICAgY29kZUJsb2Nr
LT5tX251bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogCiAgICAgRnVuY3Rp
b25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwpA
QCAtNDU3LDkgKzQ1NCwxMCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
RnVuCiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZh
bE5vZGUqIGV2YWxOb2RlLCBjb25zdCBEZWJ1Z2dlciogZGVidWdnZXIsIGNvbnN0IFNjb3BlQ2hh
aW4mIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayog
Y29kZUJsb2NrKQotICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyghIWRlYnVnZ2VyKQorQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29u
c3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFs
Q29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3Bl
Q2hhaW4uZ2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9m
aWxlSG9va3Moc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+c3VwcG9ydHNQcm9maWxpbmcoKSkK
KyAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0
KCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKICAgICAsIG1fc2NvcGVDaGFpbigmc2NvcGVD
aGFpbikKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiAgICAgLCBtX3Njb3BlTm9k
ZShldmFsTm9kZSkKQEAgLTQ3NCw3ICs0NzIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoRXZhCiAgICAgLCBtX2hhc0NyZWF0ZWRBY3RpdmF0aW9uKHRydWUpCiAgICAg
LCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKLSAg
ICAsIG1fZ2xvYmFsRGF0YSgmc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX2dsb2JhbERhdGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5k
ZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpJbmRleDogSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDcy
MzUwKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDkgKzkzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIHNldER1bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBzR2VuZXJhdGVkQ29k
ZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBzR2VuZXJhdGVkQ29kZSgpOwogCi0gICAgICAg
IEJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgY29uc3QgRGVidWdnZXIqLCBjb25zdCBT
Y29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKik7Ci0gICAgICAgIEJ5
dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBEZWJ1Z2dlciosIGNvbnN0
IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayopOwotICAgICAgICBCeXRlY29k
ZUdlbmVyYXRvcihFdmFsTm9kZSosIGNvbnN0IERlYnVnZ2VyKiwgY29uc3QgU2NvcGVDaGFpbiYs
IFN5bWJvbFRhYmxlKiwgRXZhbENvZGVCbG9jayopOworICAgICAgICBCeXRlY29kZUdlbmVyYXRv
cihQcm9ncmFtTm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIFByb2dyYW1D
b2RlQmxvY2sqKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSos
IGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayopOworICAgICAgICBC
eXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJs
ZSosIEV2YWxDb2RlQmxvY2sqKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEo
KSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRl
bnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9nbG9iYWxEYXRhLT5w
cm9wZXJ0eU5hbWVzOyB9CkBAIC0yMDcsMTAgKzIwNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgICAgICAvLyBOb2RlOjplbWl0Q29kZSBhc3N1bWVzIHRoYXQgZHN0LCBp
ZiBwcm92aWRlZCwgaXMgZWl0aGVyIGEgbG9jYWwgb3IgYSByZWZlcmVuY2VkIHRlbXBvcmFyeS4K
ICAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkgfHwgIWRz
dC0+aXNUZW1wb3JhcnkoKSB8fCBkc3QtPnJlZkNvdW50KCkpOwotICAgICAgICAgICAgaWYgKCFt
X2NvZGVCbG9jay0+bnVtYmVyT2ZMaW5lSW5mb3MoKSB8fCBtX2NvZGVCbG9jay0+bGFzdExpbmVJ
bmZvKCkubGluZU51bWJlciAhPSBuLT5saW5lTm8oKSkgewotICAgICAgICAgICAgICAgIExpbmVJ
bmZvIGluZm8gPSB7IGluc3RydWN0aW9ucygpLnNpemUoKSwgbi0+bGluZU5vKCkgfTsKLSAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkTGluZUluZm8oaW5mbyk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBhZGRMaW5lSW5mbyhuLT5saW5lTm8oKSk7CisKICAgICAgICAgICAgIGlm
IChtX2VtaXROb2RlRGVwdGggPj0gc19tYXhFbWl0Tm9kZURlcHRoKQogICAgICAgICAgICAgICAg
IHJldHVybiBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogICAgICAgICAg
ICAgKyttX2VtaXROb2RlRGVwdGg7CkBAIC0yMjYsMTAgKzIyNCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQoRXhwcmVzc2lvbk5v
ZGUqIG4sIExhYmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQsIGJvb2wgZmFsbFRo
cm91Z2hNZWFuc1RydWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2st
Pm51bWJlck9mTGluZUluZm9zKCkgfHwgbV9jb2RlQmxvY2stPmxhc3RMaW5lSW5mbygpLmxpbmVO
dW1iZXIgIT0gbi0+bGluZU5vKCkpIHsKLSAgICAgICAgICAgICAgICBMaW5lSW5mbyBpbmZvID0g
eyBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG4tPmxpbmVObygpIH07Ci0gICAgICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmFkZExpbmVJbmZvKGluZm8pOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYWRkTGluZUluZm8obi0+bGluZU5vKCkpOwogICAgICAgICAgICAgaWYgKG1fZW1pdE5vZGVE
ZXB0aCA+PSBzX21heEVtaXROb2RlRGVwdGgpIHsKICAgICAgICAgICAgICAgICBlbWl0VGhyb3dF
eHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAg
LTI0MCw3ICsyMzUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIGVtaXRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgeyAKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbykKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKICAgICAgICAgICAgIGRpdm90IC09IG1fY29kZUJsb2NrLT5zb3VyY2VPZmZzZXQoKTsK
ICAgICAgICAgICAgIGlmIChkaXZvdCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heERpdm90KSB7
CiAgICAgICAgICAgICAgICAgLy8gT3ZlcmZsb3cgaGFzIG9jY3VycmVkLCB3ZSBjYW4gb25seSBn
aXZlIGxpbmUgbnVtYmVyIGluZm8gZm9yIGVycm9ycyBmb3IgdGhpcyByZWdpb24KQEAgLTUwNCw2
ICs1MDIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25F
eGVjdXRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgYm9keS0+aWRlbnQoKSwgYm9keS0+c291cmNl
KCksIGJvZHktPnVzZXNBcmd1bWVudHMoKSwgYm9keS0+cGFyYW1ldGVycygpLCBib2R5LT5pc1N0
cmljdE1vZGUoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOwogICAgICAgICB9
CiAKKyAgICAgICAgdm9pZCBhZGRMaW5lSW5mbyh1bnNpZ25lZCBsaW5lTm8pCisgICAgICAgIHsK
KyNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAgICAgICAgIGlmIChtX3Nob3VsZEVt
aXRSaWNoU291cmNlSW5mbykKKyNlbmRpZgorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5h
ZGRMaW5lSW5mbyhpbnN0cnVjdGlvbnMoKS5zaXplKCksIGxpbmVObyk7CisgICAgICAgIH0KKwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW5pdExhenlSZWdpc3RlcihSZWdpc3RlcklEKik7CiAK
ICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpOyB9CkBAIC01MjAsNiArNTI2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOwogICAgICAgICBi
b29sIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rczsKKyAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRS
aWNoU291cmNlSW5mbzsKIAogICAgICAgICBjb25zdCBTY29wZUNoYWluKiBtX3Njb3BlQ2hhaW47
CiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gNzIzNTEpCisrKyBKYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4NywxMyArNTg3LDEzIEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRD
YWwKICAgICBjb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CiAjaWYgRU5BQkxF
KEpJVCkgJiYgRU5BQkxFKElOVEVSUFJFVEVSKQogICAgIGlmIChjYWxsZXJGcmFtZS0+Z2xvYmFs
RGF0YSgpLmNhblVzZUpJVCgpKQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNvZGVCbG9jay0+
Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7CisgICAg
ICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUt
PnJldHVyblBDKCkpOwogICAgIGVsc2UKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjb2RlQmxv
Y2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxlckZyYW1lLCBjYWxsRnJhbWUtPnJldHVyblZQQygpKTsK
KyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxG
cmFtZS0+cmV0dXJuVlBDKCkpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICBieXRlY29kZU9mZnNl
dCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0
dXJuUEMoKSk7CisgICAgYnl0ZWNvZGVPZmZzZXQgPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0
KGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7CiAjZWxzZQotICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY29k
ZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxsZXJGcmFtZSwgY2FsbEZyYW1lLT5yZXR1cm5WUEMo
KSk7CisgICAgYnl0ZWNvZGVPZmZzZXQgPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxG
cmFtZS0+cmV0dXJuVlBDKCkpOwogI2VuZGlmCiAKICAgICBjYWxsRnJhbWUgPSBjYWxsZXJGcmFt
ZTsKQEAgLTYwNCwxMiArNjA0LDE1IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3Io
Q2FsbEZyYW0KIHsKICAgICBleGNlcHRpb24tPmNsZWFyQXBwZW5kU291cmNlVG9NZXNzYWdlKCk7
CiAKKyAgICBpZiAoIWNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmhhc0V4cHJlc3Npb25JbmZvKCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGludCBzdGFydE9mZnNldCA9IDA7CiAgICAgaW50IGVu
ZE9mZnNldCA9IDA7CiAgICAgaW50IGRpdm90UG9pbnQgPSAwOwogCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvZGVCbG9jay0+ZXhwcmVz
c2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgZGl2
b3RQb2ludCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgY29kZUJsb2NrLT5leHByZXNz
aW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3RQb2ludCwgc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCk7CiAKICAgICBpbnQgZXhwcmVzc2lvblN0YXJ0ID0gZGl2b3RQ
b2ludCAtIHN0YXJ0T2Zmc2V0OwogICAgIGludCBleHByZXNzaW9uU3RvcCA9IGRpdm90UG9pbnQg
KyBlbmRPZmZzZXQ7CkBAIC02NDgsNyArNjUxLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU291cmNl
VG9FcnJvcihDYWxsRnJhbQogICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0KGdsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKGdsb2JhbERhdGEsIG1lc3NhZ2UpKTsKIH0K
IAotTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dGhyb3dFeGNlcHRpb24o
Q2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIGJvb2wgZXhwbGljaXRUaHJvdykKK05FVkVSX0lOTElORSBIYW5kbGVy
SW5mbyogSW50ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomIGNhbGxGcmFtZSwg
SlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBib29s
IGlzSW50ZXJydXB0ID0gZmFsc2U7CkBAIC02NTYsMTMgKzY1OSwxOCBAQCBORVZFUl9JTkxJTkUg
SGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAgLy8gU2V0IHVwIHRoZSBleGNlcHRpb24g
b2JqZWN0CiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNP
YmplY3QqIGV4Y2VwdGlvbiA9IGFzT2JqZWN0KGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgaWYg
KCFleHBsaWNpdFRocm93ICYmIGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkgJiYgc3RhdGlj
X2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiktPmFwcGVuZFNvdXJjZVRvTWVzc2FnZSgp
KQorCisgICAgICAgIGlmIChleGNlcHRpb24tPmlzRXJyb3JJbnN0YW5jZSgpICYmIHN0YXRpY19j
YXN0PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5hcHBlbmRTb3VyY2VUb01lc3NhZ2UoKSkK
ICAgICAgICAgICAgIGFwcGVuZFNvdXJjZVRvRXJyb3IoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxF
cnJvckluc3RhbmNlKj4oZXhjZXB0aW9uKSwgYnl0ZWNvZGVPZmZzZXQpOwogCi0gICAgICAgIC8v
IEZJWE1FOiBzaG91bGQgb25seSByZWFsbHkgYmUgYWRkaW5nIHRoZXNlIHByb3BlcnRpZXMgdG8g
Vk0gZ2VuZXJhdGVkIGV4Y2VwdGlvbnMsCi0gICAgICAgIC8vIGJ1dCB0aGUgaW5zcGVjdG9yIGN1
cnJlbnRseSByZXF1aXJlcyB0aGVzZSBmb3IgYWxsIHRocm93biBvYmplY3RzLgotICAgICAgICBp
ZiAoIWhhc0Vycm9ySW5mbyhjYWxsRnJhbWUsIGV4Y2VwdGlvbikpCi0gICAgICAgICAgICBhZGRF
cnJvckluZm8oY2FsbEZyYW1lLCBleGNlcHRpb24sIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQpLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5zb3VyY2UoKSk7CisgICAgICAgIC8vIFVzaW5nIGhhc0V4cHJlc3Npb25J
bmZvIHRvIGltcGx5IHdlIGFyZSBpbnRlcmVzdGVkIGluIHJpY2ggZXhjZXB0aW9uIGluZm8uCisg
ICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0V4cHJlc3Npb25JbmZvKCkgJiYgIWhhc0Vycm9ySW5m
byhjYWxsRnJhbWUsIGV4Y2VwdGlvbikpIHsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2st
Pmhhc0xpbmVJbmZvKCkpOworCisgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG9ubHkgcmVh
bGx5IGJlIGFkZGluZyB0aGVzZSBwcm9wZXJ0aWVzIHRvIFZNIGdlbmVyYXRlZCBleGNlcHRpb25z
LAorICAgICAgICAgICAgLy8gYnV0IHRoZSBpbnNwZWN0b3IgY3VycmVudGx5IHJlcXVpcmVzIHRo
ZXNlIGZvciBhbGwgdGhyb3duIG9iamVjdHMuCisgICAgICAgICAgICBhZGRFcnJvckluZm8oY2Fs
bEZyYW1lLCBleGNlcHRpb24sIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0KSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlKCkp
OworICAgICAgICB9CiAKICAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBleGNlcHRp
b24tPmV4Y2VwdGlvblR5cGUoKTsKICAgICAgICAgaXNJbnRlcnJ1cHQgPSBleGNlcHRpb25UeXBl
ID09IEludGVycnVwdGVkIHx8IGV4Y2VwdGlvblR5cGUgPT0gVGVybWluYXRlZDsKQEAgLTY3MSw3
ICs2NzksNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAg
aWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
LT5kZWJ1Z2dlcigpKSB7CiAgICAgICAgIERlYnVnZ2VyQ2FsbEZyYW1lIGRlYnVnZ2VyQ2FsbEZy
YW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICBib29sIGhhc0hhbmRsZXIg
PSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7Ci0g
ICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQpLCBoYXNIYW5kbGVyKTsKKyAg
ICAgICAgZGVidWdnZXItPmV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLCBoYXNIYW5kbGVyKTsKICAgICB9CiAKICAgICAv
LyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFt
ZXMgYXMgbmVjZXNzYXJ5LgpAQCAtNDYwMyw3ICs0NjExLDcgQEAgc2tpcF9pZF9jdXN0b21fc2Vs
ZjoKICAgICAgICAgaW50IGV4ID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgZXhjZXB0aW9u
VmFsdWUgPSBjYWxsRnJhbWUtPnIoZXgpLmpzVmFsdWUoKTsKIAotICAgICAgICBoYW5kbGVyID0g
dGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgdlBDIC0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpLCB0cnVlKTsKKyAgICAgICAgaGFuZGxlciA9IHRocm93
RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQQyAtIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKSk7CiAgICAgICAgIGlmICghaGFuZGxlcikKICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUpOwogCkBAIC00Nzc0
LDcgKzQ3ODIsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICAgLy8gY2Fubm90
IGZhdGhvbSBpZiB3ZSBkb24ndCBhc3NpZ24gdG8gdGhlIGV4Y2VwdGlvblZhbHVlIGJlZm9yZSBi
cmFuY2hpbmcpCiAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZUludGVycnVwdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICB9Ci0gICAgICAgIGhhbmRs
ZXIgPSB0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCB2UEMgLSBjb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCksIGZhbHNlKTsKKyAgICAgICAgaGFuZGxlciA9
IHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQQyAtIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSk7CiAgICAgICAgIGlmICghaGFuZGxlcikKICAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUpOwogCkBA
IC00ODQ5LDE1ICs0ODU3LDE1IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENhbGxl
cihDYWwKICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7CiAjaWYgRU5BQkxFKElOVEVS
UFJFVEVSKQogICAgIGlmICghY2FsbGVyRnJhbWUtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkK
LSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsZXJDb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0
KGNhbGxlckZyYW1lLCBjYWxsRnJhbWUtPnJldHVyblZQQygpKTsKKyAgICAgICAgYnl0ZWNvZGVP
ZmZzZXQgPSBjYWxsZXJDb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZS0+cmV0dXJu
VlBDKCkpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgZWxzZQotICAgICAgICBieXRlY29kZU9mZnNl
dCA9IGNhbGxlckNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbGVyRnJhbWUsIGNhbGxGcmFt
ZS0+cmV0dXJuUEMoKSk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbGVyQ29kZUJsb2Nr
LT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUtPnJldHVyblBDKCkpOwogI2VuZGlmCiAjZWxzZQot
ICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbGVyQ29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChjYWxs
ZXJGcmFtZSwgY2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKKyAgICBieXRlY29kZU9mZnNldCA9IGNh
bGxlckNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoY2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKICNl
bmRpZgotICAgIGxpbmVOdW1iZXIgPSBjYWxsZXJDb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRl
Y29kZU9mZnNldChjYWxsZXJGcmFtZSwgYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICBsaW5lTnVt
YmVyID0gY2FsbGVyQ29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQgLSAxKTsKICAgICBzb3VyY2VJRCA9IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCktPnNvdXJjZUlEKCk7CiAgICAgc291cmNlVVJMID0gY2FsbGVyQ29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKS0+c291cmNlVVJMKCk7CiAgICAgZnVuY3Rpb24gPSBjYWxsZXJGcmFt
ZS0+Y2FsbGVlKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmgJKHJldmlzaW9uIDcyMzUwKQorKysgSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIoKSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0
KCk7IH0KIAogICAgICAgICBORVZFUl9JTkxJTkUgSlNWYWx1ZSBjYWxsRXZhbChDYWxsRnJhbWUq
LCBSZWdpc3RlckZpbGUqLCBSZWdpc3RlciogYXJndiwgaW50IGFyZ2MsIGludCByZWdpc3Rlck9m
ZnNldCk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdGhyb3dFeGNlcHRpb24o
Q2FsbEZyYW1lKiYsIEpTVmFsdWUmLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgYm9vbCk7Cisg
ICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1l
KiYsIEpTVmFsdWUmLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgIE5FVkVSX0lO
TElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBp
bnQgbGFzdExpbmUpOwogCiAgICAgICAgIHZvaWQgZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBl
eGVjKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA3MjM1MCkKKysrIEphdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNyArNTUyLDcgQEAgSklUQ29k
ZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhpdGVyLT5mcm9tLCBGdW5jdGlvblB0cihpdGVyLT50bykpOwogICAgIH0KIAotICAg
IGlmIChtX2NvZGVCbG9jay0+aGFzRXhjZXB0aW9uSW5mbygpKSB7CisgICAgaWYgKG1fY29kZUJs
b2NrLT5uZWVkc0NhbGxSZXR1cm5JbmRpY2VzKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmNh
bGxSZXR1cm5JbmRleFZlY3RvcigpLnJlc2VydmVDYXBhY2l0eShtX2NhbGxzLnNpemUoKSk7CiAg
ICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5i
ZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikKICAgICAgICAgICAgIG1fY29k
ZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQocGF0Y2hCdWZmZXIucmV0dXJuQWRkcmVzc09mZnNldChpdGVyLT5mcm9t
KSwgaXRlci0+Ynl0ZWNvZGVPZmZzZXQpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gNzIzNTApCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDY3LDEzICsxMDY3LDEzIEBAIHN0cnVjdCBFeGNlcHRpb25IYW5kbGVy
IHsKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7CiB9
Owotc3RhdGljIEV4Y2VwdGlvbkhhbmRsZXIgaml0VGhyb3coSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgUmV0dXJu
QWRkcmVzc1B0ciBmYXVsdExvY2F0aW9uLCBib29sIGV4cGxpY2l0VGhyb3cpCitzdGF0aWMgRXhj
ZXB0aW9uSGFuZGxlciBqaXRUaHJvdyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBSZXR1cm5BZGRyZXNzUHRyIGZh
dWx0TG9jYXRpb24pCiB7CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKIAotICAgIHVuc2ln
bmVkIHZQQ0luZGV4ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXQoY2Fs
bEZyYW1lLCBmYXVsdExvY2F0aW9uKTsKKyAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KGZhdWx0TG9jYXRpb24pOwogICAgIGdsb2Jh
bERhdGEtPmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9
IGdsb2JhbERhdGEtPmludGVycHJldGVyLT50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2Vw
dGlvblZhbHVlLCB2UENJbmRleCwgZXhwbGljaXRUaHJvdyk7IC8vIFRoaXMgbWF5IHVwZGF0ZSBj
YWxsRnJhbWUgJiBleGNlcHRpb25WYWx1ZSEKKyAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IGds
b2JhbERhdGEtPmludGVycHJldGVyLT50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlv
blZhbHVlLCB2UENJbmRleCk7IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxsRnJhbWUgJiBleGNlcHRp
b25WYWx1ZSEKICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBleGNlcHRpb25WYWx1ZTsKIAog
ICAgIHZvaWQqIGNhdGNoUm91dGluZSA9IGhhbmRsZXIgPyBoYW5kbGVyLT5uYXRpdmVDb2RlLmV4
ZWN1dGFibGVBZGRyZXNzKCkgOiBGdW5jdGlvblB0cihjdGlPcFRocm93Tm90Q2F1Z2h0KS52YWx1
ZSgpOwpAQCAtMTM4NCw3ICsxMzg0LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHJl
Z2lzdGVyX2ZpbAogICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHByZXZpb3VzIGNhbGwgZnJhbWUg
YmVjYXVzZSBvcF9jYWxsIGFscmVhZHkgb3B0aW1pc3RpY2FsbHkKICAgICAgICAgLy8gbW92ZWQg
dGhlIGNhbGwgZnJhbWUgZm9yd2FyZC4KICAgICAgICAgQ2FsbEZyYW1lKiBvbGRDYWxsRnJhbWUg
PSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFu
ZGxlciA9IGppdFRocm93KHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgb2xkQ2FsbEZyYW1lLCBjcmVh
dGVTdGFja092ZXJmbG93RXJyb3Iob2xkQ2FsbEZyYW1lKSwgUmV0dXJuQWRkcmVzc1B0cihvbGRD
YWxsRnJhbWUtPnJldHVyblBDKCkpLCBmYWxzZSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIg
aGFuZGxlciA9IGppdFRocm93KHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgb2xkQ2FsbEZyYW1lLCBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3Iob2xkQ2FsbEZyYW1lKSwgUmV0dXJuQWRkcmVzc1B0cihv
bGRDYWxsRnJhbWUtPnJldHVyblBDKCkpKTsKICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJF
U1MoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwogICAgICAgICBjYWxsRnJhbWUgPSBoYW5kbGVyLmNh
bGxGcmFtZTsKICAgICB9CkBAIC0yMDA2LDcgKzIwMDYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkKiwgb3BfY2FsbF9hcml0CiAgICAgICAgIGlmICghc3RhY2tGcmFtZS5yZWdpc3RlckZp
bGUtPmdyb3cobmV3RW5kKSkgewogICAgICAgICAgICAgLy8gUmV3aW5kIHRvIHRoZSBwcmV2aW91
cyBjYWxsIGZyYW1lIGJlY2F1c2Ugb3BfY2FsbCBhbHJlYWR5IG9wdGltaXN0aWNhbGx5CiAgICAg
ICAgICAgICAvLyBtb3ZlZCB0aGUgY2FsbCBmcmFtZSBmb3J3YXJkLgotICAgICAgICAgICAgRXhj
ZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBv
bGRDYWxsRnJhbWUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihvbGRDYWxsRnJhbWUpLCBwYywg
ZmFsc2UpOworICAgICAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3co
c3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBvbGRDYWxsRnJhbWUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dF
cnJvcihvbGRDYWxsRnJhbWUpLCBwYyk7CiAgICAgICAgICAgICBTVFVCX1NFVF9SRVRVUk5fQURE
UkVTUyhoYW5kbGVyLmNhdGNoUm91dGluZSk7CiAgICAgICAgICAgICByZXR1cm4gaGFuZGxlci5j
YWxsRnJhbWU7CiAgICAgICAgIH0KQEAgLTIwMjEsNyArMjAyMSw3IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQqLCBvcF9jYWxsX2FyaXQKICAgICAgICAgaWYgKCFzdGFja0ZyYW1lLnJlZ2lz
dGVyRmlsZS0+Z3JvdyhuZXdFbmQpKSB7CiAgICAgICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHBy
ZXZpb3VzIGNhbGwgZnJhbWUgYmVjYXVzZSBvcF9jYWxsIGFscmVhZHkgb3B0aW1pc3RpY2FsbHkK
ICAgICAgICAgICAgIC8vIG1vdmVkIHRoZSBjYWxsIGZyYW1lIGZvcndhcmQuCi0gICAgICAgICAg
ICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBqaXRUaHJvdyhzdGFja0ZyYW1lLmdsb2JhbERh
dGEsIG9sZENhbGxGcmFtZSwgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKG9sZENhbGxGcmFtZSks
IHBjLCBmYWxzZSk7CisgICAgICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBqaXRU
aHJvdyhzdGFja0ZyYW1lLmdsb2JhbERhdGEsIG9sZENhbGxGcmFtZSwgY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKG9sZENhbGxGcmFtZSksIHBjKTsKICAgICAgICAgICAgIFNUVUJfU0VUX1JFVFVS
Tl9BRERSRVNTKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKICAgICAgICAgICAgIHJldHVybiBoYW5k
bGVyLmNhbGxGcmFtZTsKICAgICAgICAgfQpAQCAtMjA2NSw3ICsyMDY1LDcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCosIG9wX2NvbnN0cnVjdAogICAgICAgICBpZiAoIXN0YWNrRnJhbWUu
cmVnaXN0ZXJGaWxlLT5ncm93KG5ld0VuZCkpIHsKICAgICAgICAgICAgIC8vIFJld2luZCB0byB0
aGUgcHJldmlvdXMgY2FsbCBmcmFtZSBiZWNhdXNlIG9wX2NhbGwgYWxyZWFkeSBvcHRpbWlzdGlj
YWxseQogICAgICAgICAgICAgLy8gbW92ZWQgdGhlIGNhbGwgZnJhbWUgZm9yd2FyZC4KLSAgICAg
ICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGppdFRocm93KHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YSwgb2xkQ2FsbEZyYW1lLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Iob2xkQ2FsbEZy
YW1lKSwgcGMsIGZhbHNlKTsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9
IGppdFRocm93KHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgb2xkQ2FsbEZyYW1lLCBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3Iob2xkQ2FsbEZyYW1lKSwgcGMpOwogICAgICAgICAgICAgU1RVQl9TRVRf
UkVUVVJOX0FERFJFU1MoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwogICAgICAgICAgICAgcmV0dXJu
IGhhbmRsZXIuY2FsbEZyYW1lOwogICAgICAgICB9CkBAIC0yMDgwLDcgKzIwODAsNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfY29uc3RydWN0CiAgICAgICAgIGlmICghc3RhY2tG
cmFtZS5yZWdpc3RlckZpbGUtPmdyb3cobmV3RW5kKSkgewogICAgICAgICAgICAgLy8gUmV3aW5k
IHRvIHRoZSBwcmV2aW91cyBjYWxsIGZyYW1lIGJlY2F1c2Ugb3BfY2FsbCBhbHJlYWR5IG9wdGlt
aXN0aWNhbGx5CiAgICAgICAgICAgICAvLyBtb3ZlZCB0aGUgY2FsbCBmcmFtZSBmb3J3YXJkLgot
ICAgICAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFt
ZS5nbG9iYWxEYXRhLCBvbGRDYWxsRnJhbWUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihvbGRD
YWxsRnJhbWUpLCBwYywgZmFsc2UpOworICAgICAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5k
bGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBvbGRDYWxsRnJhbWUsIGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihvbGRDYWxsRnJhbWUpLCBwYyk7CiAgICAgICAgICAgICBTVFVC
X1NFVF9SRVRVUk5fQUREUkVTUyhoYW5kbGVyLmNhdGNoUm91dGluZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gaGFuZGxlci5jYWxsRnJhbWU7CiAgICAgICAgIH0KQEAgLTMyMzgsNyArMzIzOCw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQqLCBvcF90aHJvdykKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tG
cmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBd
LmpzVmFsdWUoKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgdHJ1ZSk7CisgICAgRXhjZXB0aW9uSGFu
ZGxlciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1l
LmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSwgU1RVQl9SRVRVUk5fQURE
UkVTUyk7CiAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoaGFuZGxlci5jYXRjaFJvdXRpbmUp
OwogICAgIHJldHVybiBoYW5kbGVyLmNhbGxGcmFtZTsKIH0KQEAgLTM1OTUsNyArMzU5NSw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV90aHJvdykKIHsKICAgICBTVFVCX0lOSVRf
U1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
c3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGpp
dFRocm93KGdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBnbG9iYWxEYXRhLT5leGNl
cHRpb24sIGdsb2JhbERhdGEtPmV4Y2VwdGlvbkxvY2F0aW9uLCBmYWxzZSk7CisgICAgRXhjZXB0
aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxs
RnJhbWUsIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiwgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRp
b24pOwogICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNTKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsK
ICAgICByZXR1cm4gaGFuZGxlci5jYWxsRnJhbWU7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db2xsZWN0b3IuY3BwCShyZXZpc2lvbiA3MjM1MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1MSw4ICsxMDUxLDYgQEAgdm9p
ZCBIZWFwOjptYXJrUm9vdHMoKQogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xp
c3RzKG1hcmtTdGFjaywgKm1fbWFya0xpc3RTZXQpOwogICAgIGlmIChtX2dsb2JhbERhdGEtPmV4
Y2VwdGlvbikKICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChtX2dsb2JhbERhdGEtPmV4Y2VwdGlv
bik7Ci0gICAgaWYgKG1fZ2xvYmFsRGF0YS0+ZnVuY3Rpb25Db2RlQmxvY2tCZWluZ1JlcGFyc2Vk
KQotICAgICAgICBtX2dsb2JhbERhdGEtPmZ1bmN0aW9uQ29kZUJsb2NrQmVpbmdSZXBhcnNlZC0+
bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogICAgIGlmIChtX2dsb2JhbERhdGEtPmZpcnN0U3Ry
aW5naWZpZXJUb01hcmspCiAgICAgICAgIEpTT05PYmplY3Q6Om1hcmtTdHJpbmdpZmllcnMobWFy
a1N0YWNrLCBtX2dsb2JhbERhdGEtPmZpcnN0U3RyaW5naWZpZXJUb01hcmspOwogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDcyMzUwKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDcgKzEwOCw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEKIAog
ICAgIEFTU0VSVCghbV9ldmFsQ29kZUJsb2NrKTsKICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9w
dFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3Zp
ZGVyKCksIHNjb3BlQ2hhaW4ubG9jYWxEZXB0aCgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2Vu
ZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2Rl
LmdldCgpLCBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG1fZXZhbENvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpKSkpOworICAgIE93blB0
cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVy
YXRvcihldmFsTm9kZS5nZXQoKSwgc2NvcGVDaGFpbiwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xU
YWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpKSk7CiAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0
ZSgpOwogICAgIAogICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0YSgpOwpAQCAtMTU2LDcgKzE1Niw3
IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKICAgICAK
ICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0
aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKLSAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwg
c2NvcGVDaGFpbiwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJs
b2NrLmdldCgpKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFk
b3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFp
biwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgp
KSkpOwogICAgIGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKIAogICAgIHByb2dyYW1Ob2RlLT5kZXN0
cm95RGF0YSgpOwpAQCAtMTkzLDcgKzE5Myw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGVGb3IKIAogICAgIEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICBt
X2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywg
RnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgp
LnN0YXJ0T2Zmc2V0KCksIGZhbHNlKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBn
ZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIGdsb2Jh
bE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgbV9jb2RlQmxvY2tGb3JDYWxsLT5zeW1i
b2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkpKSk7CisgICAgT3duUHRyPEJ5dGVj
b2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJv
ZHkuZ2V0KCksIHNjb3BlQ2hhaW4sIG1fY29kZUJsb2NrRm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwg
bV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkpOwogICAgIGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsK
ICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5tX251bVBh
cmFtZXRlcnM7CiAgICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpOwpAQCAtMjM0LDcg
KzIzNCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAg
IEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29k
ZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNl
dCgpLCB0cnVlKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRv
cHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVi
dWdnZXIoKSwgc2NvcGVDaGFpbiwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnN5bWJvbFRhYmxl
KCksIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKSkpOworICAgIE93blB0cjxCeXRlY29k
ZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5
LmdldCgpLCBzY29wZUNoYWluLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUo
KSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCkpKSk7CiAgICAgZ2VuZXJhdG9yLT5nZW5l
cmF0ZSgpOwogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LT5tX251bVBhcmFtZXRlcnM7CiAgICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0Zv
ckNvbnN0cnVjdCk7CkBAIC0yNjQsNzIgKzI2NCw2IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxl
OjptYXJrQWdncmVnYXRlKE0KICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPm1hcmtB
Z2dyZWdhdGUobWFya1N0YWNrKTsKIH0KIAotUGFzc093blB0cjxFeGNlcHRpb25JbmZvPiBGdW5j
dGlvbkV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25JbmZvKFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluTm9kZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgSlNPYmplY3QqIGV4Y2Vw
dGlvbiA9IDA7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUt
Pmdsb2JhbERhdGE7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5ld0Z1bmN0aW9uQm9k
eSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oc2NvcGVDaGFp
bk5vZGUtPmdsb2JhbE9iamVjdCwgMCwgMCwgbV9zb3VyY2UsIG1fcGFyYW1ldGVycy5nZXQoKSwg
aXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgJmV4Y2VwdGlv
bik7Ci0gICAgaWYgKCFuZXdGdW5jdGlvbkJvZHkpCi0gICAgICAgIHJldHVybiBQYXNzT3duUHRy
PEV4Y2VwdGlvbkluZm8+KCk7Ci0gICAgQVNTRVJUKG5ld0Z1bmN0aW9uQm9keS0+aXNTdHJpY3RN
b2RlKCkgPT0gaXNTdHJpY3RNb2RlKCkpOwotICAgIGlmIChtX2ZvcmNlVXNlc0FyZ3VtZW50cykK
LSAgICAgICAgbmV3RnVuY3Rpb25Cb2R5LT5zZXRVc2VzQXJndW1lbnRzKCk7Ci0gICAgbmV3RnVu
Y3Rpb25Cb2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lKTsKLQotICAgIFNj
b3BlQ2hhaW4gc2NvcGVDaGFpbihzY29wZUNoYWluTm9kZSk7Ci0gICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCk7Ci0KLSAgICBPd25QdHI8
Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2soYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRo
aXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3Vy
Y2UoKS5zdGFydE9mZnNldCgpLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvcikpKTsKLSAgICBn
bG9iYWxEYXRhLT5mdW5jdGlvbkNvZGVCbG9ja0JlaW5nUmVwYXJzZWQgPSBuZXdDb2RlQmxvY2su
Z2V0KCk7Ci0KLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0
cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IobmV3RnVuY3Rpb25Cb2R5LmdldCgpLCBnbG9iYWxPYmpl
Y3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG5ld0NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwg
bmV3Q29kZUJsb2NrLmdldCgpKSkpOwotICAgIGdlbmVyYXRvci0+c2V0UmVnZW5lcmF0aW5nRm9y
RXhjZXB0aW9uSW5mbyhzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNvZGVCbG9jaykp
OwotICAgIGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKLQotICAgIEFTU0VSVChuZXdDb2RlQmxvY2st
Pmluc3RydWN0aW9uQ291bnQoKSA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSk7Ci0K
LSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkgewotICAg
ICAgICBKSVRDb2RlIG5ld0pJVENvZGUgPSBKSVQ6OmNvbXBpbGUoZ2xvYmFsRGF0YSwgbmV3Q29k
ZUJsb2NrLmdldCgpLCAwLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGdlbmVyYXRlZEpJ
VENvZGVGb3JDb25zdHJ1Y3QoKS5zdGFydCgpIDogZ2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5z
dGFydCgpKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gbmV3
SklUQ29kZS5zaXplKCkgPT0gZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLnNpemUoKSA6
IG5ld0pJVENvZGUuc2l6ZSgpID09IGdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuc2l6ZSgpKTsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIGdsb2JhbERhdGEtPmZ1bmN0aW9uQ29kZUJsb2NrQmVpbmdS
ZXBhcnNlZCA9IDA7Ci0KLSAgICByZXR1cm4gbmV3Q29kZUJsb2NrLT5leHRyYWN0RXhjZXB0aW9u
SW5mbygpOwotfQotCi1QYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IEV2YWxFeGVjdXRhYmxlOjpy
ZXBhcnNlRXhjZXB0aW9uSW5mbyhTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVC
bG9jayogY29kZUJsb2NrKQotewotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwotICAg
IFJlZlB0cjxFdmFsTm9kZT4gbmV3RXZhbEJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNl
PEV2YWxOb2RlPihzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LCAwLCAwLCBtX3NvdXJjZSwg
MCwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgJmV4Y2Vw
dGlvbik7Ci0gICAgQVNTRVJUKG5ld0V2YWxCb2R5LT5pc1N0cmljdE1vZGUoKSA9PSBpc1N0cmlj
dE1vZGUoKSk7Ci0gICAgaWYgKCFuZXdFdmFsQm9keSkKLSAgICAgICAgcmV0dXJuIFBhc3NPd25Q
dHI8RXhjZXB0aW9uSW5mbz4oKTsKLQotICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihzY29wZUNo
YWluTm9kZSk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4u
Z2xvYmFsT2JqZWN0KCk7Ci0KLSAgICBPd25QdHI8RXZhbENvZGVCbG9jaz4gbmV3Q29kZUJsb2Nr
KGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIGdsb2JhbE9iamVjdCwgc291cmNlKCku
cHJvdmlkZXIoKSwgc2NvcGVDaGFpbi5sb2NhbERlcHRoKCkpKSk7Ci0KLSAgICBPd25QdHI8Qnl0
ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3Io
bmV3RXZhbEJvZHkuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwg
bmV3Q29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBuZXdDb2RlQmxvY2suZ2V0KCkpKSk7Ci0gICAg
Z2VuZXJhdG9yLT5zZXRSZWdlbmVyYXRpbmdGb3JFeGNlcHRpb25JbmZvKHN0YXRpY19jYXN0PEV2
YWxDb2RlQmxvY2sqPihjb2RlQmxvY2spKTsKLSAgICBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7Ci0K
LSAgICBBU1NFUlQobmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPT0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoZ2xvYmFs
RGF0YS0+Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgSklUQ29kZSBuZXdKSVRDb2RlID0gSklUOjpj
b21waWxlKGdsb2JhbERhdGEsIG5ld0NvZGVCbG9jay5nZXQoKSwgMCwgZ2VuZXJhdGVkSklUQ29k
ZUZvckNhbGwoKS5zdGFydCgpKTsKLSAgICAgICAgQVNTRVJUKG5ld0pJVENvZGUuc2l6ZSgpID09
IGdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuc2l6ZSgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IHJldHVybiBuZXdDb2RlQmxvY2stPmV4dHJhY3RFeGNlcHRpb25JbmZvKCk7Ci19Ci0KIHZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjpyZWNvbXBpbGUoRXhlY1N0YXRlKikKIHsKICAgICBtX2NvZGVC
bG9ja0ZvckNhbGwuY2xlYXIoKTsKQEAgLTM3NiwxMCArMzEwLDQgQEAgVVN0cmluZyBGdW5jdGlv
bkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKAogICAgIHJldHVybiBidWlsZGVyLnRvVVN0cmluZygp
OwogfQogCi1QYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IFByb2dyYW1FeGVjdXRhYmxlOjpyZXBh
cnNlRXhjZXB0aW9uSW5mbyhTY29wZUNoYWluTm9kZSosIENvZGVCbG9jayopCi17Ci0gICAgLy8g
Q29kZUJsb2NrcyBmb3IgcHJvZ3JhbSBjb2RlIGFyZSB0cmFuc2llbnQgYW5kIHRoZXJlZm9yZSBk
byBub3QgZ2FpbiBmcm9tIGZyb20gdGhyb3dpbmcgb3V0IHRoZWlyIGV4Y2VwdGlvbiBpbmZvcm1h
dGlvbi4KLSAgICByZXR1cm4gUGFzc093blB0cjxFeGNlcHRpb25JbmZvPigpOwotfQotCiB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gNzIzNTApCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3
LDggKzE3Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgfHwgbV9mZWF0dXJlcyAm
IChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwgQ2F0Y2hGZWF0dXJlKTsgfQogICAgICAgICBi
b29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBTdHJpY3RNb2Rl
RmVhdHVyZTsgfQogCi0gICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxFeGNlcHRpb25JbmZvPiBy
ZXBhcnNlRXhjZXB0aW9uSW5mbyhTY29wZUNoYWluTm9kZSosIENvZGVCbG9jayopID0gMDsKLQog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIGludCBmaXJzdExpbmUsIGludCBsYXN0
TGluZSkKICAgICAgICAgewpAQCAtMjI5LDggKzIyNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKIAotICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gcmVwYXJz
ZUV4Y2VwdGlvbkluZm8oU2NvcGVDaGFpbk5vZGUqLCBDb2RlQmxvY2sqKTsKLQogICAgICAgICBP
d25QdHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29kZUJsb2NrOwogICAgIH07CiAKQEAgLTI3Miw4
ICsyNjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUlu
dGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAKLSAgICAgICAgdmlydHVhbCBQ
YXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IHJlcGFyc2VFeGNlcHRpb25JbmZvKFNjb3BlQ2hhaW5O
b2RlKiwgQ29kZUJsb2NrKik7Ci0KICAgICAgICAgT3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1f
cHJvZ3JhbUNvZGVCbG9jazsKICAgICB9OwogCkBAIC0zNjUsOCArMzU5LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0
ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3Ry
dWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKIAotICAgICAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8RXhjZXB0aW9uSW5mbz4gcmVwYXJzZUV4Y2VwdGlvbkluZm8oU2NvcGVD
aGFpbk5vZGUqLCBDb2RlQmxvY2sqKTsKLQogICAgICAgICB1bnNpZ25lZCBtX251bUNhcHR1cmVk
VmFyaWFibGVzIDogMzE7CiAgICAgICAgIGJvb2wgbV9mb3JjZVVzZXNBcmd1bWVudHMgOiAxOwog
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA3
MjM1MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw2IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEds
b2JhbERhdGFUeXAKICAgICAsIGhlYXAodGhpcykKICAgICAsIGhlYWQoMCkKICAgICAsIGR5bmFt
aWNHbG9iYWxPYmplY3QoMCkKLSAgICAsIGZ1bmN0aW9uQ29kZUJsb2NrQmVpbmdSZXBhcnNlZCgw
KQogICAgICwgZmlyc3RTdHJpbmdpZmllclRvTWFyaygwKQogICAgICwgbWFya1N0YWNrKGpzQXJy
YXlWUHRyKQogICAgICwgY2FjaGVkVVRDT2Zmc2V0KE5hTikKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gNzIzNTApCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH07CiAKICAgICAgICAgYm9vbCBpc1NoYXJlZEluc3Rh
bmNlKCkgeyByZXR1cm4gZ2xvYmFsRGF0YVR5cGUgPT0gQVBJU2hhcmVkOyB9CisgICAgICAgIGJv
b2wgdXNpbmdBUEkoKSB7IHJldHVybiBnbG9iYWxEYXRhVHlwZSAhPSBEZWZhdWx0OyB9CiAgICAg
ICAgIHN0YXRpYyBib29sIHNoYXJlZEluc3RhbmNlRXhpc3RzKCk7CiAgICAgICAgIHN0YXRpYyBK
U0dsb2JhbERhdGEmIHNoYXJlZEluc3RhbmNlKCk7CiAKQEAgLTIwNSw3ICsyMDYsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gYXJyYXlWaXNpdGVkRWxl
bWVudHM7CiAKLSAgICAgICAgQ29kZUJsb2NrKiBmdW5jdGlvbkNvZGVCbG9ja0JlaW5nUmVwYXJz
ZWQ7CiAgICAgICAgIFN0cmluZ2lmaWVyKiBmaXJzdFN0cmluZ2lmaWVyVG9NYXJrOwogCiAgICAg
ICAgIE1hcmtTdGFjayBtYXJrU3RhY2s7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiA3MjM1MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDkgKzI1NCwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBEZWJ1Z2dlciogZGVidWdnZXIoKSBjb25zdCB7IHJldHVy
biBkKCktPmRlYnVnZ2VyOyB9CiAgICAgICAgIHZvaWQgc2V0RGVidWdnZXIoRGVidWdnZXIqIGRl
YnVnZ2VyKSB7IGQoKS0+ZGVidWdnZXIgPSBkZWJ1Z2dlcjsgfQotICAgICAgICAKKwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQcm9maWxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzUmljaFNvdXJjZUluZm8o
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICAgICAgU2NvcGVDaGFpbiYgZ2xvYmFsU2Nv
cGVDaGFpbigpIHsgcmV0dXJuIGQoKS0+Z2xvYmFsU2NvcGVDaGFpbjsgfQogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0dsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTI3
Niw3ICsyNzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVz
ZXRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUpOwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSgpIHsgcmV0dXJuICpkKCktPmdsb2JhbERhdGEuZ2V0KCk7IH0KKyAgICAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gKmQoKS0+Z2xvYmFsRGF0
YS5nZXQoKTsgfQogICAgICAgICBKU0dsb2JhbE9iamVjdERhdGEqIGQoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdERhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsg
fQogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJl
KEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyMzU4KQorKysgV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0xMS0xOCAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5NzA4IC0gU3RvcCByZWNvbXBpbGluZyBm
dW5jdGlvbnMgdG8gcmVnZW5lcmF0ZSBleGNlcHRpb24gaW5mby4KKworICAgICAgICBJbnN0ZWFk
IG9ubHkgaG9sZCBpbmZvIGFzIG5lY2Vzc2FyeSDigJMga2VlcCBkaXZvdCBpbmZvIGlzIHRoZSBp
bnNwZWN0b3IKKyAgICAgICAgaXMgZW5hYmxlZCwgbGluZSBudW1iZXIgaW5mbyBpcyBkZWJ1Z2dp
bmcgb3IgcHJvZmlsaW5nLCBhbmQgaGFuZGxlcgorICAgICAgICBpbmZvIGZvciBmdW5jdGlvbnMg
d2l0aCB0cnkvY2F0Y2guCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpzdXBwb3J0c1JpY2hTb3Vy
Y2VJbmZvKToKKyAgICAgICAgICAgIC0gcmVwb3J0IHRvIEpTQyB3aGV0aGVyIHRoZSBpbnNwZWN0
b3IgaXMgZW5hYmxlZCAtIGluIHdoaWNoCisgICAgICAgICAgICAgIGNhc2Ugd2Ugd2lsbCBnZW5l
cmF0ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgb24gZXhjZXB0aW9ucy4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaDoKKwogMjAxMC0xMS0xOCAgSmlhbiBMaSAgPGppYW5s
aUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gNzIz
NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOCw2ICsxMTgsMjYgQEAgYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnN1cHBvcnRz
UHJvZmlsaW5nKAogI2VuZGlmCiB9CiAKK2Jvb2wgSlNET01XaW5kb3dCYXNlOjpzdXBwb3J0c1Jp
Y2hTb3VyY2VJbmZvKCkgY29uc3QKK3sKKyNpZiAhRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
IHx8ICFFTkFCTEUoSU5TUEVDVE9SKQorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgRnJh
bWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBlbmFibGVkID0gcGFnZS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5lbmFibGVkKCk7CisgICAgQVNTRVJUKGVuYWJsZWQgfHwg
IWRlYnVnZ2VyKCkpOworICAgIEFTU0VSVChlbmFibGVkIHx8ICFzdXBwb3J0c1Byb2ZpbGluZygp
KTsKKyAgICByZXR1cm4gZW5hYmxlZDsKKyNlbmRpZgorfQorCiBib29sIEpTRE9NV2luZG93QmFz
ZTo6c2hvdWxkSW50ZXJydXB0U2NyaXB0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaW1wbCgpLT5m
cmFtZSgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNp
b24gNzIzNTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICB2aXJ0dWFsIEpTQzo6RXhlY1N0YXRlKiBnbG9iYWxFeGVjKCk7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c1Byb2ZpbGluZygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNSaWNoU291cmNlSW5mbygpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
SW50ZXJydXB0U2NyaXB0KCkgY29uc3Q7CiAKICAgICAgICAgYm9vbCBhbGxvd3NBY2Nlc3NGcm9t
KEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiA3MjM1MCkKKysrIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtOTg5LDcgKzk4OSw4IEBAIHN0YXRpYyBib29sIHNob3VsZE9wZW5XZWJJbnNwZWN0b3Io
Y29uc3QKIAogc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKGNvbnN0IGNo
YXIqIHBhdGhPclVSTCkKIHsKLSAgICByZXR1cm4gc2hvdWxkT3BlbldlYkluc3BlY3RvcihwYXRo
T3JVUkwpIHx8IHN0cnN0cihwYXRoT3JVUkwsICJpbnNwZWN0b3ItZW5hYmxlZC8iKTsKKy8vICAg
IHJldHVybiBzaG91bGRPcGVuV2ViSW5zcGVjdG9yKHBhdGhPclVSTCkgfHwgc3Ryc3RyKHBhdGhP
clVSTCwgImluc3BlY3Rvci1lbmFibGVkLyIpOworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0
aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoKQo=
</data>
<flag name="review"
          id="64911"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>