<?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>22980</bug_id>
          
          <creation_ts>2008-12-23 10:57:15 -0800</creation_ts>
          <short_desc>WebCore uses more thread specific keys than it really needs</short_desc>
          <delta_ts>2008-12-23 23:48:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>103312</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-23 10:57:15 -0800</bug_when>
    <thetext>We should consolidate all ThreadSpecific objects into a single structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103317</commentid>
    <comment_count>1</comment_count>
      <attachid>26229</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-23 12:47:15 -0800</bug_when>
    <thetext>Created attachment 26229
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103320</commentid>
    <comment_count>2</comment_count>
      <attachid>26229</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-23 13:07:12 -0800</bug_when>
    <thetext>Comment on attachment 26229
proposed patch

&gt; +#if PLATFORM(MAC)
&gt; +    delete m_cachedConverterTEC;
&gt; +#endif
&gt; +#if USE(ICU_UNICODE)
&gt; +    delete m_cachedConverterICU;
&gt; +#endif
&gt; +
&gt; +    delete m_eventNames;
&gt; +    delete m_atomicStringTable;
&gt; +
&gt; +    ASSERT(m_emptyString-&gt;hasOneRef());
&gt; +    delete m_emptyString;
&gt; +}

Why not use an OwnPtr?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103349</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-23 23:48:25 -0800</bug_when>
    <thetext>Committed revision 39465.

With OwnPtr, I wouldn&apos;t be able to assert m_emptyString-&gt;hasOneRef(), which is a rather important check.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26229</attachid>
            <date>2008-12-23 12:47:15 -0800</date>
            <delta_ts>2008-12-23 13:07:12 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>ThreadGlobalData.txt</filename>
            <type>text/plain</type>
            <size>29836</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTQ1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDgtMTItMjMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk4MAorICAgICAgICBX
ZWJDb3JlIHVzZXMgbW9yZSB0aHJlYWQgc3BlY2lmaWMga2V5cyB0aGFuIGl0IHJlYWxseSBuZWVk
cworCisgICAgICAgIENvbnNvbGlkYXRlZCBUaHJlYWRTcGVjaWZpYyBkYXRhIGludG8gYSBzaW5n
bGUgVGhyZWFkR2xvYmFsRGF0YSBzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNvcmUuc2NvbnM6
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2Vz
LmJrbDoKKyAgICAgICAgKiBkb20vRXZlbnROYW1lcy5jcHA6CisgICAgICAgICogZG9tL0V2ZW50
TmFtZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TmFtZXMpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OkZyYW1lKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0
aHJlYWRHbG9iYWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6OlRo
cmVhZEdsb2JhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkR2xvYmFsRGF0YTo6flRo
cmVhZEdsb2JhbERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhOjpldmVudE5hbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6OmVtcHR5U3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6OmF0b21pY1N0cmluZ1RhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6OmNhY2hlZENvbnZlcnRlcklDVSk6CisgICAg
ICAgIChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhOjpjYWNoZWRDb252ZXJ0ZXJURUMpOgorICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnN0cmluZ1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6YWRkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkF0b21pY1N0cmluZzo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmc6Omlu
aXQpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdJbXBsOjplbXB0eSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJp
bmdJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SUNVQ29udmVydGVyV3JhcHBlcjo6fklDVUNvbnZlcnRlcldyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkQ29udmVydGVySUNVKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oOgorICAgICAgICAoV2ViQ29yZTo6SUNVQ29udmVydGVy
V3JhcHBlcjo6SUNVQ29udmVydGVyV3JhcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9t
YWMvVGV4dENvZGVjTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENvbnZlcnRlclRF
Qyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmg6CisgICAgICAg
IChXZWJDb3JlOjpURUNDb252ZXJ0ZXJXcmFwcGVyOjpURUNDb252ZXJ0ZXJXcmFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRFQ0NvbnZlcnRlcldyYXBwZXI6On5URUNDb252ZXJ0ZXJXcmFwcGVy
KToKKwogMjAwOC0xMi0yMiAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gMzk0NTApCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQ0LDYgKzEyNDQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0v
U3lzdGVtVGltZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1RoZW1lVHlwZXMuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9UaHJlYWRDaGVjay5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2Jh
bERhdGEuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9UaW1lci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vVGltZXIuaCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24g
Mzk0NTApCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
Miw2ICszNzIsOCBAQCBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kCiBf
X1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCiBfX1pON1dlYkNvcmUx
NmVuY2xvc2luZ0ludFJlY3RFUks3X05TUmVjdAogX19aTjdXZWJDb3JlMTZpc0VuZE9mUGFyYWdy
YXBoRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCitfX1pON1dlYkNvcmUxNlRocmVhZEdsb2JhbERh
dGExMGV2ZW50TmFtZXNFdgorX19aTjdXZWJDb3JlMTZ0aHJlYWRHbG9iYWxEYXRhRXYKIF9fWk43
V2ViQ29yZTE3RE9NSW1wbGVtZW50YXRpb24xNGlzVGV4dE1JTUVUeXBlRVJLTlNfNlN0cmluZ0UK
IF9fWk43V2ViQ29yZTE3RnJhbWVMb2FkZXJDbGllbnREMkV2CiBfX1pON1dlYkNvcmUxN0dseXBo
UGFnZVRyZWVOb2RlMTh0cmVlR2x5cGhQYWdlQ291bnRFdgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnNjb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkocmV2aXNpb24gMzk0
NTApCisrKyBXZWJDb3JlL1dlYkNvcmUuc2NvbnMJKHdvcmtpbmcgY29weSkKQEAgLTcxMSw2ICs3
MTEsNyBAQCBzb3VyY2VzWydwbGF0Zm9ybSddID0gWwogICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcCcsCiAgICAgJ3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAnLAogICAgICdwbGF0Zm9ybS9U
aGVtZS5jcHAnLAorICAgICdwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcCcsCiAgICAgJ3Bs
YXRmb3JtL1RpbWVyLmNwcCcsCiAgICAgJ3BsYXRmb3JtL1dpZGdldC5jcHAnCiBdCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVT
b3VyY2VzLmJrbAkocmV2aXNpb24gMzk0NTApCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAkod29ya2luZyBjb3B5KQpAQCAtNzQ2LDYgKzc0Niw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0
aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rpbmcu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAKKyAgICAgICAgcGxhdGZvcm0vVGhyZWFk
R2xvYmFsRGF0YS5jcHAKICAgICAgICAgcGxhdGZvcm0vVGltZXIuY3BwCiAgICAgICAgIHBsYXRm
b3JtL1dpZGdldC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDM5NDUw
KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzM3Miw2ICszMzcyLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFRocmVhZEdsb2JhbERhdGEuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cVGhyZWFkR2xvYmFsRGF0YS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cVGltZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9G
aWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAzOTQ1MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00Mjk0LDYgKzQyOTQsOCBAQAogCQlFMUVEOEFDMzBDQzQ5
QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRDhBQzIwQ0M0OUJFMDAwQkZDNTU3
IC8qIENTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCAqLzsgfTsKIAkJRTFGMUU4MkYwQzNDMkJC
OTAwNkRCMzkxIC8qIFhTTFRFeHRlbnNpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRjFFODJEMEMzQzJCQjkwMDZEQjM5MSAvKiBYU0xURXh0
ZW5zaW9ucy5jcHAgKi87IH07CiAJCUUxRjFFODMwMEMzQzJCQjkwMDZEQjM5MSAvKiBYU0xURXh0
ZW5zaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFGMUU4MkUwQzNDMkJCOTAwNkRCMzkxIC8qIFhTTFRFeHRlbnNpb25zLmggKi87IH07CisJCUUx
RkY1N0EzMEYwMTI1NUIwMDg5MUVCQiAvKiBUaHJlYWRHbG9iYWxEYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUZGNTdBMjBGMDEyNTVCMDA4OTFF
QkIgLyogVGhyZWFkR2xvYmFsRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUUxRkY1N0E2MEYwMTI1NkIwMDg5MUVCQiAvKiBUaHJlYWRHbG9i
YWxEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxRkY1N0E1MEYwMTI1NkIwMDg5MUVCQiAvKiBUaHJlYWRHbG9iYWxEYXRhLmNwcCAqLzsgfTsK
IAkJRTQxNUYxNjkwRDlBMTY1RDAwMzNDRTk3IC8qIERPTUVsZW1lbnRUaW1lQ29udHJvbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQxNUYxNjgwRDlB
MTY1RDAwMzNDRTk3IC8qIERPTUVsZW1lbnRUaW1lQ29udHJvbC5oICovOyB9OwogCQlFNDE1RjE4
NDBEOUExQTgzMDAzM0NFOTcgLyogRWxlbWVudFRpbWVDb250cm9sLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDE1RjE4MzBEOUExQTgzMDAzM0NFOTcg
LyogRWxlbWVudFRpbWVDb250cm9sLmggKi87IH07CiAJCUU0NDYxM0ExMENENjMzMTAwMEZBREE3
NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NDYxMzhGMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVt
ZW50LmNwcCAqLzsgfTsKQEAgLTkwMjYsNiArOTAyOCw4IEBACiAJCUUxRUQ4QUMyMENDNDlCRTAw
MEJGQzU1NyAvKiBDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTFGMUU4MkQwQzNDMkJCOTAwNkRCMzkxIC8qIFhTTFRFeHRlbnNp
b25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhTTFRFeHRlbnNp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFGMUU4MkUwQzNDMkJCOTAw
NkRCMzkxIC8qIFhTTFRFeHRlbnNpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFhTTFRFeHRlbnNpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxRkY1
N0EyMEYwMTI1NUIwMDg5MUVCQiAvKiBUaHJlYWRHbG9iYWxEYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEdsb2JhbERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTFGRjU3QTUwRjAxMjU2QjAwODkxRUJCIC8qIFRocmVhZEdsb2JhbERhdGEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkR2xvYmFsRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MTVGMTBDMEQ5QTA1ODcwMDMz
Q0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVs
ZW1lbnRUaW1lQ29udHJvbC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MTVG
MTY4MEQ5QTE2NUQwMDMzQ0U5NyAvKiBET01FbGVtZW50VGltZUNvbnRyb2wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRWxlbWVudFRpbWVDb250cm9sLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MTVGMTgzMEQ5QTFBODMwMDMzQ0U5NyAvKiBFbGVtZW50
VGltZUNvbnRyb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudFRp
bWVDb250cm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzU4OCw2ICsxMzU5
Miw4IEBACiAJCQkJQkNFNjU4RkUwRUE5MjQ4QTAwN0U0NTMzIC8qIFRoZW1lLmggKi8sCiAJCQkJ
QkNFNjU5QTgwRUE5MjdCOTAwN0U0NTMzIC8qIFRoZW1lVHlwZXMuaCAqLywKIAkJCQk1MURGNkQ3
RDBCOTJBMTZEMDBDMkRDODUgLyogVGhyZWFkQ2hlY2suaCAqLywKKwkJCQlFMUZGNTdBNTBGMDEy
NTZCMDA4OTFFQkIgLyogVGhyZWFkR2xvYmFsRGF0YS5jcHAgKi8sCisJCQkJRTFGRjU3QTIwRjAx
MjU1QjAwODkxRUJCIC8qIFRocmVhZEdsb2JhbERhdGEuaCAqLywKIAkJCQk5MzMwOUVBMTA5OUVC
NzhDMDA1NkU1ODEgLyogVGltZXIuY3BwICovLAogCQkJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1
NSAvKiBUaW1lci5oICovLAogCQkJCTE0MTlEMkM0MENFQTZGNjEwMEZGNTA3QSAvKiBUcmVlU2hh
cmVkLmggKi8sCkBAIC0xNjQ4Nyw2ICsxNjQ5Myw3IEBACiAJCQkJMUE1NjlEMjMwRDdFMkI4MjAw
N0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQyNTBE
N0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMw
OUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRTFGRjU3QTMwRjAxMjU1QjAwODkxRUJCIC8qIFRocmVhZEdsb2JhbERhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMTg0NDMsNiArMTg0NTAsNyBAQAogCQkJCTFBNTY5RDIyMEQ3RTJCODIwMDdD
Mzk4MyAvKiBydW50aW1lX29iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTU2OUQyNDBE
N0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RTFEMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUUxRkY1N0E2MEYwMTI1NkIwMDg5MUVCQiAvKiBUaHJlYWRHbG9iYWxEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAJKHJldmlzaW9uIDM5NDUwKQorKysgV2Vi
Q29yZS9kb20vRXZlbnROYW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIxICsyMyw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogCi0jaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0jaW5jbHVkZSA8d3Rm
L1RocmVhZFNwZWNpZmljLmg+Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShXT1JLRVJTKQotc3RhdGljIFRocmVhZFNwZWNp
ZmljPEV2ZW50TmFtZXM+KiBzdGF0aWNFdmVudE5hbWVzOwotI2Vsc2UKLXN0YXRpYyBFdmVudE5h
bWVzKiBzdGF0aWNFdmVudE5hbWVzOwotI2VuZGlmCi0KICNkZWZpbmUgSU5JVElBTElaRV9FVkVO
VF9OQU1FKG5hbWUpIFwKICAgICAsIG5hbWUjI0V2ZW50KCNuYW1lKQogRXZlbnROYW1lczo6RXZl
bnROYW1lcygpCkBAIC00NiwyOSArMzMsNCBAQCBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0goSU5J
VElBTElaRV9FVkVOCiB7CiB9CiAKLUV2ZW50TmFtZXMmIGV2ZW50TmFtZXMoKQotewotI2lmIEVO
QUJMRShXT1JLRVJTKQotICAgIHJldHVybiAqKnN0YXRpY0V2ZW50TmFtZXM7Ci0jZWxzZQotICAg
IHJldHVybiAqc3RhdGljRXZlbnROYW1lczsKLSNlbmRpZgotfQotCi12b2lkIEV2ZW50TmFtZXM6
OmluaXQoKQotewotICAgIGlmICghc3RhdGljRXZlbnROYW1lcykgewotICAgICAgICAvLyBJbml0
aWFsaXphdGlvbiBpcyBub3QgdGhyZWFkIHNhZmUsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBj
YWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQgZmlyc3QuCi0gICAgICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICAgICAgQXRvbWljU3RyaW5nOjppbml0KCk7Ci0KLSNpZiBFTkFCTEUo
V09SS0VSUykKLSAgICAgICAgc3RhdGljRXZlbnROYW1lcyA9IG5ldyBUaHJlYWRTcGVjaWZpYzxF
dmVudE5hbWVzPjsKLSNlbHNlCi0gICAgICAgIHN0YXRpY0V2ZW50TmFtZXMgPSBuZXcgRXZlbnRO
YW1lczsKLSNlbmRpZgotICAgIH0KLX0KLQogfQpJbmRleDogV2ViQ29yZS9kb20vRXZlbnROYW1l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkocmV2aXNpb24gMzk0
NTApCisrKyBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEw
ICsyMyw3IEBACiAjZGVmaW5lIEV2ZW50TmFtZXNfaAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5n
LmgiCi0KLW5hbWVzcGFjZSBXVEYgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBUaHJl
YWRTcGVjaWZpYzsKLX0KKyNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMTMyLDIwICsxMjksMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Ly8gZW5kIG9mIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSAogCiAgICAgY2xhc3MgRXZlbnROYW1l
cyB7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBXVEY6OlRocmVhZFNwZWNpZmljPEV2ZW50TmFtZXM+
OwotCi0gICAgICAgIEV2ZW50TmFtZXMoKTsKICAgICAgICAgaW50IGR1bW15OyAvLyBOZWVkZWQg
dG8gbWFrZSBpbml0aWFsaXphdGlvbiBtYWNybyB3b3JrLgogCiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgdm9pZCBpbml0KCk7CisgICAgICAgIEV2ZW50TmFtZXMoKTsKIAogICAgICAgICAj
ZGVmaW5lIERPTV9FVkVOVF9OQU1FU19ERUNMQVJFKG5hbWUpIEF0b21pY1N0cmluZyBuYW1lIyNF
dmVudDsKICAgICAgICAgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKERPTV9FVkVOVF9OQU1FU19E
RUNMQVJFKQogICAgICAgICAjdW5kZWYgRE9NX0VWRU5UX05BTUVTX0RFQ0xBUkUKICAgICB9Owog
Ci0gICAgRXZlbnROYW1lcyYgZXZlbnROYW1lcygpOworICAgIGlubGluZSBFdmVudE5hbWVzJiBl
dmVudE5hbWVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aHJlYWRHbG9iYWxEYXRhKCkuZXZl
bnROYW1lcygpOworICAgIH0KIAogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDM5NDUwKQorKysg
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw2IEBA
IEZyYW1lOjpGcmFtZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckUKICAgICA6IGQobmV3IEZy
YW1lUHJpdmF0ZShwYWdlLCBwYXJlbnRGcm9tT3duZXJFbGVtZW50KG93bmVyRWxlbWVudCksIHRo
aXMsIG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXJDbGllbnQpKQogewogICAgIEF0b21pY1N0cmlu
Zzo6aW5pdCgpOwotICAgIEV2ZW50TmFtZXM6OmluaXQoKTsKICAgICBIVE1MTmFtZXM6OmluaXQo
KTsKICAgICBRdWFsaWZpZWROYW1lOjppbml0KCk7CiAgICAgTWVkaWFGZWF0dXJlTmFtZXM6Omlu
aXQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisj
aW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCisj
aWYgVVNFKElDVV9VTklDT0RFKQorI2luY2x1ZGUgIlRleHRDb2RlY0lDVS5oIgorI2VuZGlmCisK
KyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiVGV4dENvZGVjTWFjLmgiCisjZW5kaWYKKwor
I2lmIEVOQUJMRShXT1JLRVJTKQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitUaHJlYWRHbG9iYWxEYXRhJiB0aHJlYWRHbG9iYWxEYXRh
KCkKK3sKKyAgICAvLyBGSVhNRTogV29ya2VycyBhcmUgbm90IG5lY2Vzc2FyaWx5IHRoZSBvbmx5
IGZlYXR1cmUgdGhhdCBtYWtlIHBlci10aHJlYWQgZ2xvYmFsIGRhdGEgbmVjZXNzYXJ5LgorICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGUuZy4gZGF0YWJhc2Ugb2JqZWN0cyBtYW5pcHVsYXRp
bmcgc3RyaW5ncyBvbiBzZWNvbmRhcnkgdGhyZWFkcy4KKyNpZiBFTkFCTEUoV09SS0VSUykKKyAg
ICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoVGhyZWFkU3BlY2lmaWM8VGhyZWFkR2xvYmFs
RGF0YT4qLCB0aHJlYWRHbG9iYWxEYXRhID0gbmV3IFRocmVhZFNwZWNpZmljPFRocmVhZEdsb2Jh
bERhdGE+KTsKKyAgICByZXR1cm4gKip0aHJlYWRHbG9iYWxEYXRhOworI2Vsc2UKKyAgICBzdGF0
aWMgVGhyZWFkR2xvYmFsRGF0YSogc3RhdGljRGF0YSA9IG5ldyBUaHJlYWRHbG9iYWxEYXRhOwor
ICAgIHJldHVybiAqc3RhdGljRGF0YTsKKyNlbmRpZgorfQorCitUaHJlYWRHbG9iYWxEYXRhOjpU
aHJlYWRHbG9iYWxEYXRhKCkKKyAgICA6IG1fZW1wdHlTdHJpbmcobmV3IFN0cmluZ0ltcGwpCisg
ICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlKG5ldyBIYXNoU2V0PFN0cmluZ0ltcGwqPikKKyAgICAs
IG1fZXZlbnROYW1lcygwKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKKyAgICAsIG1fY2FjaGVkQ29u
dmVydGVySUNVKG5ldyBJQ1VDb252ZXJ0ZXJXcmFwcGVyKQorI2VuZGlmCisjaWYgUExBVEZPUk0o
TUFDKQorICAgICwgbV9jYWNoZWRDb252ZXJ0ZXJURUMobmV3IFRFQ0NvbnZlcnRlcldyYXBwZXIp
CisjZW5kaWYKK3sKK30KKworVGhyZWFkR2xvYmFsRGF0YTo6flRocmVhZEdsb2JhbERhdGEoKQor
eworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBkZWxldGUgbV9jYWNoZWRDb252ZXJ0ZXJURUM7Cisj
ZW5kaWYKKyNpZiBVU0UoSUNVX1VOSUNPREUpCisgICAgZGVsZXRlIG1fY2FjaGVkQ29udmVydGVy
SUNVOworI2VuZGlmCisKKyAgICBkZWxldGUgbV9ldmVudE5hbWVzOworICAgIGRlbGV0ZSBtX2F0
b21pY1N0cmluZ1RhYmxlOworCisgICAgQVNTRVJUKG1fZW1wdHlTdHJpbmctPmhhc09uZVJlZigp
KTsKKyAgICBkZWxldGUgbV9lbXB0eVN0cmluZzsKK30KKworRXZlbnROYW1lcyYgVGhyZWFkR2xv
YmFsRGF0YTo6ZXZlbnROYW1lcygpCit7CisgICAgLy8gbV9ldmVudE5hbWVzIGNhbm5vdCBiZSBp
bml0aWFsaXplZCBpbiBjb25zdHJ1Y3RvciwgYXMgdGhhdCB3b3VsZCBjYXVzZSByZWN1cnNpb24u
CisgICAgaWYgKCFtX2V2ZW50TmFtZXMpCisgICAgICAgIG1fZXZlbnROYW1lcyA9IG5ldyBFdmVu
dE5hbWVzOworICAgIHJldHVybiAqbV9ldmVudE5hbWVzOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2Jh
bERhdGEuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBUaHJlYWRHbG9iYWxEYXRhX2gKKyNkZWZpbmUgVGhy
ZWFkR2xvYmFsRGF0YV9oCisKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgY2xhc3MgRXZlbnROYW1lczsKKyAgICBzdHJ1Y3QgSUNVQ29udmVydGVy
V3JhcHBlcjsKKyAgICBzdHJ1Y3QgVEVDQ29udmVydGVyV3JhcHBlcjsKKworICAgIGNsYXNzIFRo
cmVhZEdsb2JhbERhdGEgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBUaHJl
YWRHbG9iYWxEYXRhKCk7CisgICAgICAgIH5UaHJlYWRHbG9iYWxEYXRhKCk7CisKKyAgICAgICAg
RXZlbnROYW1lcyYgZXZlbnROYW1lcygpOworICAgICAgICBTdHJpbmdJbXBsKiBlbXB0eVN0cmlu
ZygpIHsgcmV0dXJuIG1fZW1wdHlTdHJpbmc7IH0KKyAgICAgICAgSGFzaFNldDxTdHJpbmdJbXBs
Kj4mIGF0b21pY1N0cmluZ1RhYmxlKCkgeyByZXR1cm4gKm1fYXRvbWljU3RyaW5nVGFibGU7IH0K
KworI2lmIFVTRShJQ1VfVU5JQ09ERSkKKyAgICAgICAgSUNVQ29udmVydGVyV3JhcHBlciYgY2Fj
aGVkQ29udmVydGVySUNVKCkgeyByZXR1cm4gKm1fY2FjaGVkQ29udmVydGVySUNVOyB9CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgVEVDQ29udmVydGVyV3JhcHBlciYgY2Fj
aGVkQ29udmVydGVyVEVDKCkgeyByZXR1cm4gKm1fY2FjaGVkQ29udmVydGVyVEVDOyB9CisjZW5k
aWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFN0cmluZ0ltcGwqIG1fZW1wdHlTdHJpbmc7Cisg
ICAgICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+KiBtX2F0b21pY1N0cmluZ1RhYmxlOworICAgICAg
ICBFdmVudE5hbWVzKiBtX2V2ZW50TmFtZXM7CisKKyNpZiBVU0UoSUNVX1VOSUNPREUpCisgICAg
ICAgIElDVUNvbnZlcnRlcldyYXBwZXIqIG1fY2FjaGVkQ29udmVydGVySUNVOworI2VuZGlmCisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIFRFQ0NvbnZlcnRlcldyYXBwZXIqIG1fY2FjaGVk
Q29udmVydGVyVEVDOworI2VuZGlmCisgICAgfTsKKworICAgIFRocmVhZEdsb2JhbERhdGEmIHRo
cmVhZEdsb2JhbERhdGEoKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VGhyZWFkR2xvYmFsRGF0YV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3Jt
L1RocmVhZEdsb2JhbERhdGEuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBu
YXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAkocmV2aXNp
b24gMzk0NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDEwIEBACiAKICNpbmNsdWRlICJTdGF0aWNDb25zdHJ1
Y3RvcnMuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGhyZWFkR2xvYmFs
RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0jaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmlj
Lmg+Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotI2VuZGlmCi0KICNpZiBVU0UoSlNDKQogI2luY2x1
ZGUgPHJ1bnRpbWUvSWRlbnRpZmllci5oPgogdXNpbmcgSlNDOjpJZGVudGlmaWVyOwpAQCAtNDQs
MTkgKzQwLDkgQEAgdXNpbmcgSlNDOjpVU3RyaW5nOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSNpZiBFTkFCTEUoV09SS0VSUykKLXN0YXRpYyBUaHJlYWRTcGVjaWZpYzxIYXNoU2V0PFN0cmlu
Z0ltcGwqPiA+KiBzdGF0aWNTdHJpbmdUYWJsZTsKLSNlbHNlCi1zdGF0aWMgSGFzaFNldDxTdHJp
bmdJbXBsKj4qIHN0YXRpY1N0cmluZ1RhYmxlOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgSGFz
aFNldDxTdHJpbmdJbXBsKj4qIHN0cmluZ1RhYmxlKCkKK3N0YXRpYyBpbmxpbmUgSGFzaFNldDxT
dHJpbmdJbXBsKj4mIHN0cmluZ1RhYmxlKCkKIHsKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBy
ZXR1cm4gKnN0YXRpY1N0cmluZ1RhYmxlOwotI2Vsc2UKLSAgICByZXR1cm4gc3RhdGljU3RyaW5n
VGFibGU7Ci0jZW5kaWYKKyAgICByZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmF0b21pY1N0cmlu
Z1RhYmxlKCk7CiB9CiAKIHN0cnVjdCBDU3RyaW5nVHJhbnNsYXRvciB7CkBAIC05OSw3ICs4NSw3
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKCEqYykKICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7
ICAgIAotICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRS
ZXN1bHQgPSBzdHJpbmdUYWJsZSgpLT5hZGQ8Y29uc3QgY2hhciosIENTdHJpbmdUcmFuc2xhdG9y
PihjKTsKKyAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwgYm9vbD4gYWRk
UmVzdWx0ID0gc3RyaW5nVGFibGUoKS5hZGQ8Y29uc3QgY2hhciosIENTdHJpbmdUcmFuc2xhdG9y
PihjKTsKICAgICBpZiAoIWFkZFJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJldHVybiAqYWRkUmVz
dWx0LmZpcnN0OwogICAgIHJldHVybiBhZG9wdFJlZigqYWRkUmVzdWx0LmZpcnN0KTsKQEAgLTE5
MSw3ICsxNzcsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkCiAg
ICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgIAogICAgIFVDaGFyQnVmZmVy
IGJ1ZiA9IHsgcywgbGVuZ3RoIH07IAotICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0
ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZSgpLT5hZGQ8VUNoYXJCdWZmZXIs
IFVDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVmKTsKKyAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1w
bCo+OjppdGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUoKS5hZGQ8VUNoYXJC
dWZmZXIsIFVDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVmKTsKIAogICAgIC8vIElmIHRoZSBzdHJp
bmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgogICAgIC8v
IFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCkBAIC0yMTEs
NyArMTk3LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZAogICAg
ICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKIAogICAgIFVDaGFyQnVmZmVyIGJ1ZiA9
IHtzLCBsZW5ndGh9OyAKLSAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwg
Ym9vbD4gYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUoKS0+YWRkPFVDaGFyQnVmZmVyLCBVQ2hhckJ1
ZmZlclRyYW5zbGF0b3I+KGJ1Zik7CisgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRl
cmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlKCkuYWRkPFVDaGFyQnVmZmVyLCBV
Q2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1Zik7CiAKICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIG5l
d2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBpdC4KICAgICAvLyBUaGUgYm9v
bGVhbiBpbiB0aGUgcGFpciB0ZWxscyB1cyBpZiB0aGF0IGlzIHNvLgpAQCAtMjI2LDcgKzIxMiw3
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKICAgICBpZiAoci0+
bGVuZ3RoKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAg
Ci0gICAgU3RyaW5nSW1wbCogcmVzdWx0ID0gKnN0cmluZ1RhYmxlKCktPmFkZChyKS5maXJzdDsK
KyAgICBTdHJpbmdJbXBsKiByZXN1bHQgPSAqc3RyaW5nVGFibGUoKS5hZGQocikuZmlyc3Q7CiAg
ICAgaWYgKHJlc3VsdCA9PSByKQogICAgICAgICByLT5tX2luVGFibGUgPSB0cnVlOwogICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0yMzQsNyArMjIwLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBB
dG9taWNTdHJpbmc6OmFkZAogCiB2b2lkIEF0b21pY1N0cmluZzo6cmVtb3ZlKFN0cmluZ0ltcGwq
IHIpCiB7Ci0gICAgc3RyaW5nVGFibGUoKS0+cmVtb3ZlKHIpOworICAgIHN0cmluZ1RhYmxlKCku
cmVtb3ZlKHIpOwogfQogCiAjaWYgVVNFKEpTQykKQEAgLTI0OSw3ICsyMzUsNyBAQCBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkCiAgICAgICAgIHJldHVybiBTdHJpbmdJ
bXBsOjplbXB0eSgpOwogCiAgICAgSGFzaEFuZENoYXJhY3RlcnMgYnVmZmVyID0geyBzdHJpbmct
PmNvbXB1dGVkSGFzaCgpLCBzdHJpbmctPmRhdGEoKSwgbGVuZ3RoIH07IAotICAgIHBhaXI8SGFz
aFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJs
ZSgpLT5hZGQ8SGFzaEFuZENoYXJhY3RlcnMsIEhhc2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcj4o
YnVmZmVyKTsKKyAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwgYm9vbD4g
YWRkUmVzdWx0ID0gc3RyaW5nVGFibGUoKS5hZGQ8SGFzaEFuZENoYXJhY3RlcnMsIEhhc2hBbmRD
aGFyYWN0ZXJzVHJhbnNsYXRvcj4oYnVmZmVyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5zZWNvbmQp
CiAgICAgICAgIHJldHVybiAqYWRkUmVzdWx0LmZpcnN0OwogICAgIHJldHVybiBhZG9wdFJlZigq
YWRkUmVzdWx0LmZpcnN0KTsKQEAgLTI2Niw3ICsyNTIsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IEF0b21pY1N0cmluZzo6YWRkCiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OwogCiAgICAgSGFzaEFuZENoYXJhY3RlcnMgYnVmZmVyID0geyBzdHJpbmctPmhhc2goKSwgc3Ry
aW5nLT5kYXRhKCksIGxlbmd0aCB9OyAKLSAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+Ojpp
dGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUoKS0+YWRkPEhhc2hBbmRDaGFy
YWN0ZXJzLCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I+KGJ1ZmZlcik7CisgICAgcGFpcjxI
YXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IHN0cmluZ1Rh
YmxlKCkuYWRkPEhhc2hBbmRDaGFyYWN0ZXJzLCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I+
KGJ1ZmZlcik7CiAgICAgaWYgKCFhZGRSZXN1bHQuc2Vjb25kKQogICAgICAgICByZXR1cm4gKmFk
ZFJlc3VsdC5maXJzdDsKICAgICByZXR1cm4gYWRvcHRSZWYoKmFkZFJlc3VsdC5maXJzdCk7CkBA
IC0yODMsOCArMjY5LDggQEAgQXRvbWljU3RyaW5nSW1wbCogQXRvbWljU3RyaW5nOjpmaW5kKGNv
bgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KFN0cmluZ0lt
cGw6OmVtcHR5KCkpOwogCiAgICAgSGFzaEFuZENoYXJhY3RlcnMgYnVmZmVyID0geyBzdHJpbmct
PmNvbXB1dGVkSGFzaCgpLCBzdHJpbmctPmRhdGEoKSwgbGVuZ3RoIH07IAotICAgIEhhc2hTZXQ8
U3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdGVyYXRvciA9IHN0cmluZ1RhYmxlKCktPmZpbmQ8SGFz
aEFuZENoYXJhY3RlcnMsIEhhc2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcj4oYnVmZmVyKTsKLSAg
ICBpZiAoaXRlcmF0b3IgPT0gc3RyaW5nVGFibGUoKS0+ZW5kKCkpCisgICAgSGFzaFNldDxTdHJp
bmdJbXBsKj46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gc3RyaW5nVGFibGUoKS5maW5kPEhhc2hBbmRD
aGFyYWN0ZXJzLCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I+KGJ1ZmZlcik7CisgICAgaWYg
KGl0ZXJhdG9yID09IHN0cmluZ1RhYmxlKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxBdG9taWNTdHJpbmdJbXBsKj4oKml0ZXJhdG9yKTsKIH0KQEAg
LTMwOCwxMiArMjk0LDYgQEAgdm9pZCBBdG9taWNTdHJpbmc6OmluaXQoKQogICAgICAgICAvLyBJ
bml0aWFsaXphdGlvbiBpcyBub3QgdGhyZWFkIHNhZmUsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBi
ZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQgZmlyc3QuCiAgICAgICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICAgICAgc3RhdGljU3RyaW5n
VGFibGUgPSBuZXcgVGhyZWFkU3BlY2lmaWM8SGFzaFNldDxTdHJpbmdJbXBsKj4gPjsKLSNlbHNl
Ci0gICAgICAgIHN0YXRpY1N0cmluZ1RhYmxlID0gbmV3IEhhc2hTZXQ8U3RyaW5nSW1wbCo+Owot
I2VuZGlmCi0KICAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUg
Z2xvYmFscy4KICAgICAgICAgbmV3ICgodm9pZCopJm51bGxBdG9tKSBBdG9taWNTdHJpbmc7CiAg
ICAgICAgIG5ldyAoKHZvaWQqKSZlbXB0eUF0b20pIEF0b21pY1N0cmluZygiIik7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAzOTQ1MCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTUg
KzMzLDEyIEBACiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSAiVGhyZWFkR2xv
YmFsRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
VW5pY29kZS5oPgogCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0jaW5jbHVkZSA8d3RmL1RocmVhZFNw
ZWNpZmljLmg+Ci0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFj
ZSBVbmljb2RlOwogCkBAIC0xNjksMTYgKzE2Niw3IEBAIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBs
KCkKIAogU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6ZW1wdHkoKQogewotI2lmIEVOQUJMRShXT1JL
RVJTKQotICAgIC8vIFN0cmluZzo6ZW1wdHkoKSBpcyBjYWxsZWQgb24gbWFpbiB0aHJlYWQgdG8g
aW5pdGlhbGl6ZSBlbXB0eUF0b20sIHNvIG5vIG5lZWQgdG8gcHJvdGVjdCBzdGF0aWMgY29uc3Ry
dWN0b3IuCi0gICAgLy8gRklYTUU6IERvZXMgV2ViQ29yZSBldmVyIHVzZSB0aGUgZW1wdHkgc3Ry
aW5nIGlmIHdvcmtlcnMgYXJlIGRpc2FibGVkPyBTb21lIHBvcnRzIGRvIG5vdCBpbXBsZW1lbnQg
V1RGOjpUaHJlYWRTcGVjaWZpYywKLSAgICAvLyBzbyB3ZSBjYW5ub3QganVzdCB1c2UgaXQgdW5j
b25kaXRpb25hbGx5LgotICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxTdHJpbmdJbXBsPiogdGhy
ZWFkRW1wdHlTdHJpbmcgPSBuZXcgVGhyZWFkU3BlY2lmaWM8U3RyaW5nSW1wbD47Ci0gICAgcmV0
dXJuICp0aHJlYWRFbXB0eVN0cmluZzsKLSNlbHNlCi0gICAgc3RhdGljIFN0cmluZ0ltcGwqIGUg
PSBuZXcgU3RyaW5nSW1wbDsKLSAgICByZXR1cm4gZTsKLSNlbmRpZgorICAgIHJldHVybiB0aHJl
YWRHbG9iYWxEYXRhKCkuZW1wdHlTdHJpbmcoKTsKIH0KIAogYm9vbCBTdHJpbmdJbXBsOjpjb250
YWluc09ubHlXaGl0ZXNwYWNlKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJ
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAko
cmV2aXNpb24gMzk0NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsNiBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NG
U3RyaW5nICogQ0ZTdHJpCiBAY2xhc3MgTlNTdHJpbmc7CiAjZW5kaWYKIAotbmFtZXNwYWNlIFdU
RiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFRocmVhZFNwZWNpZmljOwotfQotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTU5LDcgKzU1LDcg
QEAgY2xhc3MgU3RyaW5nSW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cgogICAgIGZyaWVuZCBz
dHJ1Y3QgSGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1Y3QgVUNo
YXJCdWZmZXJUcmFuc2xhdG9yOwogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpUaHJl
YWRTcGVjaWZpYzxTdHJpbmdJbXBsPjsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkR2xvYmFsRGF0
YTsKICAgICBTdHJpbmdJbXBsKCk7CiAgICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCk7CiAgICAgU3RyaW5nSW1wbChjb25zdCBjaGFyKiwgdW5zaWduZWQgbGVuZ3Ro
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCShyZXZpc2lvbiAz
OTQ1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxNyArMzAsMTMgQEAKICNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgog
I2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKICNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KICNpbmNs
dWRlIDx1bmljb2RlL3VjbnZfY2IuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAK
LSNpZiBFTkFCTEUoV09SS0VSUykKLSNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KLSNl
bmRpZgotCi11c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgc3RkOjphdXRvX3B0cjsKIHVzaW5n
IHN0ZDo6bWluOwogCkBAIC00OCwyMiArNDQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
b25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4NDsKIAotc3RydWN0IElDVUNv
bnZlcnRlcldyYXBwZXIgewotICAgIElDVUNvbnZlcnRlcldyYXBwZXIoKSA6IGNvbnZlcnRlcigw
KSB7IH0KLSAgICB+SUNVQ29udmVydGVyV3JhcHBlcigpIHsgaWYgKGNvbnZlcnRlcikgdWNudl9j
bG9zZShjb252ZXJ0ZXIpOyB9Ci0KLSAgICBVQ29udmVydGVyKiBjb252ZXJ0ZXI7Ci19OworSUNV
Q29udmVydGVyV3JhcHBlcjo6fklDVUNvbnZlcnRlcldyYXBwZXIoKQoreworICAgIGlmIChjb252
ZXJ0ZXIpCisgICAgICAgIHVjbnZfY2xvc2UoY29udmVydGVyKTsKK30KIAogc3RhdGljIFVDb252
ZXJ0ZXIqJiBjYWNoZWRDb252ZXJ0ZXJJQ1UoKQogewotI2lmIEVOQUJMRShXT1JLRVJTKQotICAg
IEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhUaHJlYWRTcGVjaWZpYzxJQ1VDb252ZXJ0ZXJX
cmFwcGVyPiosIGNhY2hlZENvbnZlcnRlciA9IG5ldyBUaHJlYWRTcGVjaWZpYzxJQ1VDb252ZXJ0
ZXJXcmFwcGVyPik7Ci0gICAgcmV0dXJuICgqKmNhY2hlZENvbnZlcnRlcikuY29udmVydGVyOwot
I2Vsc2UKLSAgICBzdGF0aWMgVUNvbnZlcnRlciogY2FjaGVkQ29udmVydGVyOwotICAgIHJldHVy
biBjYWNoZWRDb252ZXJ0ZXI7Ci0jZW5kaWYKKyAgICByZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgp
LmNhY2hlZENvbnZlcnRlcklDVSgpLmNvbnZlcnRlcjsKIH0KIAogc3RhdGljIGF1dG9fcHRyPFRl
eHRDb2RlYz4gbmV3VGV4dENvZGVjSUNVKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNv
bnN0IHZvaWQqKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAkocmV2aXNp
b24gMzk0NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDYgKzY0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
bXV0YWJsZSBib29sIG1fbmVlZHNHQktGYWxsYmFja3M7CiAgICAgfTsKIAorICAgIHN0cnVjdCBJ
Q1VDb252ZXJ0ZXJXcmFwcGVyIHsKKyAgICAgICAgSUNVQ29udmVydGVyV3JhcHBlcigpCisgICAg
ICAgICAgICA6IGNvbnZlcnRlcigwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgfklD
VUNvbnZlcnRlcldyYXBwZXIoKTsKKworICAgICAgICBVQ29udmVydGVyKiBjb252ZXJ0ZXI7Cisg
ICAgfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVGV4dENvZGVjSUNV
X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5jcHAJKHJl
dmlzaW9uIDM5NDUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTAgQEAKICNpbmNsdWRlICJDaGFyYWN0
ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkNoYXJzZXREYXRhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1Ro
cmVhZFNwZWNpZmljLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBzdGQ6OmF1dG9f
cHRyOwogdXNpbmcgc3RkOjptaW47CiAKQEAgLTQ2LDIzICs0NSw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZmZXJTaXplID0gMTYzODQ7CiAKLXN0
cnVjdCBURUNDb252ZXJ0ZXJXcmFwcGVyIHsKLSAgICBURUNDb252ZXJ0ZXJXcmFwcGVyKCkgOiBj
b252ZXJ0ZXIoMCksIGVuY29kaW5nKGludmFsaWRFbmNvZGluZykgeyB9Ci0gICAgflRFQ0NvbnZl
cnRlcldyYXBwZXIoKSB7IGlmIChjb252ZXJ0ZXIpIFRFQ0Rpc3Bvc2VDb252ZXJ0ZXIoY29udmVy
dGVyKTsgfQotCi0gICAgVEVDT2JqZWN0UmVmIGNvbnZlcnRlcjsKLSAgICBURUNUZXh0RW5jb2Rp
bmdJRCBlbmNvZGluZzsKLX07Ci0KIHN0YXRpYyBURUNDb252ZXJ0ZXJXcmFwcGVyJiBjYWNoZWRD
b252ZXJ0ZXJURUMoKQogewotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIEF0b21pY2FsbHlJbml0
aWFsaXplZFN0YXRpYyhUaHJlYWRTcGVjaWZpYzxURUNDb252ZXJ0ZXJXcmFwcGVyPiosIGNhY2hl
ZENvbnZlcnRlciA9IG5ldyBUaHJlYWRTcGVjaWZpYzxURUNDb252ZXJ0ZXJXcmFwcGVyPik7Ci0g
ICAgcmV0dXJuICoqY2FjaGVkQ29udmVydGVyOwotI2Vsc2UKLSAgICBURUNDb252ZXJ0ZXJXcmFw
cGVyKiBjYWNoZWRDb252ZXJ0ZXIgPSBuZXcgVEVDQ29udmVydGVyV3JhcHBlcjsKLSAgICByZXR1
cm4gKmNhY2hlZENvbnZlcnRlcjsKLSNlbmRpZgorICAgIHJldHVybiB0aHJlYWRHbG9iYWxEYXRh
KCkuY2FjaGVkQ29udmVydGVyVEVDKCk7CiB9CiAKIHZvaWQgVGV4dENvZGVjTWFjOjpyZWdpc3Rl
ckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuaAkocmV2aXNpb24gMzk0NTApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw2ICs2MCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG11dGFibGUg
VEVDT2JqZWN0UmVmIG1fY29udmVydGVyVEVDOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgVEVDQ29u
dmVydGVyV3JhcHBlciB7CisgICAgICAgIFRFQ0NvbnZlcnRlcldyYXBwZXIoKSA6IGNvbnZlcnRl
cigwKSwgZW5jb2RpbmcoaW52YWxpZEVuY29kaW5nKSB7IH0KKyAgICAgICAgflRFQ0NvbnZlcnRl
cldyYXBwZXIoKSB7IGlmIChjb252ZXJ0ZXIpIFRFQ0Rpc3Bvc2VDb252ZXJ0ZXIoY29udmVydGVy
KTsgfQorCisgICAgICAgIFRFQ09iamVjdFJlZiBjb252ZXJ0ZXI7CisgICAgICAgIFRFQ1RleHRF
bmNvZGluZ0lEIGVuY29kaW5nOworICAgIH07CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFRleHRDb2RlY01hY19oCg==
</data>
<flag name="review"
          id="12399"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>