<?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>40003</bug_id>
          
          <creation_ts>2010-06-01 09:20:12 -0700</creation_ts>
          <short_desc>[Qt] Fix the lifecycle of notification objects</short_desc>
          <delta_ts>2010-08-03 08:30:45 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>39995</blocked>
    
    <blocked>40004</blocked>
    
    <blocked>40005</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yael">yael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hausmann</cc>
    
    <cc>kenneth</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>232780</commentid>
    <comment_count>0</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-01 09:20:12 -0700</bug_when>
    <thetext>Notification objects are not tightly related to the page that created them, and should be decoupled from the page.

- Create one NotificationPresenter that handles all notifications.
- Add ref/deref to the notification objects when they are added/removed from the queue of active notifications. The same technique is used for XMLHttpRequest.
- Instead of deleting all notifications associated with a page when the page is navigated, delete them on a timer, using the same timeout that QSystemTrayIcon is using.
- Break up the show() method into smaller methods.
- Use OwnPtr instead of raw pointer for QSystemTrayIcon.
- Move creating the QIcon to just before showing it in the QSyetemTrayIcon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232786</commentid>
    <comment_count>1</comment_count>
      <attachid>57554</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-06-01 09:48:38 -0700</bug_when>
    <thetext>Created attachment 57554
Patch.

This patch addresses the issues listed in the bug description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232892</commentid>
    <comment_count>2</comment_count>
      <attachid>57554</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-01 12:03:13 -0700</bug_when>
    <thetext>Comment on attachment 57554
Patch.

WebKit/qt/Api/qwebpage.cpp:302
 +      NotificationPresenterClientQt::notificationPresenter()-&gt;addPage();
isn&apos;t it more like a addClient? You are adding a page as a client right?

WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:57
 +      s_notificationPresenter = new NotificationPresenterClientQt();
So we always leak this one? (im not finished reading the patch), maybe we should use STATIC_LOCAL

WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:67
 +      m_closeTimer.startOneShot(10.0);
Maybe create a static global for the timeout value.

WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:88
 +          delete this;
Ah you delete it here.

WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:83
 +  void NotificationPresenterClientQt::removePage()
I don&apos;t like these names, remove/addPage, because it is not obvious from the names that they are used for ref counting.

WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h:83
 +      void addPage() { m_pageCount++; }
even harder when one part of the implementation is defined in the header

WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h:93
 +      int m_pageCount;
add a new line between the dumpshowText() and the variables

Apart from these nits, I like the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232915</commentid>
    <comment_count>3</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-01 12:52:42 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 57554 [details])
&gt; WebKit/qt/Api/qwebpage.cpp:302
&gt;  +      NotificationPresenterClientQt::notificationPresenter()-&gt;addPage();
&gt; isn&apos;t it more like a addClient? You are adding a page as a client right?
ok

&gt; WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:57
&gt;  +      s_notificationPresenter = new NotificationPresenterClientQt();
&gt; So we always leak this one? (im not finished reading the patch), maybe we should use STATIC_LOCAL
&gt; 
The last page will trigger deleting it, It will not leak. 
Will add STATIC_LOCAL.

&gt; WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:67
&gt;  +      m_closeTimer.startOneShot(10.0);
&gt; Maybe create a static global for the timeout value.
&gt; 
ok

&gt; WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:88
&gt;  +          delete this;
&gt; Ah you delete it here.
&gt; 
:-)

&gt; WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:83
&gt;  +  void NotificationPresenterClientQt::removePage()
&gt; I don&apos;t like these names, remove/addPage, because it is not obvious from the names that they are used for ref counting.
&gt; 
Will change to add/removeClient as you suggested.

&gt; WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h:83
&gt;  +      void addPage() { m_pageCount++; }
&gt; even harder when one part of the implementation is defined in the header
&gt; 


&gt; WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h:93
&gt;  +      int m_pageCount;
&gt; add a new line between the dumpshowText() and the variables
&gt; 
ok

&gt; Apart from these nits, I like the patch!
Thank you, and thank you for the review :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232923</commentid>
    <comment_count>4</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-01 13:10:48 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 57554 [details])
&gt; WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:57
&gt;  +      s_notificationPresenter = new NotificationPresenterClientQt();
&gt; So we always leak this one? (im not finished reading the patch), maybe we should use STATIC_LOCAL

Maybe I am missing something, but if I use DEFINE_STATIC_LOCAL, I don&apos;t see how to get access to the static variable in order to delete it in the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232932</commentid>
    <comment_count>5</comment_count>
      <attachid>57587</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-06-01 13:31:43 -0700</bug_when>
    <thetext>Created attachment 57587
Patch.

Rename addPage/removePage/m_pageCount to addClient/removeClient/m_clientCount and make the timeout a static global.

I did not define the notification presenter with DEFINE_STATIC_LOCAL, because I could not find a way to delete it if I made it a static in a local function. Please advice if there is a way to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232936</commentid>
    <comment_count>6</comment_count>
      <attachid>57590</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-06-01 13:39:33 -0700</bug_when>
    <thetext>Created attachment 57590
Patch.

Added the extra line break in the header file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233017</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-01 18:23:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 57554 [details] [details])
&gt; &gt; WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp:57
&gt; &gt;  +      s_notificationPresenter = new NotificationPresenterClientQt();
&gt; &gt; So we always leak this one? (im not finished reading the patch), maybe we should use STATIC_LOCAL
&gt; 
&gt; Maybe I am missing something, but if I use DEFINE_STATIC_LOCAL, I don&apos;t see how to get access to the static variable in order to delete it in the end.

I should have removed that comment. I did it before I had seen all of the patch, sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233018</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-01 18:25:04 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=57587) [details]
&gt; Patch.
&gt; 
&gt; Rename addPage/removePage/m_pageCount to addClient/removeClient/m_clientCount and make the timeout a static global.
&gt; 
&gt; I did not define the notification presenter with DEFINE_STATIC_LOCAL, because I could not find a way to delete it if I made it a static in a local function. Please advice if there is a way to do that.

DEFINE_STATIC_LOCAL is for when you do not intent deleting it, ever :-) it makes sure that when you exit the application it will leak. Why? Because the OS is quicker at cleaning up then C++ :-)

Please disregard my original comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233261</commentid>
    <comment_count>9</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-06-02 07:35:06 -0700</bug_when>
    <thetext>Committed r60566 &lt;http://trac.webkit.org/changeset/60566&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259462</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-03 08:30:45 -0700</bug_when>
    <thetext>Revision r60566 cherry-picked into qtwebkit-2.1 with commit deb68f295591791d00a7a27b8d554be78d7ca69e</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57554</attachid>
            <date>2010-06-01 09:48:38 -0700</date>
            <delta_ts>2010-06-01 13:31:43 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>40003.patch</filename>
            <type>text/plain</type>
            <size>25008</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjA0ODApCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTAtMDYtMDEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gRml4IHRoZSBsaWZlY3ljbGUgb2Ygbm90aWZpY2F0aW9uIG9iamVjdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDAzCisKKyAg
ICAgICAgTm90aWZpY2F0aW9uIG9iamVjdHMgYXJlIG5vdCB0aWdodGx5IHJlbGF0ZWQgdG8gdGhl
IHBhZ2UgdGhhdCBjcmVhdGVkIHRoZW0sCisgICAgICAgIGFuZCBzaG91bGQgYmUgZGVjb3VwbGVk
IGZyb20gdGhlIHBhZ2UuCisgICAgICAgIENyZWF0ZSBvbmUgTm90aWZpY2F0aW9uUHJlc2VudGVy
IHRoYXQgaGFuZGxlcyBhbGwgbm90aWZpY2F0aW9ucy4KKyAgICAgICAgQWRkIHJlZi9kZXJlZiB0
byB0aGUgbm90aWZpY2F0aW9uIG9iamVjdHMgd2hlbiB0aGV5IGFyZSBhZGRlZC9yZW1vdmVkIGZy
b20KKyAgICAgICAgdGhlIHF1ZXVlIG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLiBUaGUgc2FtZSB0
ZWNobmlxdWUgaXMgdXNlZCBmb3IgWE1MSHR0cFJlcXVlc3QuCisgICAgICAgIEluc3RlYWQgb2Yg
ZGVsZXRpbmcgYWxsIG5vdGlmaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSB3aGVuIHRo
ZSBwYWdlIGlzIG5hdmlnYXRlZCwKKyAgICAgICAgZGVsZXRlIHRoZW0gb24gYSB0aW1lciwgdXNp
bmcgdGhlIHNhbWUgdGltZW91dCB0aGF0IFFTeXN0ZW1UcmF5SWNvbiBpcyB1c2luZy4KKyAgICAg
ICAgQnJlYWsgdXAgdGhlIHNob3coKSBtZXRob2QgaW50byBzbWFsbGVyIG1ldGhvZHMuCisgICAg
ICAgIFVzZSBPd25QdHIgaW5zdGVhZCBvZiByYXcgcG9pbnRlciBmb3IgUVN5c3RlbVRyYXlJY29u
LgorICAgICAgICBNb3ZlIGNyZWF0aW5nIHRoZSBRSWNvbiB0byBqdXN0IGJlZm9yZSBzaG93aW5n
IGl0IGluIHRoZSBRU3lldGVtVHJheUljb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRo
aXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLiBFeGlzdGluZyBub3RpZmljYXRpb25zIHRlc3QgY292
ZXIgdGhlIGNvZGUuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdl
YlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRl
Ojp+UVdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2VfcC5oOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIpOgorICAgICAgICAoRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29y
bGQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
Ojpub3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9u
SWNvbldyYXBwZXI6Ok5vdGlmaWNhdGlvbkljb25XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvbkljb25XcmFwcGVyOjp+Tm90aWZpY2F0aW9uSWNvbldyYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uSWNvbldyYXBwZXI6OmNsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdDo6cmVtb3ZlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdDo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdDo6ZGlzcGxheU5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25PYmplY3REZXN0cm95
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnJl
cXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRl
ckNsaWVudFF0OjpzZW5kRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ6OnJlbW92ZVJlcGxhY2VkTm90aWZpY2F0aW9uRnJvbVF1ZXVlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkdW1wUmVwbGFj
ZWRJZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQ6OmR1bXBTaG93VGV4dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0OjphZGRQYWdlKToKKwogMjAxMC0wNi0wMSAgU2ltb24gSGF1c21hbm4gIDxz
aW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxvIEdv
bWJvcy4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA2MDQ3MSkKKysrIFdlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDcgQEAgUVdlYlBh
Z2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZwogICAgIFBhZ2VHcm91cDo6c2V0U2hv
dWxkVHJhY2tWaXNpdGVkTGlua3ModHJ1ZSk7CiAgICAgCiAjaWYgRU5BQkxFKE5PVElGSUNBVElP
TlMpICAgIAotICAgIG5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudCA9IG5ldyBOb3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdChxKTsKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRR
dDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPmFkZFBhZ2UoKTsKICNlbmRpZgogfQogCkBAIC0z
MTUsNyArMzE1LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQcml2YXRlKCkKICAgICBk
ZWxldGUgcGFnZTsKICAgICAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICBkZWxldGUg
bm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50OworICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+cmVtb3ZlUGFnZSgpOwogI2VuZGlmCiB9
CiAKSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9BcGkvcXdlYnBhZ2VfcC5oCShyZXZpc2lvbiA2MDQ3MSkKKysrIFdlYktpdC9xdC9BcGkv
cXdlYnBhZ2VfcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBFZGl0b3JDbGllbnRRdDsKICAgICBjbGFzcyBFbGVtZW50Owog
ICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7Ci0gICAgY2xhc3MgTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwogICAgIGNs
YXNzIEZyYW1lOwpAQCAtMTkxLDggKzE5MCw2IEBAIHB1YmxpYzoKICAgICBib29sIGluc3BlY3Rv
cklzSW50ZXJuYWxPbmx5OyAvLyBUcnVlIGlmIGNyZWF0ZWQgdGhyb3VnaCB0aGUgSW5zcGVjdCBj
b250ZXh0IG1lbnUgYWN0aW9uCiAgICAgUXQ6OkRyb3BBY3Rpb24gbV9sYXN0RHJvcEFjdGlvbjsK
ICAgICAKLSAgICBXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCogbm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50OwotCiAgICAgUVN0cmluZyB2aWV3TW9kZTsKIAogICAgIHN0
YXRpYyBib29sIGRydFJ1bjsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmNwcAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAg
dm9pZCBDaHJvbWVDbGllbnRRdDo6cmVhY2hlZE1heEFwcENhY2hlUwogI2lmIEVOQUJMRShOT1RJ
RklDQVRJT05TKQogTm90aWZpY2F0aW9uUHJlc2VudGVyKiBDaHJvbWVDbGllbnRRdDo6bm90aWZp
Y2F0aW9uUHJlc2VudGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5kLT5ub3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnQ7CisgICAgcmV0dXJuIE5vdGlmaWNhdGlvblByZXNlbnRl
ckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKTsKIH0KICNlbmRpZgogCkluZGV4OiBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dC5jcHAJKHJldmlzaW9uIDYwNDcxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM3LDE3ICs1MzcsMTcg
QEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcE5vdGlmaQogI2VuZGlmCiB9CiAK
LXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE5vdGlmaWNhdGlvbnNSZWNlaXZlcihR
V2ViUGFnZSogcGFnZSwgUU9iamVjdCogcmVjZWl2ZXIpCit2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIoUU9iamVjdCogcmVjZWl2ZXIpCiB7CiAj
aWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgcGFnZS0+ZC0+bm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50LT5zZXRSZWNlaXZlcihyZWNlaXZlcik7CisgICAgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5zZXRSZWNlaXZlcihyZWNlaXZl
cik7CiAjZW5kaWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWxsb3dOb3Rp
ZmljYXRpb25Gb3JPcmlnaW4oUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIG9yaWdpbikK
K3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2lu
KGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAg
ICBwYWdlLT5kLT5ub3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnQtPmFsbG93Tm90aWZpY2F0aW9u
Rm9yT3JpZ2luKG9yaWdpbik7CisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5v
dGlmaWNhdGlvblByZXNlbnRlcigpLT5hbGxvd05vdGlmaWNhdGlvbkZvck9yaWdpbihvcmlnaW4p
OwogI2VuZGlmCiB9CiAKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCShyZXZpc2lvbiA2MDQ3MSkKKysrIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw3IEBAIGVudW0gTm90aWZpY2F0aW9uUGVybWlzc2lvbiB7CiB9OwogCiB0eXBl
ZGVmIHZvaWQgKENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSkgKFFPYmplY3QqIHJlY2VpdmVy
LCBjb25zdCBRVXJsJiwgTm90aWZpY2F0aW9uUGVybWlzc2lvbiYpOwotdHlwZWRlZiB2b2lkIChS
ZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uVHlwZSkgKFFPYmplY3QqIHJlY2VpdmVyLCBRV2ViUGFn
ZSogcGFnZSwgY29uc3QgUVN0cmluZyYpOwordHlwZWRlZiB2b2lkIChSZXF1ZXN0UGVybWlzc2lv
bkZ1bmN0aW9uVHlwZSkgKFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRU3RyaW5nJik7CiAKIGV4
dGVybiBDaGVja1Blcm1pc3Npb25GdW5jdGlvblR5cGUqIGNoZWNrUGVybWlzc2lvbkZ1bmN0aW9u
OwogZXh0ZXJuIFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKiByZXF1ZXN0UGVybWlzc2lv
bkZ1bmN0aW9uOwpAQCAtMTE0LDggKzExNCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBk
dW1wTm90aWZpY2F0aW9uKGJvb2wgYik7CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBl
dmVudHVhbGx5IHR1cm4gaW50byBwdWJsaWMgQVBJCiAgICAgLy8gYW5kIHRoZSAicmVjZWl2ZXIi
IGNvbmNlcHQgd291bGQgZ28gYXdheQotICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmaWNhdGlvbnNS
ZWNlaXZlcihRV2ViUGFnZSogcGFnZSwgUU9iamVjdCogcmVjZWl2ZXIpOwotICAgIHN0YXRpYyB2
b2lkIGFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3Ry
aW5nJiBvcmlnaW4pOworICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmaWNhdGlvbnNSZWNlaXZlcihR
T2JqZWN0KiByZWNlaXZlcik7CisgICAgc3RhdGljIHZvaWQgYWxsb3dOb3RpZmljYXRpb25Gb3JP
cmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDaGVja1Bl
cm1pc3Npb25GdW5jdGlvbihDaGVja1Blcm1pc3Npb25GdW5jdGlvblR5cGUqKTsKICAgICBzdGF0
aWMgdm9pZCBzZXRSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9uKFJlcXVlc3RQZXJtaXNzaW9uRnVu
Y3Rpb25UeXBlKik7CiB9OwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDYgQEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
UGx1Z0luRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCi0jaW5jbHVkZSAiTm90
aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlFOZXR3b3JrUmVwbHlIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIgpAQCAtNjQxLDkgKzY0MCw2IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnRRdDo6ZGlzcGF0Y2hEaWRDbGUKIAogICAgIGlmIChtX3dlYkZyYW1lKSB7CiAgICAgICAgIGVt
aXQgbV93ZWJGcmFtZS0+amF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKTsKLSNpZiBFTkFC
TEUoTk9USUZJQ0FUSU9OUykKLSAgICAgICAgbV93ZWJGcmFtZS0+cGFnZSgpLT5kLT5ub3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnQtPmNsZWFyTm90aWZpY2F0aW9uc0xpc3QoKTsKLSNlbmRpZgog
ICAgIH0KIH0KIApJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2MDQ3MSkKKysr
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDg0ICszOCwxMDkgQEAKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgog
I2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1
ZGUgPFF0R3VpPgogCi0KICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKIAotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ6OmR1bXBOb3RpZmljYXRpb24gPSBmYWxzZTsKIAorTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQqIHNfbm90aWZpY2F0aW9uUHJlc2VudGVyID0gMDsKKworTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQqIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpu
b3RpZmljYXRpb25QcmVzZW50ZXIoKQoreworICAgIGlmIChzX25vdGlmaWNhdGlvblByZXNlbnRl
cikKKyAgICAgICAgcmV0dXJuIHNfbm90aWZpY2F0aW9uUHJlc2VudGVyOworCisgICAgc19ub3Rp
ZmljYXRpb25QcmVzZW50ZXIgPSBuZXcgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQoKTsK
KyAgICByZXR1cm4gc19ub3RpZmljYXRpb25QcmVzZW50ZXI7Cit9CisKIE5vdGlmaWNhdGlvbklj
b25XcmFwcGVyOjpOb3RpZmljYXRpb25JY29uV3JhcHBlcigpCisgICAgOiBtX2Nsb3NlVGltZXIo
dGhpcywgJk5vdGlmaWNhdGlvbkljb25XcmFwcGVyOjpjbG9zZSkKIHsKICNpZm5kZWYgUVRfTk9f
U1lTVEVNVFJBWUlDT04KICAgICBtX25vdGlmaWNhdGlvbkljb24gPSAwOwogI2VuZGlmCisgICAg
bV9jbG9zZVRpbWVyLnN0YXJ0T25lU2hvdCgxMC4wKTsKIH0KIAogTm90aWZpY2F0aW9uSWNvbldy
YXBwZXI6On5Ob3RpZmljYXRpb25JY29uV3JhcHBlcigpCiB7Ci0jaWZuZGVmIFFUX05PX1NZU1RF
TVRSQVlJQ09OCi0gICAgZGVsZXRlIG1fbm90aWZpY2F0aW9uSWNvbjsKLSNlbmRpZgogfQogCi1O
b3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQoUVdlYlBhZ2UqIHBhZ2UpIDogbV9wYWdlKHBhZ2UpCit2b2lkIE5vdGlmaWNhdGlvbkljb25X
cmFwcGVyOjpjbG9zZShUaW1lcjxOb3RpZmljYXRpb25JY29uV3JhcHBlcj4qKQogeworICAgIE5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+Y2Fu
Y2VsKHRoaXMpOwogfQogCi1ib29sIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpzaG93
KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQorTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50
UXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0KCkgOiBtX3BhZ2VDb3VudCgwKQogewot
ICAgIFFIYXNoIDxOb3RpZmljYXRpb24qLCBOb3RpZmljYXRpb25JY29uV3JhcHBlcio+OjpJdGVy
YXRvciBlbmQgPSBtX25vdGlmaWNhdGlvbnMuZW5kKCk7Ci0gICAgUUhhc2ggPE5vdGlmaWNhdGlv
biosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj46Okl0ZXJhdG9yIGl0ZXIgPSBtX25vdGlmaWNh
dGlvbnMuYmVnaW4oKTsKLQotICAgIGlmICghbm90aWZpY2F0aW9uLT5yZXBsYWNlSWQoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7Ci0gICAgICAgICAgICBOb3Rp
ZmljYXRpb24qIGV4aXN0aW5nTm90aWZpY2F0aW9uID0gaXRlci5rZXkoKTsKLSAgICAgICAgICAg
IGlmIChleGlzdGluZ05vdGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkgPT0gbm90aWZpY2F0aW9uLT5y
ZXBsYWNlSWQoKSAmJiBleGlzdGluZ05vdGlmaWNhdGlvbi0+dXJsKCkucHJvdG9jb2woKSA9PSBu
b3RpZmljYXRpb24tPnVybCgpLnByb3RvY29sKCkgJiYgZXhpc3RpbmdOb3RpZmljYXRpb24tPnVy
bCgpLmhvc3QoKSA9PSBub3RpZmljYXRpb24tPnVybCgpLmhvc3QoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGl0ZXIrKzsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAg
ICAgICBpdGVyID0gZW5kOworfQogCi0gICAgaWYgKGR1bXBOb3RpZmljYXRpb24pIHsKLSAgICAg
ICAgaWYgKGl0ZXIgIT0gZW5kKSB7Ci0gICAgICAgICAgICBOb3RpZmljYXRpb24qIG9sZE5vdGlm
aWNhdGlvbiA9IGl0ZXIua2V5KCk7Ci0gICAgICAgICAgICBwcmludGYoIlJFUExBQ0lORyBOT1RJ
RklDQVRJT04gJXNcbiIsIG9sZE5vdGlmaWNhdGlvbi0+aXNIVE1MKCkgPyBRU3RyaW5nKG9sZE5v
dGlmaWNhdGlvbi0+dXJsKCkuc3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpIDogUVN0cmlu
ZyhvbGROb3RpZmljYXRpb24tPmNvbnRlbnRzKCkudGl0bGUoKSkudG9VdGY4KCkuY29uc3REYXRh
KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChub3RpZmljYXRpb24tPmlzSFRNTCgpKQotICAg
ICAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTjogY29udGVudHMgYXQgJXNcbiIs
IFFTdHJpbmcobm90aWZpY2F0aW9uLT51cmwoKS5zdHJpbmcoKSkudG9VdGY4KCkuY29uc3REYXRh
KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklD
QVRJT046JXMgaWNvbiAlcywgdGl0bGUgJXMsIHRleHQgJXNcbiIsCi0gICAgICAgICAgICAgICAg
bm90aWZpY2F0aW9uLT5kaXIoKSA9PSAicnRsIiA/ICIoUlRMKSIgOiAiIiwKLSAgICAgICAgICAg
ICAgICBRU3RyaW5nKG5vdGlmaWNhdGlvbi0+Y29udGVudHMoKS5pY29uKCkuc3RyaW5nKCkpLnRv
VXRmOCgpLmNvbnN0RGF0YSgpLCBRU3RyaW5nKG5vdGlmaWNhdGlvbi0+Y29udGVudHMoKS50aXRs
ZSgpKS50b1V0ZjgoKS5jb25zdERhdGEoKSwgCi0gICAgICAgICAgICAgICAgUVN0cmluZyhub3Rp
ZmljYXRpb24tPmNvbnRlbnRzKCkuYm9keSgpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7Ci0gICAg
ICAgIH0KK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnJlbW92ZVBhZ2UoKQor
eworICAgIG1fcGFnZUNvdW50LS07CisgICAgaWYgKCFtX3BhZ2VDb3VudCkgeworICAgICAgICBz
X25vdGlmaWNhdGlvblByZXNlbnRlciA9IDA7CisgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0K
K30KIAotICAgIGlmIChpdGVyICE9IGVuZCkgewotICAgICAgICBzZW5kRXZlbnQoaXRlci5rZXko
KSwgZXZlbnROYW1lcygpLmNsb3NlRXZlbnQpOwotICAgICAgICBkZWxldGUgbV9ub3RpZmljYXRp
b25zLnRha2UoaXRlci5rZXkoKSk7Citib29sIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
OjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIC8vIEZJWE1FOiB3b3Jr
ZXJzIGJhc2VkIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LgorICAgIGlmIChu
b3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3JrZXJDb250ZXh0KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBub3RpZmljYXRpb24tPnNldFBlbmRpbmdBY3Rp
dml0eShub3RpZmljYXRpb24pOworICAgIGlmICghbm90aWZpY2F0aW9uLT5yZXBsYWNlSWQoKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgcmVtb3ZlUmVwbGFjZWROb3RpZmljYXRpb25Gcm9tUXVldWUo
bm90aWZpY2F0aW9uKTsKICAgICB9CisgICAgaWYgKGR1bXBOb3RpZmljYXRpb24pCisgICAgICAg
IGR1bXBTaG93VGV4dChub3RpZmljYXRpb24pOworICAgIGRpc3BsYXlOb3RpZmljYXRpb24obm90
aWZpY2F0aW9uLCBRQnl0ZUFycmF5KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkaXNwbGF5Tm90aWZpY2F0aW9uKE5vdGlmaWNh
dGlvbiogbm90aWZpY2F0aW9uLCBjb25zdCBRQnl0ZUFycmF5JiBieXRlcykKK3sKICAgICBOb3Rp
ZmljYXRpb25JY29uV3JhcHBlciogd3JhcHBlciA9IG5ldyBOb3RpZmljYXRpb25JY29uV3JhcHBl
cigpOwogICAgIG1fbm90aWZpY2F0aW9ucy5pbnNlcnQobm90aWZpY2F0aW9uLCB3cmFwcGVyKTsK
KyAgICBRU3RyaW5nIHRpdGxlOworICAgIFFTdHJpbmcgbWVzc2FnZTsKKyAgICAvLyBGSVhNRTog
ZG93bmxvYWQgJiBkaXNwbGF5IEhUTUwgbm90aWZpY2F0aW9ucworICAgIGlmIChub3RpZmljYXRp
b24tPmlzSFRNTCgpKQorICAgICAgICBtZXNzYWdlID0gbm90aWZpY2F0aW9uLT51cmwoKS5zdHJp
bmcoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGl0bGUgPSBub3RpZmljYXRpb24tPmNvbnRlbnRz
KCkudGl0bGUoKTsKKyAgICAgICAgbWVzc2FnZSA9IG5vdGlmaWNhdGlvbi0+Y29udGVudHMoKS5i
b2R5KCk7CisgICAgfQorCisjaWZuZGVmIFFUX05PX1NZU1RFTVRSQVlJQ09OCisgICAgUVBpeG1h
cCBwaXhtYXA7CisgICAgaWYgKGJ5dGVzLmxlbmd0aCgpICYmIHBpeG1hcC5sb2FkRnJvbURhdGEo
Ynl0ZXMpKSB7CisgICAgICAgIFFJY29uIGljb24ocGl4bWFwKTsKKyAgICAgICAgd3JhcHBlci0+
bV9ub3RpZmljYXRpb25JY29uID0gbmV3IFFTeXN0ZW1UcmF5SWNvbihpY29uKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgd3JhcHBlci0+bV9ub3RpZmljYXRpb25JY29uID0gbmV3IFFTeXN0ZW1UcmF5
SWNvbigpOworI2VuZGlmCisKICAgICBzZW5kRXZlbnQobm90aWZpY2F0aW9uLCAiZGlzcGxheSIp
OwogCisgICAgLy8gTWFrZSBzdXJlIHRoZSBub3RpZmljYXRpb24gd2FzIG5vdCBjYW5jZWxsZWQg
ZHVyaW5nIGhhbmRsaW5nIHRoZSBkaXNwbGF5IGV2ZW50CisgICAgaWYgKG1fbm90aWZpY2F0aW9u
cy5maW5kKG5vdGlmaWNhdGlvbikgPT0gbV9ub3RpZmljYXRpb25zLmVuZCgpKQorICAgICAgICBy
ZXR1cm47CisKICNpZm5kZWYgUVRfTk9fU1lTVEVNVFJBWUlDT04KLSAgICB3cmFwcGVyLT5tX25v
dGlmaWNhdGlvbkljb24gPSBuZXcgUVN5c3RlbVRyYXlJY29uOwogICAgIHdyYXBwZXItPm1fbm90
aWZpY2F0aW9uSWNvbi0+c2hvdygpOwogICAgIHdyYXBwZXItPm1fbm90aWZpY2F0aW9uSWNvbi0+
c2hvd01lc3NhZ2Uobm90aWZpY2F0aW9uLT5jb250ZW50cygpLnRpdGxlKCksIG5vdGlmaWNhdGlv
bi0+Y29udGVudHMoKS5ib2R5KCkpOwogI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmNhbmNlbChOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGlvbikKLXsgIAorewogICAgIGlmIChkdW1wTm90aWZpY2F0aW9uKSB7CiAgICAgICAg
IGlmIChub3RpZmljYXRpb24tPmlzSFRNTCgpKQogICAgICAgICAgICAgcHJpbnRmKCJERVNLVE9Q
IE5PVElGSUNBVElPTiBDTE9TRUQ6ICVzXG4iLCBRU3RyaW5nKG5vdGlmaWNhdGlvbi0+dXJsKCku
c3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKQEAgLTEyMywxNSArMTQ4LDI4IEBAIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmNhbmMKICAgICAgICAgICAgIHByaW50
ZigiREVTS1RPUCBOT1RJRklDQVRJT04gQ0xPU0VEOiAlc1xuIiwgUVN0cmluZyhub3RpZmljYXRp
b24tPmNvbnRlbnRzKCkudGl0bGUoKSkudG9VdGY4KCkuY29uc3REYXRhKCkpOwogICAgIH0KIAot
ICAgIFFIYXNoIDxOb3RpZmljYXRpb24qLCBOb3RpZmljYXRpb25JY29uV3JhcHBlcio+OjpJdGVy
YXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0aW9uKTsKLSAgICBpZiAo
aXRlciAhPSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpCi0gICAgICAgIHNlbmRFdmVudChpdGVyLmtl
eSgpLCBldmVudE5hbWVzKCkuY2xvc2VFdmVudCk7CisgICAgTm90aWZpY2F0aW9uc1F1ZXVlOjpJ
dGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0aW9uKTsKKyAgICBp
ZiAoaXRlciAhPSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgc2VuZEV2ZW50KG5v
dGlmaWNhdGlvbiwgZXZlbnROYW1lcygpLmNsb3NlRXZlbnQpOworICAgICAgICBkZWxldGUgbV9u
b3RpZmljYXRpb25zLnRha2Uobm90aWZpY2F0aW9uKTsKKyAgICAgICAgbm90aWZpY2F0aW9uLT51
bnNldFBlbmRpbmdBY3Rpdml0eShub3RpZmljYXRpb24pOworICAgIH0KK30KKwordm9pZCBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2FuY2VsKE5vdGlmaWNhdGlvbkljb25XcmFwcGVy
KiB3cmFwcGVyKQoreworICAgIE5vdGlmaWNhdGlvbnNRdWV1ZTo6SXRlcmF0b3IgZW5kID0gbV9u
b3RpZmljYXRpb25zLmVuZCgpOworICAgIE5vdGlmaWNhdGlvbnNRdWV1ZTo6SXRlcmF0b3IgaXRl
ciA9IG1fbm90aWZpY2F0aW9ucy5iZWdpbigpOworICAgIHdoaWxlIChpdGVyICE9IGVuZCAmJiBp
dGVyLnZhbHVlKCkgIT0gd3JhcHBlcikKKyAgICAgICAgaXRlcisrOworICAgIGlmIChpdGVyICE9
IGVuZCkKKyAgICAgICAgY2FuY2VsKGl0ZXIua2V5KCkpOwogfQogCiB2b2lkIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQoTm90aWZpY2F0
aW9uKiBub3RpZmljYXRpb24pCiB7CiAgICAgLy8gQ2FsbGVkIGZyb20gfk5vdGlmaWNhdGlvbigp
LCBSZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG5vdGlmaWNhdGlvbnMgbGlzdCBhbmQgZGVsZXRl
IHRoZSBpY29uLgotICAgIFFIYXNoIDxOb3RpZmljYXRpb24qLCBOb3RpZmljYXRpb25JY29uV3Jh
cHBlcio+OjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0aW9u
KTsKKyAgICBOb3RpZmljYXRpb25zUXVldWU6Okl0ZXJhdG9yIGl0ZXIgPSBtX25vdGlmaWNhdGlv
bnMuZmluZChub3RpZmljYXRpb24pOwogICAgIGlmIChpdGVyICE9IG1fbm90aWZpY2F0aW9ucy5l
bmQoKSkKICAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50YWtlKG5vdGlmaWNhdGlvbik7
CiB9CkBAIC0xMzksNyArMTc3LDcgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRR
dDo6bm90aQogdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6cmVxdWVzdFBlcm1p
c3Npb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IGNh
bGxiYWNrKQogeyAgCiAgICAgaWYgKGR1bXBOb3RpZmljYXRpb24pCi0gICAgICBwcmludGYoIkRF
U0tUT1AgTk9USUZJQ0FUSU9OIFBFUk1JU1NJT04gUkVRVUVTVEVEOiAlc1xuIiwgUVN0cmluZyhv
cmlnaW4tPnRvU3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgcHJpbnRm
KCJERVNLVE9QIE5PVElGSUNBVElPTiBQRVJNSVNTSU9OIFJFUVVFU1RFRDogJXNcbiIsIFFTdHJp
bmcob3JpZ2luLT50b1N0cmluZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CiAKICAgICBRU3Ry
aW5nIG9yaWdpblN0cmluZyA9IG9yaWdpbi0+dG9TdHJpbmcoKTsKICAgICBRSGFzaDxRU3RyaW5n
LCBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BlbmRp
bmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChvcmlnaW5TdHJpbmcpOwpAQCAtMTUxLDcgKzE4OSw3
IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnJlcXUKICAgICAgICAgY2Fs
bGJhY2tzLmFwcGVuZChjYik7CiAgICAgICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5p
bnNlcnQob3JpZ2luU3RyaW5nLCBjYWxsYmFja3MpOwogICAgICAgICBpZiAocmVxdWVzdFBlcm1p
c3Npb25GdW5jdGlvbikKLSAgICAgICAgICAgIHJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24obV9y
ZWNlaXZlciwgbV9wYWdlLCBvcmlnaW5TdHJpbmcpOworICAgICAgICAgICAgcmVxdWVzdFBlcm1p
c3Npb25GdW5jdGlvbihtX3JlY2VpdmVyLCBvcmlnaW5TdHJpbmcpOwogICAgIH0KIH0KIApAQCAt
MTg0LDE5ICsyMjIsNTIgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6YWxs
bwogICAgIH0KIH0KIAotdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2xlYXJO
b3RpZmljYXRpb25zTGlzdCgpCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpz
ZW5kRXZlbnQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnROYW1lKQogewotICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5jbGVhcigpOwot
ICAgIHdoaWxlICghbV9ub3RpZmljYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBRSGFzaCA8
Tm90aWZpY2F0aW9uKiwgTm90aWZpY2F0aW9uSWNvbldyYXBwZXIqPjo6SXRlcmF0b3IgaXRlciA9
IG1fbm90aWZpY2F0aW9ucy5iZWdpbigpOwotICAgICAgICBkZWxldGUgbV9ub3RpZmljYXRpb25z
LnRha2UoaXRlci5rZXkoKSk7CisgICAgbm90aWZpY2F0aW9uLT5kaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSkpOworfQorCit2b2lkIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0OjpyZW1vdmVSZXBsYWNlZE5vdGlmaWNhdGlvbkZyb21RdWV1ZShO
b3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKK3sKKyAgICBOb3RpZmljYXRpb24qIG9sZE5vdGlm
aWNhdGlvbiA9IDA7CisgICAgTm90aWZpY2F0aW9uc1F1ZXVlOjpJdGVyYXRvciBlbmQgPSBtX25v
dGlmaWNhdGlvbnMuZW5kKCk7CisgICAgTm90aWZpY2F0aW9uc1F1ZXVlOjpJdGVyYXRvciBpdGVy
ID0gbV9ub3RpZmljYXRpb25zLmJlZ2luKCk7CisKKyAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsK
KyAgICAgICAgTm90aWZpY2F0aW9uKiBleGlzdGluZ05vdGlmaWNhdGlvbiA9IGl0ZXIua2V5KCk7
CisgICAgICAgIGlmIChleGlzdGluZ05vdGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkgPT0gbm90aWZp
Y2F0aW9uLT5yZXBsYWNlSWQoKSAmJiBleGlzdGluZ05vdGlmaWNhdGlvbi0+dXJsKCkucHJvdG9j
b2woKSA9PSBub3RpZmljYXRpb24tPnVybCgpLnByb3RvY29sKCkgJiYgZXhpc3RpbmdOb3RpZmlj
YXRpb24tPnVybCgpLmhvc3QoKSA9PSBub3RpZmljYXRpb24tPnVybCgpLmhvc3QoKSkgeworICAg
ICAgICAgICAgb2xkTm90aWZpY2F0aW9uID0gaXRlci5rZXkoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGl0ZXIrKzsKKyAgICB9CisKKyAgICBpZiAob2xkTm90aWZp
Y2F0aW9uKSB7CisgICAgICAgIGlmIChkdW1wTm90aWZpY2F0aW9uKQorICAgICAgICAgICAgZHVt
cFJlcGxhY2VkSWRUZXh0KG9sZE5vdGlmaWNhdGlvbik7CisgICAgICAgIHNlbmRFdmVudChvbGRO
b3RpZmljYXRpb24sIGV2ZW50TmFtZXMoKS5jbG9zZUV2ZW50KTsKKyAgICAgICAgZGVsZXRlIG1f
bm90aWZpY2F0aW9ucy50YWtlKG9sZE5vdGlmaWNhdGlvbik7CisgICAgICAgIG9sZE5vdGlmaWNh
dGlvbi0+dW5zZXRQZW5kaW5nQWN0aXZpdHkob2xkTm90aWZpY2F0aW9uKTsKICAgICB9CiB9CiAK
LXZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnNlbmRFdmVudChOb3RpZmljYXRp
b24qIG5vdGlmaWNhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIE5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkdW1wUmVwbGFjZWRJZFRleHQoTm90aWZpY2F0
aW9uKiBub3RpZmljYXRpb24pCiB7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgbm90aWZpY2F0aW9uLT5kaXNwYXRj
aEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgaWYgKG5vdGlmaWNhdGlvbikKKyAgICAgICAg
cHJpbnRmKCJSRVBMQUNJTkcgTk9USUZJQ0FUSU9OICVzXG4iLCBub3RpZmljYXRpb24tPmlzSFRN
TCgpID8gUVN0cmluZyhub3RpZmljYXRpb24tPnVybCgpLnN0cmluZygpKS50b1V0ZjgoKS5jb25z
dERhdGEoKSA6IFFTdHJpbmcobm90aWZpY2F0aW9uLT5jb250ZW50cygpLnRpdGxlKCkpLnRvVXRm
OCgpLmNvbnN0RGF0YSgpKTsKIH0KIAordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRR
dDo6ZHVtcFNob3dUZXh0KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQoreworICAgIGlmIChu
b3RpZmljYXRpb24tPmlzSFRNTCgpKQorICAgICAgICBwcmludGYoIkRFU0tUT1AgTk9USUZJQ0FU
SU9OOiBjb250ZW50cyBhdCAlc1xuIiwgUVN0cmluZyhub3RpZmljYXRpb24tPnVybCgpLnN0cmlu
ZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHByaW50Zigi
REVTS1RPUCBOT1RJRklDQVRJT046JXMgaWNvbiAlcywgdGl0bGUgJXMsIHRleHQgJXNcbiIsCisg
ICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLT5kaXIoKSA9PSAicnRsIiA/ICIoUlRMKSIgOiAi
IiwKKyAgICAgICAgICAgIFFTdHJpbmcobm90aWZpY2F0aW9uLT5jb250ZW50cygpLmljb24oKS5z
dHJpbmcoKSkudG9VdGY4KCkuY29uc3REYXRhKCksIFFTdHJpbmcobm90aWZpY2F0aW9uLT5jb250
ZW50cygpLnRpdGxlKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLAorICAgICAgICAgICAgUVN0cmlu
Zyhub3RpZmljYXRpb24tPmNvbnRlbnRzKCkuYm9keSgpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7
CisgICAgfQorfQorCit9CiAjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCkluZGV4OiBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQuaAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MjkgKzM0LDM1IEBACiAKICNpbmNsdWRlICJOb3RpZmljYXRpb24uaCIKICNpbmNsdWRlICJOb3Rp
ZmljYXRpb25QcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgogCiAjaW5jbHVkZSA8UU11
bHRpSGFzaD4KICNpbmNsdWRlIDxRU3lzdGVtVHJheUljb24+CiAKLQogI2lmIEVOQUJMRShOT1RJ
RklDQVRJT05TKQotY2xhc3MgUVdlYlBhZ2U7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwogY2xh
c3MgRG9jdW1lbnQ7CiBjbGFzcyBLVVJMOwogCi1zdHJ1Y3QgTm90aWZpY2F0aW9uSWNvbldyYXBw
ZXIgeworY2xhc3MgTm90aWZpY2F0aW9uSWNvbldyYXBwZXIgeworcHVibGljOgogICAgIE5vdGlm
aWNhdGlvbkljb25XcmFwcGVyKCk7CiAgICAgfk5vdGlmaWNhdGlvbkljb25XcmFwcGVyKCk7Cisg
ICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgY2xvc2UoVGltZXI8Tm90aWZpY2F0aW9uSWNvbldy
YXBwZXI+Kik7CiAjaWZuZGVmIFFUX05PX1NZU1RFTVRSQVlJQ09OCi0gICAgUVN5c3RlbVRyYXlJ
Y29uKiBtX25vdGlmaWNhdGlvbkljb247CisgICAgT3duUHRyPFFTeXN0ZW1UcmF5SWNvbj4gbV9u
b3RpZmljYXRpb25JY29uOwogI2VuZGlmCisgICAgVGltZXI8Tm90aWZpY2F0aW9uSWNvbldyYXBw
ZXI+IG1fY2xvc2VUaW1lcjsKIH07CiAKK3R5cGVkZWYgUUhhc2ggPE5vdGlmaWNhdGlvbiosIE5v
dGlmaWNhdGlvbkljb25XcmFwcGVyKj4gTm90aWZpY2F0aW9uc1F1ZXVlOworCiBjbGFzcyBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCA6IHB1YmxpYyBOb3RpZmljYXRpb25QcmVzZW50ZXIg
ewogcHVibGljOgotICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0KFFXZWJQYWdlKik7
CisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQoKTsKICAgICB+Tm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQoKSB7fQogCiAgICAgLyogV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJl
c2VudGVyIGludGVyZmFjZSAqLwpAQCAtNjYsMjIgKzcyLDMxIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4pOwogICAgIHZpcnR1YWwgTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNz
aW9uIGNoZWNrUGVybWlzc2lvbihjb25zdCBLVVJMJik7CiAKKyAgICB2b2lkIGNhbmNlbChOb3Rp
ZmljYXRpb25JY29uV3JhcHBlciopOworCiAgICAgdm9pZCBhbGxvd05vdGlmaWNhdGlvbkZvck9y
aWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pOwotICAgIHZvaWQgY2xlYXJOb3RpZmljYXRpb25z
TGlzdCgpOwogCiAgICAgc3RhdGljIGJvb2wgZHVtcE5vdGlmaWNhdGlvbjsKIAogICAgIHZvaWQg
c2V0UmVjZWl2ZXIoUU9iamVjdCogcmVjZWl2ZXIpIHsgbV9yZWNlaXZlciA9IHJlY2VpdmVyOyB9
CiAKKyAgICB2b2lkIGFkZFBhZ2UoKSB7IG1fcGFnZUNvdW50Kys7IH0KKyAgICB2b2lkIHJlbW92
ZVBhZ2UoKTsKKyAgICBzdGF0aWMgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQqIG5vdGlm
aWNhdGlvblByZXNlbnRlcigpOworCiBwcml2YXRlOgogICAgIHZvaWQgc2VuZEV2ZW50KE5vdGlm
aWNhdGlvbiosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKTsKLSAgICBRV2ViUGFnZSog
bV9wYWdlOwotICAgIFFNdWx0aUhhc2g8UVN0cmluZywgIFFMaXN0PFJlZlB0cjxWb2lkQ2FsbGJh
Y2s+ID4gPiBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHM7Ci0gICAgUUhhc2ggPE5vdGlmaWNh
dGlvbiosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj4gbV9ub3RpZmljYXRpb25zOworICAgIHZv
aWQgZGlzcGxheU5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24qLCBjb25zdCBRQnl0ZUFycmF5Jik7
CisgICAgdm9pZCByZW1vdmVSZXBsYWNlZE5vdGlmaWNhdGlvbkZyb21RdWV1ZShOb3RpZmljYXRp
b24qKTsKKyAgICB2b2lkIGR1bXBSZXBsYWNlZElkVGV4dChOb3RpZmljYXRpb24qKTsKKyAgICB2
b2lkIGR1bXBTaG93VGV4dChOb3RpZmljYXRpb24qKTsKKyAgICBpbnQgbV9wYWdlQ291bnQ7Cisg
ICAgUUhhc2g8UVN0cmluZywgIFFMaXN0PFJlZlB0cjxWb2lkQ2FsbGJhY2s+ID4gPiBtX3BlbmRp
bmdQZXJtaXNzaW9uUmVxdWVzdHM7CisgICAgTm90aWZpY2F0aW9uc1F1ZXVlIG1fbm90aWZpY2F0
aW9uczsKICAgICBRT2JqZWN0KiBtX3JlY2VpdmVyOwogfTsKKwogfQogCiAjZW5kaWYKICNlbmRp
ZgotCkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDQ4MCkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEwLTA2LTAxICBZYWVsIEFoYXJvbiAg
PHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbUXRdIEZpeCB0aGUgbGlmZWN5Y2xlIG9mIG5vdGlmaWNhdGlvbiBv
YmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
MDAwMworCisgICAgICAgIFJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvZiBub3RpZmljYXRpb25zIG9u
IFFXZWJQYWdlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RHVt
cFJlbmRlclRyZWU6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0Lmg6CisKIDIwMTAtMDYtMDEgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4gQnVpbGQgZml4
LgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5jcHAJKHJldmlzaW9uIDYwNDcxKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw5ICsxMzUs
OSBAQCB2b2lkIGNoZWNrUGVybWlzc2lvbkNhbGxiYWNrKFFPYmplY3QqIHJlCiAgICAgcW9iamVj
dF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIpLT5jaGVja1Blcm1pc3Npb24odXJsLCBw
ZXJtaXNzaW9uKTsKIH0KIAotdm9pZCByZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNrKFFPYmplY3Qq
IHJlY2VpdmVyLCBRV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgb3JpZ2luKQordm9pZCBy
ZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNrKFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBRU3RyaW5n
JiBvcmlnaW4pCiB7Ci0gICAgcW9iamVjdF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIp
LT5yZXF1ZXN0UGVybWlzc2lvbihwYWdlLCBvcmlnaW4pOworICAgIHFvYmplY3RfY2FzdDxEdW1w
UmVuZGVyVHJlZSo+KHJlY2VpdmVyKS0+cmVxdWVzdFBlcm1pc3Npb24ob3JpZ2luKTsKIH0KIAog
V2ViUGFnZTo6V2ViUGFnZShRT2JqZWN0KiBwYXJlbnQsIER1bXBSZW5kZXJUcmVlKiBkcnQpCkBA
IC0xNjgsNyArMTY4LDcgQEAgV2ViUGFnZTo6V2ViUGFnZShRT2JqZWN0KiBwYXJlbnQsIER1bXBS
ZQogICAgIHNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKG1fZHJ0LT5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpKTsKICAgICBzZXRQbHVnaW5GYWN0b3J5KG5ldyBUZXN0UGx1Z2luKHRoaXMpKTsKIAotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIodGhpcywg
bV9kcnQpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXROb3RpZmljYXRpb25zUmVj
ZWl2ZXIobV9kcnQpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDaGVja1Blcm1p
c3Npb25GdW5jdGlvbihjaGVja1Blcm1pc3Npb25DYWxsYmFjayk7CiAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24ocmVxdWVzdFBlcm1pc3Np
b25DYWxsYmFjayk7CiAKQEAgLTkyMCw5ICs5MjAsOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpj
aGVja1Blcm1pc3Npb24oY29uCiAgICAgcGVybWlzc2lvbiA9IG1fY29udHJvbGxlci0+Y2hlY2tE
ZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbih1cmwuc2NoZW1lKCkgKyAiOi8vIiArIHVybC5o
b3N0KCkpID8gTm90aWZpY2F0aW9uQWxsb3dlZCA6IE5vdGlmaWNhdGlvbkRlbmllZDsKIH0KIAot
dm9pZCBEdW1wUmVuZGVyVHJlZTo6cmVxdWVzdFBlcm1pc3Npb24oUVdlYlBhZ2UqIHBhZ2UsIGNv
bnN0IFFTdHJpbmcmIG9yaWdpbikKK3ZvaWQgRHVtcFJlbmRlclRyZWU6OnJlcXVlc3RQZXJtaXNz
aW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKIHsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4ocGFnZSwgb3JpZ2luKTsKKyAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6YWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4ob3JpZ2luKTsKIH0K
IAogI2lmIGRlZmluZWQoUV9XU19YMTEpCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCShyZXZpc2lvbiA2MDQ3MSkKKysrIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQgc3RhdHVzQmFy
TWVzc2FnZShjb25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKICAgICB2b2lkIHdpbmRvd0Nsb3NlUmVx
dWVzdGVkKCk7CiAgICAgdm9pZCBjaGVja1Blcm1pc3Npb24oY29uc3QgUVVybCYsIE5vdGlmaWNh
dGlvblBlcm1pc3Npb24mKTsKLSAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJQYWdlKiBw
YWdlLCBjb25zdCBRU3RyaW5nJik7CisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihjb25zdCBR
U3RyaW5nJik7CiAKIFFfU0lHTkFMUzoKICAgICB2b2lkIHF1aXQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57587</attachid>
            <date>2010-06-01 13:31:43 -0700</date>
            <delta_ts>2010-06-01 13:39:33 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>40003.patch</filename>
            <type>text/plain</type>
            <size>25079</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjA1MDIpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTAtMDYtMDEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gRml4IHRoZSBsaWZlY3ljbGUgb2Ygbm90aWZpY2F0aW9uIG9iamVjdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDAzCisKKyAg
ICAgICAgTm90aWZpY2F0aW9uIG9iamVjdHMgYXJlIG5vdCB0aWdodGx5IHJlbGF0ZWQgdG8gdGhl
IHBhZ2UgdGhhdCBjcmVhdGVkIHRoZW0sCisgICAgICAgIGFuZCBzaG91bGQgYmUgZGVjb3VwbGVk
IGZyb20gdGhlIHBhZ2UuCisgICAgICAgIENyZWF0ZSBvbmUgTm90aWZpY2F0aW9uUHJlc2VudGVy
IHRoYXQgaGFuZGxlcyBhbGwgbm90aWZpY2F0aW9ucy4KKyAgICAgICAgQWRkIHJlZi9kZXJlZiB0
byB0aGUgbm90aWZpY2F0aW9uIG9iamVjdHMgd2hlbiB0aGV5IGFyZSBhZGRlZC9yZW1vdmVkIGZy
b20KKyAgICAgICAgdGhlIHF1ZXVlIG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLiBUaGUgc2FtZSB0
ZWNobmlxdWUgaXMgdXNlZCBmb3IgWE1MSHR0cFJlcXVlc3QuCisgICAgICAgIEluc3RlYWQgb2Yg
ZGVsZXRpbmcgYWxsIG5vdGlmaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSB3aGVuIHRo
ZSBwYWdlIGlzIG5hdmlnYXRlZCwKKyAgICAgICAgZGVsZXRlIHRoZW0gb24gYSB0aW1lciwgdXNp
bmcgdGhlIHNhbWUgdGltZW91dCB0aGF0IFFTeXN0ZW1UcmF5SWNvbiBpcyB1c2luZy4KKyAgICAg
ICAgQnJlYWsgdXAgdGhlIHNob3coKSBtZXRob2QgaW50byBzbWFsbGVyIG1ldGhvZHMuCisgICAg
ICAgIFVzZSBPd25QdHIgaW5zdGVhZCBvZiByYXcgcG9pbnRlciBmb3IgUVN5c3RlbVRyYXlJY29u
LgorICAgICAgICBNb3ZlIGNyZWF0aW5nIHRoZSBRSWNvbiB0byBqdXN0IGJlZm9yZSBzaG93aW5n
IGl0IGluIHRoZSBRU3lldGVtVHJheUljb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRo
aXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLiBFeGlzdGluZyBub3RpZmljYXRpb25zIHRlc3QgY292
ZXIgdGhlIGNvZGUuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdl
YlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRl
Ojp+UVdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2VfcC5oOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIpOgorICAgICAgICAoRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29y
bGQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
Ojpub3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9u
SWNvbldyYXBwZXI6Ok5vdGlmaWNhdGlvbkljb25XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvbkljb25XcmFwcGVyOjp+Tm90aWZpY2F0aW9uSWNvbldyYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uSWNvbldyYXBwZXI6OmNsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpkaXNwbGF5Tm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ry
b3llZCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6
cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6OnNlbmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6cmVtb3ZlUmVwbGFjZWROb3RpZmljYXRpb25Gcm9tUXVldWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmR1bXBSZXBs
YWNlZElkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6ZHVtcFNob3dUZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdC5oOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ6OmFkZENsaWVudCk6CisKIDIwMTAtMDYtMDEgIFNpbW9uIEhhdXNtYW5u
ICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3ps
byBHb21ib3MuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIFFX
ZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWcKICAgICBQYWdlR3JvdXA6OnNl
dFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKHRydWUpOwogICAgIAogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKSAgICAKLSAgICBub3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnQgPSBuZXcgTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQocSk7CisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5hZGRDbGllbnQoKTsKICNlbmRpZgogfQog
CkBAIC0zMTUsNyArMzE1LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQcml2YXRlKCkK
ICAgICBkZWxldGUgcGFnZTsKICAgICAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICBk
ZWxldGUgbm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50OworICAgIE5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+cmVtb3ZlQ2xpZW50KCk7CiAj
ZW5kaWYKIH0KIApJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgJKHJldmlzaW9uIDYwNDcxKQorKysgV2ViS2l0
L3F0L0FwaS9xd2VicGFnZV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVkaXRvckNsaWVudFF0OwogICAgIGNsYXNzIEVs
ZW1lbnQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKLSAgICBjbGFzcyBOb3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdDsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFBhZ2U7
CiAgICAgY2xhc3MgRnJhbWU7CkBAIC0xOTEsOCArMTkwLDYgQEAgcHVibGljOgogICAgIGJvb2wg
aW5zcGVjdG9ySXNJbnRlcm5hbE9ubHk7IC8vIFRydWUgaWYgY3JlYXRlZCB0aHJvdWdoIHRoZSBJ
bnNwZWN0IGNvbnRleHQgbWVudSBhY3Rpb24KICAgICBRdDo6RHJvcEFjdGlvbiBtX2xhc3REcm9w
QWN0aW9uOwogICAgIAotICAgIFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
KiBub3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnQ7Ci0KICAgICBRU3RyaW5nIHZpZXdNb2RlOwog
CiAgICAgc3RhdGljIGJvb2wgZHJ0UnVuOwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2MDQ3MSkKKysrIFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0
ODcsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpyZWFjaGVkTWF4QXBwQ2FjaGVTCiAjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCiBOb3RpZmljYXRpb25QcmVzZW50ZXIqIENocm9tZUNsaWVudFF0
Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3dlYlBhZ2Ut
PmQtPm5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudDsKKyAgICByZXR1cm4gTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpOwogfQogI2VuZGlmCiAK
SW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0LmNwcAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzcsMTcg
KzUzNywxNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wTm90aWZpCiAjZW5k
aWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9uc1Jl
Y2VpdmVyKFFXZWJQYWdlKiBwYWdlLCBRT2JqZWN0KiByZWNlaXZlcikKK3ZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldE5vdGlmaWNhdGlvbnNSZWNlaXZlcihRT2JqZWN0KiByZWNlaXZl
cikKIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICBwYWdlLT5kLT5ub3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnQtPnNldFJlY2VpdmVyKHJlY2VpdmVyKTsKKyAgICBOb3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPnNldFJlY2VpdmVy
KHJlY2VpdmVyKTsKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojph
bGxvd05vdGlmaWNhdGlvbkZvck9yaWdpbihRV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYg
b3JpZ2luKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWxsb3dOb3RpZmljYXRpb25G
b3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKQogewogI2lmIEVOQUJMRShOT1RJRklDQVRJ
T05TKQotICAgIHBhZ2UtPmQtPm5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudC0+YWxsb3dOb3Rp
ZmljYXRpb25Gb3JPcmlnaW4ob3JpZ2luKTsKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2lu
KG9yaWdpbik7CiAjZW5kaWYKIH0KIApJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgJKHJldmlzaW9uIDYwNDcxKQorKysgV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAgZW51bSBOb3RpZmljYXRpb25QZXJtaXNzaW9uIHsKIH07
CiAKIHR5cGVkZWYgdm9pZCAoQ2hlY2tQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKSAoUU9iamVjdCog
cmVjZWl2ZXIsIGNvbnN0IFFVcmwmLCBOb3RpZmljYXRpb25QZXJtaXNzaW9uJik7Ci10eXBlZGVm
IHZvaWQgKFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKSAoUU9iamVjdCogcmVjZWl2ZXIs
IFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJik7Cit0eXBlZGVmIHZvaWQgKFJlcXVlc3RQ
ZXJtaXNzaW9uRnVuY3Rpb25UeXBlKSAoUU9iamVjdCogcmVjZWl2ZXIsIGNvbnN0IFFTdHJpbmcm
KTsKIAogZXh0ZXJuIENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSogY2hlY2tQZXJtaXNzaW9u
RnVuY3Rpb247CiBleHRlcm4gUmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvblR5cGUqIHJlcXVlc3RQ
ZXJtaXNzaW9uRnVuY3Rpb247CkBAIC0xMTQsOCArMTE0LDggQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGR1bXBOb3RpZmljYXRpb24oYm9vbCBiKTsKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMg
c2hvdWxkIGV2ZW50dWFsbHkgdHVybiBpbnRvIHB1YmxpYyBBUEkKICAgICAvLyBhbmQgdGhlICJy
ZWNlaXZlciIgY29uY2VwdCB3b3VsZCBnbyBhd2F5Ci0gICAgc3RhdGljIHZvaWQgc2V0Tm90aWZp
Y2F0aW9uc1JlY2VpdmVyKFFXZWJQYWdlKiBwYWdlLCBRT2JqZWN0KiByZWNlaXZlcik7Ci0gICAg
c3RhdGljIHZvaWQgYWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4oUVdlYlBhZ2UqIHBhZ2UsIGNv
bnN0IFFTdHJpbmcmIG9yaWdpbik7CisgICAgc3RhdGljIHZvaWQgc2V0Tm90aWZpY2F0aW9uc1Jl
Y2VpdmVyKFFPYmplY3QqIHJlY2VpdmVyKTsKKyAgICBzdGF0aWMgdm9pZCBhbGxvd05vdGlmaWNh
dGlvbkZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pOwogICAgIHN0YXRpYyB2b2lkIHNl
dENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uKENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSopOwog
ICAgIHN0YXRpYyB2b2lkIHNldFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24oUmVxdWVzdFBlcm1p
c3Npb25GdW5jdGlvblR5cGUqKTsKIH07CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2MDQ3MSkKKysrIFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKLSNpbmNs
dWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUU5ldHdvcmtSZXBseUhhbmRsZXIuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCkBAIC02NDEsOSArNjQwLDYgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudFF0OjpkaXNwYXRjaERpZENsZQogCiAgICAgaWYgKG1fd2ViRnJhbWUpIHsKICAg
ICAgICAgZW1pdCBtX3dlYkZyYW1lLT5qYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpOwot
I2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotICAgICAgICBtX3dlYkZyYW1lLT5wYWdlKCktPmQt
Pm5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudC0+Y2xlYXJOb3RpZmljYXRpb25zTGlzdCgpOwot
I2VuZGlmCiAgICAgfQogfQogCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDYw
NDcxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsODQgKzM4LDExMSBAQAogI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCi0jaW5jbHVkZSAicXdlYmZy
YW1lLmgiCiAjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgi
CiAjaW5jbHVkZSA8UXRHdWk+CiAKLQogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgZG91Ymxl
IG5vdGlmaWNhdGlvblRpbWVvdXQgPSAxMC4wOwogCiBib29sIE5vdGlmaWNhdGlvblByZXNlbnRl
ckNsaWVudFF0OjpkdW1wTm90aWZpY2F0aW9uID0gZmFsc2U7CiAKK05vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0KiBzX25vdGlmaWNhdGlvblByZXNlbnRlciA9IDA7CisKK05vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0KiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6bm90aWZp
Y2F0aW9uUHJlc2VudGVyKCkKK3sKKyAgICBpZiAoc19ub3RpZmljYXRpb25QcmVzZW50ZXIpCisg
ICAgICAgIHJldHVybiBzX25vdGlmaWNhdGlvblByZXNlbnRlcjsKKworICAgIHNfbm90aWZpY2F0
aW9uUHJlc2VudGVyID0gbmV3IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0KCk7CisgICAg
cmV0dXJuIHNfbm90aWZpY2F0aW9uUHJlc2VudGVyOworfQorCiBOb3RpZmljYXRpb25JY29uV3Jh
cHBlcjo6Tm90aWZpY2F0aW9uSWNvbldyYXBwZXIoKQorICAgIDogbV9jbG9zZVRpbWVyKHRoaXMs
ICZOb3RpZmljYXRpb25JY29uV3JhcHBlcjo6Y2xvc2UpCiB7CiAjaWZuZGVmIFFUX05PX1NZU1RF
TVRSQVlJQ09OCiAgICAgbV9ub3RpZmljYXRpb25JY29uID0gMDsKICNlbmRpZgorICAgIG1fY2xv
c2VUaW1lci5zdGFydE9uZVNob3Qobm90aWZpY2F0aW9uVGltZW91dCk7CiB9CiAKIE5vdGlmaWNh
dGlvbkljb25XcmFwcGVyOjp+Tm90aWZpY2F0aW9uSWNvbldyYXBwZXIoKQogewotI2lmbmRlZiBR
VF9OT19TWVNURU1UUkFZSUNPTgotICAgIGRlbGV0ZSBtX25vdGlmaWNhdGlvbkljb247Ci0jZW5k
aWYKIH0KIAotTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKSA6IG1fcGFnZShwYWdlKQordm9pZCBOb3RpZmlj
YXRpb25JY29uV3JhcHBlcjo6Y2xvc2UoVGltZXI8Tm90aWZpY2F0aW9uSWNvbldyYXBwZXI+KikK
IHsKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2Vu
dGVyKCktPmNhbmNlbCh0aGlzKTsKIH0KIAotYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKK05vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCgpIDogbV9jbGllbnRD
b3VudCgwKQogewotICAgIFFIYXNoIDxOb3RpZmljYXRpb24qLCBOb3RpZmljYXRpb25JY29uV3Jh
cHBlcio+OjpJdGVyYXRvciBlbmQgPSBtX25vdGlmaWNhdGlvbnMuZW5kKCk7Ci0gICAgUUhhc2gg
PE5vdGlmaWNhdGlvbiosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj46Okl0ZXJhdG9yIGl0ZXIg
PSBtX25vdGlmaWNhdGlvbnMuYmVnaW4oKTsKLQotICAgIGlmICghbm90aWZpY2F0aW9uLT5yZXBs
YWNlSWQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7Ci0gICAg
ICAgICAgICBOb3RpZmljYXRpb24qIGV4aXN0aW5nTm90aWZpY2F0aW9uID0gaXRlci5rZXkoKTsK
LSAgICAgICAgICAgIGlmIChleGlzdGluZ05vdGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkgPT0gbm90
aWZpY2F0aW9uLT5yZXBsYWNlSWQoKSAmJiBleGlzdGluZ05vdGlmaWNhdGlvbi0+dXJsKCkucHJv
dG9jb2woKSA9PSBub3RpZmljYXRpb24tPnVybCgpLnByb3RvY29sKCkgJiYgZXhpc3RpbmdOb3Rp
ZmljYXRpb24tPnVybCgpLmhvc3QoKSA9PSBub3RpZmljYXRpb24tPnVybCgpLmhvc3QoKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGl0ZXIrKzsKLSAgICAgICAgfQotICAg
IH0gZWxzZQotICAgICAgICBpdGVyID0gZW5kOworfQogCi0gICAgaWYgKGR1bXBOb3RpZmljYXRp
b24pIHsKLSAgICAgICAgaWYgKGl0ZXIgIT0gZW5kKSB7Ci0gICAgICAgICAgICBOb3RpZmljYXRp
b24qIG9sZE5vdGlmaWNhdGlvbiA9IGl0ZXIua2V5KCk7Ci0gICAgICAgICAgICBwcmludGYoIlJF
UExBQ0lORyBOT1RJRklDQVRJT04gJXNcbiIsIG9sZE5vdGlmaWNhdGlvbi0+aXNIVE1MKCkgPyBR
U3RyaW5nKG9sZE5vdGlmaWNhdGlvbi0+dXJsKCkuc3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0
YSgpIDogUVN0cmluZyhvbGROb3RpZmljYXRpb24tPmNvbnRlbnRzKCkudGl0bGUoKSkudG9VdGY4
KCkuY29uc3REYXRhKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChub3RpZmljYXRpb24tPmlz
SFRNTCgpKQotICAgICAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTjogY29udGVu
dHMgYXQgJXNcbiIsIFFTdHJpbmcobm90aWZpY2F0aW9uLT51cmwoKS5zdHJpbmcoKSkudG9VdGY4
KCkuY29uc3REYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiREVT
S1RPUCBOT1RJRklDQVRJT046JXMgaWNvbiAlcywgdGl0bGUgJXMsIHRleHQgJXNcbiIsCi0gICAg
ICAgICAgICAgICAgbm90aWZpY2F0aW9uLT5kaXIoKSA9PSAicnRsIiA/ICIoUlRMKSIgOiAiIiwK
LSAgICAgICAgICAgICAgICBRU3RyaW5nKG5vdGlmaWNhdGlvbi0+Y29udGVudHMoKS5pY29uKCku
c3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLCBRU3RyaW5nKG5vdGlmaWNhdGlvbi0+Y29u
dGVudHMoKS50aXRsZSgpKS50b1V0ZjgoKS5jb25zdERhdGEoKSwgCi0gICAgICAgICAgICAgICAg
UVN0cmluZyhub3RpZmljYXRpb24tPmNvbnRlbnRzKCkuYm9keSgpKS50b1V0ZjgoKS5jb25zdERh
dGEoKSk7Ci0gICAgICAgIH0KK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnJl
bW92ZUNsaWVudCgpCit7CisgICAgbV9jbGllbnRDb3VudC0tOworICAgIGlmICghbV9jbGllbnRD
b3VudCkgeworICAgICAgICBzX25vdGlmaWNhdGlvblByZXNlbnRlciA9IDA7CisgICAgICAgIGRl
bGV0ZSB0aGlzOwogICAgIH0KK30KIAotICAgIGlmIChpdGVyICE9IGVuZCkgewotICAgICAgICBz
ZW5kRXZlbnQoaXRlci5rZXkoKSwgZXZlbnROYW1lcygpLmNsb3NlRXZlbnQpOwotICAgICAgICBk
ZWxldGUgbV9ub3RpZmljYXRpb25zLnRha2UoaXRlci5rZXkoKSk7Citib29sIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0OjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQorewor
ICAgIC8vIEZJWE1FOiB3b3JrZXJzIGJhc2VkIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0
ZWQgeWV0LgorICAgIGlmIChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBub3RpZmljYXRp
b24tPnNldFBlbmRpbmdBY3Rpdml0eShub3RpZmljYXRpb24pOworICAgIGlmICghbm90aWZpY2F0
aW9uLT5yZXBsYWNlSWQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVtb3ZlUmVwbGFjZWROb3Rp
ZmljYXRpb25Gcm9tUXVldWUobm90aWZpY2F0aW9uKTsKICAgICB9CisgICAgaWYgKGR1bXBOb3Rp
ZmljYXRpb24pCisgICAgICAgIGR1bXBTaG93VGV4dChub3RpZmljYXRpb24pOworICAgIGRpc3Bs
YXlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBRQnl0ZUFycmF5KCkpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkaXNwbGF5Tm90
aWZpY2F0aW9uKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCBjb25zdCBRQnl0ZUFycmF5JiBi
eXRlcykKK3sKICAgICBOb3RpZmljYXRpb25JY29uV3JhcHBlciogd3JhcHBlciA9IG5ldyBOb3Rp
ZmljYXRpb25JY29uV3JhcHBlcigpOwogICAgIG1fbm90aWZpY2F0aW9ucy5pbnNlcnQobm90aWZp
Y2F0aW9uLCB3cmFwcGVyKTsKKyAgICBRU3RyaW5nIHRpdGxlOworICAgIFFTdHJpbmcgbWVzc2Fn
ZTsKKyAgICAvLyBGSVhNRTogZG93bmxvYWQgJiBkaXNwbGF5IEhUTUwgbm90aWZpY2F0aW9ucwor
ICAgIGlmIChub3RpZmljYXRpb24tPmlzSFRNTCgpKQorICAgICAgICBtZXNzYWdlID0gbm90aWZp
Y2F0aW9uLT51cmwoKS5zdHJpbmcoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGl0bGUgPSBub3Rp
ZmljYXRpb24tPmNvbnRlbnRzKCkudGl0bGUoKTsKKyAgICAgICAgbWVzc2FnZSA9IG5vdGlmaWNh
dGlvbi0+Y29udGVudHMoKS5ib2R5KCk7CisgICAgfQorCisjaWZuZGVmIFFUX05PX1NZU1RFTVRS
QVlJQ09OCisgICAgUVBpeG1hcCBwaXhtYXA7CisgICAgaWYgKGJ5dGVzLmxlbmd0aCgpICYmIHBp
eG1hcC5sb2FkRnJvbURhdGEoYnl0ZXMpKSB7CisgICAgICAgIFFJY29uIGljb24ocGl4bWFwKTsK
KyAgICAgICAgd3JhcHBlci0+bV9ub3RpZmljYXRpb25JY29uID0gbmV3IFFTeXN0ZW1UcmF5SWNv
bihpY29uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd3JhcHBlci0+bV9ub3RpZmljYXRpb25JY29u
ID0gbmV3IFFTeXN0ZW1UcmF5SWNvbigpOworI2VuZGlmCisKICAgICBzZW5kRXZlbnQobm90aWZp
Y2F0aW9uLCAiZGlzcGxheSIpOwogCisgICAgLy8gTWFrZSBzdXJlIHRoZSBub3RpZmljYXRpb24g
d2FzIG5vdCBjYW5jZWxsZWQgZHVyaW5nIGhhbmRsaW5nIHRoZSBkaXNwbGF5IGV2ZW50CisgICAg
aWYgKG1fbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbikgPT0gbV9ub3RpZmljYXRpb25z
LmVuZCgpKQorICAgICAgICByZXR1cm47CisKICNpZm5kZWYgUVRfTk9fU1lTVEVNVFJBWUlDT04K
LSAgICB3cmFwcGVyLT5tX25vdGlmaWNhdGlvbkljb24gPSBuZXcgUVN5c3RlbVRyYXlJY29uOwog
ICAgIHdyYXBwZXItPm1fbm90aWZpY2F0aW9uSWNvbi0+c2hvdygpOwogICAgIHdyYXBwZXItPm1f
bm90aWZpY2F0aW9uSWNvbi0+c2hvd01lc3NhZ2Uobm90aWZpY2F0aW9uLT5jb250ZW50cygpLnRp
dGxlKCksIG5vdGlmaWNhdGlvbi0+Y29udGVudHMoKS5ib2R5KCkpOwogI2VuZGlmCi0gICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmNhbmNl
bChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKLXsgIAorewogICAgIGlmIChkdW1wTm90aWZp
Y2F0aW9uKSB7CiAgICAgICAgIGlmIChub3RpZmljYXRpb24tPmlzSFRNTCgpKQogICAgICAgICAg
ICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTiBDTE9TRUQ6ICVzXG4iLCBRU3RyaW5nKG5v
dGlmaWNhdGlvbi0+dXJsKCkuc3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKQEAgLTEy
MywxNSArMTUwLDI4IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmNhbmMK
ICAgICAgICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gQ0xPU0VEOiAlc1xuIiwg
UVN0cmluZyhub3RpZmljYXRpb24tPmNvbnRlbnRzKCkudGl0bGUoKSkudG9VdGY4KCkuY29uc3RE
YXRhKCkpOwogICAgIH0KIAotICAgIFFIYXNoIDxOb3RpZmljYXRpb24qLCBOb3RpZmljYXRpb25J
Y29uV3JhcHBlcio+OjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmZpbmQobm90aWZp
Y2F0aW9uKTsKLSAgICBpZiAoaXRlciAhPSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpCi0gICAgICAg
IHNlbmRFdmVudChpdGVyLmtleSgpLCBldmVudE5hbWVzKCkuY2xvc2VFdmVudCk7CisgICAgTm90
aWZpY2F0aW9uc1F1ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmZpbmQobm90
aWZpY2F0aW9uKTsKKyAgICBpZiAoaXRlciAhPSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpIHsKKyAg
ICAgICAgc2VuZEV2ZW50KG5vdGlmaWNhdGlvbiwgZXZlbnROYW1lcygpLmNsb3NlRXZlbnQpOwor
ICAgICAgICBkZWxldGUgbV9ub3RpZmljYXRpb25zLnRha2Uobm90aWZpY2F0aW9uKTsKKyAgICAg
ICAgbm90aWZpY2F0aW9uLT51bnNldFBlbmRpbmdBY3Rpdml0eShub3RpZmljYXRpb24pOworICAg
IH0KK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2FuY2VsKE5vdGlm
aWNhdGlvbkljb25XcmFwcGVyKiB3cmFwcGVyKQoreworICAgIE5vdGlmaWNhdGlvbnNRdWV1ZTo6
SXRlcmF0b3IgZW5kID0gbV9ub3RpZmljYXRpb25zLmVuZCgpOworICAgIE5vdGlmaWNhdGlvbnNR
dWV1ZTo6SXRlcmF0b3IgaXRlciA9IG1fbm90aWZpY2F0aW9ucy5iZWdpbigpOworICAgIHdoaWxl
IChpdGVyICE9IGVuZCAmJiBpdGVyLnZhbHVlKCkgIT0gd3JhcHBlcikKKyAgICAgICAgaXRlcisr
OworICAgIGlmIChpdGVyICE9IGVuZCkKKyAgICAgICAgY2FuY2VsKGl0ZXIua2V5KCkpOwogfQog
CiB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25PYmplY3RE
ZXN0cm95ZWQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7CiAgICAgLy8gQ2FsbGVkIGZy
b20gfk5vdGlmaWNhdGlvbigpLCBSZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG5vdGlmaWNhdGlv
bnMgbGlzdCBhbmQgZGVsZXRlIHRoZSBpY29uLgotICAgIFFIYXNoIDxOb3RpZmljYXRpb24qLCBO
b3RpZmljYXRpb25JY29uV3JhcHBlcio+OjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25z
LmZpbmQobm90aWZpY2F0aW9uKTsKKyAgICBOb3RpZmljYXRpb25zUXVldWU6Okl0ZXJhdG9yIGl0
ZXIgPSBtX25vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24pOwogICAgIGlmIChpdGVyICE9
IG1fbm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50
YWtlKG5vdGlmaWNhdGlvbik7CiB9CkBAIC0xMzksNyArMTc5LDcgQEAgdm9pZCBOb3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdDo6bm90aQogdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6cmVxdWVzdFBlcm1pc3Npb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0
cjxWb2lkQ2FsbGJhY2s+IGNhbGxiYWNrKQogeyAgCiAgICAgaWYgKGR1bXBOb3RpZmljYXRpb24p
Ci0gICAgICBwcmludGYoIkRFU0tUT1AgTk9USUZJQ0FUSU9OIFBFUk1JU1NJT04gUkVRVUVTVEVE
OiAlc1xuIiwgUVN0cmluZyhvcmlnaW4tPnRvU3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgp
KTsKKyAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTiBQRVJNSVNTSU9OIFJFUVVF
U1RFRDogJXNcbiIsIFFTdHJpbmcob3JpZ2luLT50b1N0cmluZygpKS50b1V0ZjgoKS5jb25zdERh
dGEoKSk7CiAKICAgICBRU3RyaW5nIG9yaWdpblN0cmluZyA9IG9yaWdpbi0+dG9TdHJpbmcoKTsK
ICAgICBRSGFzaDxRU3RyaW5nLCBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+ID46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChvcmlnaW5TdHJpbmcp
OwpAQCAtMTUxLDcgKzE5MSw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6
OnJlcXUKICAgICAgICAgY2FsbGJhY2tzLmFwcGVuZChjYik7CiAgICAgICAgIG1fcGVuZGluZ1Bl
cm1pc3Npb25SZXF1ZXN0cy5pbnNlcnQob3JpZ2luU3RyaW5nLCBjYWxsYmFja3MpOwogICAgICAg
ICBpZiAocmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbikKLSAgICAgICAgICAgIHJlcXVlc3RQZXJt
aXNzaW9uRnVuY3Rpb24obV9yZWNlaXZlciwgbV9wYWdlLCBvcmlnaW5TdHJpbmcpOworICAgICAg
ICAgICAgcmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbihtX3JlY2VpdmVyLCBvcmlnaW5TdHJpbmcp
OwogICAgIH0KIH0KIApAQCAtMTg0LDE5ICsyMjQsNTIgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdDo6YWxsbwogICAgIH0KIH0KIAotdm9pZCBOb3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdDo6Y2xlYXJOb3RpZmljYXRpb25zTGlzdCgpCit2b2lkIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpzZW5kRXZlbnQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogewotICAgIG1fcGVuZGluZ1Blcm1pc3Npb25S
ZXF1ZXN0cy5jbGVhcigpOwotICAgIHdoaWxlICghbV9ub3RpZmljYXRpb25zLmlzRW1wdHkoKSkg
ewotICAgICAgICBRSGFzaCA8Tm90aWZpY2F0aW9uKiwgTm90aWZpY2F0aW9uSWNvbldyYXBwZXIq
Pjo6SXRlcmF0b3IgaXRlciA9IG1fbm90aWZpY2F0aW9ucy5iZWdpbigpOwotICAgICAgICBkZWxl
dGUgbV9ub3RpZmljYXRpb25zLnRha2UoaXRlci5rZXkoKSk7CisgICAgbm90aWZpY2F0aW9uLT5k
aXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSkpOworfQor
Cit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpyZW1vdmVSZXBsYWNlZE5vdGlm
aWNhdGlvbkZyb21RdWV1ZShOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKK3sKKyAgICBOb3Rp
ZmljYXRpb24qIG9sZE5vdGlmaWNhdGlvbiA9IDA7CisgICAgTm90aWZpY2F0aW9uc1F1ZXVlOjpJ
dGVyYXRvciBlbmQgPSBtX25vdGlmaWNhdGlvbnMuZW5kKCk7CisgICAgTm90aWZpY2F0aW9uc1F1
ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmJlZ2luKCk7CisKKyAgICB3aGls
ZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgTm90aWZpY2F0aW9uKiBleGlzdGluZ05vdGlmaWNh
dGlvbiA9IGl0ZXIua2V5KCk7CisgICAgICAgIGlmIChleGlzdGluZ05vdGlmaWNhdGlvbi0+cmVw
bGFjZUlkKCkgPT0gbm90aWZpY2F0aW9uLT5yZXBsYWNlSWQoKSAmJiBleGlzdGluZ05vdGlmaWNh
dGlvbi0+dXJsKCkucHJvdG9jb2woKSA9PSBub3RpZmljYXRpb24tPnVybCgpLnByb3RvY29sKCkg
JiYgZXhpc3RpbmdOb3RpZmljYXRpb24tPnVybCgpLmhvc3QoKSA9PSBub3RpZmljYXRpb24tPnVy
bCgpLmhvc3QoKSkgeworICAgICAgICAgICAgb2xkTm90aWZpY2F0aW9uID0gaXRlci5rZXkoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGl0ZXIrKzsKKyAgICB9CisK
KyAgICBpZiAob2xkTm90aWZpY2F0aW9uKSB7CisgICAgICAgIGlmIChkdW1wTm90aWZpY2F0aW9u
KQorICAgICAgICAgICAgZHVtcFJlcGxhY2VkSWRUZXh0KG9sZE5vdGlmaWNhdGlvbik7CisgICAg
ICAgIHNlbmRFdmVudChvbGROb3RpZmljYXRpb24sIGV2ZW50TmFtZXMoKS5jbG9zZUV2ZW50KTsK
KyAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50YWtlKG9sZE5vdGlmaWNhdGlvbik7Cisg
ICAgICAgIG9sZE5vdGlmaWNhdGlvbi0+dW5zZXRQZW5kaW5nQWN0aXZpdHkob2xkTm90aWZpY2F0
aW9uKTsKICAgICB9CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnNl
bmRFdmVudChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudE5hbWUpCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkdW1wUmVwbGFj
ZWRJZFRleHQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7Ci0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgbm90
aWZpY2F0aW9uLT5kaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgaWYgKG5vdGlm
aWNhdGlvbikKKyAgICAgICAgcHJpbnRmKCJSRVBMQUNJTkcgTk9USUZJQ0FUSU9OICVzXG4iLCBu
b3RpZmljYXRpb24tPmlzSFRNTCgpID8gUVN0cmluZyhub3RpZmljYXRpb24tPnVybCgpLnN0cmlu
ZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSA6IFFTdHJpbmcobm90aWZpY2F0aW9uLT5jb250ZW50
cygpLnRpdGxlKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKIH0KIAordm9pZCBOb3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdDo6ZHVtcFNob3dUZXh0KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0
aW9uKQoreworICAgIGlmIChub3RpZmljYXRpb24tPmlzSFRNTCgpKQorICAgICAgICBwcmludGYo
IkRFU0tUT1AgTk9USUZJQ0FUSU9OOiBjb250ZW50cyBhdCAlc1xuIiwgUVN0cmluZyhub3RpZmlj
YXRpb24tPnVybCgpLnN0cmluZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT046JXMgaWNvbiAlcywgdGl0bGUg
JXMsIHRleHQgJXNcbiIsCisgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLT5kaXIoKSA9PSAi
cnRsIiA/ICIoUlRMKSIgOiAiIiwKKyAgICAgICAgICAgIFFTdHJpbmcobm90aWZpY2F0aW9uLT5j
b250ZW50cygpLmljb24oKS5zdHJpbmcoKSkudG9VdGY4KCkuY29uc3REYXRhKCksIFFTdHJpbmco
bm90aWZpY2F0aW9uLT5jb250ZW50cygpLnRpdGxlKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLAor
ICAgICAgICAgICAgUVN0cmluZyhub3RpZmljYXRpb24tPmNvbnRlbnRzKCkuYm9keSgpKS50b1V0
ZjgoKS5jb25zdERhdGEoKSk7CisgICAgfQorfQorCit9CiAjZW5kaWYgLy8gRU5BQkxFKE5PVElG
SUNBVElPTlMpCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsMjkgKzM0LDM1IEBACiAKICNpbmNsdWRlICJOb3RpZmljYXRpb24u
aCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgogCiAjaW5jbHVkZSA8UU11bHRpSGFzaD4KICNpbmNsdWRlIDxRU3lzdGVtVHJheUljb24+CiAK
LQogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotY2xhc3MgUVdlYlBhZ2U7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKKwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBLVVJMOwogCi1zdHJ1Y3QgTm90
aWZpY2F0aW9uSWNvbldyYXBwZXIgeworY2xhc3MgTm90aWZpY2F0aW9uSWNvbldyYXBwZXIgewor
cHVibGljOgogICAgIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKCk7CiAgICAgfk5vdGlmaWNhdGlv
bkljb25XcmFwcGVyKCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgY2xvc2UoVGltZXI8
Tm90aWZpY2F0aW9uSWNvbldyYXBwZXI+Kik7CiAjaWZuZGVmIFFUX05PX1NZU1RFTVRSQVlJQ09O
Ci0gICAgUVN5c3RlbVRyYXlJY29uKiBtX25vdGlmaWNhdGlvbkljb247CisgICAgT3duUHRyPFFT
eXN0ZW1UcmF5SWNvbj4gbV9ub3RpZmljYXRpb25JY29uOwogI2VuZGlmCisgICAgVGltZXI8Tm90
aWZpY2F0aW9uSWNvbldyYXBwZXI+IG1fY2xvc2VUaW1lcjsKIH07CiAKK3R5cGVkZWYgUUhhc2gg
PE5vdGlmaWNhdGlvbiosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj4gTm90aWZpY2F0aW9uc1F1
ZXVlOworCiBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCA6IHB1YmxpYyBOb3Rp
ZmljYXRpb25QcmVzZW50ZXIgewogcHVibGljOgotICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0KFFXZWJQYWdlKik7CisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQoKTsK
ICAgICB+Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQoKSB7fQogCiAgICAgLyogV2ViQ29y
ZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyIGludGVyZmFjZSAqLwpAQCAtNjYsMjIgKzcyLDMxIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oU2VjdXJpdHlPcmln
aW4qLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4pOwogICAgIHZpcnR1YWwgTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpQZXJtaXNzaW9uIGNoZWNrUGVybWlzc2lvbihjb25zdCBLVVJMJik7CiAKKyAg
ICB2b2lkIGNhbmNlbChOb3RpZmljYXRpb25JY29uV3JhcHBlciopOworCiAgICAgdm9pZCBhbGxv
d05vdGlmaWNhdGlvbkZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pOwotICAgIHZvaWQg
Y2xlYXJOb3RpZmljYXRpb25zTGlzdCgpOwogCiAgICAgc3RhdGljIGJvb2wgZHVtcE5vdGlmaWNh
dGlvbjsKIAogICAgIHZvaWQgc2V0UmVjZWl2ZXIoUU9iamVjdCogcmVjZWl2ZXIpIHsgbV9yZWNl
aXZlciA9IHJlY2VpdmVyOyB9CiAKKyAgICB2b2lkIGFkZENsaWVudCgpIHsgbV9jbGllbnRDb3Vu
dCsrOyB9CisgICAgdm9pZCByZW1vdmVDbGllbnQoKTsKKyAgICBzdGF0aWMgTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpOworCiBwcml2YXRlOgog
ICAgIHZvaWQgc2VuZEV2ZW50KE5vdGlmaWNhdGlvbiosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnROYW1lKTsKLSAgICBRV2ViUGFnZSogbV9wYWdlOwotICAgIFFNdWx0aUhhc2g8UVN0cmluZywg
IFFMaXN0PFJlZlB0cjxWb2lkQ2FsbGJhY2s+ID4gPiBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVz
dHM7Ci0gICAgUUhhc2ggPE5vdGlmaWNhdGlvbiosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj4g
bV9ub3RpZmljYXRpb25zOworICAgIHZvaWQgZGlzcGxheU5vdGlmaWNhdGlvbihOb3RpZmljYXRp
b24qLCBjb25zdCBRQnl0ZUFycmF5Jik7CisgICAgdm9pZCByZW1vdmVSZXBsYWNlZE5vdGlmaWNh
dGlvbkZyb21RdWV1ZShOb3RpZmljYXRpb24qKTsKKyAgICB2b2lkIGR1bXBSZXBsYWNlZElkVGV4
dChOb3RpZmljYXRpb24qKTsKKyAgICB2b2lkIGR1bXBTaG93VGV4dChOb3RpZmljYXRpb24qKTsK
KyAgICBpbnQgbV9jbGllbnRDb3VudDsKKyAgICBRSGFzaDxRU3RyaW5nLCAgUUxpc3Q8UmVmUHRy
PFZvaWRDYWxsYmFjaz4gPiA+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBOb3Rp
ZmljYXRpb25zUXVldWUgbV9ub3RpZmljYXRpb25zOwogICAgIFFPYmplY3QqIG1fcmVjZWl2ZXI7
CiB9OworCiB9CiAKICNlbmRpZgogI2VuZGlmCi0KSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNTAyKQor
KysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMDYtMDEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gRml4IHRoZSBs
aWZlY3ljbGUgb2Ygbm90aWZpY2F0aW9uIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDAzCisKKyAgICAgICAgUmVtb3ZlIHRoZSBkZXBl
bmRlbmN5IG9mIG5vdGlmaWNhdGlvbnMgb24gUVdlYlBhZ2UuCisKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcXVl
c3RQZXJtaXNzaW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6V2ViUGFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6cmVxdWVzdFBlcm1pc3Npb24p
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKwogMjAx
MC0wNi0wMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBU
aWdlciBidWlsZCBmaXguCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1w
UmVuZGVyVHJlZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM1LDkgKzEzNSw5IEBAIHZvaWQgY2hlY2tQZXJtaXNzaW9uQ2FsbGJhY2soUU9iamVjdCog
cmUKICAgICBxb2JqZWN0X2Nhc3Q8RHVtcFJlbmRlclRyZWUqPihyZWNlaXZlciktPmNoZWNrUGVy
bWlzc2lvbih1cmwsIHBlcm1pc3Npb24pOwogfQogCi12b2lkIHJlcXVlc3RQZXJtaXNzaW9uQ2Fs
bGJhY2soUU9iamVjdCogcmVjZWl2ZXIsIFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJiBv
cmlnaW4pCit2b2lkIHJlcXVlc3RQZXJtaXNzaW9uQ2FsbGJhY2soUU9iamVjdCogcmVjZWl2ZXIs
IGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKIHsKLSAgICBxb2JqZWN0X2Nhc3Q8RHVtcFJlbmRlclRy
ZWUqPihyZWNlaXZlciktPnJlcXVlc3RQZXJtaXNzaW9uKHBhZ2UsIG9yaWdpbik7CisgICAgcW9i
amVjdF9jYXN0PER1bXBSZW5kZXJUcmVlKj4ocmVjZWl2ZXIpLT5yZXF1ZXN0UGVybWlzc2lvbihv
cmlnaW4pOwogfQogCiBXZWJQYWdlOjpXZWJQYWdlKFFPYmplY3QqIHBhcmVudCwgRHVtcFJlbmRl
clRyZWUqIGRydCkKQEAgLTE2OCw3ICsxNjgsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKFFPYmplY3Qq
IHBhcmVudCwgRHVtcFJlCiAgICAgc2V0TmV0d29ya0FjY2Vzc01hbmFnZXIobV9kcnQtPm5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKCkpOwogICAgIHNldFBsdWdpbkZhY3RvcnkobmV3IFRlc3RQbHVnaW4o
dGhpcykpOwogCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE5vdGlmaWNhdGlvbnNS
ZWNlaXZlcih0aGlzLCBtX2RydCk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE5v
dGlmaWNhdGlvbnNSZWNlaXZlcihtX2RydCk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uKGNoZWNrUGVybWlzc2lvbkNhbGxiYWNrKTsKICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0UmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbihy
ZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNrKTsKIApAQCAtOTIwLDkgKzkyMCw5IEBAIHZvaWQgRHVt
cFJlbmRlclRyZWU6OmNoZWNrUGVybWlzc2lvbihjb24KICAgICBwZXJtaXNzaW9uID0gbV9jb250
cm9sbGVyLT5jaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKHVybC5zY2hlbWUoKSAr
ICI6Ly8iICsgdXJsLmhvc3QoKSkgPyBOb3RpZmljYXRpb25BbGxvd2VkIDogTm90aWZpY2F0aW9u
RGVuaWVkOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlOjpyZXF1ZXN0UGVybWlzc2lvbihRV2Vi
UGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgb3JpZ2luKQordm9pZCBEdW1wUmVuZGVyVHJlZTo6
cmVxdWVzdFBlcm1pc3Npb24oY29uc3QgUVN0cmluZyYgb3JpZ2luKQogewotICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjphbGxvd05vdGlmaWNhdGlvbkZvck9yaWdpbihwYWdlLCBvcmlnaW4p
OworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjphbGxvd05vdGlmaWNhdGlvbkZvck9yaWdp
bihvcmlnaW4pOwogfQogCiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKSW5kZXg6IFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgJKHJldmlzaW9uIDYw
NDcxKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljIFFfU0xPVFM6CiAgICAg
dm9pZCBzdGF0dXNCYXJNZXNzYWdlKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOwogICAgIHZvaWQg
d2luZG93Q2xvc2VSZXF1ZXN0ZWQoKTsKICAgICB2b2lkIGNoZWNrUGVybWlzc2lvbihjb25zdCBR
VXJsJiwgTm90aWZpY2F0aW9uUGVybWlzc2lvbiYpOwotICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Np
b24oUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmKTsKKyAgICB2b2lkIHJlcXVlc3RQZXJt
aXNzaW9uKGNvbnN0IFFTdHJpbmcmKTsKIAogUV9TSUdOQUxTOgogICAgIHZvaWQgcXVpdCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57590</attachid>
            <date>2010-06-01 13:39:33 -0700</date>
            <delta_ts>2010-06-01 18:27:43 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>40003.patch</filename>
            <type>text/plain</type>
            <size>25081</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjA1MDIpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTAtMDYtMDEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gRml4IHRoZSBsaWZlY3ljbGUgb2Ygbm90aWZpY2F0aW9uIG9iamVjdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDAzCisKKyAg
ICAgICAgTm90aWZpY2F0aW9uIG9iamVjdHMgYXJlIG5vdCB0aWdodGx5IHJlbGF0ZWQgdG8gdGhl
IHBhZ2UgdGhhdCBjcmVhdGVkIHRoZW0sCisgICAgICAgIGFuZCBzaG91bGQgYmUgZGVjb3VwbGVk
IGZyb20gdGhlIHBhZ2UuCisgICAgICAgIENyZWF0ZSBvbmUgTm90aWZpY2F0aW9uUHJlc2VudGVy
IHRoYXQgaGFuZGxlcyBhbGwgbm90aWZpY2F0aW9ucy4KKyAgICAgICAgQWRkIHJlZi9kZXJlZiB0
byB0aGUgbm90aWZpY2F0aW9uIG9iamVjdHMgd2hlbiB0aGV5IGFyZSBhZGRlZC9yZW1vdmVkIGZy
b20KKyAgICAgICAgdGhlIHF1ZXVlIG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLiBUaGUgc2FtZSB0
ZWNobmlxdWUgaXMgdXNlZCBmb3IgWE1MSHR0cFJlcXVlc3QuCisgICAgICAgIEluc3RlYWQgb2Yg
ZGVsZXRpbmcgYWxsIG5vdGlmaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSB3aGVuIHRo
ZSBwYWdlIGlzIG5hdmlnYXRlZCwKKyAgICAgICAgZGVsZXRlIHRoZW0gb24gYSB0aW1lciwgdXNp
bmcgdGhlIHNhbWUgdGltZW91dCB0aGF0IFFTeXN0ZW1UcmF5SWNvbiBpcyB1c2luZy4KKyAgICAg
ICAgQnJlYWsgdXAgdGhlIHNob3coKSBtZXRob2QgaW50byBzbWFsbGVyIG1ldGhvZHMuCisgICAg
ICAgIFVzZSBPd25QdHIgaW5zdGVhZCBvZiByYXcgcG9pbnRlciBmb3IgUVN5c3RlbVRyYXlJY29u
LgorICAgICAgICBNb3ZlIGNyZWF0aW5nIHRoZSBRSWNvbiB0byBqdXN0IGJlZm9yZSBzaG93aW5n
IGl0IGluIHRoZSBRU3lldGVtVHJheUljb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRo
aXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLiBFeGlzdGluZyBub3RpZmljYXRpb25zIHRlc3QgY292
ZXIgdGhlIGNvZGUuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdl
YlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRl
Ojp+UVdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2VfcC5oOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXROb3RpZmljYXRpb25zUmVjZWl2ZXIpOgorICAgICAgICAoRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29y
bGQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
Ojpub3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9u
SWNvbldyYXBwZXI6Ok5vdGlmaWNhdGlvbkljb25XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvbkljb25XcmFwcGVyOjp+Tm90aWZpY2F0aW9uSWNvbldyYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uSWNvbldyYXBwZXI6OmNsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpkaXNwbGF5Tm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ry
b3llZCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6
cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2Vu
dGVyQ2xpZW50UXQ6OnNlbmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25Q
cmVzZW50ZXJDbGllbnRRdDo6cmVtb3ZlUmVwbGFjZWROb3RpZmljYXRpb25Gcm9tUXVldWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmR1bXBSZXBs
YWNlZElkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6ZHVtcFNob3dUZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdC5oOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQ6OmFkZENsaWVudCk6CisKIDIwMTAtMDYtMDEgIFNpbW9uIEhhdXNtYW5u
ICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3ps
byBHb21ib3MuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIFFX
ZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWcKICAgICBQYWdlR3JvdXA6OnNl
dFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKHRydWUpOwogICAgIAogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKSAgICAKLSAgICBub3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnQgPSBuZXcgTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQocSk7CisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5hZGRDbGllbnQoKTsKICNlbmRpZgogfQog
CkBAIC0zMTUsNyArMzE1LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQcml2YXRlKCkK
ICAgICBkZWxldGUgcGFnZTsKICAgICAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICBk
ZWxldGUgbm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50OworICAgIE5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+cmVtb3ZlQ2xpZW50KCk7CiAj
ZW5kaWYKIH0KIApJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgJKHJldmlzaW9uIDYwNDcxKQorKysgV2ViS2l0
L3F0L0FwaS9xd2VicGFnZV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVkaXRvckNsaWVudFF0OwogICAgIGNsYXNzIEVs
ZW1lbnQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKLSAgICBjbGFzcyBOb3RpZmlj
YXRpb25QcmVzZW50ZXJDbGllbnRRdDsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFBhZ2U7
CiAgICAgY2xhc3MgRnJhbWU7CkBAIC0xOTEsOCArMTkwLDYgQEAgcHVibGljOgogICAgIGJvb2wg
aW5zcGVjdG9ySXNJbnRlcm5hbE9ubHk7IC8vIFRydWUgaWYgY3JlYXRlZCB0aHJvdWdoIHRoZSBJ
bnNwZWN0IGNvbnRleHQgbWVudSBhY3Rpb24KICAgICBRdDo6RHJvcEFjdGlvbiBtX2xhc3REcm9w
QWN0aW9uOwogICAgIAotICAgIFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0
KiBub3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnQ7Ci0KICAgICBRU3RyaW5nIHZpZXdNb2RlOwog
CiAgICAgc3RhdGljIGJvb2wgZHJ0UnVuOwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2MDQ3MSkKKysrIFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0
ODcsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpyZWFjaGVkTWF4QXBwQ2FjaGVTCiAjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCiBOb3RpZmljYXRpb25QcmVzZW50ZXIqIENocm9tZUNsaWVudFF0
Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3dlYlBhZ2Ut
PmQtPm5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudDsKKyAgICByZXR1cm4gTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpOwogfQogI2VuZGlmCiAK
SW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0LmNwcAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzcsMTcg
KzUzNywxNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wTm90aWZpCiAjZW5k
aWYKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9uc1Jl
Y2VpdmVyKFFXZWJQYWdlKiBwYWdlLCBRT2JqZWN0KiByZWNlaXZlcikKK3ZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldE5vdGlmaWNhdGlvbnNSZWNlaXZlcihRT2JqZWN0KiByZWNlaXZl
cikKIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICBwYWdlLT5kLT5ub3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnQtPnNldFJlY2VpdmVyKHJlY2VpdmVyKTsKKyAgICBOb3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPnNldFJlY2VpdmVy
KHJlY2VpdmVyKTsKICNlbmRpZgogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojph
bGxvd05vdGlmaWNhdGlvbkZvck9yaWdpbihRV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYg
b3JpZ2luKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWxsb3dOb3RpZmljYXRpb25G
b3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKQogewogI2lmIEVOQUJMRShOT1RJRklDQVRJ
T05TKQotICAgIHBhZ2UtPmQtPm5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudC0+YWxsb3dOb3Rp
ZmljYXRpb25Gb3JPcmlnaW4ob3JpZ2luKTsKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2lu
KG9yaWdpbik7CiAjZW5kaWYKIH0KIApJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgJKHJldmlzaW9uIDYwNDcxKQorKysgV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAgZW51bSBOb3RpZmljYXRpb25QZXJtaXNzaW9uIHsKIH07
CiAKIHR5cGVkZWYgdm9pZCAoQ2hlY2tQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKSAoUU9iamVjdCog
cmVjZWl2ZXIsIGNvbnN0IFFVcmwmLCBOb3RpZmljYXRpb25QZXJtaXNzaW9uJik7Ci10eXBlZGVm
IHZvaWQgKFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb25UeXBlKSAoUU9iamVjdCogcmVjZWl2ZXIs
IFFXZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJik7Cit0eXBlZGVmIHZvaWQgKFJlcXVlc3RQ
ZXJtaXNzaW9uRnVuY3Rpb25UeXBlKSAoUU9iamVjdCogcmVjZWl2ZXIsIGNvbnN0IFFTdHJpbmcm
KTsKIAogZXh0ZXJuIENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSogY2hlY2tQZXJtaXNzaW9u
RnVuY3Rpb247CiBleHRlcm4gUmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvblR5cGUqIHJlcXVlc3RQ
ZXJtaXNzaW9uRnVuY3Rpb247CkBAIC0xMTQsOCArMTE0LDggQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGR1bXBOb3RpZmljYXRpb24oYm9vbCBiKTsKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMg
c2hvdWxkIGV2ZW50dWFsbHkgdHVybiBpbnRvIHB1YmxpYyBBUEkKICAgICAvLyBhbmQgdGhlICJy
ZWNlaXZlciIgY29uY2VwdCB3b3VsZCBnbyBhd2F5Ci0gICAgc3RhdGljIHZvaWQgc2V0Tm90aWZp
Y2F0aW9uc1JlY2VpdmVyKFFXZWJQYWdlKiBwYWdlLCBRT2JqZWN0KiByZWNlaXZlcik7Ci0gICAg
c3RhdGljIHZvaWQgYWxsb3dOb3RpZmljYXRpb25Gb3JPcmlnaW4oUVdlYlBhZ2UqIHBhZ2UsIGNv
bnN0IFFTdHJpbmcmIG9yaWdpbik7CisgICAgc3RhdGljIHZvaWQgc2V0Tm90aWZpY2F0aW9uc1Jl
Y2VpdmVyKFFPYmplY3QqIHJlY2VpdmVyKTsKKyAgICBzdGF0aWMgdm9pZCBhbGxvd05vdGlmaWNh
dGlvbkZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pOwogICAgIHN0YXRpYyB2b2lkIHNl
dENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uKENoZWNrUGVybWlzc2lvbkZ1bmN0aW9uVHlwZSopOwog
ICAgIHN0YXRpYyB2b2lkIHNldFJlcXVlc3RQZXJtaXNzaW9uRnVuY3Rpb24oUmVxdWVzdFBlcm1p
c3Npb25GdW5jdGlvblR5cGUqKTsKIH07CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2MDQ3MSkKKysrIFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKLSNpbmNs
dWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUU5ldHdvcmtSZXBseUhhbmRsZXIuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCkBAIC02NDEsOSArNjQwLDYgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudFF0OjpkaXNwYXRjaERpZENsZQogCiAgICAgaWYgKG1fd2ViRnJhbWUpIHsKICAg
ICAgICAgZW1pdCBtX3dlYkZyYW1lLT5qYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpOwot
I2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotICAgICAgICBtX3dlYkZyYW1lLT5wYWdlKCktPmQt
Pm5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudC0+Y2xlYXJOb3RpZmljYXRpb25zTGlzdCgpOwot
I2VuZGlmCiAgICAgfQogfQogCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDYw
NDcxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsODQgKzM4LDExMSBAQAogI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCi0jaW5jbHVkZSAicXdlYmZy
YW1lLmgiCiAjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgi
CiAjaW5jbHVkZSA8UXRHdWk+CiAKLQogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgZG91Ymxl
IG5vdGlmaWNhdGlvblRpbWVvdXQgPSAxMC4wOwogCiBib29sIE5vdGlmaWNhdGlvblByZXNlbnRl
ckNsaWVudFF0OjpkdW1wTm90aWZpY2F0aW9uID0gZmFsc2U7CiAKK05vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0KiBzX25vdGlmaWNhdGlvblByZXNlbnRlciA9IDA7CisKK05vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0KiBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6bm90aWZp
Y2F0aW9uUHJlc2VudGVyKCkKK3sKKyAgICBpZiAoc19ub3RpZmljYXRpb25QcmVzZW50ZXIpCisg
ICAgICAgIHJldHVybiBzX25vdGlmaWNhdGlvblByZXNlbnRlcjsKKworICAgIHNfbm90aWZpY2F0
aW9uUHJlc2VudGVyID0gbmV3IE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0KCk7CisgICAg
cmV0dXJuIHNfbm90aWZpY2F0aW9uUHJlc2VudGVyOworfQorCiBOb3RpZmljYXRpb25JY29uV3Jh
cHBlcjo6Tm90aWZpY2F0aW9uSWNvbldyYXBwZXIoKQorICAgIDogbV9jbG9zZVRpbWVyKHRoaXMs
ICZOb3RpZmljYXRpb25JY29uV3JhcHBlcjo6Y2xvc2UpCiB7CiAjaWZuZGVmIFFUX05PX1NZU1RF
TVRSQVlJQ09OCiAgICAgbV9ub3RpZmljYXRpb25JY29uID0gMDsKICNlbmRpZgorICAgIG1fY2xv
c2VUaW1lci5zdGFydE9uZVNob3Qobm90aWZpY2F0aW9uVGltZW91dCk7CiB9CiAKIE5vdGlmaWNh
dGlvbkljb25XcmFwcGVyOjp+Tm90aWZpY2F0aW9uSWNvbldyYXBwZXIoKQogewotI2lmbmRlZiBR
VF9OT19TWVNURU1UUkFZSUNPTgotICAgIGRlbGV0ZSBtX25vdGlmaWNhdGlvbkljb247Ci0jZW5k
aWYKIH0KIAotTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Ok5vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKSA6IG1fcGFnZShwYWdlKQordm9pZCBOb3RpZmlj
YXRpb25JY29uV3JhcHBlcjo6Y2xvc2UoVGltZXI8Tm90aWZpY2F0aW9uSWNvbldyYXBwZXI+KikK
IHsKKyAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6bm90aWZpY2F0aW9uUHJlc2Vu
dGVyKCktPmNhbmNlbCh0aGlzKTsKIH0KIAotYm9vbCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKK05vdGlmaWNhdGlvblByZXNl
bnRlckNsaWVudFF0OjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCgpIDogbV9jbGllbnRD
b3VudCgwKQogewotICAgIFFIYXNoIDxOb3RpZmljYXRpb24qLCBOb3RpZmljYXRpb25JY29uV3Jh
cHBlcio+OjpJdGVyYXRvciBlbmQgPSBtX25vdGlmaWNhdGlvbnMuZW5kKCk7Ci0gICAgUUhhc2gg
PE5vdGlmaWNhdGlvbiosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj46Okl0ZXJhdG9yIGl0ZXIg
PSBtX25vdGlmaWNhdGlvbnMuYmVnaW4oKTsKLQotICAgIGlmICghbm90aWZpY2F0aW9uLT5yZXBs
YWNlSWQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7Ci0gICAg
ICAgICAgICBOb3RpZmljYXRpb24qIGV4aXN0aW5nTm90aWZpY2F0aW9uID0gaXRlci5rZXkoKTsK
LSAgICAgICAgICAgIGlmIChleGlzdGluZ05vdGlmaWNhdGlvbi0+cmVwbGFjZUlkKCkgPT0gbm90
aWZpY2F0aW9uLT5yZXBsYWNlSWQoKSAmJiBleGlzdGluZ05vdGlmaWNhdGlvbi0+dXJsKCkucHJv
dG9jb2woKSA9PSBub3RpZmljYXRpb24tPnVybCgpLnByb3RvY29sKCkgJiYgZXhpc3RpbmdOb3Rp
ZmljYXRpb24tPnVybCgpLmhvc3QoKSA9PSBub3RpZmljYXRpb24tPnVybCgpLmhvc3QoKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGl0ZXIrKzsKLSAgICAgICAgfQotICAg
IH0gZWxzZQotICAgICAgICBpdGVyID0gZW5kOworfQogCi0gICAgaWYgKGR1bXBOb3RpZmljYXRp
b24pIHsKLSAgICAgICAgaWYgKGl0ZXIgIT0gZW5kKSB7Ci0gICAgICAgICAgICBOb3RpZmljYXRp
b24qIG9sZE5vdGlmaWNhdGlvbiA9IGl0ZXIua2V5KCk7Ci0gICAgICAgICAgICBwcmludGYoIlJF
UExBQ0lORyBOT1RJRklDQVRJT04gJXNcbiIsIG9sZE5vdGlmaWNhdGlvbi0+aXNIVE1MKCkgPyBR
U3RyaW5nKG9sZE5vdGlmaWNhdGlvbi0+dXJsKCkuc3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0
YSgpIDogUVN0cmluZyhvbGROb3RpZmljYXRpb24tPmNvbnRlbnRzKCkudGl0bGUoKSkudG9VdGY4
KCkuY29uc3REYXRhKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChub3RpZmljYXRpb24tPmlz
SFRNTCgpKQotICAgICAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTjogY29udGVu
dHMgYXQgJXNcbiIsIFFTdHJpbmcobm90aWZpY2F0aW9uLT51cmwoKS5zdHJpbmcoKSkudG9VdGY4
KCkuY29uc3REYXRhKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiREVT
S1RPUCBOT1RJRklDQVRJT046JXMgaWNvbiAlcywgdGl0bGUgJXMsIHRleHQgJXNcbiIsCi0gICAg
ICAgICAgICAgICAgbm90aWZpY2F0aW9uLT5kaXIoKSA9PSAicnRsIiA/ICIoUlRMKSIgOiAiIiwK
LSAgICAgICAgICAgICAgICBRU3RyaW5nKG5vdGlmaWNhdGlvbi0+Y29udGVudHMoKS5pY29uKCku
c3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLCBRU3RyaW5nKG5vdGlmaWNhdGlvbi0+Y29u
dGVudHMoKS50aXRsZSgpKS50b1V0ZjgoKS5jb25zdERhdGEoKSwgCi0gICAgICAgICAgICAgICAg
UVN0cmluZyhub3RpZmljYXRpb24tPmNvbnRlbnRzKCkuYm9keSgpKS50b1V0ZjgoKS5jb25zdERh
dGEoKSk7Ci0gICAgICAgIH0KK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnJl
bW92ZUNsaWVudCgpCit7CisgICAgbV9jbGllbnRDb3VudC0tOworICAgIGlmICghbV9jbGllbnRD
b3VudCkgeworICAgICAgICBzX25vdGlmaWNhdGlvblByZXNlbnRlciA9IDA7CisgICAgICAgIGRl
bGV0ZSB0aGlzOwogICAgIH0KK30KIAotICAgIGlmIChpdGVyICE9IGVuZCkgewotICAgICAgICBz
ZW5kRXZlbnQoaXRlci5rZXkoKSwgZXZlbnROYW1lcygpLmNsb3NlRXZlbnQpOwotICAgICAgICBk
ZWxldGUgbV9ub3RpZmljYXRpb25zLnRha2UoaXRlci5rZXkoKSk7Citib29sIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0OjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQorewor
ICAgIC8vIEZJWE1FOiB3b3JrZXJzIGJhc2VkIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0
ZWQgeWV0LgorICAgIGlmIChub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBub3RpZmljYXRp
b24tPnNldFBlbmRpbmdBY3Rpdml0eShub3RpZmljYXRpb24pOworICAgIGlmICghbm90aWZpY2F0
aW9uLT5yZXBsYWNlSWQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVtb3ZlUmVwbGFjZWROb3Rp
ZmljYXRpb25Gcm9tUXVldWUobm90aWZpY2F0aW9uKTsKICAgICB9CisgICAgaWYgKGR1bXBOb3Rp
ZmljYXRpb24pCisgICAgICAgIGR1bXBTaG93VGV4dChub3RpZmljYXRpb24pOworICAgIGRpc3Bs
YXlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBRQnl0ZUFycmF5KCkpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkaXNwbGF5Tm90
aWZpY2F0aW9uKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCBjb25zdCBRQnl0ZUFycmF5JiBi
eXRlcykKK3sKICAgICBOb3RpZmljYXRpb25JY29uV3JhcHBlciogd3JhcHBlciA9IG5ldyBOb3Rp
ZmljYXRpb25JY29uV3JhcHBlcigpOwogICAgIG1fbm90aWZpY2F0aW9ucy5pbnNlcnQobm90aWZp
Y2F0aW9uLCB3cmFwcGVyKTsKKyAgICBRU3RyaW5nIHRpdGxlOworICAgIFFTdHJpbmcgbWVzc2Fn
ZTsKKyAgICAvLyBGSVhNRTogZG93bmxvYWQgJiBkaXNwbGF5IEhUTUwgbm90aWZpY2F0aW9ucwor
ICAgIGlmIChub3RpZmljYXRpb24tPmlzSFRNTCgpKQorICAgICAgICBtZXNzYWdlID0gbm90aWZp
Y2F0aW9uLT51cmwoKS5zdHJpbmcoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGl0bGUgPSBub3Rp
ZmljYXRpb24tPmNvbnRlbnRzKCkudGl0bGUoKTsKKyAgICAgICAgbWVzc2FnZSA9IG5vdGlmaWNh
dGlvbi0+Y29udGVudHMoKS5ib2R5KCk7CisgICAgfQorCisjaWZuZGVmIFFUX05PX1NZU1RFTVRS
QVlJQ09OCisgICAgUVBpeG1hcCBwaXhtYXA7CisgICAgaWYgKGJ5dGVzLmxlbmd0aCgpICYmIHBp
eG1hcC5sb2FkRnJvbURhdGEoYnl0ZXMpKSB7CisgICAgICAgIFFJY29uIGljb24ocGl4bWFwKTsK
KyAgICAgICAgd3JhcHBlci0+bV9ub3RpZmljYXRpb25JY29uID0gbmV3IFFTeXN0ZW1UcmF5SWNv
bihpY29uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd3JhcHBlci0+bV9ub3RpZmljYXRpb25JY29u
ID0gbmV3IFFTeXN0ZW1UcmF5SWNvbigpOworI2VuZGlmCisKICAgICBzZW5kRXZlbnQobm90aWZp
Y2F0aW9uLCAiZGlzcGxheSIpOwogCisgICAgLy8gTWFrZSBzdXJlIHRoZSBub3RpZmljYXRpb24g
d2FzIG5vdCBjYW5jZWxsZWQgZHVyaW5nIGhhbmRsaW5nIHRoZSBkaXNwbGF5IGV2ZW50CisgICAg
aWYgKG1fbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbikgPT0gbV9ub3RpZmljYXRpb25z
LmVuZCgpKQorICAgICAgICByZXR1cm47CisKICNpZm5kZWYgUVRfTk9fU1lTVEVNVFJBWUlDT04K
LSAgICB3cmFwcGVyLT5tX25vdGlmaWNhdGlvbkljb24gPSBuZXcgUVN5c3RlbVRyYXlJY29uOwog
ICAgIHdyYXBwZXItPm1fbm90aWZpY2F0aW9uSWNvbi0+c2hvdygpOwogICAgIHdyYXBwZXItPm1f
bm90aWZpY2F0aW9uSWNvbi0+c2hvd01lc3NhZ2Uobm90aWZpY2F0aW9uLT5jb250ZW50cygpLnRp
dGxlKCksIG5vdGlmaWNhdGlvbi0+Y29udGVudHMoKS5ib2R5KCkpOwogI2VuZGlmCi0gICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmNhbmNl
bChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKLXsgIAorewogICAgIGlmIChkdW1wTm90aWZp
Y2F0aW9uKSB7CiAgICAgICAgIGlmIChub3RpZmljYXRpb24tPmlzSFRNTCgpKQogICAgICAgICAg
ICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTiBDTE9TRUQ6ICVzXG4iLCBRU3RyaW5nKG5v
dGlmaWNhdGlvbi0+dXJsKCkuc3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKQEAgLTEy
MywxNSArMTUwLDI4IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OmNhbmMK
ICAgICAgICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gQ0xPU0VEOiAlc1xuIiwg
UVN0cmluZyhub3RpZmljYXRpb24tPmNvbnRlbnRzKCkudGl0bGUoKSkudG9VdGY4KCkuY29uc3RE
YXRhKCkpOwogICAgIH0KIAotICAgIFFIYXNoIDxOb3RpZmljYXRpb24qLCBOb3RpZmljYXRpb25J
Y29uV3JhcHBlcio+OjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmZpbmQobm90aWZp
Y2F0aW9uKTsKLSAgICBpZiAoaXRlciAhPSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpCi0gICAgICAg
IHNlbmRFdmVudChpdGVyLmtleSgpLCBldmVudE5hbWVzKCkuY2xvc2VFdmVudCk7CisgICAgTm90
aWZpY2F0aW9uc1F1ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmZpbmQobm90
aWZpY2F0aW9uKTsKKyAgICBpZiAoaXRlciAhPSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpIHsKKyAg
ICAgICAgc2VuZEV2ZW50KG5vdGlmaWNhdGlvbiwgZXZlbnROYW1lcygpLmNsb3NlRXZlbnQpOwor
ICAgICAgICBkZWxldGUgbV9ub3RpZmljYXRpb25zLnRha2Uobm90aWZpY2F0aW9uKTsKKyAgICAg
ICAgbm90aWZpY2F0aW9uLT51bnNldFBlbmRpbmdBY3Rpdml0eShub3RpZmljYXRpb24pOworICAg
IH0KK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDo6Y2FuY2VsKE5vdGlm
aWNhdGlvbkljb25XcmFwcGVyKiB3cmFwcGVyKQoreworICAgIE5vdGlmaWNhdGlvbnNRdWV1ZTo6
SXRlcmF0b3IgZW5kID0gbV9ub3RpZmljYXRpb25zLmVuZCgpOworICAgIE5vdGlmaWNhdGlvbnNR
dWV1ZTo6SXRlcmF0b3IgaXRlciA9IG1fbm90aWZpY2F0aW9ucy5iZWdpbigpOworICAgIHdoaWxl
IChpdGVyICE9IGVuZCAmJiBpdGVyLnZhbHVlKCkgIT0gd3JhcHBlcikKKyAgICAgICAgaXRlcisr
OworICAgIGlmIChpdGVyICE9IGVuZCkKKyAgICAgICAgY2FuY2VsKGl0ZXIua2V5KCkpOwogfQog
CiB2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25PYmplY3RE
ZXN0cm95ZWQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7CiAgICAgLy8gQ2FsbGVkIGZy
b20gfk5vdGlmaWNhdGlvbigpLCBSZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG5vdGlmaWNhdGlv
bnMgbGlzdCBhbmQgZGVsZXRlIHRoZSBpY29uLgotICAgIFFIYXNoIDxOb3RpZmljYXRpb24qLCBO
b3RpZmljYXRpb25JY29uV3JhcHBlcio+OjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25z
LmZpbmQobm90aWZpY2F0aW9uKTsKKyAgICBOb3RpZmljYXRpb25zUXVldWU6Okl0ZXJhdG9yIGl0
ZXIgPSBtX25vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24pOwogICAgIGlmIChpdGVyICE9
IG1fbm90aWZpY2F0aW9ucy5lbmQoKSkKICAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50
YWtlKG5vdGlmaWNhdGlvbik7CiB9CkBAIC0xMzksNyArMTc5LDcgQEAgdm9pZCBOb3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdDo6bm90aQogdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6cmVxdWVzdFBlcm1pc3Npb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0
cjxWb2lkQ2FsbGJhY2s+IGNhbGxiYWNrKQogeyAgCiAgICAgaWYgKGR1bXBOb3RpZmljYXRpb24p
Ci0gICAgICBwcmludGYoIkRFU0tUT1AgTk9USUZJQ0FUSU9OIFBFUk1JU1NJT04gUkVRVUVTVEVE
OiAlc1xuIiwgUVN0cmluZyhvcmlnaW4tPnRvU3RyaW5nKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgp
KTsKKyAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTiBQRVJNSVNTSU9OIFJFUVVF
U1RFRDogJXNcbiIsIFFTdHJpbmcob3JpZ2luLT50b1N0cmluZygpKS50b1V0ZjgoKS5jb25zdERh
dGEoKSk7CiAKICAgICBRU3RyaW5nIG9yaWdpblN0cmluZyA9IG9yaWdpbi0+dG9TdHJpbmcoKTsK
ICAgICBRSGFzaDxRU3RyaW5nLCBRTGlzdDxSZWZQdHI8Vm9pZENhbGxiYWNrPiA+ID46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuZmluZChvcmlnaW5TdHJpbmcp
OwpAQCAtMTUxLDcgKzE5MSw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6
OnJlcXUKICAgICAgICAgY2FsbGJhY2tzLmFwcGVuZChjYik7CiAgICAgICAgIG1fcGVuZGluZ1Bl
cm1pc3Npb25SZXF1ZXN0cy5pbnNlcnQob3JpZ2luU3RyaW5nLCBjYWxsYmFja3MpOwogICAgICAg
ICBpZiAocmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbikKLSAgICAgICAgICAgIHJlcXVlc3RQZXJt
aXNzaW9uRnVuY3Rpb24obV9yZWNlaXZlciwgbV9wYWdlLCBvcmlnaW5TdHJpbmcpOworICAgICAg
ICAgICAgcmVxdWVzdFBlcm1pc3Npb25GdW5jdGlvbihtX3JlY2VpdmVyLCBvcmlnaW5TdHJpbmcp
OwogICAgIH0KIH0KIApAQCAtMTg0LDE5ICsyMjQsNTIgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdDo6YWxsbwogICAgIH0KIH0KIAotdm9pZCBOb3RpZmljYXRpb25QcmVzZW50
ZXJDbGllbnRRdDo6Y2xlYXJOb3RpZmljYXRpb25zTGlzdCgpCit2b2lkIE5vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0OjpzZW5kRXZlbnQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogewotICAgIG1fcGVuZGluZ1Blcm1pc3Npb25S
ZXF1ZXN0cy5jbGVhcigpOwotICAgIHdoaWxlICghbV9ub3RpZmljYXRpb25zLmlzRW1wdHkoKSkg
ewotICAgICAgICBRSGFzaCA8Tm90aWZpY2F0aW9uKiwgTm90aWZpY2F0aW9uSWNvbldyYXBwZXIq
Pjo6SXRlcmF0b3IgaXRlciA9IG1fbm90aWZpY2F0aW9ucy5iZWdpbigpOwotICAgICAgICBkZWxl
dGUgbV9ub3RpZmljYXRpb25zLnRha2UoaXRlci5rZXkoKSk7CisgICAgbm90aWZpY2F0aW9uLT5k
aXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSkpOworfQor
Cit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpyZW1vdmVSZXBsYWNlZE5vdGlm
aWNhdGlvbkZyb21RdWV1ZShOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKK3sKKyAgICBOb3Rp
ZmljYXRpb24qIG9sZE5vdGlmaWNhdGlvbiA9IDA7CisgICAgTm90aWZpY2F0aW9uc1F1ZXVlOjpJ
dGVyYXRvciBlbmQgPSBtX25vdGlmaWNhdGlvbnMuZW5kKCk7CisgICAgTm90aWZpY2F0aW9uc1F1
ZXVlOjpJdGVyYXRvciBpdGVyID0gbV9ub3RpZmljYXRpb25zLmJlZ2luKCk7CisKKyAgICB3aGls
ZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgTm90aWZpY2F0aW9uKiBleGlzdGluZ05vdGlmaWNh
dGlvbiA9IGl0ZXIua2V5KCk7CisgICAgICAgIGlmIChleGlzdGluZ05vdGlmaWNhdGlvbi0+cmVw
bGFjZUlkKCkgPT0gbm90aWZpY2F0aW9uLT5yZXBsYWNlSWQoKSAmJiBleGlzdGluZ05vdGlmaWNh
dGlvbi0+dXJsKCkucHJvdG9jb2woKSA9PSBub3RpZmljYXRpb24tPnVybCgpLnByb3RvY29sKCkg
JiYgZXhpc3RpbmdOb3RpZmljYXRpb24tPnVybCgpLmhvc3QoKSA9PSBub3RpZmljYXRpb24tPnVy
bCgpLmhvc3QoKSkgeworICAgICAgICAgICAgb2xkTm90aWZpY2F0aW9uID0gaXRlci5rZXkoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGl0ZXIrKzsKKyAgICB9CisK
KyAgICBpZiAob2xkTm90aWZpY2F0aW9uKSB7CisgICAgICAgIGlmIChkdW1wTm90aWZpY2F0aW9u
KQorICAgICAgICAgICAgZHVtcFJlcGxhY2VkSWRUZXh0KG9sZE5vdGlmaWNhdGlvbik7CisgICAg
ICAgIHNlbmRFdmVudChvbGROb3RpZmljYXRpb24sIGV2ZW50TmFtZXMoKS5jbG9zZUV2ZW50KTsK
KyAgICAgICAgZGVsZXRlIG1fbm90aWZpY2F0aW9ucy50YWtlKG9sZE5vdGlmaWNhdGlvbik7Cisg
ICAgICAgIG9sZE5vdGlmaWNhdGlvbi0+dW5zZXRQZW5kaW5nQWN0aXZpdHkob2xkTm90aWZpY2F0
aW9uKTsKICAgICB9CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6OnNl
bmRFdmVudChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudE5hbWUpCit2b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OjpkdW1wUmVwbGFj
ZWRJZFRleHQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7Ci0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgbm90
aWZpY2F0aW9uLT5kaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgaWYgKG5vdGlm
aWNhdGlvbikKKyAgICAgICAgcHJpbnRmKCJSRVBMQUNJTkcgTk9USUZJQ0FUSU9OICVzXG4iLCBu
b3RpZmljYXRpb24tPmlzSFRNTCgpID8gUVN0cmluZyhub3RpZmljYXRpb24tPnVybCgpLnN0cmlu
ZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSA6IFFTdHJpbmcobm90aWZpY2F0aW9uLT5jb250ZW50
cygpLnRpdGxlKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKIH0KIAordm9pZCBOb3RpZmljYXRp
b25QcmVzZW50ZXJDbGllbnRRdDo6ZHVtcFNob3dUZXh0KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0
aW9uKQoreworICAgIGlmIChub3RpZmljYXRpb24tPmlzSFRNTCgpKQorICAgICAgICBwcmludGYo
IkRFU0tUT1AgTk9USUZJQ0FUSU9OOiBjb250ZW50cyBhdCAlc1xuIiwgUVN0cmluZyhub3RpZmlj
YXRpb24tPnVybCgpLnN0cmluZygpKS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT046JXMgaWNvbiAlcywgdGl0bGUg
JXMsIHRleHQgJXNcbiIsCisgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLT5kaXIoKSA9PSAi
cnRsIiA/ICIoUlRMKSIgOiAiIiwKKyAgICAgICAgICAgIFFTdHJpbmcobm90aWZpY2F0aW9uLT5j
b250ZW50cygpLmljb24oKS5zdHJpbmcoKSkudG9VdGY4KCkuY29uc3REYXRhKCksIFFTdHJpbmco
bm90aWZpY2F0aW9uLT5jb250ZW50cygpLnRpdGxlKCkpLnRvVXRmOCgpLmNvbnN0RGF0YSgpLAor
ICAgICAgICAgICAgUVN0cmluZyhub3RpZmljYXRpb24tPmNvbnRlbnRzKCkuYm9keSgpKS50b1V0
ZjgoKS5jb25zdERhdGEoKSk7CisgICAgfQorfQorCit9CiAjZW5kaWYgLy8gRU5BQkxFKE5PVElG
SUNBVElPTlMpCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAkocmV2aXNpb24gNjA0NzEpCisrKyBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsMjkgKzM0LDM1IEBACiAKICNpbmNsdWRlICJOb3RpZmljYXRpb24u
aCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgogCiAjaW5jbHVkZSA8UU11bHRpSGFzaD4KICNpbmNsdWRlIDxRU3lzdGVtVHJheUljb24+CiAK
LQogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotY2xhc3MgUVdlYlBhZ2U7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKKwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBLVVJMOwogCi1zdHJ1Y3QgTm90
aWZpY2F0aW9uSWNvbldyYXBwZXIgeworY2xhc3MgTm90aWZpY2F0aW9uSWNvbldyYXBwZXIgewor
cHVibGljOgogICAgIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKCk7CiAgICAgfk5vdGlmaWNhdGlv
bkljb25XcmFwcGVyKCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgY2xvc2UoVGltZXI8
Tm90aWZpY2F0aW9uSWNvbldyYXBwZXI+Kik7CiAjaWZuZGVmIFFUX05PX1NZU1RFTVRSQVlJQ09O
Ci0gICAgUVN5c3RlbVRyYXlJY29uKiBtX25vdGlmaWNhdGlvbkljb247CisgICAgT3duUHRyPFFT
eXN0ZW1UcmF5SWNvbj4gbV9ub3RpZmljYXRpb25JY29uOwogI2VuZGlmCisgICAgVGltZXI8Tm90
aWZpY2F0aW9uSWNvbldyYXBwZXI+IG1fY2xvc2VUaW1lcjsKIH07CiAKK3R5cGVkZWYgUUhhc2gg
PE5vdGlmaWNhdGlvbiosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj4gTm90aWZpY2F0aW9uc1F1
ZXVlOworCiBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdCA6IHB1YmxpYyBOb3Rp
ZmljYXRpb25QcmVzZW50ZXIgewogcHVibGljOgotICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0KFFXZWJQYWdlKik7CisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQoKTsK
ICAgICB+Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQoKSB7fQogCiAgICAgLyogV2ViQ29y
ZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyIGludGVyZmFjZSAqLwpAQCAtNjYsMjIgKzcyLDMyIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oU2VjdXJpdHlPcmln
aW4qLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4pOwogICAgIHZpcnR1YWwgTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpQZXJtaXNzaW9uIGNoZWNrUGVybWlzc2lvbihjb25zdCBLVVJMJik7CiAKKyAg
ICB2b2lkIGNhbmNlbChOb3RpZmljYXRpb25JY29uV3JhcHBlciopOworCiAgICAgdm9pZCBhbGxv
d05vdGlmaWNhdGlvbkZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pOwotICAgIHZvaWQg
Y2xlYXJOb3RpZmljYXRpb25zTGlzdCgpOwogCiAgICAgc3RhdGljIGJvb2wgZHVtcE5vdGlmaWNh
dGlvbjsKIAogICAgIHZvaWQgc2V0UmVjZWl2ZXIoUU9iamVjdCogcmVjZWl2ZXIpIHsgbV9yZWNl
aXZlciA9IHJlY2VpdmVyOyB9CiAKKyAgICB2b2lkIGFkZENsaWVudCgpIHsgbV9jbGllbnRDb3Vu
dCsrOyB9CisgICAgdm9pZCByZW1vdmVDbGllbnQoKTsKKyAgICBzdGF0aWMgTm90aWZpY2F0aW9u
UHJlc2VudGVyQ2xpZW50UXQqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpOworCiBwcml2YXRlOgog
ICAgIHZvaWQgc2VuZEV2ZW50KE5vdGlmaWNhdGlvbiosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnROYW1lKTsKLSAgICBRV2ViUGFnZSogbV9wYWdlOwotICAgIFFNdWx0aUhhc2g8UVN0cmluZywg
IFFMaXN0PFJlZlB0cjxWb2lkQ2FsbGJhY2s+ID4gPiBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVz
dHM7Ci0gICAgUUhhc2ggPE5vdGlmaWNhdGlvbiosIE5vdGlmaWNhdGlvbkljb25XcmFwcGVyKj4g
bV9ub3RpZmljYXRpb25zOworICAgIHZvaWQgZGlzcGxheU5vdGlmaWNhdGlvbihOb3RpZmljYXRp
b24qLCBjb25zdCBRQnl0ZUFycmF5Jik7CisgICAgdm9pZCByZW1vdmVSZXBsYWNlZE5vdGlmaWNh
dGlvbkZyb21RdWV1ZShOb3RpZmljYXRpb24qKTsKKyAgICB2b2lkIGR1bXBSZXBsYWNlZElkVGV4
dChOb3RpZmljYXRpb24qKTsKKyAgICB2b2lkIGR1bXBTaG93VGV4dChOb3RpZmljYXRpb24qKTsK
KworICAgIGludCBtX2NsaWVudENvdW50OworICAgIFFIYXNoPFFTdHJpbmcsICBRTGlzdDxSZWZQ
dHI8Vm9pZENhbGxiYWNrPiA+ID4gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzOworICAgIE5v
dGlmaWNhdGlvbnNRdWV1ZSBtX25vdGlmaWNhdGlvbnM7CiAgICAgUU9iamVjdCogbV9yZWNlaXZl
cjsKIH07CisKIH0KIAogI2VuZGlmCiAjZW5kaWYKLQpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjA1MDIp
CisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBA
QAorMjAxMC0wNi0wMSAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBGaXggdGhl
IGxpZmVjeWNsZSBvZiBub3RpZmljYXRpb24gb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwMDMKKworICAgICAgICBSZW1vdmUgdGhlIGRl
cGVuZGVuY3kgb2Ygbm90aWZpY2F0aW9ucyBvbiBRV2ViUGFnZS4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVx
dWVzdFBlcm1pc3Npb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpXZWJQ
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpyZXF1ZXN0UGVybWlzc2lv
bik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oOgorCiAy
MDEwLTA2LTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAg
IFRpZ2VyIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1
bXBSZW5kZXJUcmVlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCShyZXZpc2lvbiA2MDQ3MSkKKysrIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsOSArMTM1LDkgQEAgdm9pZCBjaGVja1Blcm1pc3Npb25DYWxsYmFjayhRT2JqZWN0
KiByZQogICAgIHFvYmplY3RfY2FzdDxEdW1wUmVuZGVyVHJlZSo+KHJlY2VpdmVyKS0+Y2hlY2tQ
ZXJtaXNzaW9uKHVybCwgcGVybWlzc2lvbik7CiB9CiAKLXZvaWQgcmVxdWVzdFBlcm1pc3Npb25D
YWxsYmFjayhRT2JqZWN0KiByZWNlaXZlciwgUVdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcm
IG9yaWdpbikKK3ZvaWQgcmVxdWVzdFBlcm1pc3Npb25DYWxsYmFjayhRT2JqZWN0KiByZWNlaXZl
ciwgY29uc3QgUVN0cmluZyYgb3JpZ2luKQogewotICAgIHFvYmplY3RfY2FzdDxEdW1wUmVuZGVy
VHJlZSo+KHJlY2VpdmVyKS0+cmVxdWVzdFBlcm1pc3Npb24ocGFnZSwgb3JpZ2luKTsKKyAgICBx
b2JqZWN0X2Nhc3Q8RHVtcFJlbmRlclRyZWUqPihyZWNlaXZlciktPnJlcXVlc3RQZXJtaXNzaW9u
KG9yaWdpbik7CiB9CiAKIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVjdCogcGFyZW50LCBEdW1wUmVu
ZGVyVHJlZSogZHJ0KQpAQCAtMTY4LDcgKzE2OCw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVj
dCogcGFyZW50LCBEdW1wUmUKICAgICBzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihtX2RydC0+bmV0
d29ya0FjY2Vzc01hbmFnZXIoKSk7CiAgICAgc2V0UGx1Z2luRmFjdG9yeShuZXcgVGVzdFBsdWdp
bih0aGlzKSk7CiAKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Tm90aWZpY2F0aW9u
c1JlY2VpdmVyKHRoaXMsIG1fZHJ0KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
Tm90aWZpY2F0aW9uc1JlY2VpdmVyKG1fZHJ0KTsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6c2V0Q2hlY2tQZXJtaXNzaW9uRnVuY3Rpb24oY2hlY2tQZXJtaXNzaW9uQ2FsbGJhY2spOwog
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRSZXF1ZXN0UGVybWlzc2lvbkZ1bmN0aW9u
KHJlcXVlc3RQZXJtaXNzaW9uQ2FsbGJhY2spOwogCkBAIC05MjAsOSArOTIwLDkgQEAgdm9pZCBE
dW1wUmVuZGVyVHJlZTo6Y2hlY2tQZXJtaXNzaW9uKGNvbgogICAgIHBlcm1pc3Npb24gPSBtX2Nv
bnRyb2xsZXItPmNoZWNrRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24odXJsLnNjaGVtZSgp
ICsgIjovLyIgKyB1cmwuaG9zdCgpKSA/IE5vdGlmaWNhdGlvbkFsbG93ZWQgOiBOb3RpZmljYXRp
b25EZW5pZWQ7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWU6OnJlcXVlc3RQZXJtaXNzaW9uKFFX
ZWJQYWdlKiBwYWdlLCBjb25zdCBRU3RyaW5nJiBvcmlnaW4pCit2b2lkIER1bXBSZW5kZXJUcmVl
OjpyZXF1ZXN0UGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pCiB7Ci0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3JpZ2luKHBhZ2UsIG9yaWdp
bik7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFsbG93Tm90aWZpY2F0aW9uRm9yT3Jp
Z2luKG9yaWdpbik7CiB9CiAKICNpZiBkZWZpbmVkKFFfV1NfWDExKQpJbmRleDogV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAkocmV2aXNpb24g
NjA0NzEpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWMgUV9TTE9UUzoKICAg
ICB2b2lkIHN0YXR1c0Jhck1lc3NhZ2UoY29uc3QgUVN0cmluZyYgbWVzc2FnZSk7CiAgICAgdm9p
ZCB3aW5kb3dDbG9zZVJlcXVlc3RlZCgpOwogICAgIHZvaWQgY2hlY2tQZXJtaXNzaW9uKGNvbnN0
IFFVcmwmLCBOb3RpZmljYXRpb25QZXJtaXNzaW9uJik7Ci0gICAgdm9pZCByZXF1ZXN0UGVybWlz
c2lvbihRV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYpOworICAgIHZvaWQgcmVxdWVzdFBl
cm1pc3Npb24oY29uc3QgUVN0cmluZyYpOwogCiBRX1NJR05BTFM6CiAgICAgdm9pZCBxdWl0KCk7
Cg==
</data>
<flag name="review"
          id="42220"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>