<?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>90255</bug_id>
          
          <creation_ts>2012-06-29 00:43:12 -0700</creation_ts>
          <short_desc>JSObject wastes too much memory on unused property slots</short_desc>
          <delta_ts>2012-06-30 20:55:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90336</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>660237</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-29 00:43:12 -0700</bug_when>
    <thetext>1) Non-final objects should not have inline property storage, since it is used rarely and allocating out-of-line storage is cheap.

2) The initial size of out-of-line storage should not be a whopping 16 slots, or 128 bytes.  It should be some sensible amount, like maybe 4 (32 bytes), or 2x the inline storage, whichever is bigger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660248</commentid>
    <comment_count>1</comment_count>
      <attachid>150108</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-29 00:49:18 -0700</bug_when>
    <thetext>Created attachment 150108
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660535</commentid>
    <comment_count>2</comment_count>
      <attachid>150108</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-29 08:48:57 -0700</bug_when>
    <thetext>Comment on attachment 150108
the patch

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

Overall, looks good. r=me with suggestions :-)

&gt; Source/JavaScriptCore/runtime/JSObject.h:351
&gt; +#if JSNonFinalObject_inlineStorageCapacity

I guess this is to make it easier if we want to change back to non-zero inline storage for JSNonFinalObjects in the future?

&gt; Source/JavaScriptCore/runtime/JSObject.h:361
&gt; +                globalData, structure,

Why on a separate line?

&gt; Source/JavaScriptCore/runtime/JSObject.h:574
&gt; +    if (propertyStorageCapacity() == inlineStorageCapacity())

You could assert that propertyStorageCapacity() &gt;= inlineStorageCapacity() at the beginning of the function and then return propertyStorageCapacity() == inlineStorageCapacity(). Two less lines!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660872</commentid>
    <comment_count>3</comment_count>
      <attachid>150108</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-29 17:07:00 -0700</bug_when>
    <thetext>Comment on attachment 150108
the patch

Found some bugs.  New patch on the way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660873</commentid>
    <comment_count>4</comment_count>
      <attachid>150276</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-29 17:07:17 -0700</bug_when>
    <thetext>Created attachment 150276
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660879</commentid>
    <comment_count>5</comment_count>
      <attachid>150276</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-29 17:23:15 -0700</bug_when>
    <thetext>Comment on attachment 150276
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660880</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-29 17:25:27 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/121605</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661025</commentid>
    <comment_count>7</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-06-30 04:45:32 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 90336</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661107</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-30 20:55:42 -0700</bug_when>
    <thetext>Relanded with fixes in http://trac.webkit.org/changeset/121633.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150108</attachid>
            <date>2012-06-29 00:49:18 -0700</date>
            <delta_ts>2012-06-29 17:07:17 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>fixpropstore_patch_1.diff</filename>
            <type>text/plain</type>
            <size>20479</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNTI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDEyLTA2LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNPYmplY3Qgd2FzdGVzIHRvbyBtdWNoIG1lbW9yeSBvbiB1bnVzZWQgcHJvcGVydHkgc2xvdHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMjU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGRvZXMgYSBmZXcgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBKU05vbkZpbmFsT2Jq
ZWN0IG5vIGxvbmdlciBoYXMgaW5saW5lIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgICAgIAorICAg
ICAgICAtIEluaXRpYWwgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3RvcmFnZSBzaXplIGlzIDQgc2xv
dHMgZm9yIEpTTm9uRmluYWxPYmplY3QsCisgICAgICAgICAgb3IgMnggdGhlIGlubGluZSBzdG9y
YWdlIGZvciBKU0ZpbmFsT2JqZWN0LgorICAgICAgICAKKyAgICAgICAgLSBJbmxpbmUgSlNGdW5j
dGlvbiBhbGxvY2F0aW9uIGlzIGtpbGxlZCBvZmYgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgZ29v
ZAorICAgICAgICAgIHdheSBvZiBpbmxpbmluZyBwcm9wZXJ0eSBzdG9yYWdlIGFsbG9jYXRpb24u
IFRoaXMgZGlkbid0IGh1cnQgcGVyZm9ybWFuY2UuCisgICAgICAgICAgS2lsbGluZyBvZmYgY29k
ZSBpcyBiZXR0ZXIgdGhhbiBmaXhpbmcgaXQgaWYgdGhhdCBjb2RlIHdhc24ndCBkb2luZyBhbnkK
KyAgICAgICAgICBnb29kLgorICAgICAgICAKKyAgICAgICAgVGhpcyBsb29rcyBsaWtlIGEgMiUg
cHJvZ3Jlc3Npb24gb24gVjguCisKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEFsbG9jYXRlQmFzaWNKU09iamVjdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19mdW5jKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHApOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojppc1VzaW5nSW5saW5lU3RvcmFnZSk6CisgICAgICAgIChKU09i
amVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpoYXNJbmxpbmVTdG9yYWdl
KToKKyAgICAgICAgKEpTTm9uRmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFs
T2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNOb25GaW5hbE9iamVj
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpoYXNJbmxp
bmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjppbmxpbmVTdG9yYWdlQ2FwYWNpdHkpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmlzVXNpbmdJbmxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6bmV4dFByb3BlcnR5U3Rv
cmFnZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Z3Jvd1Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWROZXdQcm9wZXJ0eVN0b3JhZ2VTaXplKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKwogMjAxMi0wNi0yOCAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyByZWNvbXBpbGF0aW9uIGhldXJpc3Rp
Y3Mgc2hvdWxkIGJlIGJhc2VkIG9uIGNvdW50LCBub3QgcmF0ZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTIxNTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsOCArNDcyLDYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X25lcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25ld19hcnJheSkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX25ld19vYmplY3QpCi0gICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9uZXdfZnVuYykKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25ld19mdW5j
X2V4cCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX25vdCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX25zdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X3Bvc3RfZGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMjE1MTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MjMsNyArNDIzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENsYXNzVHlwZSwgYm9vbCBkZXN0cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lk
IGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1
bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFz
aWNTdG9yYWdlKHNpemVfdCwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0
cik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW1pdEFsbG9jYXRlSlNGaW5h
bE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFn
ZVB0cik7Ci0gICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNGdW5jdGlvbihGdW5jdGlvbkV4ZWN1
dGFibGUqLCBSZWdpc3RlcklEIHNjb3BlQ2hhaW4sIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3Rl
cklEIHN0b3JhZ2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWdu
ZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0
LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAg
ICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKQEAgLTc1MCw4ICs3NDksNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90b19qc251bWJlcihJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdXJzaGlmdChJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9uZXdfZnVuYyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9uZXdfZnVuY19leHAoSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChJbnN0
cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTIxNTE3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
OSw4ICs0MjksMTEgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZSwgYm9vbCBkZXN0cgog
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0LCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmhlcml0b3JJRCgpKSk7CiAKICAgICAvLyBpbml0aWFsaXplIHRoZSBvYmplY3Qn
cyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVv
ZihKU09iamVjdCkpLCByZXN1bHQsIHN0b3JhZ2VQdHIpOwotICAgIHN0b3JlUHRyKHN0b3JhZ2VQ
dHIsIEFkZHJlc3MocmVzdWx0LCBDbGFzc1R5cGU6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkp
KTsKKyAgICBpZiAoQ2xhc3NUeXBlOjpoYXNJbmxpbmVTdG9yYWdlKCkpIHsKKyAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSlNPYmplY3QpKSwgcmVzdWx0LCBzdG9yYWdlUHRyKTsK
KyAgICAgICAgc3RvcmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhyZXN1bHQsIENsYXNzVHlwZTo6
b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSkpOworICAgIH0gZWxzZQorICAgICAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHJlc3VsdCwgQ2xhc3NUeXBlOjpvZmZzZXRPZlBy
b3BlcnR5U3RvcmFnZSgpKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQg
cmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCkBAIC00MzgsMjggKzQ0MSw2IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBKSVQ6OmUKICAgICBlbWl0QWxsb2NhdGVCYXNpY0pT
T2JqZWN0PEpTRmluYWxPYmplY3QsIGZhbHNlLCBUPihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRj
aCk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGdW5jdGlvbihGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIFJlZ2lzdGVySUQgc2NvcGVDaGFpbiwgUmVnaXN0ZXJJ
RCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKLXsKLSAgICBlbWl0QWxsb2NhdGVCYXNp
Y0pTT2JqZWN0PEpTRnVuY3Rpb24sIHRydWU+KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5uYW1lZEZ1bmN0aW9uU3RydWN0dXJlKCkpLCByZXN1bHQsIHN0b3JhZ2VQ
dHIpOwotCi0gICAgLy8gc3RvcmUgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUgY2hhaW4KLSAgICBzdG9y
ZVB0cihzY29wZUNoYWluLCBBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29w
ZUNoYWluKCkpKTsKLQotICAgIC8vIHN0b3JlIHRoZSBmdW5jdGlvbidzIGV4ZWN1dGFibGUgbWVt
YmVyCi0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSwgQWRkcmVzcyhyZXN1
bHQsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSk7Ci0KLSAgICAvLyBjbGVhciB0
aGUgZnVuY3Rpb24ncyBpbmhlcml0b3JJRAotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCks
IEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkNhY2hlZEluaGVyaXRvcklEKCkp
KTsKLQotICAgIC8vIHN0b3JlIHRoZSBmdW5jdGlvbidzIG5hbWUKLSAgICBBU1NFUlQoZXhlY3V0
YWJsZS0+bmFtZVZhbHVlKCkpOwotICAgIGludCBmdW5jdGlvbk5hbWVPZmZzZXQgPSBzaXplb2Yo
SlNWYWx1ZSkgKiBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uTmFtZU9mZnNl
dCgpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZS0+bmFtZVZhbHVlKCkp
LCBBZGRyZXNzKHJlZ1QxLCBmdW5jdGlvbk5hbWVPZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBZGRyZXNzKHJlZ1QxLCBmdW5j
dGlvbk5hbWVPZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OwotI2VuZGlmCi19Ci0KIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdl
KHNpemVfdCBzaXplLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKQog
ewogICAgIENvcGllZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5z
dG9yYWdlQWxsb2NhdG9yKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHJldmlzaW9uIDEyMTUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTgsMTEgKzE2MTgsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfZnVuYyhJbnN0cnVjdGlvbiogCiAjZW5kaWYKICAgICB9CiAKLSAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25E
ZWNsKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDIpOwotICAgIGVt
aXRBbGxvY2F0ZUpTRnVuY3Rpb24oZXhlY3V0YWJsZSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7Ci0K
LSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9uZXdfZnVuYyk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKSk7CisgICAgc3R1YkNhbGwuY2FsbChkc3QpOwogCiAgICAgaWYgKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KSAgICAgICAg
CkBAIC0xNjM0LDQ0ICsxNjMyLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jKEluc3Ry
dWN0aW9uKiAKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfZnVuYyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2Z1bmMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSkpOwotICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jX2V4cChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7Ci0KLSAgICAvLyBXZSBvbmx5IGlubGluZSB0aGUgYWxsb2NhdGlvbiBv
ZiBhIGFub255bW91cyBmdW5jdGlvbiBleHByZXNzaW9ucwotICAgIC8vIElmIHdlIHdhbnQgdG8g
YmUgYWJsZSB0byBhbGxvY2F0ZSBhIG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24sIHdlIHdvdWxk
Ci0gICAgLy8gbmVlZCB0byBiZSBhYmxlIHRvIGRvIGlubGluZSBhbGxvY2F0aW9uIG9mIGEgSlNT
dGF0aWNTY29wZU9iamVjdC4KLSAgICBpZiAoZXhlY3V0YWJsZS0+bmFtZSgpLmlzTnVsbCgpKSB7
Ci0gICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2Nv
cGVDaGFpbiwgcmVnVDIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU0Z1bmN0aW9uKGV4ZWN1dGFi
bGUsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwotICAgICAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfZnVuY19leHApOwog
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmZ1bmN0
aW9uRXhwcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAgIHN0dWJDYWxs
LmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgIGlmICghZXhlY3V0YWJsZS0+bmFtZSgpLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfZnVuY19leHApOwotICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpOwotICAgIHN0dWJDYWxs
LmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci19Ci0KIHZvaWQgSklUOjpl
bWl0X29wX25ld19hcnJheShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEy
MTUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsMTMgKzEwMywxNiBAQCB2b2lkIEpTRnVuY3Rpb246OmZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0CiAKIHZvaWQgSlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oRXhl
Y1N0YXRlKiBleGVjLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluTm9kZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCkpOworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCiAgICAgLy8gU3dpdGNoaW5nIHRoZSBzdHJ1Y3R1cmUg
aGVyZSBpcyBvbmx5IHNhZmUgaWYgd2UgY3VycmVudGx5IGhhdmUgdGhlIGZ1bmN0aW9uIHN0cnVj
dHVyZSEKICAgICBBU1NFUlQoc3RydWN0dXJlKCkgPT0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9i
amVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7Ci0gICAgc2V0U3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC0+bmFtZWRGdW5jdGlvblN0cnVj
dHVyZSgpKTsKLSAgICBwdXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzY29wZUNo
YWluTm9kZS0+Z2xvYmFsT2JqZWN0LT5mdW5jdGlvbk5hbWVPZmZzZXQoKSwgZXhlY3V0YWJsZS0+
bmFtZVZhbHVlKCkpOworICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNl
c3NhcnkoCisgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgIHNjb3BlQ2hhaW5Ob2RlLT5nbG9i
YWxPYmplY3QtPm5hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgcHV0RGlyZWN0T2Zmc2V0
KGdsb2JhbERhdGEsIHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QtPmZ1bmN0aW9uTmFtZU9m
ZnNldCgpLCBleGVjdXRhYmxlLT5uYW1lVmFsdWUoKSk7CiB9CiAKIFN0cnVjdHVyZSogSlNGdW5j
dGlvbjo6Y2FjaGVJbmhlcml0b3JJRChFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyMTUxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDYgKzc5LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBY2Nlc3NvciAgICAgPSAxIDw8
IDUsICAvLyBwcm9wZXJ0eSBpcyBhIGdldHRlci9zZXR0ZXIKICAgICB9OwogCisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyNkZWZpbmUgSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNp
dHkgMAorI2RlZmluZSBKU0ZpbmFsT2JqZWN0X2lubGluZVN0b3JhZ2VDYXBhY2l0eSA2CisjZWxz
ZQorI2RlZmluZSBKU05vbkZpbmFsT2JqZWN0X2lubGluZVN0b3JhZ2VDYXBhY2l0eSAwCisjZGVm
aW5lIEpTRmluYWxPYmplY3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5IDQKKyNlbmRpZgorCitDT01Q
SUxFX0FTU0VSVCgoSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkgPj0gSlNOb25G
aW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkpLCBmaW5hbF9zdG9yYWdlX2lzX2F0X2xl
YXN0X2FzX2xhcmdlX2FzX25vbl9maW5hbCk7CisKICAgICBjbGFzcyBKU09iamVjdCA6IHB1Ymxp
YyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xhc3MgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6
ZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CkBAIC0yMjEsMTYgKzIzMSwyMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShF
eGVjU3RhdGUqIGV4ZWMpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5U3Rv
cmFnZSBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSk7Ci0gICAgICAgIGJvb2wgaXNVc2luZ0lubGluZVN0b3JhZ2UoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4obV9wcm9wZXJ0eVN0b3JhZ2UuZ2V0
KCkpID09IHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPih0aGlzICsgMSk7IH0KKyAgICAgICAgYm9v
bCBpc1VzaW5nSW5saW5lU3RvcmFnZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGJv
b2wgcmVzdWx0ID0KKyAgICAgICAgICAgICAgICAhbV9wcm9wZXJ0eVN0b3JhZ2UuZ2V0KCkKKyAg
ICAgICAgICAgICAgICB8fCBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4obV9wcm9wZXJ0eVN0b3Jh
Z2UuZ2V0KCkpID09IHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPih0aGlzICsgMSk7CisgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IHN0cnVjdHVyZSgpLT5pc1VzaW5nSW5saW5lU3RvcmFnZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KICAgICAgICAgdm9pZCBz
ZXRQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlTdG9yYWdlLCBTdHJ1Y3R1
cmUqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0
b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKIAogICAgICAgICB2
b2lkKiBhZGRyZXNzT2ZQcm9wZXJ0eVN0b3JhZ2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gJm1fcHJvcGVydHlTdG9yYWdlOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGJhc2VFeHRlcm5hbFN0b3JhZ2VDYXBhY2l0eSA9IDE2OwotCiAgICAgICAg
IHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQog
ICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1
Y3R1cmUoZ2xvYmFsRGF0YSwgdGhpcyk7CkBAIC0yNTAsMTQgKzI2NywxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBpbmxpbmVTdG9yYWdlKQorICAgICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAg
ewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAg
ICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgICAgICAgICAgQVNTRVJUKHN0cnVj
dHVyZSgpLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpIDwgYmFzZUV4dGVybmFsU3RvcmFnZUNh
cGFjaXR5KTsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNVc2luZ0lubGluZVN0
b3JhZ2UoKSk7CiAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzRW1wdHkoKSk7CiAg
ICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlKCkuaXNOdWxsKCkgfHwgSGVhcDo6aGVhcCh0aGlz
KSA9PSBIZWFwOjpoZWFwKHByb3RvdHlwZSgpKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGlubGluZVN0b3JhZ2UsIHN0YXRpY19jYXN0PHZvaWQqPihpbmxpbmVTdG9yYWdlKSA9PSBzdGF0
aWNfY2FzdDx2b2lkKj4odGhpcyArIDEpKTsKICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+aXNPYmplY3QoKSk7CiAgICAgICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKCkpOwogICAgICAg
ICB9CkBAIC0zMTYsMTYgKzMzMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKIAotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0jZGVmaW5lIEpTTm9uRmluYWxPYmplY3RfaW5saW5lU3RvcmFn
ZUNhcGFjaXR5IDQKLSNkZWZpbmUgSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
NgotI2Vsc2UKLSNkZWZpbmUgSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
MgotI2RlZmluZSBKU0ZpbmFsT2JqZWN0X2lubGluZVN0b3JhZ2VDYXBhY2l0eSA0Ci0jZW5kaWYK
LQotQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmplY3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5ID49
IEpTTm9uRmluYWxPYmplY3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5KSwgZmluYWxfc3RvcmFnZV9p
c19hdF9sZWFzdF9hc19sYXJnZV9hc19ub25fZmluYWwpOwotCiAgICAgLy8gSlNOb25GaW5hbE9i
amVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBoYXMgc29tZSBpbnRlcm5hbCBzdG9yYWdl
LAogICAgIC8vIGJ1dCBhbHNvIHByZXNlcnZlcyBzb21lIHNwYWNlIGluIHRoZSBjb2xsZWN0b3Ig
Y2VsbCBmb3IgYWRkaXRpb25hbAogICAgIC8vIGRhdGEgbWVtYmVycyBpbiBkZXJpdmVkIHR5cGVz
LgpAQCAtMzQwLDIyICszNDYsNDIgQEAgQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmplY3RfaW5s
aW5lU3RvcgogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wgaGFzSW5s
aW5lU3RvcmFnZSgpCisgICAgICAgIHsKKyNpZiBKU05vbkZpbmFsT2JqZWN0X2lubGluZVN0b3Jh
Z2VDYXBhY2l0eQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgICAgIH0KKwogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsIG1faW5saW5lU3RvcmFnZSkKKyAgICAgICAgICAgIDogSlNPYmplY3QoCisgICAg
ICAgICAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlLAorI2lmIEpTTm9uRmluYWxPYmplY3Rf
aW5saW5lU3RvcmFnZUNhcGFjaXR5CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdG9yYWdlCisj
ZWxzZQorICAgICAgICAgICAgICAgIDAKKyNlbmRpZgorICAgICAgICAgICAgICAgICkKICAgICAg
ICAgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEsIG1faW5saW5lU3RvcmFnZSk7CisgICAgICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyNpZiBKU05vbkZpbmFsT2JqZWN0X2lubGluZVN0b3Jh
Z2VDYXBhY2l0eQogICAgICAgICAgICAgQVNTRVJUKCEoT0JKRUNUX09GRlNFVE9GKEpTTm9uRmlu
YWxPYmplY3QsIG1faW5saW5lU3RvcmFnZSkgJSBzaXplb2YoZG91YmxlKSkpOworI2VuZGlmCiAg
ICAgICAgICAgICBBU1NFUlQodGhpcy0+c3RydWN0dXJlKCktPnByb3BlcnR5U3RvcmFnZUNhcGFj
aXR5KCkgPT0gSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkpOwogICAgICAg
ICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsKICAgICAgICAgfQotCisgICAgICAgIAogICAgIHBy
aXZhdGU6CisjaWYgSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkKICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1faW5saW5lU3RvcmFnZVtKU05vbkZpbmFsT2JqZWN0
X2lubGluZVN0b3JhZ2VDYXBhY2l0eV07CisjZW5kaWYKICAgICB9OwogCiAgICAgY2xhc3MgSlNG
aW5hbE9iamVjdDsKQEAgLTM3NiwxMCArNDAyLDE0IEBAIENPTVBJTEVfQVNTRVJUKChKU0ZpbmFs
T2JqZWN0X2lubGluZVN0b3IKIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwogCisgICAgICAgIHN0YXRpYyBib29sIGhhc0lubGluZVN0b3JhZ2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEsIG1faW5saW5lU3RvcmFnZSk7CisgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIEFTU0VSVCghKE9CSkVDVF9PRkZTRVRPRihKU0Zp
bmFsT2JqZWN0LCBtX2lubGluZVN0b3JhZ2UpICUgc2l6ZW9mKGRvdWJsZSkpKTsKICAgICAgICAg
ICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSA9
PSBKU0ZpbmFsT2JqZWN0X2lubGluZVN0b3JhZ2VDYXBhY2l0eSk7CiAgICAgICAgICAgICBBU1NF
UlQoY2xhc3NJbmZvKCkpOwpAQCAtNDE3LDcgKzQ0Nyw5IEBAIGlubGluZSBib29sIGlzSlNGaW5h
bE9iamVjdChKU1ZhbHVlIHZhbHUKIAogaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkKIHsKKyNpZiBKU05vbkZpbmFsT2JqZWN0X2lubGluZVN0b3JhZ2VDYXBh
Y2l0eQogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0YoSlNGaW5hbE9iamVjdCwgbV9pbmxpbmVT
dG9yYWdlKSA9PSBPQkpFQ1RfT0ZGU0VUT0YoSlNOb25GaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9y
YWdlKSk7CisjZW5kaWYKICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRmluYWxPYmplY3Qs
IG1faW5saW5lU3RvcmFnZSk7CiB9CiAKQEAgLTUzMCw5ICs1NjIsMTkgQEAgaW5saW5lIFN0cnVj
dHVyZSogSlNPYmplY3Q6OmluaGVyaXRvcklEKAogICAgIHJldHVybiBjcmVhdGVJbmhlcml0b3JJ
RChnbG9iYWxEYXRhKTsKIH0KIAoraW5saW5lIHNpemVfdCBTdHJ1Y3R1cmU6OmlubGluZVN0b3Jh
Z2VDYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgaWYgKGNsYXNzSW5mbygpID09ICZKU0ZpbmFsT2Jq
ZWN0OjpzX2luZm8pCisgICAgICAgIHJldHVybiBKU0ZpbmFsT2JqZWN0X2lubGluZVN0b3JhZ2VD
YXBhY2l0eTsKKyAgICByZXR1cm4gSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNp
dHk7Cit9CisKIGlubGluZSBib29sIFN0cnVjdHVyZTo6aXNVc2luZ0lubGluZVN0b3JhZ2UoKSBj
b25zdAogewotICAgIHJldHVybiBwcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpIDwgSlNPYmplY3Q6
OmJhc2VFeHRlcm5hbFN0b3JhZ2VDYXBhY2l0eTsKKyAgICBpZiAocHJvcGVydHlTdG9yYWdlQ2Fw
YWNpdHkoKSA9PSBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgQVNTRVJUKHByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkgPiBpbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkoKSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBpbmxpbmUgYm9vbCBKU0NlbGw6Omlu
aGVyaXRzKGNvbnN0IENsYXNzSW5mbyogaW5mbykgY29uc3QKQEAgLTc2Miw2ICs4MDQsMjAgQEAg
aW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIHJldHVybiB0cnVl
OwogfQogCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0
b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlKQoreworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlKCk7
CisKKyAgICBpZiAoIW9sZFN0cnVjdHVyZS0+c2hvdWxkR3Jvd1Byb3BlcnR5U3RvcmFnZSgpKSB7
CisgICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0g
Z3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLT5w
cm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpLCBuZXdTdHJ1Y3R1cmUtPnN1Z2dlc3RlZE5ld1Byb3Bl
cnR5U3RvcmFnZVNpemUoKSk7CisgICAgc2V0UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIG5l
d1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7Cit9CisKIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRP
d25EYXRhUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
QVNTRVJUKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMTIxNTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDE5ICsyNTYsMjEgQEAg
dm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoSgogICAgIH0KIH0KIAoraW5s
aW5lIHNpemVfdCBuZXh0UHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoc2l6ZV90IGN1cnJlbnRDYXBh
Y2l0eSkKK3sKKyAgICBpZiAoIWN1cnJlbnRDYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgcmV0dXJuIGN1cnJlbnRDYXBhY2l0eSAqIDI7Cit9CisKIHZvaWQgU3RydWN0dXJlOjpncm93
UHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKQogewotICAgIGlmIChpc1VzaW5nSW5saW5lU3RvcmFn
ZSgpKQotICAgICAgICBtX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5ID0gSlNPYmplY3Q6OmJhc2VF
eHRlcm5hbFN0b3JhZ2VDYXBhY2l0eTsKLSAgICBlbHNlCi0gICAgICAgIG1fcHJvcGVydHlTdG9y
YWdlQ2FwYWNpdHkgKj0gMjsKKyAgICBtX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5ID0gbmV4dFBy
b3BlcnR5U3RvcmFnZUNhcGFjaXR5KG1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkpOwogfQogCiBz
aXplX3QgU3RydWN0dXJlOjpzdWdnZXN0ZWROZXdQcm9wZXJ0eVN0b3JhZ2VTaXplKCkKIHsKLSAg
ICBpZiAoaXNVc2luZ0lubGluZVN0b3JhZ2UoKSkKLSAgICAgICAgcmV0dXJuIEpTT2JqZWN0Ojpi
YXNlRXh0ZXJuYWxTdG9yYWdlQ2FwYWNpdHk7Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTdG9yYWdl
Q2FwYWNpdHkgKiAyOworICAgIHJldHVybiBuZXh0UHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkobV9w
cm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSk7CiB9CiAgCiB2b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5
RGljdGlvbmFyeUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCShyZXZpc2lvbiAxMjE1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGdyb3dQcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOwogICAg
ICAgICB1bnNpZ25lZCBwcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0IHsgQVNTRVJUKHN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsgcmV0dXJuIG1fcHJvcGVydHlTdG9y
YWdlQ2FwYWNpdHk7IH0KICAgICAgICAgdW5zaWduZWQgcHJvcGVydHlTdG9yYWdlU2l6ZSgpIGNv
bnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsgcmV0dXJu
IChtX3Byb3BlcnR5VGFibGUgPyBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUo
KSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29mZnNldCArIDEpKTsgfQorICAgICAgICBzaXpl
X3QgaW5saW5lU3RvcmFnZUNhcGFjaXR5KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNVc2luZ0lu
bGluZVN0b3JhZ2UoKSBjb25zdDsKIAogICAgICAgICBzaXplX3QgZ2V0KEpTR2xvYmFsRGF0YSYs
IFByb3BlcnR5TmFtZSk7Cg==
</data>
<flag name="review"
          id="158292"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150276</attachid>
            <date>2012-06-29 17:07:17 -0700</date>
            <delta_ts>2012-06-29 17:23:15 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>betterpropstore_patch_1.diff</filename>
            <type>text/plain</type>
            <size>27488</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDEyLTA2LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNPYmplY3Qgd2FzdGVzIHRvbyBtdWNoIG1lbW9yeSBvbiB1bnVzZWQgcHJvcGVydHkgc2xvdHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMjU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGRvZXMgYSBmZXcgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBKU05vbkZpbmFsT2Jq
ZWN0IG5vIGxvbmdlciBoYXMgaW5saW5lIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgICAgIAorICAg
ICAgICAtIEluaXRpYWwgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3RvcmFnZSBzaXplIGlzIDQgc2xv
dHMgZm9yIEpTTm9uRmluYWxPYmplY3QsCisgICAgICAgICAgb3IgMnggdGhlIGlubGluZSBzdG9y
YWdlIGZvciBKU0ZpbmFsT2JqZWN0LgorICAgICAgICAKKyAgICAgICAgLSBQcm9wZXJ0eSBzdG9y
YWdlIGlzIG9ubHkgcmVhbGxvY2F0ZWQgaWYgaXQgbmVlZHMgdG8gYmUuIFByZXZpb3VzbHksIHdl
CisgICAgICAgICAgd291bGQgcmVhbGxvY2F0ZSB0aGUgcHJvcGVydHkgc3RvcmFnZSBvbiBhbnkg
dHJhbnNpdGlvbiB3aGVyZSB0aGUgb3JpZ2luYWwKKyAgICAgICAgICBzdHJ1Y3R1cmUgc2F5IHNo
b3VsZEdyb3dQcm9wZXJ5U3RvcmFnZSgpLCBidXQgdGhpcyBsZWFkcyB0byBzcHVyaW91cworICAg
ICAgICAgIHJlYWxsb2NhdGlvbnMgd2hlbiBkb2luZyB0cmFuc2l0aW9ubGVzcyBwcm9wZXJ0eSBh
ZGRzIGFuZCB0aGVyZSBhcmUKKyAgICAgICAgICBkZWxldGVkIHByb3BlcnR5IHNsb3RzIGF2YWls
YWJsZS4gVGhhdCBpbiB0dXJuIGxlZCB0byBjcmFzaGVzLCBiZWNhdXNlIHdlCisgICAgICAgICAg
d291bGQgc3dpdGNoIHRvIG91dC1vZi1saW5lIHN0b3JhZ2UgZXZlbiBpZiB0aGUgY2FwYWNpdHkg
bWF0Y2hlZCB0aGUKKyAgICAgICAgICBjcml0ZXJpYSBmb3IgaW5saW5lIHN0b3JhZ2UuCisgICAg
ICAgIAorICAgICAgICAtIElubGluZSBKU0Z1bmN0aW9uIGFsbG9jYXRpb24gaXMga2lsbGVkIG9m
ZiBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBnb29kCisgICAgICAgICAgd2F5IG9mIGlubGluaW5n
IHByb3BlcnR5IHN0b3JhZ2UgYWxsb2NhdGlvbi4gVGhpcyBkaWRuJ3QgaHVydCBwZXJmb3JtYW5j
ZS4KKyAgICAgICAgICBLaWxsaW5nIG9mZiBjb2RlIGlzIGJldHRlciB0aGFuIGZpeGluZyBpdCBp
ZiB0aGF0IGNvZGUgd2Fzbid0IGRvaW5nIGFueQorICAgICAgICAgIGdvb2QuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGxvb2tzIGxpa2UgYSAxJSBwcm9ncmVzc2lvbiBvbiBWOC4KKworICAgICAg
ICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEFsbG9jYXRlQmFzaWNKU09iamVjdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19mdW5jKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHApOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlzVXNpbmdJbmxpbmVT
dG9yYWdlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTTm9uRmluYWxP
YmplY3Q6Omhhc0lubGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNOb25GaW5hbE9iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpTTm9uRmluYWxPYmplY3Q6OkpTTm9uRmluYWxPYmplY3QpOgorICAgICAg
ICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkpTRmluYWxPYmplY3Q6Omhhc0lubGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvcGVydHlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppbmxpbmVTdG9yYWdlQ2FwYWNpdHkpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlzVXNpbmdJbmxpbmVTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpuZXh0UHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkpOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpncm93UHJvcGVydHlTdG9yYWdlQ2Fw
YWNpdHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN1Z2dlc3RlZE5ld1Byb3BlcnR5U3Rv
cmFnZVNpemUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cHV0V2lsbEdyb3dQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoU3RydWN0
dXJlKToKKwogMjAxMi0wNi0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIERGRyByZWNvbXBpbGF0aW9uIGhldXJpc3RpY3Mgc2hvdWxkIGJlIGJhc2VkIG9uIGNv
dW50LCBub3QgcmF0ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMjE1MTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjAyLDcgKzM2MDIsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvdG8gPSBhc09iamVjdChwcm90byktPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVGb3JM
b29rdXAoY2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT50cmFuc2l0aW9uVG8oKmdsb2JhbERhdGEs
IG5ld1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+c2V0U3RydWN0dXJl
QW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgqZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJl
KTsKIAogICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdlBDWzddLnUub3BlcmFuZDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEyMTUxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDggKzQ3Miw2IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9uZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXdfYXJyYXkp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXdfb2JqZWN0KQotICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfbmV3X2Z1bmMpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9uZXdfZnVuY19leHApCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9ub3QpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9wb3N0X2RlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNp
b24gMTIxNTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIzLDcgKzQyMyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3RydWN0dXJl
VHlwZT4gdm9pZCBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lz
dGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3QsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklE
IHN0b3JhZ2VQdHIpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVtaXRBbGxv
Y2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3Rl
cklEIHN0b3JhZ2VQdHIpOwotICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTRnVuY3Rpb24oRnVu
Y3Rpb25FeGVjdXRhYmxlKiwgUmVnaXN0ZXJJRCBzY29wZUNoYWluLCBSZWdpc3RlcklEIHJlc3Vs
dCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0Fy
cmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQg
Y2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQ
dHIpOwogICAgICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkBAIC03NTAsOCArNzQ5
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdG9fanNudW1i
ZXIoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Vyc2hp
ZnQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X2Z1bmMoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbmV3X2Z1bmNf
ZXhwKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX25ld19hcnJheShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnQoSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEyMTUxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MjksOCArNDI5LDExIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIGJv
b2wgZGVzdHIKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHJlc3VsdCwg
SlNPYmplY3Q6Om9mZnNldE9mSW5oZXJpdG9ySUQoKSkpOwogCiAgICAgLy8gaW5pdGlhbGl6ZSB0
aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzaXplb2YoSlNPYmplY3QpKSwgcmVzdWx0LCBzdG9yYWdlUHRyKTsKLSAgICBzdG9yZVB0
cihzdG9yYWdlUHRyLCBBZGRyZXNzKHJlc3VsdCwgQ2xhc3NUeXBlOjpvZmZzZXRPZlByb3BlcnR5
U3RvcmFnZSgpKSk7CisgICAgaWYgKENsYXNzVHlwZTo6aGFzSW5saW5lU3RvcmFnZSgpKSB7Cisg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTT2JqZWN0KSksIHJlc3VsdCwgc3Rv
cmFnZVB0cik7CisgICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3MocmVzdWx0LCBD
bGFzc1R5cGU6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHQsIENsYXNzVHlwZTo6
b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBS
ZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQpAQCAtNDM4LDI4ICs0NDEsNiBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplCiAgICAgZW1pdEFsbG9j
YXRlQmFzaWNKU09iamVjdDxKU0ZpbmFsT2JqZWN0LCBmYWxzZSwgVD4oc3RydWN0dXJlLCByZXN1
bHQsIHNjcmF0Y2gpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTRnVuY3Rp
b24oRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBSZWdpc3RlcklEIHNjb3BlQ2hhaW4s
IFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCi17Ci0gICAgZW1pdEFs
bG9jYXRlQmFzaWNKU09iamVjdDxKU0Z1bmN0aW9uLCB0cnVlPihUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+bmFtZWRGdW5jdGlvblN0cnVjdHVyZSgpKSwgcmVzdWx0
LCBzdG9yYWdlUHRyKTsKLQotICAgIC8vIHN0b3JlIHRoZSBmdW5jdGlvbidzIHNjb3BlIGNoYWlu
Ci0gICAgc3RvcmVQdHIoc2NvcGVDaGFpbiwgQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSk7Ci0KLSAgICAvLyBzdG9yZSB0aGUgZnVuY3Rpb24ncyBleGVj
dXRhYmxlIG1lbWJlcgotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSksIEFk
ZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSkpOwotCi0gICAg
Ly8gY2xlYXIgdGhlIGZ1bmN0aW9uJ3MgaW5oZXJpdG9ySUQKLSAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKDApLCBBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZDYWNoZWRJbmhl
cml0b3JJRCgpKSk7Ci0KLSAgICAvLyBzdG9yZSB0aGUgZnVuY3Rpb24ncyBuYW1lCi0gICAgQVNT
RVJUKGV4ZWN1dGFibGUtPm5hbWVWYWx1ZSgpKTsKLSAgICBpbnQgZnVuY3Rpb25OYW1lT2Zmc2V0
ID0gc2l6ZW9mKEpTVmFsdWUpICogbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
bk5hbWVPZmZzZXQoKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUtPm5h
bWVWYWx1ZSgpKSwgQWRkcmVzcyhyZWdUMSwgZnVuY3Rpb25OYW1lT2Zmc2V0ICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQWRkcmVzcyhy
ZWdUMSwgZnVuY3Rpb25OYW1lT2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpKTsKLSNlbmRpZgotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJh
c2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3Rv
cmFnZVB0cikKIHsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX2dsb2JhbERh
dGEtPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMjE1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjE4LDExICsxNjE4
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmMoSW5zdHJ1Y3Rpb24qIAogI2VuZGlmCiAg
ICAgfQogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRGVjbChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1Qy
KTsKLSAgICBlbWl0QWxsb2NhdGVKU0Z1bmN0aW9uKGV4ZWN1dGFibGUsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwotCi0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKKyAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2Z1bmMpOworICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSkpOworICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKIAogICAgIGlm
IChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSB7CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkgICAgICAgIApAQCAtMTYzNCw0NCArMTYzMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
ZnVuYyhJbnN0cnVjdGlvbiogCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X2Z1bmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19mdW5jKTsKLSAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVu
Y19leHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotCi0gICAgLy8gV2Ugb25seSBpbmxpbmUgdGhlIGFs
bG9jYXRpb24gb2YgYSBhbm9ueW1vdXMgZnVuY3Rpb24gZXhwcmVzc2lvbnMKLSAgICAvLyBJZiB3
ZSB3YW50IHRvIGJlIGFibGUgdG8gYWxsb2NhdGUgYSBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9u
LCB3ZSB3b3VsZAotICAgIC8vIG5lZWQgdG8gYmUgYWJsZSB0byBkbyBpbmxpbmUgYWxsb2NhdGlv
biBvZiBhIEpTU3RhdGljU2NvcGVPYmplY3QuCi0gICAgaWYgKGV4ZWN1dGFibGUtPm5hbWUoKS5p
c051bGwoKSkgewotICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3Rl
ckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNGdW5jdGlv
bihleGVjdXRhYmxlLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZW1pdFN0b3JlQ2Vs
bChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2Z1
bmNfZXhwKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5mdW5jdGlvbkV4cHIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKICAg
ICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhw
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICBpZiAoIWV4ZWN1dGFibGUt
Pm5hbWUoKS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2Z1bmNfZXhwKTsK
LSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKTsKLSAg
ICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShy
ZXZpc2lvbiAxMjE1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEzICsxMDMsMTYgQEAgdm9pZCBKU0Z1bmN0
aW9uOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdAogCiB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAogICAgIC8vIFN3aXRjaGluZyB0aGUg
c3RydWN0dXJlIGhlcmUgaXMgb25seSBzYWZlIGlmIHdlIGN1cnJlbnRseSBoYXZlIHRoZSBmdW5j
dGlvbiBzdHJ1Y3R1cmUhCiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpID09IHNjb3BlQ2hhaW5Ob2Rl
LT5nbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwotICAgIHNldFN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QtPm5hbWVkRnVu
Y3Rpb25TdHJ1Y3R1cmUoKSk7Ci0gICAgcHV0RGlyZWN0T2Zmc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC0+ZnVuY3Rpb25OYW1lT2Zmc2V0KCksIGV4
ZWN1dGFibGUtPm5hbWVWYWx1ZSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3Rv
cmFnZUlmTmVjZXNzYXJ5KAorICAgICAgICBnbG9iYWxEYXRhLAorICAgICAgICBzY29wZUNoYWlu
Tm9kZS0+Z2xvYmFsT2JqZWN0LT5uYW1lZEZ1bmN0aW9uU3RydWN0dXJlKCkpOworICAgIHB1dERp
cmVjdE9mZnNldChnbG9iYWxEYXRhLCBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LT5mdW5j
dGlvbk5hbWVPZmZzZXQoKSwgZXhlY3V0YWJsZS0+bmFtZVZhbHVlKCkpOwogfQogCiBTdHJ1Y3R1
cmUqIEpTRnVuY3Rpb246OmNhY2hlSW5oZXJpdG9ySUQoRXhlY1N0YXRlKiBleGVjKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTIx
NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODUsNyArNTg1LDcgQEAgUHJvcGVydHlTdG9yYWdlIEpTT2JqZWN0Ojpn
cm93UHJvcGVydHlTdAogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgbmV3UHJvcGVydHlT
dG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKTsKICAgICB9Ci0KKyAg
ICAKICAgICBBU1NFUlQobmV3UHJvcGVydHlTdG9yYWdlKTsKICAgICByZXR1cm4gbmV3UHJvcGVy
dHlTdG9yYWdlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiAxMjE1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBnZXR0
ZXIvc2V0dGVyCiAgICAgfTsKIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisjZGVmaW5lIEpTRmlu
YWxPYmplY3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5IDYKKyNlbHNlCisjZGVmaW5lIEpTRmluYWxP
YmplY3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5IDQKKyNlbmRpZgorCitDT01QSUxFX0FTU0VSVCgo
SlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkgPj0gMCksIGZpbmFsX3N0b3JhZ2Vf
bm9uX25lZ2F0aXZlKTsKKwogICAgIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplcjsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVDsKQEAgLTIyMSwxNiArMjI5LDI1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4ZWNTdGF0ZSogZXhl
Yyk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlTdG9yYWdlIGdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KTsKLSAgICAgICAgYm9vbCBpc1VzaW5nSW5saW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IHZvaWQqPihtX3Byb3BlcnR5U3RvcmFnZS5nZXQoKSkgPT0gc3RhdGlj
X2Nhc3Q8Y29uc3Qgdm9pZCo+KHRoaXMgKyAxKTsgfQorICAgICAgICBib29sIGlzVXNpbmdJbmxp
bmVTdG9yYWdlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCByZXN1bHQgPQor
ICAgICAgICAgICAgICAgICFtX3Byb3BlcnR5U3RvcmFnZS5nZXQoKQorICAgICAgICAgICAgICAg
IHx8IHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihtX3Byb3BlcnR5U3RvcmFnZS5nZXQoKSkgPT0g
c3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KHRoaXMgKyAxKTsKKyAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gc3RydWN0dXJlKCktPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogICAgICAgICB2b2lkIHNldFByb3BlcnR5U3Rv
cmFnZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eVN0b3JhZ2UsIFN0cnVjdHVyZSopOworICAgICAg
ICAKKyAgICAgICAgYm9vbCByZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgdm9pZCBzZXRT
dHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVu
c2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1
cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOwogCiAgICAgICAgIHZvaWQqIGFkZHJlc3NPZlByb3BlcnR5U3RvcmFnZSgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiAmbV9wcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgIH0KIAot
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmFzZUV4dGVybmFsU3RvcmFnZUNhcGFjaXR5
ID0gMTY7Ci0KICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0
dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAgLTI1MCwxNCArMjY3
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlTdG9yYWdlIGlubGlu
ZVN0b3JhZ2UpCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKICAgICAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkgPCBiYXNl
RXh0ZXJuYWxTdG9yYWdlQ2FwYWNpdHkpOworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT5pc1VzaW5nSW5saW5lU3RvcmFnZSgpKTsKICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+aXNFbXB0eSgpKTsKICAgICAgICAgICAgIEFTU0VSVChwcm90b3R5cGUoKS5pc051bGwoKSB8
fCBIZWFwOjpoZWFwKHRoaXMpID09IEhlYXA6OmhlYXAocHJvdG90eXBlKCkpKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoaW5saW5lU3RvcmFnZSwgc3RhdGljX2Nhc3Q8dm9pZCo+KGlubGlu
ZVN0b3JhZ2UpID09IHN0YXRpY19jYXN0PHZvaWQqPih0aGlzICsgMSkpOwogICAgICAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZSgpLT5pc09iamVjdCgpKTsKICAgICAgICAgICAgIEFTU0VSVChjbGFz
c0luZm8oKSk7CiAgICAgICAgIH0KQEAgLTMxNiwxNiArMzMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgfTsKIAogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSNkZWZpbmUgSlNOb25GaW5hbE9i
amVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkgNAotI2RlZmluZSBKU0ZpbmFsT2JqZWN0X2lubGlu
ZVN0b3JhZ2VDYXBhY2l0eSA2Ci0jZWxzZQotI2RlZmluZSBKU05vbkZpbmFsT2JqZWN0X2lubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAyCi0jZGVmaW5lIEpTRmluYWxPYmplY3RfaW5saW5lU3RvcmFnZUNh
cGFjaXR5IDQKLSNlbmRpZgotCi1DT01QSUxFX0FTU0VSVCgoSlNGaW5hbE9iamVjdF9pbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgPj0gSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkp
LCBmaW5hbF9zdG9yYWdlX2lzX2F0X2xlYXN0X2FzX2xhcmdlX2FzX25vbl9maW5hbCk7Ci0KICAg
ICAvLyBKU05vbkZpbmFsT2JqZWN0IGlzIGEgdHlwZSBvZiBKU09iamVjdCB0aGF0IGhhcyBzb21l
IGludGVybmFsIHN0b3JhZ2UsCiAgICAgLy8gYnV0IGFsc28gcHJlc2VydmVzIHNvbWUgc3BhY2Ug
aW4gdGhlIGNvbGxlY3RvciBjZWxsIGZvciBhZGRpdGlvbmFsCiAgICAgLy8gZGF0YSBtZW1iZXJz
IGluIGRlcml2ZWQgdHlwZXMuCkBAIC0zNDAsMjIgKzM0NiwyMyBAQCBDT01QSUxFX0FTU0VSVCgo
SlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yCiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAorICAgICAgICBz
dGF0aWMgYm9vbCBoYXNJbmxpbmVTdG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4cGxpY2l0
IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBt
X2lubGluZVN0b3JhZ2UpCisgICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSwgMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG1faW5saW5lU3RvcmFnZSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIShPQkpFQ1RfT0ZGU0VUT0YoSlNOb25GaW5hbE9iamVjdCwgbV9pbmxpbmVT
dG9yYWdlKSAlIHNpemVvZihkb3VibGUpKSk7Ci0gICAgICAgICAgICBBU1NFUlQodGhpcy0+c3Ry
dWN0dXJlKCktPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkgPT0gSlNOb25GaW5hbE9iamVjdF9p
bmxpbmVTdG9yYWdlQ2FwYWNpdHkpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgICAgICAgICBBU1NFUlQoIXRoaXMtPnN0cnVjdHVyZSgpLT5wcm9w
ZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICAgICAgICAgIEFTU0VSVChjbGFzc0luZm8oKSk7
CiAgICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiBtX2lubGluZVN0b3JhZ2VbSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHld
OwogICAgIH07CiAKICAgICBjbGFzcyBKU0ZpbmFsT2JqZWN0OwpAQCAtMzc2LDEwICszODMsMTQg
QEAgQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmplY3RfaW5saW5lU3RvcgogCiAgICAgICAgIHN0
YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKKyAgICAgICAgc3Rh
dGljIGJvb2wgaGFzSW5saW5lU3RvcmFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAgICAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgbV9pbmxpbmVTdG9yYWdlKTsKKyAgICAg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgQVNT
RVJUKCEoT0JKRUNUX09GRlNFVE9GKEpTRmluYWxPYmplY3QsIG1faW5saW5lU3RvcmFnZSkgJSBz
aXplb2YoZG91YmxlKSkpOwogICAgICAgICAgICAgQVNTRVJUKHRoaXMtPnN0cnVjdHVyZSgpLT5w
cm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpID09IEpTRmluYWxPYmplY3RfaW5saW5lU3RvcmFnZUNh
cGFjaXR5KTsKICAgICAgICAgICAgIEFTU0VSVChjbGFzc0luZm8oKSk7CkBAIC00MTcsNyArNDI4
LDYgQEAgaW5saW5lIGJvb2wgaXNKU0ZpbmFsT2JqZWN0KEpTVmFsdWUgdmFsdQogCiBpbmxpbmUg
c2l6ZV90IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKQogewotICAgIEFTU0VSVChP
QkpFQ1RfT0ZGU0VUT0YoSlNGaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKSA9PSBPQkpFQ1Rf
T0ZGU0VUT0YoSlNOb25GaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKSk7CiAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0ZpbmFsT2JqZWN0LCBtX2lubGluZVN0b3JhZ2UpOwogfQogCkBA
IC00NjUsNiArNDc1LDggQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFByb3BlcnR5U3RvcmFn
ZQogewogICAgIEFTU0VSVChzdG9yYWdlKTsKICAgICBBU1NFUlQoc3RydWN0dXJlKTsKKyAgICBB
U1NFUlQoIXN0cnVjdHVyZS0+aXNVc2luZ0lubGluZVN0b3JhZ2UoKQorICAgICAgICAgICB8fCAo
Y2xhc3NJbmZvKCkgPT0gJkpTRmluYWxPYmplY3Q6OnNfaW5mbyAmJiBzdGF0aWNfY2FzdDx2b2lk
Kj4oc3RvcmFnZSkgPT0gc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMgKyAxKSkpOwogICAgIHNldFN0
cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwogICAgIG1fcHJvcGVydHlTdG9yYWdlLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBzdG9yYWdlKTsKIH0KQEAgLTUzMCw5ICs1NDIsMTcgQEAgaW5s
aW5lIFN0cnVjdHVyZSogSlNPYmplY3Q6OmluaGVyaXRvcklEKAogICAgIHJldHVybiBjcmVhdGVJ
bmhlcml0b3JJRChnbG9iYWxEYXRhKTsKIH0KIAoraW5saW5lIHNpemVfdCBTdHJ1Y3R1cmU6Omlu
bGluZVN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgaWYgKGNsYXNzSW5mbygpID09ICZK
U0ZpbmFsT2JqZWN0OjpzX2luZm8pCisgICAgICAgIHJldHVybiBKU0ZpbmFsT2JqZWN0X2lubGlu
ZVN0b3JhZ2VDYXBhY2l0eTsKKyAgICByZXR1cm4gMDsKK30KKwogaW5saW5lIGJvb2wgU3RydWN0
dXJlOjppc1VzaW5nSW5saW5lU3RvcmFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHByb3BlcnR5
U3RvcmFnZUNhcGFjaXR5KCkgPCBKU09iamVjdDo6YmFzZUV4dGVybmFsU3RvcmFnZUNhcGFjaXR5
OworICAgIEFTU0VSVChwcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpID49IGlubGluZVN0b3JhZ2VD
YXBhY2l0eSgpKTsKKyAgICByZXR1cm4gcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSA9PSBpbmxp
bmVTdG9yYWdlQ2FwYWNpdHkoKTsKIH0KIAogaW5saW5lIGJvb2wgSlNDZWxsOjppbmhlcml0cyhj
b25zdCBDbGFzc0luZm8qIGluZm8pIGNvbnN0CkBAIC02ODEsNyArNzAxLDcgQEAgaW5saW5lIGJv
b2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gcHJvcGVydHlTdG9yYWdl
KCk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+c2hvdWxkR3Jvd1Byb3BlcnR5U3RvcmFnZSgp
KQorICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93UHJvcGVydHlTdG9yYWdlKCkp
CiAgICAgICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUoKS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1
Z2dlc3RlZE5ld1Byb3BlcnR5U3RvcmFnZVNpemUoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0cnVj
dHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7CiAgICAgICAgIHNldFByb3BlcnR5
U3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CkBAIC03NDYsMTQg
Kzc2NiwxMSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAg
aWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc0V4dGVuc2libGUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBwcm9wZXJ0eVN0
b3JhZ2UoKTsKLSAgICBpZiAoc3RydWN0dXJlKCktPnNob3VsZEdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
KSkKLSAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCktPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWROZXdQcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOwotCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCB0aGlzLT5z
dHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBv
ZmZzZXQpOwotCisgICAgCiAgICAgQVNTRVJUKG9mZnNldCA8IHN0cnVjdHVyZS0+cHJvcGVydHlT
dG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgc2V0UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIG5l
d1N0b3JhZ2UsIHN0cnVjdHVyZSk7CisgICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3Jh
Z2VJZk5lY2Vzc2FyeShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworCiAgICAgcHV0RGlyZWN0T2Zm
c2V0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOwogICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJv
cGVydHk7IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5
IGNhY2hhYmxlLAogICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3Rh
dGUuCkBAIC03NjIsNiArNzc5LDI2IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bnRlcm5hbCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnNl
dFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUp
Cit7CisgICAgQVNTRVJUKG9sZENhcGFjaXR5IDw9IG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9y
YWdlQ2FwYWNpdHkoKSk7CisgICAgCisgICAgaWYgKG9sZENhcGFjaXR5ID09IG5ld1N0cnVjdHVy
ZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkgeworICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xv
YmFsRGF0YSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisgICAg
ICAgIGdsb2JhbERhdGEsIG9sZENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPnN1Z2dlc3RlZE5ld1By
b3BlcnR5U3RvcmFnZVNpemUoKSk7CisgICAgc2V0UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEs
IG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7Cit9CisKK2lubGluZSB2b2lkIEpTT2JqZWN0Ojpz
ZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCit7CisgICAgc2V0U3RydWN0dXJl
QW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCktPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCksIG5ld1N0cnVjdHVyZSk7Cit9CisK
IGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRPd25EYXRhUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKQEAgLTc4OCwyMSArODI1
LDEzIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIKIHsKICAgICBB
U1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3Ip
KTsKICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IHByb3BlcnR5U3RvcmFnZSgpOwot
ICAgIGlmIChzdHJ1Y3R1cmUoKS0+c2hvdWxkR3Jvd1Byb3BlcnR5U3RvcmFnZSgpKQorICAgIGlm
IChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dQcm9wZXJ0eVN0b3JhZ2UoKSkKICAgICAgICAgbmV3
U3RvcmFnZSA9IGdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPnBy
b3BlcnR5U3RvcmFnZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdQcm9wZXJ0
eVN0b3JhZ2VTaXplKCkpOwogICAgIHNpemVfdCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CiAgICAgc2V0UHJvcGVydHlTdG9yYWdlKGds
b2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSgpKTsKICAgICBwdXREaXJlY3RPZmZzZXQo
Z2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0Ojp0
cmFuc2l0aW9uVG8oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSkKLXsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IHByb3BlcnR5U3RvcmFn
ZSgpOwotICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSAhPSBu
ZXdTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpCi0gICAgICAgIG5ld1N0b3Jh
Z2UgPSBncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5wcm9wZXJ0
eVN0b3JhZ2VDYXBhY2l0eSgpLCBuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5
KCkpOwotICAgIHNldFByb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdT
dHJ1Y3R1cmUpOwotfQotCiBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6dG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCktPmRlZmF1bHRWYWx1ZSh0aGlzLCBleGVjLCBw
cmVmZXJyZWRUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMTIxNTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIFN0
cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmEKICAgICAsIG1fcHJvdG90eXBl
KGdsb2JhbERhdGEsIHRoaXMsIHByb3RvdHlwZSkKICAgICAsIG1fY2xhc3NJbmZvKGNsYXNzSW5m
bykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykK
LSAgICAsIG1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkodHlwZUluZm8uaXNGaW5hbE9iamVjdCgp
ID8gSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkgOiBKU05vbkZpbmFsT2JqZWN0
X2lubGluZVN0b3JhZ2VDYXBhY2l0eSkKKyAgICAsIG1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHko
dHlwZUluZm8uaXNGaW5hbE9iamVjdCgpID8gSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgOiAwKQogICAgICwgbV9vZmZzZXQobm9PZmZzZXQpCiAgICAgLCBtX2RpY3Rpb25hcnlL
aW5kKE5vbmVEaWN0aW9uYXJ5S2luZCkKICAgICAsIG1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKGZh
bHNlKQpAQCAtMjU2LDE5ICsyNTYsMjEgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJv
cGVydHlNYXAoSgogICAgIH0KIH0KIAoraW5saW5lIHNpemVfdCBuZXh0UHJvcGVydHlTdG9yYWdl
Q2FwYWNpdHkoc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSkKK3sKKyAgICBpZiAoIWN1cnJlbnRDYXBh
Y2l0eSkKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgcmV0dXJuIGN1cnJlbnRDYXBhY2l0eSAqIDI7
Cit9CisKIHZvaWQgU3RydWN0dXJlOjpncm93UHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKQogewot
ICAgIGlmIChpc1VzaW5nSW5saW5lU3RvcmFnZSgpKQotICAgICAgICBtX3Byb3BlcnR5U3RvcmFn
ZUNhcGFjaXR5ID0gSlNPYmplY3Q6OmJhc2VFeHRlcm5hbFN0b3JhZ2VDYXBhY2l0eTsKLSAgICBl
bHNlCi0gICAgICAgIG1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkgKj0gMjsKKyAgICBtX3Byb3Bl
cnR5U3RvcmFnZUNhcGFjaXR5ID0gbmV4dFByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KG1fcHJvcGVy
dHlTdG9yYWdlQ2FwYWNpdHkpOwogfQogCiBzaXplX3QgU3RydWN0dXJlOjpzdWdnZXN0ZWROZXdQ
cm9wZXJ0eVN0b3JhZ2VTaXplKCkKIHsKLSAgICBpZiAoaXNVc2luZ0lubGluZVN0b3JhZ2UoKSkK
LSAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpiYXNlRXh0ZXJuYWxTdG9yYWdlQ2FwYWNpdHk7Ci0g
ICAgcmV0dXJuIG1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkgKiAyOworICAgIHJldHVybiBuZXh0
UHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkobV9wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSk7CiB9CiAg
CiB2b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjE1MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDcgKzEwMywyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0Zyb3pl
bihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUoKSBjb25zdCB7IHJl
dHVybiAhbV9wcmV2ZW50RXh0ZW5zaW9uczsgfQogICAgICAgICBib29sIGRpZFRyYW5zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2RpZFRyYW5zaXRpb247IH0KLSAgICAgICAgYm9vbCBzaG91bGRH
cm93UHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSA9
PSBwcm9wZXJ0eVN0b3JhZ2VTaXplKCk7IH0KKyAgICAgICAgYm9vbCBwdXRXaWxsR3Jvd1Byb3Bl
cnR5U3RvcmFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwcm9wZXJ0eVN0b3Jh
Z2VDYXBhY2l0eSgpID49IHByb3BlcnR5U3RvcmFnZVNpemUoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKSB7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY3VycmVudFNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQgKyAxKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQocHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSA+PSBjdXJyZW50
U2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaXplID09IHByb3BlcnR5U3Rv
cmFnZUNhcGFjaXR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFTU0VSVChwcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpID49IG1fcHJvcGVydHlUYWJsZS0+cHJv
cGVydHlTdG9yYWdlU2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChtX3Byb3BlcnR5VGFibGUtPmhh
c0RlbGV0ZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEFTU0VSVChwcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpID49IG1f
cHJvcGVydHlUYWJsZS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VGFi
bGUtPnNpemUoKSA9PSBwcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOworICAgICAgICB9CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzdWdnZXN0ZWROZXdQcm9wZXJ0eVN0b3JhZ2VT
aXplKCk7IAogCiAgICAgICAgIFN0cnVjdHVyZSogZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiwgSlNPYmplY3QqKTsKQEAgLTEzOSw2ICsxNTUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBncm93UHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKTsKICAgICAg
ICAgdW5zaWduZWQgcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSBjb25zdCB7IEFTU0VSVChzdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJldHVybiBtX3Byb3BlcnR5U3RvcmFn
ZUNhcGFjaXR5OyB9CiAgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5U3RvcmFnZVNpemUoKSBjb25z
dCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJldHVybiAo
bV9wcm9wZXJ0eVRhYmxlID8gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkg
OiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQgKyAxKSk7IH0KKyAgICAgICAgc2l6ZV90
IGlubGluZVN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0OwogICAgICAgICBib29sIGlzVXNpbmdJbmxp
bmVTdG9yYWdlKCkgY29uc3Q7CiAKICAgICAgICAgc2l6ZV90IGdldChKU0dsb2JhbERhdGEmLCBQ
cm9wZXJ0eU5hbWUpOwo=
</data>
<flag name="review"
          id="158504"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>