<?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>26367</bug_id>
          
          <creation_ts>2009-06-12 22:22:03 -0700</creation_ts>
          <short_desc>Remove the globals from bidi.cpp</short_desc>
          <delta_ts>2009-06-12 23:04:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>125597</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-06-12 22:22:03 -0700</bug_when>
    <thetext>The global variables need to be removed from bidi.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125598</commentid>
    <comment_count>1</comment_count>
      <attachid>31228</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-06-12 22:22:35 -0700</bug_when>
    <thetext>Created attachment 31228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125599</commentid>
    <comment_count>2</comment_count>
      <attachid>31229</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-06-12 22:45:24 -0700</bug_when>
    <thetext>Created attachment 31229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125600</commentid>
    <comment_count>3</comment_count>
      <attachid>31229</attachid>
    <who name="">mitz</who>
    <bug_when>2009-06-12 22:58:43 -0700</bug_when>
    <thetext>Comment on attachment 31229
Patch

&gt; +    if (lBreak.obj &amp;&amp; lineMidpointState.m_numMidpoints &amp;&amp; lineMidpointState.m_numMidpoints % 2 == 0) {

The style guidelines say you should avoid == 0 and use !(lineMidpointState.m_numMidpoints % 2).

&gt; +        if (lineMidpointState.m_numMidpoints % 2 == 1) {

Here you can just omit the == 1.

&gt; -            chopMidpointsAt(lBreak.obj, lBreak.pos-2);
&gt; +            chopMidpointsAt(lineMidpointState, lBreak.obj, lBreak.pos-2);

Please add spaces around the -.

r=me assuming layout tests pass. This code is kinda hot so it would be good to verify that any changes do not cause a perf regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125601</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-06-12 23:04:51 -0700</bug_when>
    <thetext>Fixed in r44649.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31228</attachid>
            <date>2009-06-12 22:22:35 -0700</date>
            <delta_ts>2009-06-12 22:45:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>31830</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZv
cm0vdGV4dC9CaWRpUmVzb2x2ZXIuaAkocmV2aXNpb24gNDQ1NzIpCisrKyBwbGF0Zm9ybS90ZXh0
L0JpZGlSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwyOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4gY2xhc3MgTWlkcG9p
bnRTdGF0ZQoreworcHVibGljOgorICAgIE1pZHBvaW50U3RhdGUoKQorICAgIHsKKyAgICAgICAg
cmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXNldCgpIHsKKyAgICAgICAgbV9udW1N
aWRwb2ludHMgPSAwOworICAgICAgICBtX2N1cnJlbnRNaWRwb2ludCA9IDA7CisgICAgICAgIG1f
YmV0d2Vlbk1pZHBvaW50cyA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBUaGUgZ29hbCBp
cyB0byByZXVzZSB0aGUgbGluZSBzdGF0ZSBhY3Jvc3MgbXVsdGlwbGUKKyAgICAvLyBsaW5lcyBz
byB3ZSBqdXN0IGtlZXAgYW4gYXJyYXkgYXJvdW5kIGZvciBtaWRwb2ludHMgYW5kIG5ldmVyIGNs
ZWFyIGl0IGFjcm9zcyBtdWx0aXBsZQorICAgIC8vIGxpbmVzLiAgV2UgdHJhY2sgdGhlIG51bWJl
ciBvZiBpdGVtcyBhbmQgcG9zaXRpb24gdXNpbmcgdGhlIHR3byBvdGhlciB2YXJpYWJsZXMuCisg
ICAgVmVjdG9yPEl0ZXJhdG9yLCA0PiBtX21pZHBvaW50czsKKyAgICB1bnNpZ25lZCBtX251bU1p
ZHBvaW50czsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRNaWRwb2ludDsKKyAgICBib29sIG1fYmV0
d2Vlbk1pZHBvaW50czsKK307CisKIC8vIFRoZSBCaWRpU3RhdHVzIGF0IGEgZ2l2ZW4gcG9zaXRp
b24gKHR5cGljYWxseSB0aGUgZW5kIG9mIGEgbGluZSkgY2FuCiAvLyBiZSBjYWNoZWQgYW5kIHRo
ZW4gdXNlZCB0byByZXN0YXJ0IGJpZGkgcmVzb2x1dGlvbiBhdCB0aGF0IHBvc2l0aW9uLgogc3Ry
dWN0IEJpZGlTdGF0dXMgewpAQCAtMTM1LDYgKzE1OCw4IEBAIHB1YmxpYyA6CiAgICAgY29uc3Qg
QmlkaVN0YXR1cyYgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICB2b2lk
IHNldFN0YXR1cyhjb25zdCBCaWRpU3RhdHVzIHMpIHsgbV9zdGF0dXMgPSBzOyB9CiAKKyAgICBN
aWRwb2ludFN0YXRlPEl0ZXJhdG9yPiYgbWlkcG9pbnRTdGF0ZSgpIHsgcmV0dXJuIG1fbWlkcG9p
bnRTdGF0ZTsgfQorCiAgICAgdm9pZCBlbWJlZChXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbik7CiAg
ICAgdm9pZCBjb21taXRFeHBsaWNpdEVtYmVkZGluZygpOwogCkBAIC0xNzIsNiArMTk3LDcgQEAg
cHJvdGVjdGVkOgogICAgIFJ1biogbV9sYXN0UnVuOwogICAgIFJ1biogbV9sb2dpY2FsbHlMYXN0
UnVuOwogICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7CisgICAgTWlkcG9pbnRTdGF0ZTxJdGVyYXRv
cj4gbV9taWRwb2ludFN0YXRlOwogCiBwcml2YXRlOgogICAgIHZvaWQgcmFpc2VFeHBsaWNpdEVt
YmVkZGluZ0xldmVsKFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGZyb20sIFdURjo6VW5pY29kZTo6
RGlyZWN0aW9uIHRvKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA0NDU3MikKKysrIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpZm5k
ZWYgUmVuZGVyQmxvY2tfaAogI2RlZmluZSBSZW5kZXJCbG9ja19oCi0KKyNpbmNsdWRlICJCaWRp
UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgogI2luY2x1ZGUgIkdh
cFJlY3RzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCkBAIC00Myw2ICs0Myw3IEBAIHN0cnVj
dCBCaWRpUnVuOwogCiB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1bj4gY2xhc3Mg
QmlkaVJlc29sdmVyOwogdHlwZWRlZiBCaWRpUmVzb2x2ZXI8SW5saW5lSXRlcmF0b3IsIEJpZGlS
dW4+IElubGluZUJpZGlSZXNvbHZlcjsKK3R5cGVkZWYgTWlkcG9pbnRTdGF0ZTxJbmxpbmVJdGVy
YXRvcj4gTGluZU1pZHBvaW50U3RhdGU7CiAKIGVudW0gQ2FyZXRUeXBlIHsgQ3Vyc29yQ2FyZXQs
IERyYWdDYXJldCB9OwogCkBAIC0xNTcsMTggKzE1OCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIElu
dFJlY3QgcmVjdDsKICAgICB9OwogCi0gICAgdm9pZCBiaWRpUmVvcmRlckxpbmUoSW5saW5lQmlk
aVJlc29sdmVyJiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCk7Ci0gICAgUm9vdElubGluZUJv
eCogZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJzdExpbmUsIGJvb2wmIGZ1bGxMYXlv
dXQsIElubGluZUJpZGlSZXNvbHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1
bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMpOworICAgIHZvaWQgYmlkaVJlb3JkZXJMaW5lKElubGlu
ZUJpZGlSZXNvbHZlciYsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQsIGJvb2wgcHJldmlvdXNM
aW5lQnJva2VDbGVhbmx5KTsKKyAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0
aW9uKGJvb2wmIGZpcnN0TGluZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5saW5lQmlkaVJlc29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2ln
bmVkJiBudW1DbGVhbkZsb2F0cyk7CiAgICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lRW5kUG9z
aXRpb24oUm9vdElubGluZUJveCogc3RhcnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVT
dGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpU3RhdHVz
JiBjbGVhbkxpbmVCaWRpU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgeVBvcyk7CiAgICAgYm9vbCBtYXRjaGVkRW5kTGluZShjb25zdCBJbmxpbmVC
aWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCBjb25zdCBC
aWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgUm9vdElu
bGluZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcywgaW50JiByZXBhaW50Qm90dG9tLCBpbnQm
IHJlcGFpbnRUb3ApOwotICAgIGJvb2wgZ2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQo
UmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCBza2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0
ZXJhdG9yJik7Ci0gICAgaW50IHNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2
ZXImLCBib29sIGZpcnN0TGluZSk7CisgICAgYm9vbCBnZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxp
bmVDaGlsZChSZW5kZXJPYmplY3QqLCBib29sIGlzTGluZUVtcHR5ID0gdHJ1ZSwgYm9vbCBwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVlKTsKKyAgICB2b2lkIHNraXBUcmFpbGluZ1doaXRl
c3BhY2UoSW5saW5lSXRlcmF0b3ImLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSk7CisgICAgaW50IHNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRp
UmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwgYm9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHkpOwogICAgIHZvaWQgZml0QmVsb3dGbG9hdHMoaW50IHdpZHRoVG9G
aXQsIGJvb2wgZmlyc3RMaW5lLCBpbnQmIGF2YWlsYWJsZVdpZHRoKTsKLSAgICBJbmxpbmVJdGVy
YXRvciBmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGlu
ZSwgRUNsZWFyKiBjbGVhciA9IDApOworICAgIElubGluZUl0ZXJhdG9yIGZpbmROZXh0TGluZUJy
ZWFrKElubGluZUJpZGlSZXNvbHZlciYsIGJvb2wgZmlyc3RMaW5lLCBib29sJiBpc0xpbmVFbXB0
eSwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUsIEVD
bGVhciogY2xlYXIgPSAwKTsKICAgICBSb290SW5saW5lQm94KiBjb25zdHJ1Y3RMaW5lKHVuc2ln
bmVkIHJ1bkNvdW50LCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogbGFzdFJ1biwgYm9vbCBm
aXJzdExpbmUsIGJvb2wgbGFzdExpbmUsIFJlbmRlck9iamVjdCogZW5kT2JqZWN0KTsKICAgICBJ
bmxpbmVGbG93Qm94KiBjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiwgYm9vbCBmaXJzdExp
bmUpOwogICAgIHZvaWQgY29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxp
bmVCb3gqLCBib29sIGZpcnN0TGluZSwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWls
aW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCk7CkluZGV4OiByZW5kZXJpbmcvYmlkaS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL2JpZGkuY3BwCShyZXZpc2lvbiA0NDU3MikKKysrIHJl
bmRlcmluZy9iaWRpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTcgKzc4LDYgQEAgcHVibGlj
OgogICAgIGludCBuZXh0QnJlYWthYmxlUG9zaXRpb247CiB9OwogCi0vLyBNaWRwb2ludCBnbG9i
YWxzLiAgVGhlIGdvYWwgaXMgbm90IHRvIGRvIGFueSBhbGxvY2F0aW9uIHdoZW4gZGVhbGluZyB3
aXRoCi0vLyB0aGVzZSBtaWRwb2ludHMsIHNvIHdlIGp1c3Qga2VlcCBhbiBhcnJheSBhcm91bmQg
YW5kIG5ldmVyIGNsZWFyIGl0LiAgV2UgdHJhY2sKLS8vIHRoZSBudW1iZXIgb2YgaXRlbXMgYW5k
IHBvc2l0aW9uIHVzaW5nIHRoZSB0d28gb3RoZXIgdmFyaWFibGVzLgotc3RhdGljIFZlY3RvcjxJ
bmxpbmVJdGVyYXRvcj4qIHNtaWRwb2ludHM7Ci1zdGF0aWMgdW5zaWduZWQgc051bU1pZHBvaW50
czsKLXN0YXRpYyB1bnNpZ25lZCBzQ3Vyck1pZHBvaW50Owotc3RhdGljIGJvb2wgYmV0d2Vlbk1p
ZHBvaW50czsKLQotc3RhdGljIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlOwotc3RhdGljIGJvb2wg
cHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZTsKLQogc3RhdGljIGludCBnZXRCb3JkZXJQ
YWRkaW5nTWFyZ2luKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCwgYm9vbCBlbmRPZklubGlu
ZSkKIHsKICAgICBib29sIGxlZnRTaWRlID0gKGNoaWxkLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIpID8gIWVuZE9mSW5saW5lIDogZW5kT2ZJbmxpbmU7CkBAIC0zMjcsMzUgKzMxNiwzNSBA
QCBBTFdBWVNfSU5MSU5FIERpcmVjdGlvbiBJbmxpbmVJdGVyYXRvcjo6CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHZvaWQgY2hvcE1pZHBv
aW50c0F0KFJlbmRlck9iamVjdCogb2JqLCB1bnNpZ25lZCBwb3MpCitzdGF0aWMgdm9pZCBjaG9w
TWlkcG9pbnRzQXQoTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlLCBSZW5kZXJP
YmplY3QqIG9iaiwgdW5zaWduZWQgcG9zKQogewotICAgIGlmICghc051bU1pZHBvaW50cykKKyAg
ICBpZiAoIWxpbmVNaWRwb2ludFN0YXRlLm1fbnVtTWlkcG9pbnRzKQogICAgICAgICByZXR1cm47
Ci0gICAgSW5saW5lSXRlcmF0b3IqIG1pZHBvaW50cyA9IHNtaWRwb2ludHMtPmRhdGEoKTsKLSAg
ICBmb3IgKGludCBpID0gc051bU1pZHBvaW50cyAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgSW5s
aW5lSXRlcmF0b3IqIG1pZHBvaW50cyA9IGxpbmVNaWRwb2ludFN0YXRlLm1fbWlkcG9pbnRzLmRh
dGEoKTsKKyAgICBmb3IgKGludCBpID0gbGluZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMg
LSAxOyBpID49IDA7IGktLSkgewogICAgICAgICBjb25zdCBJbmxpbmVJdGVyYXRvciYgcG9pbnQg
PSBtaWRwb2ludHNbaV07CiAgICAgICAgIGlmIChwb2ludC5vYmogPT0gb2JqICYmIHBvaW50LnBv
cyA9PSBwb3MpIHsKLSAgICAgICAgICAgIHNOdW1NaWRwb2ludHMgPSBpOworICAgICAgICAgICAg
bGluZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMgPSBpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrTWlkcG9pbnRzKElubGlu
ZUl0ZXJhdG9yJiBsQnJlYWspCitzdGF0aWMgdm9pZCBjaGVja01pZHBvaW50cyhMaW5lTWlkcG9p
bnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yJiBsQnJlYWspCiB7CiAg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIG91ciBsYXN0IG1pZHBvaW50IGlzIGEgc3RhcnQgcG9pbnQg
YmV5b25kIHRoZSBsaW5lIGJyZWFrLiAgSWYgc28sCiAgICAgLy8gc2hhdmUgaXQgb2ZmIHRoZSBs
aXN0LCBhbmQgc2hhdmUgb2ZmIGEgdHJhaWxpbmcgc3BhY2UgaWYgdGhlIHByZXZpb3VzIGVuZCBw
b2ludCBkb2Vzbid0CiAgICAgLy8gcHJlc2VydmUgd2hpdGVzcGFjZS4KLSAgICBpZiAobEJyZWFr
Lm9iaiAmJiBzTnVtTWlkcG9pbnRzICYmIHNOdW1NaWRwb2ludHMgJSAyID09IDApIHsKLSAgICAg
ICAgSW5saW5lSXRlcmF0b3IqIG1pZHBvaW50cyA9IHNtaWRwb2ludHMtPmRhdGEoKTsKLSAgICAg
ICAgSW5saW5lSXRlcmF0b3ImIGVuZHBvaW50ID0gbWlkcG9pbnRzW3NOdW1NaWRwb2ludHMtMl07
Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFydHBvaW50ID0gbWlkcG9pbnRzW3NO
dW1NaWRwb2ludHMtMV07CisgICAgaWYgKGxCcmVhay5vYmogJiYgbGluZU1pZHBvaW50U3RhdGUu
bV9udW1NaWRwb2ludHMgJiYgbGluZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMgJSAyID09
IDApIHsKKyAgICAgICAgSW5saW5lSXRlcmF0b3IqIG1pZHBvaW50cyA9IGxpbmVNaWRwb2ludFN0
YXRlLm1fbWlkcG9pbnRzLmRhdGEoKTsKKyAgICAgICAgSW5saW5lSXRlcmF0b3ImIGVuZHBvaW50
ID0gbWlkcG9pbnRzW2xpbmVNaWRwb2ludFN0YXRlLm1fbnVtTWlkcG9pbnRzIC0gMl07CisgICAg
ICAgIGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFydHBvaW50ID0gbWlkcG9pbnRzW2xpbmVNaWRw
b2ludFN0YXRlLm1fbnVtTWlkcG9pbnRzIC0gMV07CiAgICAgICAgIElubGluZUl0ZXJhdG9yIGN1
cnJwb2ludCA9IGVuZHBvaW50OwogICAgICAgICB3aGlsZSAoIWN1cnJwb2ludC5hdEVuZCgpICYm
IGN1cnJwb2ludCAhPSBzdGFydHBvaW50ICYmIGN1cnJwb2ludCAhPSBsQnJlYWspCiAgICAgICAg
ICAgICBjdXJycG9pbnQuaW5jcmVtZW50KCk7CiAgICAgICAgIGlmIChjdXJycG9pbnQgPT0gbEJy
ZWFrKSB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGxpbmUgYnJlYWsgYmVmb3JlIHRoZSBz
dGFydCBwb2ludC4gIFNoYXZlIG9mZiB0aGUgc3RhcnQgcG9pbnQuCi0gICAgICAgICAgICBzTnVt
TWlkcG9pbnRzLS07CisgICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5tX251bU1pZHBvaW50
cy0tOwogICAgICAgICAgICAgaWYgKGVuZHBvaW50Lm9iai0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0
ZVNwYWNlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoZW5kcG9pbnQub2JqLT5pc1RleHQoKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBzaGF2ZSBhIGNoYXJhY3RlciBvZmYgdGhl
IGVuZHBvaW50IGlmIGl0IHdhcyBmcm9tIGEgc29mdCBoeXBoZW4uCkBAIC0zNzUsMzUgKzM2NCwz
NSBAQCBzdGF0aWMgdm9pZCBjaGVja01pZHBvaW50cyhJbmxpbmVJdGVyYXRvCiAgICAgfSAgICAK
IH0KIAotc3RhdGljIHZvaWQgYWRkTWlkcG9pbnQoY29uc3QgSW5saW5lSXRlcmF0b3ImIG1pZHBv
aW50KQorc3RhdGljIHZvaWQgYWRkTWlkcG9pbnQoTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRw
b2ludFN0YXRlLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgbWlkcG9pbnQpCiB7Ci0gICAgaWYgKHNt
aWRwb2ludHMtPnNpemUoKSA8PSBzTnVtTWlkcG9pbnRzKQotICAgICAgICBzbWlkcG9pbnRzLT5n
cm93KHNOdW1NaWRwb2ludHMgKyAxMCk7CisgICAgaWYgKGxpbmVNaWRwb2ludFN0YXRlLm1fbWlk
cG9pbnRzLnNpemUoKSA8PSBsaW5lTWlkcG9pbnRTdGF0ZS5tX251bU1pZHBvaW50cykKKyAgICAg
ICAgbGluZU1pZHBvaW50U3RhdGUubV9taWRwb2ludHMuZ3JvdyhsaW5lTWlkcG9pbnRTdGF0ZS5t
X251bU1pZHBvaW50cyArIDEwKTsKIAotICAgIElubGluZUl0ZXJhdG9yKiBtaWRwb2ludHMgPSBz
bWlkcG9pbnRzLT5kYXRhKCk7Ci0gICAgbWlkcG9pbnRzW3NOdW1NaWRwb2ludHMrK10gPSBtaWRw
b2ludDsKKyAgICBJbmxpbmVJdGVyYXRvciogbWlkcG9pbnRzID0gbGluZU1pZHBvaW50U3RhdGUu
bV9taWRwb2ludHMuZGF0YSgpOworICAgIG1pZHBvaW50c1tsaW5lTWlkcG9pbnRTdGF0ZS5tX251
bU1pZHBvaW50cysrXSA9IG1pZHBvaW50OwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRSdW5zRm9y
T2JqZWN0KGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0KiBvYmosIElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2x2ZXIpCitzdGF0aWMgdm9pZCBhcHBlbmRSdW5zRm9yT2JqZWN0KGludCBz
dGFydCwgaW50IGVuZCwgTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlLCBSZW5k
ZXJPYmplY3QqIG9iaiwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKIHsKICAgICBpZiAo
c3RhcnQgPiBlbmQgfHwgb2JqLT5pc0Zsb2F0aW5nKCkgfHwKICAgICAgICAgKG9iai0+aXNQb3Np
dGlvbmVkKCkgJiYgIW9iai0+c3R5bGUoKS0+aGFzU3RhdGljWCgpICYmICFvYmotPnN0eWxlKCkt
Pmhhc1N0YXRpY1koKSAmJiAhb2JqLT5jb250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgaGF2ZU5leHRNaWRwb2ludCA9IChzQ3Vyck1pZHBv
aW50IDwgc051bU1pZHBvaW50cyk7CisgICAgYm9vbCBoYXZlTmV4dE1pZHBvaW50ID0gKGxpbmVN
aWRwb2ludFN0YXRlLm1fY3VycmVudE1pZHBvaW50IDwgbGluZU1pZHBvaW50U3RhdGUubV9udW1N
aWRwb2ludHMpOwogICAgIElubGluZUl0ZXJhdG9yIG5leHRNaWRwb2ludDsKICAgICBpZiAoaGF2
ZU5leHRNaWRwb2ludCkKLSAgICAgICAgbmV4dE1pZHBvaW50ID0gc21pZHBvaW50cy0+YXQoc0N1
cnJNaWRwb2ludCk7Ci0gICAgaWYgKGJldHdlZW5NaWRwb2ludHMpIHsKKyAgICAgICAgbmV4dE1p
ZHBvaW50ID0gbGluZU1pZHBvaW50U3RhdGUubV9taWRwb2ludHNbbGluZU1pZHBvaW50U3RhdGUu
bV9jdXJyZW50TWlkcG9pbnRdOworICAgIGlmIChsaW5lTWlkcG9pbnRTdGF0ZS5tX2JldHdlZW5N
aWRwb2ludHMpIHsKICAgICAgICAgaWYgKCEoaGF2ZU5leHRNaWRwb2ludCAmJiBuZXh0TWlkcG9p
bnQub2JqID09IG9iaikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIFRoaXMgaXMg
YSBuZXcgc3RhcnQgcG9pbnQuIFN0b3AgaWdub3Jpbmcgb2JqZWN0cyBhbmQgCiAgICAgICAgIC8v
IGFkanVzdCBvdXIgc3RhcnQuCi0gICAgICAgIGJldHdlZW5NaWRwb2ludHMgPSBmYWxzZTsKKyAg
ICAgICAgbGluZU1pZHBvaW50U3RhdGUubV9iZXR3ZWVuTWlkcG9pbnRzID0gZmFsc2U7CiAgICAg
ICAgIHN0YXJ0ID0gbmV4dE1pZHBvaW50LnBvczsKLSAgICAgICAgc0N1cnJNaWRwb2ludCsrOwor
ICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5tX2N1cnJlbnRNaWRwb2ludCsrOwogICAgICAgICBp
ZiAoc3RhcnQgPCBlbmQpCi0gICAgICAgICAgICByZXR1cm4gYXBwZW5kUnVuc0Zvck9iamVjdChz
dGFydCwgZW5kLCBvYmosIHJlc29sdmVyKTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRSdW5z
Rm9yT2JqZWN0KHN0YXJ0LCBlbmQsIGxpbmVNaWRwb2ludFN0YXRlLCBvYmosIHJlc29sdmVyKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWhhdmVOZXh0TWlkcG9pbnQgfHwgKG9iaiAhPSBu
ZXh0TWlkcG9pbnQub2JqKSkgewogICAgICAgICAgICAgcmVzb2x2ZXIuYWRkUnVuKG5ldyAob2Jq
LT5yZW5kZXJBcmVuYSgpKSBCaWRpUnVuKHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIuY29udGV4
dCgpLCByZXNvbHZlci5kaXIoKSkpOwpAQCAtNDEzLDEzICs0MDIsMTMgQEAgc3RhdGljIHZvaWQg
YXBwZW5kUnVuc0Zvck9iamVjdChpbnQgc3RhcgogICAgICAgICAvLyBBbiBlbmQgbWlkcG9pbnQg
aGFzIGJlZW4gZW5jb3VudGVyZWQgd2l0aGluIG91ciBvYmplY3QuICBXZQogICAgICAgICAvLyBu
ZWVkIHRvIGdvIGFoZWFkIGFuZCBhcHBlbmQgYSBydW4gd2l0aCBvdXIgZW5kcG9pbnQuCiAgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG5leHRNaWRwb2ludC5wb3MgKyAxKSA8PSBlbmQpIHsK
LSAgICAgICAgICAgIGJldHdlZW5NaWRwb2ludHMgPSB0cnVlOwotICAgICAgICAgICAgc0N1cnJN
aWRwb2ludCsrOworICAgICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUubV9iZXR3ZWVuTWlkcG9p
bnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLm1fY3VycmVudE1pZHBv
aW50Kys7CiAgICAgICAgICAgICBpZiAobmV4dE1pZHBvaW50LnBvcyAhPSBVSU5UX01BWCkgeyAv
LyBVSU5UX01BWCBtZWFucyBzdG9wIGF0IHRoZSBvYmplY3QgYW5kIGRvbid0IGluY2x1ZGUgYW55
IG9mIGl0LgogICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG5leHRNaWRwb2lu
dC5wb3MgKyAxKSA+IHN0YXJ0KQogICAgICAgICAgICAgICAgICAgICByZXNvbHZlci5hZGRSdW4o
bmV3IChvYmotPnJlbmRlckFyZW5hKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpUnVu
KHN0YXJ0LCBuZXh0TWlkcG9pbnQucG9zICsgMSwgb2JqLCByZXNvbHZlci5jb250ZXh0KCksIHJl
c29sdmVyLmRpcigpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFJ1bnNGb3JPYmpl
Y3QobmV4dE1pZHBvaW50LnBvcyArIDEsIGVuZCwgb2JqLCByZXNvbHZlcik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZFJ1bnNGb3JPYmplY3QobmV4dE1pZHBvaW50LnBvcyArIDEsIGVu
ZCwgbGluZU1pZHBvaW50U3RhdGUsIG9iaiwgcmVzb2x2ZXIpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgcmVzb2x2ZXIuYWRkUnVuKG5ldyAob2JqLT5yZW5kZXJB
cmVuYSgpKSBCaWRpUnVuKHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNv
bHZlci5kaXIoKSkpOwpAQCAtNDMzLDcgKzQyMiw3IEBAIHZvaWQgSW5saW5lQmlkaVJlc29sdmVy
OjphcHBlbmRSdW4oKQogICAgICAgICBpbnQgc3RhcnQgPSBzb3IucG9zOwogICAgICAgICBSZW5k
ZXJPYmplY3QgKm9iaiA9IHNvci5vYmo7CiAgICAgICAgIHdoaWxlIChvYmogJiYgb2JqICE9IGVv
ci5vYmogJiYgb2JqICE9IGVuZE9mTGluZS5vYmopIHsKLSAgICAgICAgICAgIGFwcGVuZFJ1bnNG
b3JPYmplY3Qoc3RhcnQsIG9iai0+bGVuZ3RoKCksIG9iaiwgKnRoaXMpOyAgICAgICAgCisgICAg
ICAgICAgICBhcHBlbmRSdW5zRm9yT2JqZWN0KHN0YXJ0LCBvYmotPmxlbmd0aCgpLCBtX21pZHBv
aW50U3RhdGUsIG9iaiwgKnRoaXMpOyAgICAgICAgCiAgICAgICAgICAgICBzdGFydCA9IDA7CiAg
ICAgICAgICAgICBvYmogPSBiaWRpTmV4dChzb3IuYmxvY2ssIG9iaik7CiAgICAgICAgIH0KQEAg
LTQ0NSw3ICs0MzQsNyBAQCB2b2lkIElubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVuKCkKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gYWRkIHJ1bnMgZm9yIHplcm8t
bGVuZ3RoIFJlbmRlck9iamVjdHMsIGp1c3QgZG9uJ3QgbWFrZSB0aGUgcnVuIGxhcmdlciB0aGFu
IGl0IHNob3VsZCBiZQogICAgICAgICAgICAgaW50IGVuZCA9IG9iai0+bGVuZ3RoKCkgPyBwb3Mr
MSA6IDA7Ci0gICAgICAgICAgICBhcHBlbmRSdW5zRm9yT2JqZWN0KHN0YXJ0LCBlbmQsIG9iaiwg
KnRoaXMpOworICAgICAgICAgICAgYXBwZW5kUnVuc0Zvck9iamVjdChzdGFydCwgZW5kLCBtX21p
ZHBvaW50U3RhdGUsIG9iaiwgKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBl
b3IuaW5jcmVtZW50KCk7CkBAIC03OTEsNyArNzgwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29t
cHV0ZVZlcnRpY2FsUG9zaXRpbwogfQogCiAvLyBjb2xsZWN0cyBvbmUgbGluZSBvZiB0aGUgcGFy
YWdyYXBoIGFuZCB0cmFuc2Zvcm1zIGl0IHRvIHZpc3VhbCBvcmRlcgotdm9pZCBSZW5kZXJCbG9j
azo6YmlkaVJlb3JkZXJMaW5lKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElu
bGluZUl0ZXJhdG9yJiBlbmQpCit2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoSW5s
aW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCwgYm9v
bCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpCiB7CiAgICAgcmVzb2x2ZXIuY3JlYXRlQmlkaVJ1
bnNGb3JMaW5lKGVuZCwgc3R5bGUoKS0+dmlzdWFsbHlPcmRlcmVkKCksIHByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSk7CiB9CkBAIC04NzQsNyArODYzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXIgcmVzb2x2ZXI7
CiAgICAgICAgIHVuc2lnbmVkIGZsb2F0SW5kZXg7CiAgICAgICAgIGJvb2wgZmlyc3RMaW5lID0g
dHJ1ZTsKLSAgICAgICAgUm9vdElubGluZUJveCogc3RhcnRMaW5lID0gZGV0ZXJtaW5lU3RhcnRQ
b3NpdGlvbihmaXJzdExpbmUsIGZ1bGxMYXlvdXQsIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5k
ZXgpOworICAgICAgICBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7CisgICAg
ICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRpb24oZmly
c3RMaW5lLCBmdWxsTGF5b3V0LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIHJlc29sdmVyLCBm
bG9hdHMsIGZsb2F0SW5kZXgpOwogCiAgICAgICAgIGlmIChmdWxsTGF5b3V0ICYmICFzZWxmTmVl
ZHNMYXlvdXQoKSkgewogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOyAg
Ly8gTWFyayBvdXJzZWx2ZXMgYXMgbmVlZGluZyBhIGZ1bGwgbGF5b3V0LiBUaGlzIHdheSB3ZSds
bCByZXBhaW50IGxpa2UKQEAgLTg5MSwxMSArODgxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0SW5saW5lQ2hpbGRyZW4oYgogCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cyA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogCi0g
ICAgICAgIGlmICghc21pZHBvaW50cykKLSAgICAgICAgICAgIHNtaWRwb2ludHMgPSBuZXcgVmVj
dG9yPElubGluZUl0ZXJhdG9yPigpOwotCi0gICAgICAgIHNOdW1NaWRwb2ludHMgPSAwOwotICAg
ICAgICBzQ3Vyck1pZHBvaW50ID0gMDsKKyAgICAgICAgTGluZU1pZHBvaW50U3RhdGUmIGxpbmVN
aWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0ZSgpOwogCiAgICAgICAgIC8vIFdl
IGFsc28gZmluZCB0aGUgZmlyc3QgY2xlYW4gbGluZSBhbmQgZXh0cmFjdCB0aGVzZSBsaW5lcy4g
IFdlIHdpbGwgYWRkIHRoZW0gYmFjawogICAgICAgICAvLyBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB3
ZSdyZSBhYmxlIHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRsaW5nIGFsbCBvdXIgZGlydHkgbGlu
ZXMuCkBAIC05NDMsMTYgKzkyOSwxOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVD
aGlsZHJlbihiCiAgICAgICAgIGJvb2wgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSBmYWxz
ZTsKICAgICAgICAgaW50IGxhc3RIZWlnaHQgPSBoZWlnaHQoKTsKIAorICAgICAgICBib29sIGlz
TGluZUVtcHR5ID0gdHJ1ZTsKKwogICAgICAgICB3aGlsZSAoIWVuZC5hdEVuZCgpKSB7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWNlc3NhcnkgYmVmb3JlIHRoZSBmaXJz
dCBpdGVyYXRpb24gb3IgY2FuIGl0IGJlIG1vdmVkIHRvIHRoZSBlbmQ/CiAgICAgICAgICAgICBp
ZiAoY2hlY2tGb3JFbmRMaW5lTWF0Y2ggJiYgKGVuZExpbmVNYXRjaGVkID0gbWF0Y2hlZEVuZExp
bmUocmVzb2x2ZXIsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBlbmRMaW5l
LCBlbmRMaW5lWVBvcywgcmVwYWludEJvdHRvbSwgcmVwYWludFRvcCkpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICBiZXR3ZWVuTWlkcG9pbnRzID0gZmFsc2U7CisgICAg
ICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5yZXNldCgpOworICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpc0xpbmVFbXB0eSA9IHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEVDbGVh
ciBjbGVhciA9IENOT05FOwotICAgICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsocmVz
b2x2ZXIsIGZpcnN0TGluZSwgJmNsZWFyKTsKKyAgICAgICAgICAgIGVuZCA9IGZpbmROZXh0TGlu
ZUJyZWFrKHJlc29sdmVyLCBmaXJzdExpbmUsIGlzTGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9r
ZUNsZWFubHksIGxpbmVNaWRwb2ludFN0YXRlLCAmY2xlYXIpOwogICAgICAgICAgICAgaWYgKHJl
c29sdmVyLnBvc2l0aW9uKCkuYXRFbmQoKSkgewogICAgICAgICAgICAgICAgIHJlc29sdmVyLmRl
bGV0ZVJ1bnMoKTsKICAgICAgICAgICAgICAgICBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9
IHRydWU7CkBAIC05NjEsNyArOTUwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5l
Q2hpbGRyZW4oYgogICAgICAgICAgICAgQVNTRVJUKGVuZCAhPSByZXNvbHZlci5wb3NpdGlvbigp
KTsKIAogICAgICAgICAgICAgaWYgKCFpc0xpbmVFbXB0eSkgewotICAgICAgICAgICAgICAgIGJp
ZGlSZW9yZGVyTGluZShyZXNvbHZlciwgZW5kKTsKKyAgICAgICAgICAgICAgICBiaWRpUmVvcmRl
ckxpbmUocmVzb2x2ZXIsIGVuZCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICAgICAgICAg
ICAgICAgICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24oKSA9PSBlbmQpOwogCiAgICAgICAgICAg
ICAgICAgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biA9IDA7CkBAIC0xMDc1LDggKzEwNjQsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGxhc3RIZWlnaHQgPSBoZWlnaHQoKTsKLSAgICAgICAgICAgIHNOdW1N
aWRwb2ludHMgPSAwOwotICAgICAgICAgICAgc0N1cnJNaWRwb2ludCA9IDA7CisgICAgICAgICAg
ICBsaW5lTWlkcG9pbnRTdGF0ZS5yZXNldCgpOwogICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9z
aXRpb24oZW5kKTsKICAgICAgICAgfQogCkBAIC0xMTMzLDkgKzExMjEsNiBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBz
TnVtTWlkcG9pbnRzID0gMDsKLSAgICBzQ3Vyck1pZHBvaW50ID0gMDsKLQogICAgIC8vIE5vdyBh
ZGQgaW4gdGhlIGJvdHRvbSBib3JkZXIvcGFkZGluZy4KICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkg
KyB0b0FkZCk7CiAKQEAgLTExNTQsNyArMTEzOSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgY2hlY2tMaW5lc0ZvclRleHRPdmVyZmxvdygpOwog
fQogCi1Sb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihi
b29sJiBmaXJzdExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQsIElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5G
bG9hdHMpCitSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlv
bihib29sJiBmaXJzdExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQsIGJvb2wmIHByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8RmxvYXRXaXRoUmVj
dD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzKQogewogICAgIFJvb3RJbmxpbmVC
b3gqIGN1cnIgPSAwOwogICAgIFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwpAQCAtMTM4NSw3ICsx
MzcxLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgSQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNraXBOb25CcmVha2luZ1NwYWNl
KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwTm9uQnJl
YWtpbmdTcGFjZShjb25zdCBJbmxpbmVJdGVyYXRvciYgaXQsIGJvb2wgaXNMaW5lRW1wdHksIGJv
b2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KQogewogICAgIGlmIChpdC5vYmotPnN0eWxlKCkt
Pm5ic3BNb2RlKCkgIT0gU1BBQ0UgfHwgaXQuY3VycmVudCgpICE9IG5vQnJlYWtTcGFjZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwMSw3ICsxMzg3LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIHNraXBOb25CcmVha2luZ1NwYWNlKAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2hvdWxkQ29sbGFwc2VXaGl0ZVNwYWNlKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRDb2xsYXBzZVdoaXRlU3BhY2UoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSkKIHsKICAgICByZXR1cm4gc3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpIHx8
IChzdHlsZS0+d2hpdGVTcGFjZSgpID09IFBSRV9XUkFQICYmICghaXNMaW5lRW1wdHkgfHwgIXBy
ZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkpOwogfQpAQCAtMTQyNCw3ICsxNDEwLDcgQEAgc3RhdGlj
IGJvb2wgaW5saW5lRmxvd1JlcXVpcmVzTGluZUJveChSZQogICAgIHJldHVybiAhZmxvdy0+Zmly
c3RDaGlsZCgpICYmIGZsb3ctPmhhc0hvcml6b250YWxCb3JkZXJzUGFkZGluZ09yTWFyZ2luKCk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCByZXF1aXJlc0xpbmVCb3goY29uc3QgSW5saW5lSXRl
cmF0b3ImIGl0KQorc3RhdGljIGlubGluZSBib29sIHJlcXVpcmVzTGluZUJveChjb25zdCBJbmxp
bmVJdGVyYXRvciYgaXQsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VD
bGVhbmx5KQogewogICAgIGlmIChpdC5vYmotPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQzMiwxOSArMTQxOCwyMCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgcmVxdWlyZXNMaW5lQm94KGNvbnN0CiAgICAgaWYgKGl0Lm9iai0+aXNSZW5kZXJJbmxp
bmUoKSAmJiAhaW5saW5lRmxvd1JlcXVpcmVzTGluZUJveCh0b1JlbmRlcklubGluZShpdC5vYmop
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFzaG91bGRDb2xsYXBzZVdoaXRl
U3BhY2UoaXQub2JqLT5zdHlsZSgpKSB8fCBpdC5vYmotPmlzQlIoKSkKKyAgICBpZiAoIXNob3Vs
ZENvbGxhcHNlV2hpdGVTcGFjZShpdC5vYmotPnN0eWxlKCksIGlzTGluZUVtcHR5LCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHkpIHx8IGl0Lm9iai0+aXNCUigpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIFVDaGFyIGN1cnJlbnQgPSBpdC5jdXJyZW50KCk7Ci0gICAgcmV0dXJuIGN1cnJl
bnQgIT0gJyAnICYmIGN1cnJlbnQgIT0gJ1x0JyAmJiBjdXJyZW50ICE9IHNvZnRIeXBoZW4gJiYg
KGN1cnJlbnQgIT0gJ1xuJyB8fCBzaG91bGRQcmVzZXJ2ZU5ld2xpbmUoaXQub2JqKSkgJiYgIXNr
aXBOb25CcmVha2luZ1NwYWNlKGl0KTsKKyAgICByZXR1cm4gY3VycmVudCAhPSAnICcgJiYgY3Vy
cmVudCAhPSAnXHQnICYmIGN1cnJlbnQgIT0gc29mdEh5cGhlbiAmJiAoY3VycmVudCAhPSAnXG4n
IHx8IHNob3VsZFByZXNlcnZlTmV3bGluZShpdC5vYmopKSAKKyAgICAgICAgICAgICYmICFza2lw
Tm9uQnJlYWtpbmdTcGFjZShpdCwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5s
eSk7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmdlbmVyYXRlc0xpbmVCb3hlc0ZvcklubGluZUNo
aWxkKFJlbmRlck9iamVjdCogaW5saW5lT2JqKQorYm9vbCBSZW5kZXJCbG9jazo6Z2VuZXJhdGVz
TGluZUJveGVzRm9ySW5saW5lQ2hpbGQoUmVuZGVyT2JqZWN0KiBpbmxpbmVPYmosIGJvb2wgaXNM
aW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KQogewogICAgIEFTU0VSVChp
bmxpbmVPYmotPnBhcmVudCgpID09IHRoaXMpOwogCiAgICAgSW5saW5lSXRlcmF0b3IgaXQodGhp
cywgaW5saW5lT2JqLCAwKTsKLSAgICB3aGlsZSAoIWl0LmF0RW5kKCkgJiYgIXJlcXVpcmVzTGlu
ZUJveChpdCkpCisgICAgd2hpbGUgKCFpdC5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3goaXQs
IGlzTGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpKQogICAgICAgICBpdC5pbmNy
ZW1lbnQoKTsKIAogICAgIHJldHVybiAhaXQuYXRFbmQoKTsKQEAgLTE0NTYsOSArMTQ0Myw5IEBA
IGJvb2wgUmVuZGVyQmxvY2s6OmdlbmVyYXRlc0xpbmVCb3hlc0ZvckkKIC8vIG9iamVjdCBpdGVy
YXRpb24gcHJvY2Vzcy4KIC8vIE5CLiB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGFueSBmbG9h
dGluZyBlbGVtZW50cyB0aGF0IHdvdWxkIG90aGVyd2lzZQogLy8gYmUgc2tpcHBlZCBidXQgaXQg
d2lsbCBub3QgcG9zaXRpb24gdGhlbS4KLXZvaWQgUmVuZGVyQmxvY2s6OnNraXBUcmFpbGluZ1do
aXRlc3BhY2UoSW5saW5lSXRlcmF0b3ImIGl0ZXJhdG9yKQordm9pZCBSZW5kZXJCbG9jazo6c2tp
cFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYgaXRlcmF0b3IsIGJvb2wgaXNMaW5l
RW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KQogewotICAgIHdoaWxlICghaXRl
cmF0b3IuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KGl0ZXJhdG9yKSkgeworICAgIHdoaWxl
ICghaXRlcmF0b3IuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KGl0ZXJhdG9yLCBpc0xpbmVF
bXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KSkgewogICAgICAgICBSZW5kZXJPYmplY3Qq
IG9iamVjdCA9IGl0ZXJhdG9yLm9iajsKICAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGluZygp
KSB7CiAgICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3Qp
KTsKQEAgLTE0ODksMTAgKzE0NzYsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5n
V2hpdGVzcGFjZQogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRl
c3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgYm9vbCBmaXJzdExpbmUpCitpbnQg
UmVuZGVyQmxvY2s6OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJl
c29sdmVyLCBib29sIGZpcnN0TGluZSwgYm9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xp
bmVCcm9rZUNsZWFubHkpCiB7CiAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKGhl
aWdodCgpLCBmaXJzdExpbmUpOwotICAgIHdoaWxlICghcmVzb2x2ZXIucG9zaXRpb24oKS5hdEVu
ZCgpICYmICFyZXF1aXJlc0xpbmVCb3gocmVzb2x2ZXIucG9zaXRpb24oKSkpIHsKKyAgICB3aGls
ZSAoIXJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KHJlc29s
dmVyLnBvc2l0aW9uKCksIGlzTGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpKSB7
CiAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVzb2x2ZXIucG9zaXRpb24oKS5vYmo7
CiAgICAgICAgIGlmIChvYmplY3QtPmlzRmxvYXRpbmcoKSkgewogICAgICAgICAgICAgaW5zZXJ0
RmxvYXRpbmdPYmplY3QodG9SZW5kZXJCb3gob2JqZWN0KSk7CkBAIC0xNTI5LDE0ICsxNTE2LDE0
IEBAIGludCBSZW5kZXJCbG9jazo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKEkKIAogLy8gVGhpcyBp
cyBjdXJyZW50bHkganVzdCB1c2VkIGZvciBsaXN0IG1hcmtlcnMgYW5kIGlubGluZSBmbG93cyB0
aGF0IGhhdmUgbGluZSBib3hlcy4gTmVpdGhlciBzaG91bGQgCiAvLyBoYXZlIGFuIGVmZmVjdCBv
biB3aGl0ZXNwYWNlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZS4gCi1zdGF0aWMgYm9vbCBzaG91
bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QoUmVuZGVyQmxvY2sqIGJsb2NrLCBSZW5k
ZXJPYmplY3QqIG8pCitzdGF0aWMgYm9vbCBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRP
YmplY3QoUmVuZGVyQmxvY2sqIGJsb2NrLCBSZW5kZXJPYmplY3QqIG8sIExpbmVNaWRwb2ludFN0
YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSkKIHsKICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBiaWRp
TmV4dChibG9jaywgbyk7CiAgICAgaWYgKG5leHQgJiYgIW5leHQtPmlzQlIoKSAmJiBuZXh0LT5p
c1RleHQoKSAmJiB0b1JlbmRlclRleHQobmV4dCktPnRleHRMZW5ndGgoKSA+IDApIHsKICAgICAg
ICAgUmVuZGVyVGV4dCogbmV4dFRleHQgPSB0b1JlbmRlclRleHQobmV4dCk7CiAgICAgICAgIFVD
aGFyIG5leHRDaGFyID0gbmV4dFRleHQtPmNoYXJhY3RlcnMoKVswXTsKICAgICAgICAgaWYgKG5l
eHRUZXh0LT5zdHlsZSgpLT5pc0NvbGxhcHNpYmxlV2hpdGVTcGFjZShuZXh0Q2hhcikpIHsKLSAg
ICAgICAgICAgIGFkZE1pZHBvaW50KElubGluZUl0ZXJhdG9yKDAsIG8sIDApKTsKKyAgICAgICAg
ICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCAw
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE1NzUs
MTMgKzE1NjIsMTQgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCB0ZXh0V2lkdGgoUmVuZGVyVAog
ICAgIHJldHVybiBmb250LndpZHRoKFRleHRSdW4odGV4dC0+Y2hhcmFjdGVycygpICsgZnJvbSwg
bGVuLCAhY29sbGFwc2VXaGl0ZVNwYWNlLCB4UG9zKSk7CiB9CiAKLUlubGluZUl0ZXJhdG9yIFJl
bmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVy
LCBib29sIGZpcnN0TGluZSwgRUNsZWFyKiBjbGVhcikKK0lubGluZUl0ZXJhdG9yIFJlbmRlckJs
b2NrOjpmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29s
IGZpcnN0TGluZSwgIGJvb2wmIGlzTGluZUVtcHR5LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExp
bmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSwgRUNsZWFyKiBjbGVhcikKIHsKICAg
ICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24oKS5ibG9jayA9PSB0aGlzKTsKIAogICAgIGJvb2wg
YXBwbGllZFN0YXJ0V2lkdGggPSByZXNvbHZlci5wb3NpdGlvbigpLnBvcyA+IDA7CiAKLSAgICBp
bnQgd2lkdGggPSBza2lwTGVhZGluZ1doaXRlc3BhY2UocmVzb2x2ZXIsIGZpcnN0TGluZSk7Cisg
ICAgaW50IHdpZHRoID0gc2tpcExlYWRpbmdXaGl0ZXNwYWNlKHJlc29sdmVyLCBmaXJzdExpbmUs
IGlzTGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOwogCiAgICAgaW50IHcgPSAw
OwogICAgIGludCB0bXBXID0gMDsKQEAgLTE3MDYsOCArMTY5NCw4IEBAIElubGluZUl0ZXJhdG9y
IFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICAgICAgaWdub3JlU3Rh
cnQub2JqID0gbzsKICAgICAgICAgICAgICAgICAgICAgaWdub3JlU3RhcnQucG9zID0gMDsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlnbm9yaW5nU3BhY2VzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGRNaWRwb2ludChpZ25vcmVTdGFydCk7IC8vIFN0b3AgaWdub3Jpbmcgc3BhY2Vz
LgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQoaWdub3JlU3RhcnQpOyAvLyBT
dGFydCBpZ25vcmluZyBhZ2Fpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50
KGxpbmVNaWRwb2ludFN0YXRlLCBpZ25vcmVTdGFydCk7IC8vIFN0b3AgaWdub3Jpbmcgc3BhY2Vz
LgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUs
IGlnbm9yZVN0YXJ0KTsgLy8gU3RhcnQgaWdub3JpbmcgYWdhaW4uCiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgfQpAQCAtMTcyNiwx
MCArMTcxNCwxMCBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAg
ICAgICAgICAgICAgICAgaXNMaW5lRW1wdHkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAo
aWdub3JpbmdTcGFjZXMpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZU9iamVj
dCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KElubGluZUl0ZXJhdG9yKDAs
IG8sIDApKTsgLy8gU3RvcCBpZ25vcmluZyBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIGFk
ZE1pZHBvaW50KElubGluZUl0ZXJhdG9yKDAsIG8sIDApKTsgLy8gU3RhcnQgaWdub3JpbmcgYWdh
aW4uCisgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJ
bmxpbmVJdGVyYXRvcigwLCBvLCAwKSk7IC8vIFN0b3AgaWdub3Jpbmcgc3BhY2VzLgorICAgICAg
ICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0
b3IoMCwgbywgMCkpOyAvLyBTdGFydCBpZ25vcmluZyBhZ2Fpbi4KICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHJlc29sdmVyLnBvc2l0
aW9uKCkub2JqID09IG8KLSAgICAgICAgICAgICAgICAgICAgJiYgc2hvdWxkU2tpcFdoaXRlc3Bh
Y2VBZnRlclN0YXJ0T2JqZWN0KHRoaXMsIG8pKSB7CisgICAgICAgICAgICAgICAgICAgICYmIHNo
b3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdCh0aGlzLCBvLCBsaW5lTWlkcG9pbnRT
dGF0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTGlrZSB3aXRoIGxpc3QgbWFya2Vycywg
d2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSAKICAgICAgICAg
ICAgICAgICAgICAgLy8gYWRkaXRpb25hbCBzcGFjZXMgd2Ugc2VlIHdpbGwgYmUgZGlzY2FyZGVk
LgogICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IHRydWU7CkBA
IC0xNzUzLDcgKzE3NDEsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRM
aW5lCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpZ25vcmluZ1NwYWNlcykKLSAg
ICAgICAgICAgICAgICBhZGRNaWRwb2ludChJbmxpbmVJdGVyYXRvcigwLCBvLCAwKSk7CisgICAg
ICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9y
KDAsIG8sIDApKTsKIAogICAgICAgICAgICAgaXNMaW5lRW1wdHkgPSBmYWxzZTsKICAgICAgICAg
ICAgIGlnbm9yaW5nU3BhY2VzID0gZmFsc2U7CkBAIC0xNzY0LDcgKzE3NTIsNyBAQCBJbmxpbmVJ
dGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAvLyBPcHRpbWl6
ZSBmb3IgYSBjb21tb24gY2FzZS4gSWYgd2UgY2FuJ3QgZmluZCB3aGl0ZXNwYWNlIGFmdGVyIHRo
ZSBsaXN0CiAgICAgICAgICAgICAvLyBpdGVtLCB0aGVuIHRoaXMgaXMgYWxsIG1vb3QuIC1kd2gK
ICAgICAgICAgICAgIGlmIChvLT5pc0xpc3RNYXJrZXIoKSAmJiAhc3RhdGljX2Nhc3Q8UmVuZGVy
TGlzdE1hcmtlcio+KG8pLT5pc0luc2lkZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0eWxl
KCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFy
dE9iamVjdCh0aGlzLCBvKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5jb2xsYXBz
ZVdoaXRlU3BhY2UoKSAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QodGhp
cywgbywgbGluZU1pZHBvaW50U3RhdGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIExpa2Ug
d2l0aCBpbmxpbmUgZmxvd3MsIHdlIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyB0byBtYWtlIHN1cmUg
dGhhdCBhbnkgCiAgICAgICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgc3BhY2VzIHdlIHNl
ZSB3aWxsIGJlIGRpc2NhcmRlZC4KICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3Rl
cklzU3BhY2UgPSB0cnVlOwpAQCAtMTgyNywxMCArMTgxNSwxMSBAQCBJbmxpbmVJdGVyYXRvciBS
ZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlU29mdEh5cGhlbiA9IElubGluZUl0ZXJh
dG9yKDAsIGxhc3QsIGxhc3QtPmlzVGV4dCgpID8gdG9SZW5kZXJUZXh0KGxhc3QpLT50ZXh0TGVu
Z3RoKCkgLSAxIDogMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUd28gY29uc2VjdXRp
dmUgc29mdCBoeXBoZW5zLiBBdm9pZCBvdmVybGFwcGluZyBtaWRwb2ludHMuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc051bU1pZHBvaW50cyAmJiBzbWlkcG9pbnRzLT5hdChzTnVtTWlk
cG9pbnRzIC0gMSkub2JqID09IG8gJiYgc21pZHBvaW50cy0+YXQoc051bU1pZHBvaW50cyAtIDEp
LnBvcyA9PSBwb3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc051bU1pZHBvaW50cy0t
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVNaWRwb2ludFN0YXRlLm1fbnVtTWlk
cG9pbnRzICYmIGxpbmVNaWRwb2ludFN0YXRlLm1fbWlkcG9pbnRzW2xpbmVNaWRwb2ludFN0YXRl
Lm1fbnVtTWlkcG9pbnRzIC0gMV0ub2JqID09IG8gJiYgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZU1pZHBvaW50U3RhdGUubV9taWRwb2ludHNbbGluZU1pZHBvaW50U3RhdGUubV9u
dW1NaWRwb2ludHMgLSAxXS5wb3MgPT0gcG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmVNaWRwb2ludFN0YXRlLm1fbnVtTWlkcG9pbnRzLS07CiAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQoYmVmb3Jl
U29mdEh5cGhlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGlu
ZU1pZHBvaW50U3RhdGUsIGJlZm9yZVNvZnRIeXBoZW4pOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBZGQgdGhlIHdpZHRoIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBoeXBoZW4u
CiAgICAgICAgICAgICAgICAgICAgICAgICB0bXBXICs9IHRleHRXaWR0aCh0LCBsYXN0U3BhY2Us
IHBvcyAtIGxhc3RTcGFjZSwgZiwgdyArIHRtcFcsIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0
ZVNwYWNlKSArIGxhc3RTcGFjZVdvcmRTcGFjaW5nOwpAQCAtMTg0Miw3ICsxODMxLDcgQEAgSW5s
aW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogCiAgICAgICAgICAgICAgICAg
ICAgICAgICBJbmxpbmVJdGVyYXRvciBhZnRlclNvZnRIeXBoZW4oMCwgbywgcG9zKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGFmdGVyU29mdEh5cGhlbi5pbmNyZW1lbnQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGFmdGVyU29mdEh5cGhlbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwgYWZ0ZXJTb2Z0SHlw
aGVuKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIHBvcysr
OwpAQCAtMTg3Myw3ICsxODYyLDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmRO
ZXh0TGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yaW5nU3BhY2VzID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlV29yZFNwYWNpbmcgPSAw
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTcGFjZSA9IHBvczsgLy8gZS5nLiwg
IkZvbyAgICBnb28iLCBkb24ndCBhZGQgaW4gYW55IG9mIHRoZSBpZ25vcmVkIHNwYWNlcy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChJbmxpbmVJdGVyYXRvcigwLCBv
LCBwb3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlk
cG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbywgcG9zKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcHBlZElnbm9yaW5nU3BhY2VzID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBr
ZWVwIGlnbm9yaW5nIHRoZXNlIHNwYWNlcy4KQEAgLTE5MTEsMTUgKzE5MDAsMTUgQEAgSW5saW5l
SXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsQnJlYWsub2JqID0gbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbEJyZWFrLnBvcyA9IHBvczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEJy
ZWFrLm5leHRCcmVha2FibGVQb3NpdGlvbiA9IG5leHRCcmVha2FibGU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNraXBUcmFpbGluZ1doaXRlc3BhY2UobEJyZWFrKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFRyYWlsaW5nV2hpdGVzcGFjZShsQnJlYWss
IGlzTGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChsaW5lV2FzVG9vV2lkZSB8fCB3ICsgdG1wVyA+IHdpZHRoKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxCcmVhay5vYmogJiYgc2hvdWxkUHJlc2VydmVO
ZXdsaW5lKGxCcmVhay5vYmopICYmIGxCcmVhay5vYmotPmlzVGV4dCgpICYmICF0b1JlbmRlclRl
eHQobEJyZWFrLm9iaiktPmlzV29yZEJyZWFrKCkgJiYgdG9SZW5kZXJUZXh0KGxCcmVhay5vYmop
LT5jaGFyYWN0ZXJzKClbbEJyZWFrLnBvc10gPT0gJ1xuJykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXN0b3BwZWRJZ25vcmluZ1NwYWNlcyAmJiBwb3MgPiAwKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN0b3Agcmln
aHQgYmVmb3JlIHRoZSBuZXdsaW5lIGFuZCB0aGVuIHN0YXJ0IHVwIGFnYWluLgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQoSW5saW5lSXRlcmF0b3IoMCwg
bywgcG9zIC0gMSkpOyAvLyBTdG9wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRNaWRwb2ludChJbmxpbmVJdGVyYXRvcigwLCBvLCBwb3MpKTsgLy8gU3RhcnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0
YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCBwb3MgLSAxKSk7IC8vIFN0b3AKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJ
bmxpbmVJdGVyYXRvcigwLCBvLCBwb3MpKTsgLy8gU3RhcnQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsuaW5j
cmVtZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSA9IHRydWU7CkBAIC0xOTM3LDggKzE5MjYsOCBAQCBJbmxpbmVJdGVyYXRvciBS
ZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdc
bicgJiYgcHJlc2VydmVOZXdsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0
b3BwZWRJZ25vcmluZ1NwYWNlcyAmJiBwb3MgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBzdG9wIHJpZ2h0IGJlZm9yZSB0aGUgbmV3bGluZSBhbmQgdGhl
biBzdGFydCB1cCBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2lu
dChJbmxpbmVJdGVyYXRvcigwLCBvLCBwb3MgLSAxKSk7IC8vIFN0b3AKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRNaWRwb2ludChJbmxpbmVJdGVyYXRvcigwLCBvLCBwb3MpKTsgLy8g
U3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9p
bnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbywgcG9zIC0gMSkpOyAvLyBTdG9wCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGlu
ZUl0ZXJhdG9yKDAsIG8sIHBvcykpOyAvLyBTdGFydAogICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgbEJyZWFrLm9iaiA9IG87CiAgICAgICAgICAgICAg
ICAgICAgICAgICBsQnJlYWsucG9zID0gcG9zOwpAQCAtMTk4NCw3ICsxOTczLDcgQEAgSW5saW5l
SXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGp1c3QgZW50ZXJlZCBhIG1vZGUgd2hlcmUgd2UgYXJlIGlnbm9yaW5nCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BhY2VzLiBDcmVhdGUgYSBtaWRwb2ludCB0
byB0ZXJtaW5hdGUgdGhlIHJ1bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9y
ZSB0aGUgc2Vjb25kIHNwYWNlLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRw
b2ludChpZ25vcmVTdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9p
bnQobGluZU1pZHBvaW50U3RhdGUsIGlnbm9yZVN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aWdub3JpbmdTcGFjZXMpIHsKQEAgLTE5OTMsNyArMTk4Miw3IEBAIElubGluZUl0ZXJhdG9yIFJl
bmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICAgICAgaWdub3JpbmdTcGFj
ZXMgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlV29yZFNwYWNpbmcgPSBh
cHBseVdvcmRTcGFjaW5nID8gd29yZFNwYWNpbmcgOiAwOwogICAgICAgICAgICAgICAgICAgICBs
YXN0U3BhY2UgPSBwb3M7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRkIGluIGFueSBv
ZiB0aGUgaWdub3JlZCBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KElu
bGluZUl0ZXJhdG9yKDAsIG8sIHBvcykpOworICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2lu
dChsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbywgcG9zKSk7CiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNl
ICYmICFwcmV2aW91c0NoYXJhY3RlcklzU3BhY2UpIHsKQEAgLTIxNDUsMTUgKzIxMzQsMTUgQEAg
SW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAgICBsQnJlYWsu
aW5jcmVtZW50KCk7CiAKICAgICAvLyBTYW5pdHkgY2hlY2sgb3VyIG1pZHBvaW50cy4KLSAgICBj
aGVja01pZHBvaW50cyhsQnJlYWspOworICAgIGNoZWNrTWlkcG9pbnRzKGxpbmVNaWRwb2ludFN0
YXRlLCBsQnJlYWspOwogICAgICAgICAKICAgICBpZiAodHJhaWxpbmdTcGFjZU9iamVjdCkgewog
ICAgICAgICAvLyBUaGlzIG9iamVjdCBpcyBlaXRoZXIgZ29pbmcgdG8gYmUgcGFydCBvZiB0aGUg
bGFzdCBtaWRwb2ludCwgb3IgaXQgaXMgZ29pbmcKICAgICAgICAgLy8gdG8gYmUgdGhlIGFjdHVh
bCBlbmRwb2ludC4gIEluIGJvdGggY2FzZXMgd2UganVzdCBkZWNyZWFzZSBvdXIgcG9zIGJ5IDEg
bGV2ZWwgdG8KICAgICAgICAgLy8gZXhjbHVkZSB0aGUgc3BhY2UsIGFsbG93aW5nIGl0IHRvIC0g
aW4gZWZmZWN0IC0gY29sbGFwc2UgaW50byB0aGUgbmV3bGluZS4KLSAgICAgICAgaWYgKHNOdW1N
aWRwb2ludHMlMj09MSkgewotICAgICAgICAgICAgSW5saW5lSXRlcmF0b3IqIG1pZHBvaW50cyA9
IHNtaWRwb2ludHMtPmRhdGEoKTsKLSAgICAgICAgICAgIG1pZHBvaW50c1tzTnVtTWlkcG9pbnRz
LTFdLnBvcy0tOworICAgICAgICBpZiAobGluZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMg
JSAyID09IDEpIHsKKyAgICAgICAgICAgIElubGluZUl0ZXJhdG9yKiBtaWRwb2ludHMgPSBsaW5l
TWlkcG9pbnRTdGF0ZS5tX21pZHBvaW50cy5kYXRhKCk7CisgICAgICAgICAgICBtaWRwb2ludHNb
bGluZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMgLSAxXS5wb3MtLTsKICAgICAgICAgfQog
ICAgICAgICAvL2Vsc2UgaWYgKGxCcmVhay5wb3MgPiAwKQogICAgICAgICAvLyAgICBsQnJlYWsu
cG9zLS07CkBAIC0yMTYzLDcgKzIxNTIsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6
ZmluZE5leHRMaW5lCiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0LT50ZXh0TGVu
Z3RoKCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSBsZW5ndGggPj0gMiA/IGxlbmd0aCAt
IDIgOiBVSU5UX01BWDsKICAgICAgICAgICAgIElubGluZUl0ZXJhdG9yIGVuZE1pZCgwLCB0cmFp
bGluZ1NwYWNlT2JqZWN0LCBwb3MpOwotICAgICAgICAgICAgYWRkTWlkcG9pbnQoZW5kTWlkKTsK
KyAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBlbmRNaWQpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yMTgxLDcgKzIxNzAsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5k
ZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgIC8vIGlnbm9yZSB0aGUgaHlwaGVuIHNvIHRo
YXQgaXQgd2lsbCByZW5kZXIgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KICAgICAgICAgVUNoYXIg
YyA9IHRvUmVuZGVyVGV4dChsQnJlYWsub2JqKS0+Y2hhcmFjdGVycygpW2xCcmVhay5wb3MtMV07
CiAgICAgICAgIGlmIChjID09IHNvZnRIeXBoZW4pCi0gICAgICAgICAgICBjaG9wTWlkcG9pbnRz
QXQobEJyZWFrLm9iaiwgbEJyZWFrLnBvcy0yKTsKKyAgICAgICAgICAgIGNob3BNaWRwb2ludHNB
dChsaW5lTWlkcG9pbnRTdGF0ZSwgbEJyZWFrLm9iaiwgbEJyZWFrLnBvcy0yKTsKICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIGxCcmVhazsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31229</attachid>
            <date>2009-06-12 22:45:24 -0700</date>
            <delta_ts>2009-06-12 22:58:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>30191</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZv
cm0vdGV4dC9CaWRpUmVzb2x2ZXIuaAkocmV2aXNpb24gNDQ1NzIpCisrKyBwbGF0Zm9ybS90ZXh0
L0JpZGlSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwzMCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4gY2xhc3MgTWlkcG9p
bnRTdGF0ZQoreworcHVibGljOgorICAgIE1pZHBvaW50U3RhdGUoKQorICAgIHsKKyAgICAgICAg
cmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXNldCgpCisgICAgeworICAgICAgICBt
X251bU1pZHBvaW50cyA9IDA7CisgICAgICAgIG1fY3VycmVudE1pZHBvaW50ID0gMDsKKyAgICAg
ICAgbV9iZXR3ZWVuTWlkcG9pbnRzID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBn
b2FsIGlzIHRvIHJldXNlIHRoZSBsaW5lIHN0YXRlIGFjcm9zcyBtdWx0aXBsZQorICAgIC8vIGxp
bmVzIHNvIHdlIGp1c3Qga2VlcCBhbiBhcnJheSBhcm91bmQgZm9yIG1pZHBvaW50cyBhbmQgbmV2
ZXIgY2xlYXIgaXQgYWNyb3NzIG11bHRpcGxlCisgICAgLy8gbGluZXMuICBXZSB0cmFjayB0aGUg
bnVtYmVyIG9mIGl0ZW1zIGFuZCBwb3NpdGlvbiB1c2luZyB0aGUgdHdvIG90aGVyIHZhcmlhYmxl
cy4KKyAgICBWZWN0b3I8SXRlcmF0b3I+IG1fbWlkcG9pbnRzOworICAgIHVuc2lnbmVkIG1fbnVt
TWlkcG9pbnRzOworICAgIHVuc2lnbmVkIG1fY3VycmVudE1pZHBvaW50OworICAgIGJvb2wgbV9i
ZXR3ZWVuTWlkcG9pbnRzOworfTsKKwogLy8gVGhlIEJpZGlTdGF0dXMgYXQgYSBnaXZlbiBwb3Np
dGlvbiAodHlwaWNhbGx5IHRoZSBlbmQgb2YgYSBsaW5lKSBjYW4KIC8vIGJlIGNhY2hlZCBhbmQg
dGhlbiB1c2VkIHRvIHJlc3RhcnQgYmlkaSByZXNvbHV0aW9uIGF0IHRoYXQgcG9zaXRpb24uCiBz
dHJ1Y3QgQmlkaVN0YXR1cyB7CkBAIC0xMzUsNiArMTU5LDggQEAgcHVibGljIDoKICAgICBjb25z
dCBCaWRpU3RhdHVzJiBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQogICAgIHZv
aWQgc2V0U3RhdHVzKGNvbnN0IEJpZGlTdGF0dXMgcykgeyBtX3N0YXR1cyA9IHM7IH0KIAorICAg
IE1pZHBvaW50U3RhdGU8SXRlcmF0b3I+JiBtaWRwb2ludFN0YXRlKCkgeyByZXR1cm4gbV9taWRw
b2ludFN0YXRlOyB9CisKICAgICB2b2lkIGVtYmVkKFdURjo6VW5pY29kZTo6RGlyZWN0aW9uKTsK
ICAgICB2b2lkIGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7CiAKQEAgLTE3Miw2ICsxOTgsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgUnVuKiBtX2xhc3RSdW47CiAgICAgUnVuKiBtX2xvZ2ljYWxseUxh
c3RSdW47CiAgICAgdW5zaWduZWQgbV9ydW5Db3VudDsKKyAgICBNaWRwb2ludFN0YXRlPEl0ZXJh
dG9yPiBtX21pZHBvaW50U3RhdGU7CiAKIHByaXZhdGU6CiAgICAgdm9pZCByYWlzZUV4cGxpY2l0
RW1iZWRkaW5nTGV2ZWwoV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZnJvbSwgV1RGOjpVbmljb2Rl
OjpEaXJlY3Rpb24gdG8pOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDQ0NTcyKQorKysgcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2lm
bmRlZiBSZW5kZXJCbG9ja19oCiAjZGVmaW5lIFJlbmRlckJsb2NrX2gKLQogI2luY2x1ZGUgIkRl
cHJlY2F0ZWRQdHJMaXN0LmgiCiAjaW5jbHVkZSAiR2FwUmVjdHMuaCIKICNpbmNsdWRlICJSZW5k
ZXJCb3guaCIKQEAgLTQyLDcgKzQxLDkgQEAgY2xhc3MgUm9vdElubGluZUJveDsKIHN0cnVjdCBC
aWRpUnVuOwogCiB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1bj4gY2xhc3MgQmlk
aVJlc29sdmVyOwordGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPiBjbGFzcyBNaWRwb2ludFN0YXRl
OwogdHlwZWRlZiBCaWRpUmVzb2x2ZXI8SW5saW5lSXRlcmF0b3IsIEJpZGlSdW4+IElubGluZUJp
ZGlSZXNvbHZlcjsKK3R5cGVkZWYgTWlkcG9pbnRTdGF0ZTxJbmxpbmVJdGVyYXRvcj4gTGluZU1p
ZHBvaW50U3RhdGU7CiAKIGVudW0gQ2FyZXRUeXBlIHsgQ3Vyc29yQ2FyZXQsIERyYWdDYXJldCB9
OwogCkBAIC0xNTcsMTggKzE1OCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIEludFJlY3QgcmVjdDsK
ICAgICB9OwogCi0gICAgdm9pZCBiaWRpUmVvcmRlckxpbmUoSW5saW5lQmlkaVJlc29sdmVyJiwg
Y29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCk7Ci0gICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5l
U3RhcnRQb3NpdGlvbihib29sJiBmaXJzdExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQsIElubGluZUJp
ZGlSZXNvbHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVt
Q2xlYW5GbG9hdHMpOworICAgIHZvaWQgYmlkaVJlb3JkZXJMaW5lKElubGluZUJpZGlSZXNvbHZl
ciYsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQsIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5KTsKKyAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wmIGZp
cnN0TGluZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQmlkaVJl
c29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBudW1DbGVh
bkZsb2F0cyk7CiAgICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lRW5kUG9zaXRpb24oUm9vdElu
bGluZUJveCogc3RhcnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpU3RhdHVzJiBjbGVhbkxpbmVC
aWRpU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYg
eVBvcyk7CiAgICAgYm9vbCBtYXRjaGVkRW5kTGluZShjb25zdCBJbmxpbmVCaWRpUmVzb2x2ZXIm
LCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBl
bmRMaW5lU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveComIGVu
ZExpbmUsIGludCYgZW5kWVBvcywgaW50JiByZXBhaW50Qm90dG9tLCBpbnQmIHJlcGFpbnRUb3Ap
OwotICAgIGJvb2wgZ2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoUmVuZGVyT2JqZWN0
Kik7Ci0gICAgdm9pZCBza2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJik7Ci0g
ICAgaW50IHNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZp
cnN0TGluZSk7CisgICAgYm9vbCBnZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxpbmVDaGlsZChSZW5k
ZXJPYmplY3QqLCBib29sIGlzTGluZUVtcHR5ID0gdHJ1ZSwgYm9vbCBwcmV2aW91c0xpbmVCcm9r
ZUNsZWFubHkgPSB0cnVlKTsKKyAgICB2b2lkIHNraXBUcmFpbGluZ1doaXRlc3BhY2UoSW5saW5l
SXRlcmF0b3ImLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5s
eSk7CisgICAgaW50IHNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImLCBi
b29sIGZpcnN0TGluZSwgYm9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHkpOwogICAgIHZvaWQgZml0QmVsb3dGbG9hdHMoaW50IHdpZHRoVG9GaXQsIGJvb2wgZmly
c3RMaW5lLCBpbnQmIGF2YWlsYWJsZVdpZHRoKTsKLSAgICBJbmxpbmVJdGVyYXRvciBmaW5kTmV4
dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwgRUNsZWFyKiBj
bGVhciA9IDApOworICAgIElubGluZUl0ZXJhdG9yIGZpbmROZXh0TGluZUJyZWFrKElubGluZUJp
ZGlSZXNvbHZlciYsIGJvb2wgZmlyc3RMaW5lLCBib29sJiBpc0xpbmVFbXB0eSwgYm9vbCYgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5LCBFQ2xlYXIqIGNsZWFyID0gMCk7CiAgICAgUm9vdElubGlu
ZUJveCogY29uc3RydWN0TGluZSh1bnNpZ25lZCBydW5Db3VudCwgQmlkaVJ1biogZmlyc3RSdW4s
IEJpZGlSdW4qIGxhc3RSdW4sIGJvb2wgZmlyc3RMaW5lLCBib29sIGxhc3RMaW5lLCBSZW5kZXJP
YmplY3QqIGVuZE9iamVjdCk7CiAgICAgSW5saW5lRmxvd0JveCogY3JlYXRlTGluZUJveGVzKFJl
bmRlck9iamVjdCosIGJvb2wgZmlyc3RMaW5lKTsKICAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFs
UG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiwgYm9vbCBmaXJzdExpbmUsIEJpZGlSdW4q
IGZpcnN0UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNoZWRFbmQpOwpJ
bmRleDogcmVuZGVyaW5nL2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9iaWRpLmNw
cAkocmV2aXNpb24gNDQ1NzIpCisrKyByZW5kZXJpbmcvYmlkaS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDE3ICs3OCw2IEBAIHB1YmxpYzoKICAgICBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9u
OwogfTsKIAotLy8gTWlkcG9pbnQgZ2xvYmFscy4gIFRoZSBnb2FsIGlzIG5vdCB0byBkbyBhbnkg
YWxsb2NhdGlvbiB3aGVuIGRlYWxpbmcgd2l0aAotLy8gdGhlc2UgbWlkcG9pbnRzLCBzbyB3ZSBq
dXN0IGtlZXAgYW4gYXJyYXkgYXJvdW5kIGFuZCBuZXZlciBjbGVhciBpdC4gIFdlIHRyYWNrCi0v
LyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGFuZCBwb3NpdGlvbiB1c2luZyB0aGUgdHdvIG90aGVyIHZh
cmlhYmxlcy4KLXN0YXRpYyBWZWN0b3I8SW5saW5lSXRlcmF0b3I+KiBzbWlkcG9pbnRzOwotc3Rh
dGljIHVuc2lnbmVkIHNOdW1NaWRwb2ludHM7Ci1zdGF0aWMgdW5zaWduZWQgc0N1cnJNaWRwb2lu
dDsKLXN0YXRpYyBib29sIGJldHdlZW5NaWRwb2ludHM7Ci0KLXN0YXRpYyBib29sIGlzTGluZUVt
cHR5ID0gdHJ1ZTsKLXN0YXRpYyBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7
Ci0KIHN0YXRpYyBpbnQgZ2V0Qm9yZGVyUGFkZGluZ01hcmdpbihSZW5kZXJCb3hNb2RlbE9iamVj
dCogY2hpbGQsIGJvb2wgZW5kT2ZJbmxpbmUpCiB7CiAgICAgYm9vbCBsZWZ0U2lkZSA9IChjaGls
ZC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSA/ICFlbmRPZklubGluZSA6IGVuZE9mSW5s
aW5lOwpAQCAtMzI3LDM1ICszMTYsMzUgQEAgQUxXQVlTX0lOTElORSBEaXJlY3Rpb24gSW5saW5l
SXRlcmF0b3I6OgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLXN0YXRpYyB2b2lkIGNob3BNaWRwb2ludHNBdChSZW5kZXJPYmplY3QqIG9iaiwgdW5zaWdu
ZWQgcG9zKQorc3RhdGljIHZvaWQgY2hvcE1pZHBvaW50c0F0KExpbmVNaWRwb2ludFN0YXRlJiBs
aW5lTWlkcG9pbnRTdGF0ZSwgUmVuZGVyT2JqZWN0KiBvYmosIHVuc2lnbmVkIHBvcykKIHsKLSAg
ICBpZiAoIXNOdW1NaWRwb2ludHMpCisgICAgaWYgKCFsaW5lTWlkcG9pbnRTdGF0ZS5tX251bU1p
ZHBvaW50cykKICAgICAgICAgcmV0dXJuOwotICAgIElubGluZUl0ZXJhdG9yKiBtaWRwb2ludHMg
PSBzbWlkcG9pbnRzLT5kYXRhKCk7Ci0gICAgZm9yIChpbnQgaSA9IHNOdW1NaWRwb2ludHMgLSAx
OyBpID49IDA7IGktLSkgeworICAgIElubGluZUl0ZXJhdG9yKiBtaWRwb2ludHMgPSBsaW5lTWlk
cG9pbnRTdGF0ZS5tX21pZHBvaW50cy5kYXRhKCk7CisgICAgZm9yIChpbnQgaSA9IGxpbmVNaWRw
b2ludFN0YXRlLm1fbnVtTWlkcG9pbnRzIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgY29u
c3QgSW5saW5lSXRlcmF0b3ImIHBvaW50ID0gbWlkcG9pbnRzW2ldOwogICAgICAgICBpZiAocG9p
bnQub2JqID09IG9iaiAmJiBwb2ludC5wb3MgPT0gcG9zKSB7Ci0gICAgICAgICAgICBzTnVtTWlk
cG9pbnRzID0gaTsKKyAgICAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLm1fbnVtTWlkcG9pbnRz
ID0gaTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMg
dm9pZCBjaGVja01pZHBvaW50cyhJbmxpbmVJdGVyYXRvciYgbEJyZWFrKQorc3RhdGljIHZvaWQg
Y2hlY2tNaWRwb2ludHMoTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlLCBJbmxp
bmVJdGVyYXRvciYgbEJyZWFrKQogewogICAgIC8vIENoZWNrIHRvIHNlZSBpZiBvdXIgbGFzdCBt
aWRwb2ludCBpcyBhIHN0YXJ0IHBvaW50IGJleW9uZCB0aGUgbGluZSBicmVhay4gIElmIHNvLAog
ICAgIC8vIHNoYXZlIGl0IG9mZiB0aGUgbGlzdCwgYW5kIHNoYXZlIG9mZiBhIHRyYWlsaW5nIHNw
YWNlIGlmIHRoZSBwcmV2aW91cyBlbmQgcG9pbnQgZG9lc24ndAogICAgIC8vIHByZXNlcnZlIHdo
aXRlc3BhY2UuCi0gICAgaWYgKGxCcmVhay5vYmogJiYgc051bU1pZHBvaW50cyAmJiBzTnVtTWlk
cG9pbnRzICUgMiA9PSAwKSB7Ci0gICAgICAgIElubGluZUl0ZXJhdG9yKiBtaWRwb2ludHMgPSBz
bWlkcG9pbnRzLT5kYXRhKCk7Ci0gICAgICAgIElubGluZUl0ZXJhdG9yJiBlbmRwb2ludCA9IG1p
ZHBvaW50c1tzTnVtTWlkcG9pbnRzLTJdOwotICAgICAgICBjb25zdCBJbmxpbmVJdGVyYXRvciYg
c3RhcnRwb2ludCA9IG1pZHBvaW50c1tzTnVtTWlkcG9pbnRzLTFdOworICAgIGlmIChsQnJlYWsu
b2JqICYmIGxpbmVNaWRwb2ludFN0YXRlLm1fbnVtTWlkcG9pbnRzICYmIGxpbmVNaWRwb2ludFN0
YXRlLm1fbnVtTWlkcG9pbnRzICUgMiA9PSAwKSB7CisgICAgICAgIElubGluZUl0ZXJhdG9yKiBt
aWRwb2ludHMgPSBsaW5lTWlkcG9pbnRTdGF0ZS5tX21pZHBvaW50cy5kYXRhKCk7CisgICAgICAg
IElubGluZUl0ZXJhdG9yJiBlbmRwb2ludCA9IG1pZHBvaW50c1tsaW5lTWlkcG9pbnRTdGF0ZS5t
X251bU1pZHBvaW50cyAtIDJdOworICAgICAgICBjb25zdCBJbmxpbmVJdGVyYXRvciYgc3RhcnRw
b2ludCA9IG1pZHBvaW50c1tsaW5lTWlkcG9pbnRTdGF0ZS5tX251bU1pZHBvaW50cyAtIDFdOwog
ICAgICAgICBJbmxpbmVJdGVyYXRvciBjdXJycG9pbnQgPSBlbmRwb2ludDsKICAgICAgICAgd2hp
bGUgKCFjdXJycG9pbnQuYXRFbmQoKSAmJiBjdXJycG9pbnQgIT0gc3RhcnRwb2ludCAmJiBjdXJy
cG9pbnQgIT0gbEJyZWFrKQogICAgICAgICAgICAgY3VycnBvaW50LmluY3JlbWVudCgpOwogICAg
ICAgICBpZiAoY3VycnBvaW50ID09IGxCcmVhaykgewogICAgICAgICAgICAgLy8gV2UgaGl0IHRo
ZSBsaW5lIGJyZWFrIGJlZm9yZSB0aGUgc3RhcnQgcG9pbnQuICBTaGF2ZSBvZmYgdGhlIHN0YXJ0
IHBvaW50LgotICAgICAgICAgICAgc051bU1pZHBvaW50cy0tOworICAgICAgICAgICAgbGluZU1p
ZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMtLTsKICAgICAgICAgICAgIGlmIChlbmRwb2ludC5v
YmotPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGVuZHBvaW50Lm9iai0+aXNUZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg
c2hhdmUgYSBjaGFyYWN0ZXIgb2ZmIHRoZSBlbmRwb2ludCBpZiBpdCB3YXMgZnJvbSBhIHNvZnQg
aHlwaGVuLgpAQCAtMzc1LDEzICszNjQsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tNaWRwb2ludHMo
SW5saW5lSXRlcmF0bwogICAgIH0gICAgCiB9CiAKLXN0YXRpYyB2b2lkIGFkZE1pZHBvaW50KGNv
bnN0IElubGluZUl0ZXJhdG9yJiBtaWRwb2ludCkKK3N0YXRpYyB2b2lkIGFkZE1pZHBvaW50KExp
bmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSwgY29uc3QgSW5saW5lSXRlcmF0b3Im
IG1pZHBvaW50KQogewotICAgIGlmIChzbWlkcG9pbnRzLT5zaXplKCkgPD0gc051bU1pZHBvaW50
cykKLSAgICAgICAgc21pZHBvaW50cy0+Z3JvdyhzTnVtTWlkcG9pbnRzICsgMTApOworICAgIGlm
IChsaW5lTWlkcG9pbnRTdGF0ZS5tX21pZHBvaW50cy5zaXplKCkgPD0gbGluZU1pZHBvaW50U3Rh
dGUubV9udW1NaWRwb2ludHMpCisgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLm1fbWlkcG9pbnRz
Lmdyb3cobGluZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMgKyAxMCk7CiAKLSAgICBJbmxp
bmVJdGVyYXRvciogbWlkcG9pbnRzID0gc21pZHBvaW50cy0+ZGF0YSgpOwotICAgIG1pZHBvaW50
c1tzTnVtTWlkcG9pbnRzKytdID0gbWlkcG9pbnQ7CisgICAgSW5saW5lSXRlcmF0b3IqIG1pZHBv
aW50cyA9IGxpbmVNaWRwb2ludFN0YXRlLm1fbWlkcG9pbnRzLmRhdGEoKTsKKyAgICBtaWRwb2lu
dHNbbGluZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMrK10gPSBtaWRwb2ludDsKIH0KIAog
c3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zvck9iamVjdChpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRl
ck9iamVjdCogb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQpAQCAtMzkwLDE4ICsz
NzksMTkgQEAgc3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zvck9iamVjdChpbnQgc3RhcgogICAgICAg
ICAob2JqLT5pc1Bvc2l0aW9uZWQoKSAmJiAhb2JqLT5zdHlsZSgpLT5oYXNTdGF0aWNYKCkgJiYg
IW9iai0+c3R5bGUoKS0+aGFzU3RhdGljWSgpICYmICFvYmotPmNvbnRhaW5lcigpLT5pc1JlbmRl
cklubGluZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBoYXZlTmV4dE1pZHBvaW50
ID0gKHNDdXJyTWlkcG9pbnQgPCBzTnVtTWlkcG9pbnRzKTsKKyAgICBMaW5lTWlkcG9pbnRTdGF0
ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CisgICAgYm9v
bCBoYXZlTmV4dE1pZHBvaW50ID0gKGxpbmVNaWRwb2ludFN0YXRlLm1fY3VycmVudE1pZHBvaW50
IDwgbGluZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMpOwogICAgIElubGluZUl0ZXJhdG9y
IG5leHRNaWRwb2ludDsKICAgICBpZiAoaGF2ZU5leHRNaWRwb2ludCkKLSAgICAgICAgbmV4dE1p
ZHBvaW50ID0gc21pZHBvaW50cy0+YXQoc0N1cnJNaWRwb2ludCk7Ci0gICAgaWYgKGJldHdlZW5N
aWRwb2ludHMpIHsKKyAgICAgICAgbmV4dE1pZHBvaW50ID0gbGluZU1pZHBvaW50U3RhdGUubV9t
aWRwb2ludHNbbGluZU1pZHBvaW50U3RhdGUubV9jdXJyZW50TWlkcG9pbnRdOworICAgIGlmIChs
aW5lTWlkcG9pbnRTdGF0ZS5tX2JldHdlZW5NaWRwb2ludHMpIHsKICAgICAgICAgaWYgKCEoaGF2
ZU5leHRNaWRwb2ludCAmJiBuZXh0TWlkcG9pbnQub2JqID09IG9iaikpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgc3RhcnQgcG9pbnQuIFN0b3AgaWdub3Jp
bmcgb2JqZWN0cyBhbmQgCiAgICAgICAgIC8vIGFkanVzdCBvdXIgc3RhcnQuCi0gICAgICAgIGJl
dHdlZW5NaWRwb2ludHMgPSBmYWxzZTsKKyAgICAgICAgbGluZU1pZHBvaW50U3RhdGUubV9iZXR3
ZWVuTWlkcG9pbnRzID0gZmFsc2U7CiAgICAgICAgIHN0YXJ0ID0gbmV4dE1pZHBvaW50LnBvczsK
LSAgICAgICAgc0N1cnJNaWRwb2ludCsrOworICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5tX2N1
cnJlbnRNaWRwb2ludCsrOwogICAgICAgICBpZiAoc3RhcnQgPCBlbmQpCiAgICAgICAgICAgICBy
ZXR1cm4gYXBwZW5kUnVuc0Zvck9iamVjdChzdGFydCwgZW5kLCBvYmosIHJlc29sdmVyKTsKICAg
ICB9IGVsc2UgewpAQCAtNDEzLDggKzQwMyw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JP
YmplY3QoaW50IHN0YXIKICAgICAgICAgLy8gQW4gZW5kIG1pZHBvaW50IGhhcyBiZWVuIGVuY291
bnRlcmVkIHdpdGhpbiBvdXIgb2JqZWN0LiAgV2UKICAgICAgICAgLy8gbmVlZCB0byBnbyBhaGVh
ZCBhbmQgYXBwZW5kIGEgcnVuIHdpdGggb3VyIGVuZHBvaW50LgogICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50PihuZXh0TWlkcG9pbnQucG9zICsgMSkgPD0gZW5kKSB7Ci0gICAgICAgICAgICBi
ZXR3ZWVuTWlkcG9pbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHNDdXJyTWlkcG9pbnQrKzsKKyAg
ICAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLm1fYmV0d2Vlbk1pZHBvaW50cyA9IHRydWU7Cisg
ICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5tX2N1cnJlbnRNaWRwb2ludCsrOwogICAgICAg
ICAgICAgaWYgKG5leHRNaWRwb2ludC5wb3MgIT0gVUlOVF9NQVgpIHsgLy8gVUlOVF9NQVggbWVh
bnMgc3RvcCBhdCB0aGUgb2JqZWN0IGFuZCBkb24ndCBpbmNsdWRlIGFueSBvZiBpdC4KICAgICAg
ICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihuZXh0TWlkcG9pbnQucG9zICsgMSkgPiBz
dGFydCkKICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIuYWRkUnVuKG5ldyAob2JqLT5yZW5k
ZXJBcmVuYSgpKQpAQCAtNzkxLDcgKzc4MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVW
ZXJ0aWNhbFBvc2l0aW8KIH0KIAogLy8gY29sbGVjdHMgb25lIGxpbmUgb2YgdGhlIHBhcmFncmFw
aCBhbmQgdHJhbnNmb3JtcyBpdCB0byB2aXN1YWwgb3JkZXIKLXZvaWQgUmVuZGVyQmxvY2s6OmJp
ZGlSZW9yZGVyTGluZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxpbmVJ
dGVyYXRvciYgZW5kKQordm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQsIGJvb2wgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5KQogewogICAgIHJlc29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9y
TGluZShlbmQsIHN0eWxlKCktPnZpc3VhbGx5T3JkZXJlZCgpLCBwcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHkpOwogfQpAQCAtODc0LDcgKzg2NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKGIKICAgICAgICAgSW5saW5lQmlkaVJlc29sdmVyIHJlc29sdmVyOwogICAg
ICAgICB1bnNpZ25lZCBmbG9hdEluZGV4OwogICAgICAgICBib29sIGZpcnN0TGluZSA9IHRydWU7
Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRp
b24oZmlyc3RMaW5lLCBmdWxsTGF5b3V0LCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4KTsK
KyAgICAgICAgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVlOworICAgICAgICBS
b290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGZpcnN0TGlu
ZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCByZXNvbHZlciwgZmxvYXRz
LCBmbG9hdEluZGV4KTsKIAogICAgICAgICBpZiAoZnVsbExheW91dCAmJiAhc2VsZk5lZWRzTGF5
b3V0KCkpIHsKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsgIC8vIE1h
cmsgb3Vyc2VsdmVzIGFzIG5lZWRpbmcgYSBmdWxsIGxheW91dC4gVGhpcyB3YXkgd2UnbGwgcmVw
YWludCBsaWtlCkBAIC04OTEsMTEgKzg4Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKGIKIAogICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0ID0gbV9m
bG9hdGluZ09iamVjdHMgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKIAotICAgICAg
ICBpZiAoIXNtaWRwb2ludHMpCi0gICAgICAgICAgICBzbWlkcG9pbnRzID0gbmV3IFZlY3RvcjxJ
bmxpbmVJdGVyYXRvcj4oKTsKLQotICAgICAgICBzTnVtTWlkcG9pbnRzID0gMDsKLSAgICAgICAg
c0N1cnJNaWRwb2ludCA9IDA7CisgICAgICAgIExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9p
bnRTdGF0ZSA9IHJlc29sdmVyLm1pZHBvaW50U3RhdGUoKTsKIAogICAgICAgICAvLyBXZSBhbHNv
IGZpbmQgdGhlIGZpcnN0IGNsZWFuIGxpbmUgYW5kIGV4dHJhY3QgdGhlc2UgbGluZXMuICBXZSB3
aWxsIGFkZCB0aGVtIGJhY2sKICAgICAgICAgLy8gaWYgd2UgZGV0ZXJtaW5lIHRoYXQgd2UncmUg
YWJsZSB0byBzeW5jaHJvbml6ZSBhZnRlciBoYW5kbGluZyBhbGwgb3VyIGRpcnR5IGxpbmVzLgpA
QCAtOTQzLDE2ICs5MzAsMTkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRy
ZW4oYgogICAgICAgICBib29sIGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gZmFsc2U7CiAg
ICAgICAgIGludCBsYXN0SGVpZ2h0ID0gaGVpZ2h0KCk7CiAKKyAgICAgICAgYm9vbCBpc0xpbmVF
bXB0eSA9IHRydWU7CisKICAgICAgICAgd2hpbGUgKCFlbmQuYXRFbmQoKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgZmlyc3QgaXRl
cmF0aW9uIG9yIGNhbiBpdCBiZSBtb3ZlZCB0byB0aGUgZW5kPwogICAgICAgICAgICAgaWYgKGNo
ZWNrRm9yRW5kTGluZU1hdGNoICYmIChlbmRMaW5lTWF0Y2hlZCA9IG1hdGNoZWRFbmRMaW5lKHJl
c29sdmVyLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cywgZW5kTGluZSwgZW5k
TGluZVlQb3MsIHJlcGFpbnRCb3R0b20sIHJlcGFpbnRUb3ApKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgYmV0d2Vlbk1pZHBvaW50cyA9IGZhbHNlOworICAgICAgICAg
ICAgbGluZU1pZHBvaW50U3RhdGUucmVzZXQoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAg
aXNMaW5lRW1wdHkgPSB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBFQ2xlYXIgY2xl
YXIgPSBDTk9ORTsKLSAgICAgICAgICAgIGVuZCA9IGZpbmROZXh0TGluZUJyZWFrKHJlc29sdmVy
LCBmaXJzdExpbmUsICZjbGVhcik7CisgICAgICAgICAgICBlbmQgPSBmaW5kTmV4dExpbmVCcmVh
ayhyZXNvbHZlciwgZmlyc3RMaW5lLCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5LCAmY2xlYXIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQo
KSkgewogICAgICAgICAgICAgICAgIHJlc29sdmVyLmRlbGV0ZVJ1bnMoKTsKICAgICAgICAgICAg
ICAgICBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IHRydWU7CkBAIC05NjEsNyArOTUxLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAg
QVNTRVJUKGVuZCAhPSByZXNvbHZlci5wb3NpdGlvbigpKTsKIAogICAgICAgICAgICAgaWYgKCFp
c0xpbmVFbXB0eSkgewotICAgICAgICAgICAgICAgIGJpZGlSZW9yZGVyTGluZShyZXNvbHZlciwg
ZW5kKTsKKyAgICAgICAgICAgICAgICBiaWRpUmVvcmRlckxpbmUocmVzb2x2ZXIsIGVuZCwgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICAgICAgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZXIu
cG9zaXRpb24oKSA9PSBlbmQpOwogCiAgICAgICAgICAgICAgICAgQmlkaVJ1biogdHJhaWxpbmdT
cGFjZVJ1biA9IDA7CkBAIC0xMDc1LDggKzEwNjUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxhc3RIZWln
aHQgPSBoZWlnaHQoKTsKLSAgICAgICAgICAgIHNOdW1NaWRwb2ludHMgPSAwOwotICAgICAgICAg
ICAgc0N1cnJNaWRwb2ludCA9IDA7CisgICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5yZXNl
dCgpOwogICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oZW5kKTsKICAgICAgICAgfQog
CkBAIC0xMTMzLDkgKzExMjIsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbihiCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzTnVtTWlkcG9pbnRzID0gMDsKLSAgICBz
Q3Vyck1pZHBvaW50ID0gMDsKLQogICAgIC8vIE5vdyBhZGQgaW4gdGhlIGJvdHRvbSBib3JkZXIv
cGFkZGluZy4KICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyB0b0FkZCk7CiAKQEAgLTExNTQsNyAr
MTE0MCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAg
ICAgY2hlY2tMaW5lc0ZvclRleHRPdmVyZmxvdygpOwogfQogCi1Sb290SW5saW5lQm94KiBSZW5k
ZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJzdExpbmUsIGJvb2wmIGZ1
bGxMYXlvdXQsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhS
ZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMpCitSb290SW5saW5lQm94KiBS
ZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJzdExpbmUsIGJvb2wm
IGZ1bGxMYXlvdXQsIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2
ZXImIHJlc29sdmVyLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51
bUNsZWFuRmxvYXRzKQogewogICAgIFJvb3RJbmxpbmVCb3gqIGN1cnIgPSAwOwogICAgIFJvb3RJ
bmxpbmVCb3gqIGxhc3QgPSAwOwpAQCAtMTM4NSw3ICsxMzcyLDcgQEAgYm9vbCBSZW5kZXJCbG9j
azo6bWF0Y2hlZEVuZExpbmUoY29uc3QgSQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNraXBOb25CcmVha2luZ1NwYWNlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBp
dCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwTm9uQnJlYWtpbmdTcGFjZShjb25zdCBJbmxpbmVJ
dGVyYXRvciYgaXQsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5KQogewogICAgIGlmIChpdC5vYmotPnN0eWxlKCktPm5ic3BNb2RlKCkgIT0gU1BBQ0UgfHwg
aXQuY3VycmVudCgpICE9IG5vQnJlYWtTcGFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTQwMSw3ICsxMzg4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNraXBOb25CcmVha2luZ1NwYWNl
KAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQ29sbGFw
c2VXaGl0ZVNwYWNlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzaG91bGRDb2xsYXBzZVdoaXRlU3BhY2UoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29s
IGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkKIHsKICAgICByZXR1
cm4gc3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpIHx8IChzdHlsZS0+d2hpdGVTcGFjZSgpID09
IFBSRV9XUkFQICYmICghaXNMaW5lRW1wdHkgfHwgIXByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkp
OwogfQpAQCAtMTQyNCw3ICsxNDExLDcgQEAgc3RhdGljIGJvb2wgaW5saW5lRmxvd1JlcXVpcmVz
TGluZUJveChSZQogICAgIHJldHVybiAhZmxvdy0+Zmlyc3RDaGlsZCgpICYmIGZsb3ctPmhhc0hv
cml6b250YWxCb3JkZXJzUGFkZGluZ09yTWFyZ2luKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCByZXF1aXJlc0xpbmVCb3goY29uc3QgSW5saW5lSXRlcmF0b3ImIGl0KQorc3RhdGljIGlubGlu
ZSBib29sIHJlcXVpcmVzTGluZUJveChjb25zdCBJbmxpbmVJdGVyYXRvciYgaXQsIGJvb2wgaXNM
aW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KQogewogICAgIGlmIChpdC5v
YmotPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTQzMiwxOSArMTQxOSwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmVxdWlyZXNMaW5lQm94KGNv
bnN0CiAgICAgaWYgKGl0Lm9iai0+aXNSZW5kZXJJbmxpbmUoKSAmJiAhaW5saW5lRmxvd1JlcXVp
cmVzTGluZUJveCh0b1JlbmRlcklubGluZShpdC5vYmopKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKCFzaG91bGRDb2xsYXBzZVdoaXRlU3BhY2UoaXQub2JqLT5zdHlsZSgpKSB8
fCBpdC5vYmotPmlzQlIoKSkKKyAgICBpZiAoIXNob3VsZENvbGxhcHNlV2hpdGVTcGFjZShpdC5v
YmotPnN0eWxlKCksIGlzTGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpIHx8IGl0
Lm9iai0+aXNCUigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFVDaGFyIGN1cnJlbnQg
PSBpdC5jdXJyZW50KCk7Ci0gICAgcmV0dXJuIGN1cnJlbnQgIT0gJyAnICYmIGN1cnJlbnQgIT0g
J1x0JyAmJiBjdXJyZW50ICE9IHNvZnRIeXBoZW4gJiYgKGN1cnJlbnQgIT0gJ1xuJyB8fCBzaG91
bGRQcmVzZXJ2ZU5ld2xpbmUoaXQub2JqKSkgJiYgIXNraXBOb25CcmVha2luZ1NwYWNlKGl0KTsK
KyAgICByZXR1cm4gY3VycmVudCAhPSAnICcgJiYgY3VycmVudCAhPSAnXHQnICYmIGN1cnJlbnQg
IT0gc29mdEh5cGhlbiAmJiAoY3VycmVudCAhPSAnXG4nIHx8IHNob3VsZFByZXNlcnZlTmV3bGlu
ZShpdC5vYmopKSAKKyAgICAgICAgICAgICYmICFza2lwTm9uQnJlYWtpbmdTcGFjZShpdCwgaXNM
aW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CiB9CiAKLWJvb2wgUmVuZGVyQmxv
Y2s6OmdlbmVyYXRlc0xpbmVCb3hlc0ZvcklubGluZUNoaWxkKFJlbmRlck9iamVjdCogaW5saW5l
T2JqKQorYm9vbCBSZW5kZXJCbG9jazo6Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQo
UmVuZGVyT2JqZWN0KiBpbmxpbmVPYmosIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNM
aW5lQnJva2VDbGVhbmx5KQogewogICAgIEFTU0VSVChpbmxpbmVPYmotPnBhcmVudCgpID09IHRo
aXMpOwogCiAgICAgSW5saW5lSXRlcmF0b3IgaXQodGhpcywgaW5saW5lT2JqLCAwKTsKLSAgICB3
aGlsZSAoIWl0LmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChpdCkpCisgICAgd2hpbGUgKCFp
dC5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3goaXQsIGlzTGluZUVtcHR5LCBwcmV2aW91c0xp
bmVCcm9rZUNsZWFubHkpKQogICAgICAgICBpdC5pbmNyZW1lbnQoKTsKIAogICAgIHJldHVybiAh
aXQuYXRFbmQoKTsKQEAgLTE0NTYsOSArMTQ0NCw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmdlbmVy
YXRlc0xpbmVCb3hlc0ZvckkKIC8vIG9iamVjdCBpdGVyYXRpb24gcHJvY2Vzcy4KIC8vIE5CLiB0
aGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGFueSBmbG9hdGluZyBlbGVtZW50cyB0aGF0IHdvdWxk
IG90aGVyd2lzZQogLy8gYmUgc2tpcHBlZCBidXQgaXQgd2lsbCBub3QgcG9zaXRpb24gdGhlbS4K
LXZvaWQgUmVuZGVyQmxvY2s6OnNraXBUcmFpbGluZ1doaXRlc3BhY2UoSW5saW5lSXRlcmF0b3Im
IGl0ZXJhdG9yKQordm9pZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxp
bmVJdGVyYXRvciYgaXRlcmF0b3IsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5KQogewotICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSAmJiAhcmVxdWly
ZXNMaW5lQm94KGl0ZXJhdG9yKSkgeworICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSAmJiAh
cmVxdWlyZXNMaW5lQm94KGl0ZXJhdG9yLCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VD
bGVhbmx5KSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IGl0ZXJhdG9yLm9iajsK
ICAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGluZygpKSB7CiAgICAgICAgICAgICBpbnNlcnRG
bG9hdGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3QpKTsKQEAgLTE0ODksMTAgKzE0NzcsMTAg
QEAgdm9pZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZQogICAgIH0KIH0KIAot
aW50IFJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVy
JiByZXNvbHZlciwgYm9vbCBmaXJzdExpbmUpCitpbnQgUmVuZGVyQmxvY2s6OnNraXBMZWFkaW5n
V2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29sIGZpcnN0TGluZSwg
Ym9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpCiB7CiAgICAg
aW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgpLCBmaXJzdExpbmUpOwotICAg
IHdoaWxlICghcmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3go
cmVzb2x2ZXIucG9zaXRpb24oKSkpIHsKKyAgICB3aGlsZSAoIXJlc29sdmVyLnBvc2l0aW9uKCku
YXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KHJlc29sdmVyLnBvc2l0aW9uKCksIGlzTGluZUVt
cHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCog
b2JqZWN0ID0gcmVzb2x2ZXIucG9zaXRpb24oKS5vYmo7CiAgICAgICAgIGlmIChvYmplY3QtPmlz
RmxvYXRpbmcoKSkgewogICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QodG9SZW5kZXJC
b3gob2JqZWN0KSk7CkBAIC0xNTI5LDE0ICsxNTE3LDE0IEBAIGludCBSZW5kZXJCbG9jazo6c2tp
cExlYWRpbmdXaGl0ZXNwYWNlKEkKIAogLy8gVGhpcyBpcyBjdXJyZW50bHkganVzdCB1c2VkIGZv
ciBsaXN0IG1hcmtlcnMgYW5kIGlubGluZSBmbG93cyB0aGF0IGhhdmUgbGluZSBib3hlcy4gTmVp
dGhlciBzaG91bGQgCiAvLyBoYXZlIGFuIGVmZmVjdCBvbiB3aGl0ZXNwYWNlIGF0IHRoZSBzdGFy
dCBvZiB0aGUgbGluZS4gCi1zdGF0aWMgYm9vbCBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3Rh
cnRPYmplY3QoUmVuZGVyQmxvY2sqIGJsb2NrLCBSZW5kZXJPYmplY3QqIG8pCitzdGF0aWMgYm9v
bCBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QoUmVuZGVyQmxvY2sqIGJsb2Nr
LCBSZW5kZXJPYmplY3QqIG8sIExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSkK
IHsKICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBiaWRpTmV4dChibG9jaywgbyk7CiAgICAgaWYg
KG5leHQgJiYgIW5leHQtPmlzQlIoKSAmJiBuZXh0LT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQo
bmV4dCktPnRleHRMZW5ndGgoKSA+IDApIHsKICAgICAgICAgUmVuZGVyVGV4dCogbmV4dFRleHQg
PSB0b1JlbmRlclRleHQobmV4dCk7CiAgICAgICAgIFVDaGFyIG5leHRDaGFyID0gbmV4dFRleHQt
PmNoYXJhY3RlcnMoKVswXTsKICAgICAgICAgaWYgKG5leHRUZXh0LT5zdHlsZSgpLT5pc0NvbGxh
cHNpYmxlV2hpdGVTcGFjZShuZXh0Q2hhcikpIHsKLSAgICAgICAgICAgIGFkZE1pZHBvaW50KElu
bGluZUl0ZXJhdG9yKDAsIG8sIDApKTsKKyAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRw
b2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCAwKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE1NzUsMTMgKzE1NjMsMTUgQEAgc3RhdGljIGlu
bGluZSB1bnNpZ25lZCB0ZXh0V2lkdGgoUmVuZGVyVAogICAgIHJldHVybiBmb250LndpZHRoKFRl
eHRSdW4odGV4dC0+Y2hhcmFjdGVycygpICsgZnJvbSwgbGVuLCAhY29sbGFwc2VXaGl0ZVNwYWNl
LCB4UG9zKSk7CiB9CiAKLUlubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVC
cmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29sIGZpcnN0TGluZSwgRUNsZWFy
KiBjbGVhcikKK0lubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhayhJ
bmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29sIGZpcnN0TGluZSwgIGJvb2wmIGlzTGlu
ZUVtcHR5LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVDbGVhciogY2xlYXIpCiB7CiAgICAgQVNT
RVJUKHJlc29sdmVyLnBvc2l0aW9uKCkuYmxvY2sgPT0gdGhpcyk7CiAKICAgICBib29sIGFwcGxp
ZWRTdGFydFdpZHRoID0gcmVzb2x2ZXIucG9zaXRpb24oKS5wb3MgPiAwOwotCi0gICAgaW50IHdp
ZHRoID0gc2tpcExlYWRpbmdXaGl0ZXNwYWNlKHJlc29sdmVyLCBmaXJzdExpbmUpOworICAgIExp
bmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSA9IHJlc29sdmVyLm1pZHBvaW50U3Rh
dGUoKTsKKyAgICAKKyAgICBpbnQgd2lkdGggPSBza2lwTGVhZGluZ1doaXRlc3BhY2UocmVzb2x2
ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CiAK
ICAgICBpbnQgdyA9IDA7CiAgICAgaW50IHRtcFcgPSAwOwpAQCAtMTcwNiw4ICsxNjk2LDggQEAg
SW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAgICAgICAgICAg
ICAgICBpZ25vcmVTdGFydC5vYmogPSBvOwogICAgICAgICAgICAgICAgICAgICBpZ25vcmVTdGFy
dC5wb3MgPSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGlnbm9yZVN0YXJ0KTsgLy8gU3RvcCBp
Z25vcmluZyBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChpZ25v
cmVTdGFydCk7IC8vIFN0YXJ0IGlnbm9yaW5nIGFnYWluLgorICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIGlnbm9yZVN0YXJ0KTsgLy8gU3RvcCBp
Z25vcmluZyBzcGFjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5l
TWlkcG9pbnRTdGF0ZSwgaWdub3JlU3RhcnQpOyAvLyBTdGFydCBpZ25vcmluZyBhZ2Fpbi4KICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICB9CkBAIC0xNzI2LDEwICsxNzE2LDEwIEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpm
aW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICBpc0xpbmVFbXB0eSA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgIGlmIChpZ25vcmluZ1NwYWNlcykgewogICAgICAgICAgICAgICAgICAgICB0cmFp
bGluZ1NwYWNlT2JqZWN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQoSW5s
aW5lSXRlcmF0b3IoMCwgbywgMCkpOyAvLyBTdG9wIGlnbm9yaW5nIHNwYWNlcy4KLSAgICAgICAg
ICAgICAgICAgICAgYWRkTWlkcG9pbnQoSW5saW5lSXRlcmF0b3IoMCwgbywgMCkpOyAvLyBTdGFy
dCBpZ25vcmluZyBhZ2Fpbi4KKyAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1p
ZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIG8sIDApKTsgLy8gU3RvcCBpZ25vcmluZyBz
cGFjZXMuCisgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRl
LCBJbmxpbmVJdGVyYXRvcigwLCBvLCAwKSk7IC8vIFN0YXJ0IGlnbm9yaW5nIGFnYWluLgogICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYg
cmVzb2x2ZXIucG9zaXRpb24oKS5vYmogPT0gbwotICAgICAgICAgICAgICAgICAgICAmJiBzaG91
bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QodGhpcywgbykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgJiYgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0T2JqZWN0KHRoaXMsIG8s
IGxpbmVNaWRwb2ludFN0YXRlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBMaWtlIHdpdGgg
bGlzdCBtYXJrZXJzLCB3ZSBzdGFydCBpZ25vcmluZyBzcGFjZXMgdG8gbWFrZSBzdXJlIHRoYXQg
YW55IAogICAgICAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHNwYWNlcyB3ZSBzZWUgd2ls
bCBiZSBkaXNjYXJkZWQuCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1Nw
YWNlID0gdHJ1ZTsKQEAgLTE3NTMsNyArMTc0Myw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJs
b2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlnbm9y
aW5nU3BhY2VzKQotICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KElubGluZUl0ZXJhdG9yKDAs
IG8sIDApKTsKKyAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwg
SW5saW5lSXRlcmF0b3IoMCwgbywgMCkpOwogCiAgICAgICAgICAgICBpc0xpbmVFbXB0eSA9IGZh
bHNlOwogICAgICAgICAgICAgaWdub3JpbmdTcGFjZXMgPSBmYWxzZTsKQEAgLTE3NjQsNyArMTc1
NCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAg
ICAgIC8vIE9wdGltaXplIGZvciBhIGNvbW1vbiBjYXNlLiBJZiB3ZSBjYW4ndCBmaW5kIHdoaXRl
c3BhY2UgYWZ0ZXIgdGhlIGxpc3QKICAgICAgICAgICAgIC8vIGl0ZW0sIHRoZW4gdGhpcyBpcyBh
bGwgbW9vdC4gLWR3aAogICAgICAgICAgICAgaWYgKG8tPmlzTGlzdE1hcmtlcigpICYmICFzdGF0
aWNfY2FzdDxSZW5kZXJMaXN0TWFya2VyKj4obyktPmlzSW5zaWRlKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoc3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgc2hvdWxkU2tpcFdoaXRl
c3BhY2VBZnRlclN0YXJ0T2JqZWN0KHRoaXMsIG8pKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0
eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJT
dGFydE9iamVjdCh0aGlzLCBvLCBsaW5lTWlkcG9pbnRTdGF0ZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gTGlrZSB3aXRoIGlubGluZSBmbG93cywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2Vz
IHRvIG1ha2Ugc3VyZSB0aGF0IGFueSAKICAgICAgICAgICAgICAgICAgICAgLy8gYWRkaXRpb25h
bCBzcGFjZXMgd2Ugc2VlIHdpbGwgYmUgZGlzY2FyZGVkLgogICAgICAgICAgICAgICAgICAgICBj
dXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IHRydWU7CkBAIC0xODI3LDEwICsxODE3LDExIEBAIElu
bGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTb2Z0SHlwaGVu
ID0gSW5saW5lSXRlcmF0b3IoMCwgbGFzdCwgbGFzdC0+aXNUZXh0KCkgPyB0b1JlbmRlclRleHQo
bGFzdCktPnRleHRMZW5ndGgoKSAtIDEgOiAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFR3byBjb25zZWN1dGl2ZSBzb2Z0IGh5cGhlbnMuIEF2b2lkIG92ZXJsYXBwaW5nIG1pZHBvaW50
cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzTnVtTWlkcG9pbnRzICYmIHNtaWRwb2lu
dHMtPmF0KHNOdW1NaWRwb2ludHMgLSAxKS5vYmogPT0gbyAmJiBzbWlkcG9pbnRzLT5hdChzTnVt
TWlkcG9pbnRzIC0gMSkucG9zID09IHBvcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
TnVtTWlkcG9pbnRzLS07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZU1pZHBvaW50
U3RhdGUubV9udW1NaWRwb2ludHMgJiYgbGluZU1pZHBvaW50U3RhdGUubV9taWRwb2ludHNbbGlu
ZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMgLSAxXS5vYmogPT0gbyAmJiAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5tX21pZHBvaW50c1tsaW5lTWlk
cG9pbnRTdGF0ZS5tX251bU1pZHBvaW50cyAtIDFdLnBvcyA9PSBwb3MpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUubV9udW1NaWRwb2ludHMtLTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRN
aWRwb2ludChiZWZvcmVTb2Z0SHlwaGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwgYmVmb3JlU29mdEh5cGhlbik7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgd2lkdGggdXAgdG8gYnV0IG5vdCBpbmNsdWRp
bmcgdGhlIGh5cGhlbi4KICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFcgKz0gdGV4dFdpZHRo
KHQsIGxhc3RTcGFjZSwgcG9zIC0gbGFzdFNwYWNlLCBmLCB3ICsgdG1wVywgaXNGaXhlZFBpdGNo
LCBjb2xsYXBzZVdoaXRlU3BhY2UpICsgbGFzdFNwYWNlV29yZFNwYWNpbmc7CkBAIC0xODQyLDcg
KzE4MzMsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIElubGluZUl0ZXJhdG9yIGFmdGVyU29mdEh5cGhlbigwLCBv
LCBwb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJTb2Z0SHlwaGVuLmluY3JlbWVu
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQoYWZ0ZXJTb2Z0SHlwaGVu
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRl
LCBhZnRlclNvZnRIeXBoZW4pOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAgICAgcG9zKys7CkBAIC0xODczLDcgKzE4NjQsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5k
ZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3Jp
bmdTcGFjZXMgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3BhY2VX
b3JkU3BhY2luZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlID0g
cG9zOyAvLyBlLmcuLCAiRm9vICAgIGdvbyIsIGRvbid0IGFkZCBpbiBhbnkgb2YgdGhlIGlnbm9y
ZWQgc3BhY2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KElubGlu
ZUl0ZXJhdG9yKDAsIG8sIHBvcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1p
ZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCBwb3MpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGVkSWdub3JpbmdTcGFjZXMgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBKdXN0IGtlZXAgaWdub3JpbmcgdGhlc2Ugc3BhY2VzLgpAQCAtMTkxMSwxNSArMTkw
MiwxNSBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5vYmogPSBvOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsQnJlYWsucG9zID0gcG9zOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsQnJlYWsubmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gbmV4dEJyZWFrYWJsZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFRyYWlsaW5nV2hpdGVzcGFjZShs
QnJlYWspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwVHJhaWxpbmdXaGl0
ZXNwYWNlKGxCcmVhaywgaXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVXYXNUb29XaWRlIHx8IHcgKyB0bXBXID4g
d2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobEJyZWFrLm9iaiAmJiBz
aG91bGRQcmVzZXJ2ZU5ld2xpbmUobEJyZWFrLm9iaikgJiYgbEJyZWFrLm9iai0+aXNUZXh0KCkg
JiYgIXRvUmVuZGVyVGV4dChsQnJlYWsub2JqKS0+aXNXb3JkQnJlYWsoKSAmJiB0b1JlbmRlclRl
eHQobEJyZWFrLm9iaiktPmNoYXJhY3RlcnMoKVtsQnJlYWsucG9zXSA9PSAnXG4nKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RvcHBlZElnbm9yaW5nU3BhY2VzICYm
IHBvcyA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gc3RvcCByaWdodCBiZWZvcmUgdGhlIG5ld2xpbmUgYW5kIHRoZW4gc3RhcnQgdXAgYWdh
aW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChJbmxp
bmVJdGVyYXRvcigwLCBvLCBwb3MgLSAxKSk7IC8vIFN0b3AKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KElubGluZUl0ZXJhdG9yKDAsIG8sIHBvcykpOyAv
LyBTdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQo
bGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIG8sIHBvcyAtIDEpKTsgLy8gU3Rv
cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1p
ZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIG8sIHBvcykpOyAvLyBTdGFydAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxCcmVhay5pbmNyZW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZTsKQEAgLTE5MzcsOCArMTkyOCw4IEBAIElu
bGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGMgPT0gJ1xuJyAmJiBwcmVzZXJ2ZU5ld2xpbmUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc3RvcHBlZElnbm9yaW5nU3BhY2VzICYmIHBvcyA+IDApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN0b3AgcmlnaHQgYmVmb3JlIHRoZSBu
ZXdsaW5lIGFuZCB0aGVuIHN0YXJ0IHVwIGFnYWluLgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZE1pZHBvaW50KElubGluZUl0ZXJhdG9yKDAsIG8sIHBvcyAtIDEpKTsgLy8gU3RvcAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KElubGluZUl0ZXJhdG9yKDAs
IG8sIHBvcykpOyAvLyBTdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBv
aW50KGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCBwb3MgLSAxKSk7IC8v
IFN0b3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9p
bnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbywgcG9zKSk7IC8vIFN0YXJ0CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsub2JqID0gbzsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5wb3MgPSBwb3M7CkBAIC0xOTg0LDcgKzE5
NzUsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UganVzdCBlbnRlcmVkIGEgbW9kZSB3aGVyZSB3ZSBh
cmUgaWdub3JpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGFjZXMuIENyZWF0
ZSBhIG1pZHBvaW50IHRvIHRlcm1pbmF0ZSB0aGUgcnVuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQgc3BhY2UuIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZE1pZHBvaW50KGlnbm9yZVN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwgaWdub3JlU3RhcnQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChpZ25vcmluZ1NwYWNlcykgewpAQCAtMTk5Myw3ICsxOTg0LDcgQEAgSW5s
aW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAgICAgICAgICAgICAg
ICBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBsYXN0U3BhY2VX
b3JkU3BhY2luZyA9IGFwcGx5V29yZFNwYWNpbmcgPyB3b3JkU3BhY2luZyA6IDA7CiAgICAgICAg
ICAgICAgICAgICAgIGxhc3RTcGFjZSA9IHBvczsgLy8gZS5nLiwgIkZvbyAgICBnb28iLCBkb24n
dCBhZGQgaW4gYW55IG9mIHRoZSBpZ25vcmVkIHNwYWNlcy4KLSAgICAgICAgICAgICAgICAgICAg
YWRkTWlkcG9pbnQoSW5saW5lSXRlcmF0b3IoMCwgbywgcG9zKSk7CisgICAgICAgICAgICAgICAg
ICAgIGFkZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCBw
b3MpKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENo
YXJhY3RlcklzU3BhY2UgJiYgIXByZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSkgewpAQCAtMjE0NSwx
NSArMjEzNiwxNSBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAg
ICAgICAgIGxCcmVhay5pbmNyZW1lbnQoKTsKIAogICAgIC8vIFNhbml0eSBjaGVjayBvdXIgbWlk
cG9pbnRzLgotICAgIGNoZWNrTWlkcG9pbnRzKGxCcmVhayk7CisgICAgY2hlY2tNaWRwb2ludHMo
bGluZU1pZHBvaW50U3RhdGUsIGxCcmVhayk7CiAgICAgICAgIAogICAgIGlmICh0cmFpbGluZ1Nw
YWNlT2JqZWN0KSB7CiAgICAgICAgIC8vIFRoaXMgb2JqZWN0IGlzIGVpdGhlciBnb2luZyB0byBi
ZSBwYXJ0IG9mIHRoZSBsYXN0IG1pZHBvaW50LCBvciBpdCBpcyBnb2luZwogICAgICAgICAvLyB0
byBiZSB0aGUgYWN0dWFsIGVuZHBvaW50LiAgSW4gYm90aCBjYXNlcyB3ZSBqdXN0IGRlY3JlYXNl
IG91ciBwb3MgYnkgMSBsZXZlbCB0bwogICAgICAgICAvLyBleGNsdWRlIHRoZSBzcGFjZSwgYWxs
b3dpbmcgaXQgdG8gLSBpbiBlZmZlY3QgLSBjb2xsYXBzZSBpbnRvIHRoZSBuZXdsaW5lLgotICAg
ICAgICBpZiAoc051bU1pZHBvaW50cyUyPT0xKSB7Ci0gICAgICAgICAgICBJbmxpbmVJdGVyYXRv
ciogbWlkcG9pbnRzID0gc21pZHBvaW50cy0+ZGF0YSgpOwotICAgICAgICAgICAgbWlkcG9pbnRz
W3NOdW1NaWRwb2ludHMtMV0ucG9zLS07CisgICAgICAgIGlmIChsaW5lTWlkcG9pbnRTdGF0ZS5t
X251bU1pZHBvaW50cyAlIDIgPT0gMSkgeworICAgICAgICAgICAgSW5saW5lSXRlcmF0b3IqIG1p
ZHBvaW50cyA9IGxpbmVNaWRwb2ludFN0YXRlLm1fbWlkcG9pbnRzLmRhdGEoKTsKKyAgICAgICAg
ICAgIG1pZHBvaW50c1tsaW5lTWlkcG9pbnRTdGF0ZS5tX251bU1pZHBvaW50cyAtIDFdLnBvcy0t
OwogICAgICAgICB9CiAgICAgICAgIC8vZWxzZSBpZiAobEJyZWFrLnBvcyA+IDApCiAgICAgICAg
IC8vICAgIGxCcmVhay5wb3MtLTsKQEAgLTIxNjMsNyArMjE1NCw3IEBAIElubGluZUl0ZXJhdG9y
IFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRleHQtPnRleHRMZW5ndGgoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IGxlbmd0aCA+
PSAyID8gbGVuZ3RoIC0gMiA6IFVJTlRfTUFYOwogICAgICAgICAgICAgSW5saW5lSXRlcmF0b3Ig
ZW5kTWlkKDAsIHRyYWlsaW5nU3BhY2VPYmplY3QsIHBvcyk7Ci0gICAgICAgICAgICBhZGRNaWRw
b2ludChlbmRNaWQpOworICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUs
IGVuZE1pZCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxODEsNyArMjE3Miw3IEBAIElubGlu
ZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgLy8gaWdub3JlIHRo
ZSBoeXBoZW4gc28gdGhhdCBpdCB3aWxsIHJlbmRlciBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgog
ICAgICAgICBVQ2hhciBjID0gdG9SZW5kZXJUZXh0KGxCcmVhay5vYmopLT5jaGFyYWN0ZXJzKClb
bEJyZWFrLnBvcy0xXTsKICAgICAgICAgaWYgKGMgPT0gc29mdEh5cGhlbikKLSAgICAgICAgICAg
IGNob3BNaWRwb2ludHNBdChsQnJlYWsub2JqLCBsQnJlYWsucG9zLTIpOworICAgICAgICAgICAg
Y2hvcE1pZHBvaW50c0F0KGxpbmVNaWRwb2ludFN0YXRlLCBsQnJlYWsub2JqLCBsQnJlYWsucG9z
LTIpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gbEJyZWFrOwo=
</data>
<flag name="review"
          id="15930"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>