<?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>21642</bug_id>
          
          <creation_ts>2008-10-16 09:57:42 -0700</creation_ts>
          <short_desc>Abstract out active object tracking</short_desc>
          <delta_ts>2008-10-17 01:12:38 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95541</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-16 09:57:42 -0700</bug_when>
    <thetext>Currently there are two kinds of active objects (XMLHttpRequest and MessagePort), but there will be more in the near future.

We should abstract out as much code as possible to avoid tracking them all separately in Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95711</commentid>
    <comment_count>1</comment_count>
      <attachid>24454</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-17 00:18:46 -0700</bug_when>
    <thetext>Created attachment 24454
proposed patch

MessagePort is a special case, because these need to be tracked for cross-heap GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95715</commentid>
    <comment_count>2</comment_count>
      <attachid>24454</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-17 00:53:18 -0700</bug_when>
    <thetext>Comment on attachment 24454
proposed patch

+        ActiveDOMObject(Document* document, void* upcastPointer);
The document parameter name here is not needed.

+        template&lt;class T&gt; void setPendingActivity(T* This)
+        {
+            ASSERT(This == this);
We don&apos;t usually have variables that start with a capital letter.  Perhaps thisObject?

+} // namespace WebCore
+
+#endif // MessagePort_h

You meant ActiveDOMObject_h I think.

My main concern with this patch is the name ActiveDOMObject, which I don&apos;t think conveys the idea intended.  I also think it may be cleaner to store the upcaster pointer in the ActiveDOMObject instead of the HashMap.  

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95717</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-17 01:12:38 -0700</bug_when>
    <thetext>Committed revision 37649.

Discussed suggestions on IRC - sadly, we don&apos;t have an idea for a better name.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24454</attachid>
            <date>2008-10-17 00:18:46 -0700</date>
            <delta_ts>2008-10-17 00:53:18 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>ActiveDOMObject.txt</filename>
            <type>text/plain</type>
            <size>34799</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzY0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDgtMTAtMTcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MgorICAgICAgICBB
YnN0cmFjdCBvdXQgYWN0aXZlIG9iamVjdCB0cmFja2luZworCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXJrQWN0aXZlT2JqZWN0c0ZvckRvY3VtZW50
KToKKyAgICAgICAgKiBkb20vQWN0aXZlRE9NT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6OkFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjdGl2ZURPTU9iamVjdDo6c3RvcCk6CisgICAgICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdDo6ZG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0OjpzZXRQZW5kaW5nQWN0aXZpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRpbmdBY3Rpdml0eSk6
CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
Ojp+RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0b3BBY3RpdmVET01P
YmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVkQWN0aXZlRE9NT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkZXN0cm95ZWRBY3RpdmVET01PYmpl
Y3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6Y29udGV4dERlc3Ryb3llZCk6CisgICAgICAg
ICogZG9tL01lc3NhZ2VQb3J0Lmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgICog
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6flhN
TEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojphc3NvY2lh
dGVkRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1M
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0ZUNoYW5n
ZUxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojppbml0U2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdDo6bWFrZVNpbXBsZUNyb3NzU2l0ZUFjY2Vzc1JlcXVlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Om1ha2VDcm9zc1NpdGVBY2Nlc3NSZXF1ZXN0V2l0
aFByZWZsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6aGFuZGxlQXN5
bmNocm9ub3VzUHJlZmxpZ2h0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1
ZXN0Ojpsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OmxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nUHJlZmxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OmFjY2Vzc0NvbnRyb2xDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlUHJlZmxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
Ojpjb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoKKyAg
ICAgICAgTW92ZSBhY3Rpdml0eSB0cmFja2luZyB0byBhIG5ldyBBY3RpdmVET01PYmplY3QgY2xh
c3MuCisKIDIwMDgtMTAtMTYgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFNpbXBsaWZ5IHN0eWxlRm9yUmVuZGVyZXIgdG8gYXZvaWQgY29uZnVzaW9uLiAgQ2FsbGVy
cyBpbiB0aGUgU1ZHIGZpbHRlciBjb2RlIHRob3VnaHQgImZvclJlbmRlcmVyIiBtZWFudApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM3
NjQ3KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTQxNTMsNiArNDE1Myw4IEBACiAJCUUxQURFRERCMEU3NkJEOTMwMDRBMUE1
RSAvKiBKU01lc3NhZ2VQb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxQURFREQ5MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmNw
cCAqLzsgfTsKIAkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEy
QjBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCAqLzsgfTsKIAkJRTFCRTUx
MkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8q
IFhTTFRVbmljb2RlU29ydC5oICovOyB9OworCQlFMUM0REU2OTBFQTc1QzFFMDAyM0NDRDYgLyog
QWN0aXZlRE9NT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUM0REU2ODBFQTc1QzFFMDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmggKi87
IH07CisJCUUxQzRERTZFMEVBNzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDNERFNkQwRUE3
NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi87IH07CiAJCUUxRTZFRUE0MEI2
MjhEQTgwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTZFRUEzMEI2MjhEQTgwMDVGMkY3MCAv
KiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCAqLzsgfTsKIAkJRTFFNkVFQTgwQjYyOERCMzAwNUYy
RjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTZFRUE3MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxl
Y3RFbGVtZW50LmggKi87IH07CiAJCUUxRUJCQkQ0MEFBQzlCODcwMDFGRThFMiAvKiBDU1NDaGFy
c2V0UnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUVCQkJEMzBBQUM5Qjg3MDAxRkU4RTIgLyogQ1NTQ2hhcnNldFJ1bGUuY3BwICovOyB9OwpA
QCAtODcyMSw2ICs4NzIzLDggQEAKIAkJRTFBREVERDkwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVz
c2FnZVBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNz
YWdlUG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQkU1MTJCMENGNkM1
MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gWFNMVFVuaWNvZGVTb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2
ZURPTU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3RpdmVET01P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDNERFNkQwRUE3NUM2NTAw
MjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBY3RpdmVET01PYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUU2RUVBMzBCNjI4REE4MDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxTZWxlY3RFbGVtZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFNkVFQTcwQjYyOERCMzAwNUYy
RjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7
IHBhdGggPSBKU0hUTUxTZWxlY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxRUJCQkQzMEFBQzlCODcwMDFGRThFMiAvKiBDU1NDaGFyc2V0UnVsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDaGFyc2V0UnVsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzY3Miw2ICsxMzY3Niw4IEBACiAJCUY1MjNEMzI0
MDJERTQ0NzgwMTg2MzVDQSAvKiBkb20gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUUxQzRERTZEMEVBNzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmpl
Y3QuY3BwICovLAorCQkJCUUxQzRERTY4MEVBNzVDMUUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmpl
Y3QuaCAqLywKIAkJCQlBOEM0QTdGQzA5RDU2MzI3MDAwM0FDOEQgLyogQXR0ci5jcHAgKi8sCiAJ
CQkJQThDNEE3RkIwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuaCAqLywKIAkJCQk5M0VFQzFFNTA5
QzI4Nzc3MDBDNTE1RDEgLyogQXR0ci5pZGwgKi8sCkBAIC0xNTk4Miw2ICsxNTk4OCw3IEBACiAJ
CQkJMUNGNkJFMTUwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOUIwMkVGMEVB
MkRCQzQwMEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUM0
REU2OTBFQTc1QzFFMDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTE3ODQ5LDYgKzE3ODU2LDcgQEAKIAkJCQkxQ0Y2QkUxNDBFOUJCNDY3MDAyNUUxQ0QgLyog
T2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzgwRkExMzBF
QTI4N0IwMDBCMDgyMUQgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOUIwMkVF
MEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUUxQzRERTZFMEVBNzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAz
NzY0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAi
RE9NQ29yZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnRFeGNlcHRpb24uaCIKQEAgLTQzLDcgKzQ0LDYgQEAKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5o
IgogI2luY2x1ZGUgIlJhbmdlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgotI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVl
c3RFeGNlcHRpb24uaCIKICNpbmNsdWRlIDxranMvUHJvdG90eXBlRnVuY3Rpb24uaD4KIApAQCAt
MjQ1LDExICsyNDUsMTEgQEAgdm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckRvY3VtZW50KEpTR2xv
YgogICAgIC8vIElmIGFuIGVsZW1lbnQgaGFzIHBlbmRpbmcgYWN0aXZpdHkgdGhhdCBtYXkgcmVz
dWx0IGluIGxpc3RlbmVycyBiZWluZyBjYWxsZWQKICAgICAvLyAoZS5nLiBhbiBYTUxIdHRwUmVx
dWVzdCksIHdlIG5lZWQgdG8ga2VlcCBhbGwgSlMgd3JhcHBlcnMgYWxpdmUuCiAKLSAgICBjb25z
dCBIYXNoU2V0PFhNTEh0dHBSZXF1ZXN0Kj4mIHhtbEh0dHBSZXF1ZXN0cyA9IGRvYy0+eG1sSHR0
cFJlcXVlc3RzKCk7Ci0gICAgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCo+Ojpjb25zdF9pdGVyYXRv
ciByZXF1ZXN0c0VuZCA9IHhtbEh0dHBSZXF1ZXN0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8
WE1MSHR0cFJlcXVlc3QqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHhtbEh0dHBSZXF1ZXN0cy5i
ZWdpbigpOyBpdGVyICE9IHJlcXVlc3RzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRl
ciktPmhhc1BlbmRpbmdBY3Rpdml0eSgpKSB7Ci0gICAgICAgICAgICBET01PYmplY3QqIHdyYXBw
ZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGdsb2JhbERhdGEsICppdGVyKTsKKyAgICBj
b25zdCBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPiYgYWN0aXZlT2JqZWN0cyA9IGRv
Yy0+YWN0aXZlRE9NT2JqZWN0cygpOworICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9p
ZCo+Ojpjb25zdF9pdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gYWN0aXZlT2JqZWN0cy5lbmQo
KTsKKyAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gYWN0aXZlT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNF
bmQ7ICsraXRlcikgeworICAgICAgICBpZiAoaXRlci0+Zmlyc3QtPmhhc1BlbmRpbmdBY3Rpdml0
eSgpKSB7CisgICAgICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmpl
Y3RXcmFwcGVyKGdsb2JhbERhdGEsIGl0ZXItPnNlY29uZCk7CiAgICAgICAgICAgICAvLyBBbiBv
YmplY3Qgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IG11c3QgaGF2ZSBhIHdyYXBwZXIgdG8gbWFyayBp
dHMgbGlzdGVuZXJzLCBzbyBubyBudWxsIGNoZWNrLgogICAgICAgICAgICAgaWYgKCF3cmFwcGVy
LT5tYXJrZWQoKSkKICAgICAgICAgICAgICAgICB3cmFwcGVyLT5tYXJrKCk7CkluZGV4OiBXZWJD
b3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Fj
dGl2ZURPTU9iamVjdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9BY3RpdmVET01P
YmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKworI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQWN0aXZlRE9NT2JqZWN0
OjpBY3RpdmVET01PYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50LCB2b2lkKiB1cGNhc3RQb2ludGVy
KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fcGVuZGluZ0FjdGl2aXR5Q291
bnQoMCkKK3sKKyAgICBtX2RvY3VtZW50LT5jcmVhdGVkQWN0aXZlRE9NT2JqZWN0KHRoaXMsIHVw
Y2FzdFBvaW50ZXIpOworfQorCitBY3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QoKQor
eworICAgIGlmIChtX2RvY3VtZW50KQorICAgICAgICBtX2RvY3VtZW50LT5kZXN0cm95ZWRBY3Rp
dmVET01PYmplY3QodGhpcyk7Cit9CisKK3ZvaWQgQWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVz
dHJveWVkKCkKK3sKKyAgICBtX2RvY3VtZW50ID0gMDsKK30KKwordm9pZCBBY3RpdmVET01PYmpl
Y3Q6OnN0b3AoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvZG9tL0FjdGl2ZURPTU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBBY3RpdmVET01PYmplY3RfaAor
I2RlZmluZSBBY3RpdmVET01PYmplY3RfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRG9jdW1lbnQ7CisKKyAgICBjbGFz
cyBBY3RpdmVET01PYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgQWN0aXZlRE9NT2JqZWN0
KERvY3VtZW50KiBkb2N1bWVudCwgdm9pZCogdXBjYXN0UG9pbnRlcik7CisKKyAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgICAgICBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIHsgcmV0dXJuIG1fcGVuZGluZ0FjdGl2aXR5Q291bnQ7
IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5B
Y3RpdmVET01PYmplY3QoKTsKKworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIHNldFBl
bmRpbmdBY3Rpdml0eShUKiBUaGlzKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoVGhp
cyA9PSB0aGlzKTsKKyAgICAgICAgICAgIFRoaXMtPnJlZigpOworICAgICAgICAgICAgbV9wZW5k
aW5nQWN0aXZpdHlDb3VudCsrOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3Mg
VD4gdm9pZCB1bnNldFBlbmRpbmdBY3Rpdml0eShUKiBUaGlzKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQobV9wZW5kaW5nQWN0aXZpdHlDb3VudCA+IDApOworICAgICAgICAgICAgLS1t
X3BlbmRpbmdBY3Rpdml0eUNvdW50OworICAgICAgICAgICAgVGhpcy0+ZGVyZWYoKTsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAg
ICAgIHVuc2lnbmVkIG1fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTWVzc2FnZVBvcnRfaAoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzc2NDcpCisr
KyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNiw3ICs0MjYs
MTggQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAKICAgICByZW1vdmVBbGxFdmVudExpc3RlbmVy
cygpOwogCi0gICAgWE1MSHR0cFJlcXVlc3Q6OmRldGFjaFJlcXVlc3RzKHRoaXMpOworICAgIEhh
c2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3RpdmVPYmplY3RzRW5k
ID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01P
YmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9iamVjdHMuYmVnaW4o
KTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKKyAgICAgICAgQVNTRVJUKGl0
ZXItPmZpcnN0LT5kb2N1bWVudCgpID09IHRoaXMpOworICAgICAgICBpdGVyLT5maXJzdC0+Y29u
dGV4dERlc3Ryb3llZCgpOworICAgIH0KKworICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQqPjo6aXRl
cmF0b3IgbWVzc2FnZVBvcnRzRW5kID0gbV9tZXNzYWdlUG9ydHMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX21lc3NhZ2VQb3J0cy5iZWdp
bigpOyBpdGVyICE9IG1lc3NhZ2VQb3J0c0VuZDsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVCgo
Kml0ZXIpLT5kb2N1bWVudCgpID09IHRoaXMpOworICAgICAgICAoKml0ZXIpLT5jb250ZXh0RGVz
dHJveWVkKCk7CisgICAgfQorCiAgICAgZm9yZ2V0QWxsRE9NTm9kZXNGb3JEb2N1bWVudCh0aGlz
KTsKIAogICAgIGlmIChtX2RvY0NoYW5nZWQgJiYgY2hhbmdlZERvY3VtZW50cykKQEAgLTQ2OSwx
OCArNDgwLDYgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgaWYgKG1fc3R5bGVTaGVldHMp
CiAgICAgICAgIG1fc3R5bGVTaGVldHMtPmRvY3VtZW50RGVzdHJveWVkKCk7CiAKLSAgICBIYXNo
U2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIG1lc3NhZ2VQb3J0c0VuZCA9IG1fbWVzc2FnZVBv
cnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBpdGVy
ID0gbV9tZXNzYWdlUG9ydHMuYmVnaW4oKTsgaXRlciAhPSBtX21lc3NhZ2VQb3J0cy5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVCgoKml0ZXIpLT5kb2N1bWVudCgpID09IHRoaXMpOwot
ICAgICAgICAoKml0ZXIpLT5jb250ZXh0RGVzdHJveWVkKCk7Ci0gICAgICAgIGlmICgoKml0ZXIp
LT5lbnRhbmdsZWRQb3J0KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gc3Vy
dml2aW5nUG9ydCA9ICgqaXRlciktPmVudGFuZ2xlZFBvcnQoKTsKLSAgICAgICAgICAgICgqaXRl
ciktPnVuZW50YW5nbGUoKTsKLSAgICAgICAgICAgIGlmIChzdXJ2aXZpbmdQb3J0LT5kb2N1bWVu
dCgpICE9IHRoaXMpIC8vIE90aGVyd2lzZSwgc3Vydml2aW5nUG9ydCB3b24ndCByZWFsbHkgc3Vy
dml2ZS4KLSAgICAgICAgICAgICAgICBzdXJ2aXZpbmdQb3J0LT5xdWV1ZUNsb3NlRXZlbnQoKTsK
LSAgICAgICAgfQotICAgIH0KLQogICAgIG1fZG9jdW1lbnQgPSAwOwogfQogCkBAIC00NDA2LDE2
ICs0NDA1LDI2IEBAIHZvaWQgRG9jdW1lbnQ6OmRlc3Ryb3llZE1lc3NhZ2VQb3J0KE1lc3MKICAg
ICBtX21lc3NhZ2VQb3J0cy5yZW1vdmUocG9ydCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmNyZWF0
ZWRYTUxIdHRwUmVxdWVzdChYTUxIdHRwUmVxdWVzdCogcmVxdWVzdCkKK3ZvaWQgRG9jdW1lbnQ6
OnN0b3BBY3RpdmVET01PYmplY3RzKCkKK3sKKyAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCos
IHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5l
bmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRv
ciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0
c0VuZDsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+ZG9jdW1lbnQoKSA9
PSB0aGlzKTsKKyAgICAgICAgaXRlci0+Zmlyc3QtPnN0b3AoKTsKKyAgICB9Cit9CisKK3ZvaWQg
RG9jdW1lbnQ6OmNyZWF0ZWRBY3RpdmVET01PYmplY3QoQWN0aXZlRE9NT2JqZWN0KiBvYmplY3Qs
IHZvaWQqIHVwY2FzdFBvaW50ZXIpCiB7Ci0gICAgQVNTRVJUKHJlcXVlc3QpOwotICAgIG1feG1s
SHR0cFJlcXVlc3RzLmFkZChyZXF1ZXN0KTsKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NF
UlQodXBjYXN0UG9pbnRlcik7CisgICAgbV9hY3RpdmVET01PYmplY3RzLmFkZChvYmplY3QsIHVw
Y2FzdFBvaW50ZXIpOwogfQogCi12b2lkIERvY3VtZW50OjpkZXN0cm95ZWRYTUxIdHRwUmVxdWVz
dChYTUxIdHRwUmVxdWVzdCogcmVxdWVzdCkKK3ZvaWQgRG9jdW1lbnQ6OmRlc3Ryb3llZEFjdGl2
ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQocmVxdWVz
dCk7Ci0gICAgbV94bWxIdHRwUmVxdWVzdHMucmVtb3ZlKHJlcXVlc3QpOworICAgIEFTU0VSVChv
YmplY3QpOworICAgIG1fYWN0aXZlRE9NT2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKIH0KIAogdm9p
ZCBEb2N1bWVudDo6aW5pdEROU1ByZWZldGNoKCkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzc2NDcp
CisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIEFjdGl2ZURPTU9iamVjdDsK
ICAgICBjbGFzcyBBWE9iamVjdENhY2hlOwogICAgIGNsYXNzIEF0dHI7CiAgICAgY2xhc3MgQXR0
cmlidXRlOwpAQCAtNzY0LDE2ICs3NjUsMTkgQEAgcHVibGljOgogICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogZ2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBIVE1MQ2FudmFzRWxl
bWVudCogZ2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUpOwogCisgICAgLy8g
QWN0aXZlIG9iamVjdHMgYXJlIG5vdCBnYXJiYWdlIGNvbGxlY3RlZCBldmVuIGlmIGluYWNjZXNz
aWJsZSwgZS5nLiBiZWNhdXNlIHRoZWlyIGFjdGl2aXR5IG1heSByZXN1bHQgaW4gY2FsbGJhY2tz
IGJlaW5nIGludm9rZWQuCisgICAgdm9pZCBzdG9wQWN0aXZlRE9NT2JqZWN0cygpOworICAgIHZv
aWQgY3JlYXRlZEFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqLCB2b2lkKiB1cGNhc3RQ
b2ludGVyKTsKKyAgICB2b2lkIGRlc3Ryb3llZEFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmpl
Y3QqKTsKKyAgICBjb25zdCBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPiYgYWN0aXZl
RE9NT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlRE9NT2JqZWN0czsgfQorCisgICAg
Ly8gTWVzc2FnZVBvcnQgaXMgY29uY2VwdHVhbGx5IGEga2luZCBvZiBBY3RpdmVET01PYmplY3Qs
IGJ1dCBpdCBuZWVkcyB0byBiZSB0cmFja2VkIHNlcGFyYXRlbHkgZm9yIG1lc3NhZ2UgZGlzcGF0
Y2gsIGFuZCBmb3IgY3Jvc3MtaGVhcCBHQyBzdXBwb3J0LgogICAgIHZvaWQgcHJvY2Vzc01lc3Nh
Z2VQb3J0TWVzc2FnZXNTb29uKCk7CiAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VQb3J0RXZlbnRz
KCk7CiAgICAgdm9pZCBjcmVhdGVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqKTsKICAgICB2b2lk
IGRlc3Ryb3llZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0Kik7CiAgICAgY29uc3QgSGFzaFNldDxN
ZXNzYWdlUG9ydCo+JiBtZXNzYWdlUG9ydHMoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2VQb3J0
czsgfQogCi0gICAgdm9pZCBjcmVhdGVkWE1MSHR0cFJlcXVlc3QoWE1MSHR0cFJlcXVlc3QqKTsK
LSAgICB2b2lkIGRlc3Ryb3llZFhNTEh0dHBSZXF1ZXN0KFhNTEh0dHBSZXF1ZXN0Kik7Ci0gICAg
Y29uc3QgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCo+JiB4bWxIdHRwUmVxdWVzdHMoKSBjb25zdCB7
IHJldHVybiBtX3htbEh0dHBSZXF1ZXN0czsgfQotCiAgICAgYm9vbCBpc0ROU1ByZWZldGNoRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNETlNQcmVmZXRjaEVuYWJsZWQ7IH0KICAgICB2b2lk
IGluaXRETlNQcmVmZXRjaCgpOwogICAgIHZvaWQgcGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFk
ZXIoY29uc3QgU3RyaW5nJik7CkBAIC05MzQsNyArOTM4LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fZmlyZWRNZXNzYWdlUG9ydFRpbWVyOwogICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQqPiBtX21l
c3NhZ2VQb3J0czsKIAotICAgIEhhc2hTZXQ8WE1MSHR0cFJlcXVlc3QqPiBtX3htbEh0dHBSZXF1
ZXN0czsKKyAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPiBtX2FjdGl2ZURPTU9i
amVjdHM7CiAKIHB1YmxpYzoKICAgICBib29sIGluUGFnZUNhY2hlKCk7CkluZGV4OiBXZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwCShyZXZpc2lvbiAzNzY0NykKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSwxNyBAQCB2b2lkIE1lc3NhZ2VQb3J0Ojp1bmVu
dGFuZ2xlKCkKICAgICBtX2VudGFuZ2xlZFBvcnQgPSAwOwogfQogCit2b2lkIE1lc3NhZ2VQb3J0
Ojpjb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBpZiAobV9lbnRhbmdsZWRQb3J0KSB7CisgICAg
ICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gc3Vydml2aW5nUG9ydCA9IG1fZW50YW5nbGVkUG9ydDsK
KyAgICAgICAgdW5lbnRhbmdsZSgpOworICAgICAgICBpZiAoc3Vydml2aW5nUG9ydC0+ZG9jdW1l
bnQoKSAhPSBkb2N1bWVudCgpKSAvLyBPdGhlcndpc2UsIHN1cnZpdmluZ1BvcnQgd29uJ3QgcmVh
bGx5IHN1cnZpdmUuCisgICAgICAgICAgICBzdXJ2aXZpbmdQb3J0LT5xdWV1ZUNsb3NlRXZlbnQo
KTsKKyAgICB9CisgICAgbV9kb2N1bWVudCA9IDA7Cit9CisKIHZvaWQgTWVzc2FnZVBvcnQ6OmRp
c3BhdGNoTWVzc2FnZXMoKQogewogICAgIC8vIE1lc3NhZ2VzIGZvciBkb2N1bWVudHMgdGhhdCBh
cmUgbm90IGZ1bGx5IGFjdGl2ZSBnZXQgZGlzcGF0Y2hlZCB0b28sIGJ1dCBKU0Fic3RyYWN0RXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoKSBkb2Vzbid0IGNhbGwgaGFuZGxlcnMgZm9yIHRoZXNl
LgpJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5oCShyZXZpc2lvbiAzNzY0NykKKysrIFdlYkNvcmUvZG9tL01lc3Nh
Z2VQb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBzdGF0aWMgdm9pZCBlbnRhbmdsZShNZXNzYWdlUG9ydCosIE1lc3NhZ2VQ
b3J0Kik7CiAgICAgICAgIHZvaWQgdW5lbnRhbmdsZSgpOwogCi0gICAgICAgIHZvaWQgY29udGV4
dERlc3Ryb3llZCgpIHsgbV9kb2N1bWVudCA9IDA7IH0gCisgICAgICAgIHZvaWQgY29udGV4dERl
c3Ryb3llZCgpOwogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3Vt
ZW50OyB9CiAKICAgICAgICAgdmlydHVhbCBNZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9ydCgpIHsg
cmV0dXJuIHRoaXM7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM3NjQ3
KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MjMsOCArNjIzLDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcExvYWRpbmcoYm9vbCBzZW5kVQog
ICAgIGlmIChEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgewogICAgICAgICBp
ZiAoRG9jTG9hZGVyKiBkb2NMb2FkZXIgPSBkb2MtPmRvY0xvYWRlcigpKQogICAgICAgICAgICAg
Y2FjaGUoKS0+bG9hZGVyKCktPmNhbmNlbFJlcXVlc3RzKGRvY0xvYWRlcik7Ci0gICAgICAgIAot
ICAgICAgICBYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVxdWVzdHMoZG9jKTsKKworICAgICAgICBk
b2MtPnN0b3BBY3RpdmVET01PYmplY3RzKCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShEQVRBQkFT
RSkKICAgICAgICAgZG9jLT5zdG9wRGF0YWJhc2VzKCk7CkluZGV4OiBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCShyZXZpc2lvbiAzNzY0NykKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHN0YXRpYyBib29sIGlzVmFsaWRIZWFk
ZXJWYWx1ZShjb25zdCBTdHIKIH0KIAogWE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KERv
Y3VtZW50KiBkb2MpCi0gICAgOiBtX2RvYyhkb2MpCisgICAgOiBBY3RpdmVET01PYmplY3QoZG9j
LCB0aGlzKQogICAgICwgbV9hc3luYyh0cnVlKQogICAgICwgbV9pbmNsdWRlQ3JlZGVudGlhbHMo
ZmFsc2UpCiAgICAgLCBtX3N0YXRlKFVOU0VOVCkKQEAgLTE3NywyOCArMTc3LDIzIEBAIFhNTEh0
dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChEb2N1bWVudCoKICAgICAsIG1fdXBsb2FkQ29tcGxl
dGUoZmFsc2UpCiAgICAgLCBtX3NhbWVPcmlnaW5SZXF1ZXN0KHRydWUpCiAgICAgLCBtX2luUHJl
ZmxpZ2h0KGZhbHNlKQotICAgICwgbV9wZW5kaW5nQWN0aXZpdHkoMCkKICAgICAsIG1fcmVjZWl2
ZWRMZW5ndGgoMCkKICAgICAsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKDApCiB7Ci0gICAgQVNTRVJU
KG1fZG9jKTsKLSAgICBtX2RvYy0+Y3JlYXRlZFhNTEh0dHBSZXF1ZXN0KHRoaXMpOworICAgIEFT
U0VSVChkb2N1bWVudCgpKTsKIH0KIAogWE1MSHR0cFJlcXVlc3Q6On5YTUxIdHRwUmVxdWVzdCgp
CiB7Ci0gICAgaWYgKG1fZG9jKQotICAgICAgICBtX2RvYy0+ZGVzdHJveWVkWE1MSHR0cFJlcXVl
c3QodGhpcyk7Ci0KICAgICBpZiAobV91cGxvYWQpCiAgICAgICAgIG1fdXBsb2FkLT5kaXNjb25u
ZWN0WE1MSHR0cFJlcXVlc3QoKTsKIH0KIAogRnJhbWUqIFhNTEh0dHBSZXF1ZXN0Ojphc3NvY2lh
dGVkRnJhbWUoKSBjb25zdAogewotICAgIGlmICghbV9kb2MpCisgICAgaWYgKCFkb2N1bWVudCgp
KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9kb2MtPmZyYW1lKCk7CisgICAgcmV0
dXJuIGRvY3VtZW50KCktPmZyYW1lKCk7CiB9CiAKIFhNTEh0dHBSZXF1ZXN0OjpTdGF0ZSBYTUxI
dHRwUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0CkBAIC0yMjEsNyArMjE2LDcgQEAgRG9jdW1l
bnQqIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhNTCgpIAogICAgICAgICAgICAgLy8gVGhlIFcz
QyBzcGVjIHJlcXVpcmVzIHRoaXMuCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gMDsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwgPSBtX2RvYy0+aW1wbGVt
ZW50YXRpb24oKS0+Y3JlYXRlRG9jdW1lbnQoMCk7CisgICAgICAgICAgICBtX3Jlc3BvbnNlWE1M
ID0gZG9jdW1lbnQoKS0+aW1wbGVtZW50YXRpb24oKS0+Y3JlYXRlRG9jdW1lbnQoMCk7CiAgICAg
ICAgICAgICBtX3Jlc3BvbnNlWE1MLT5vcGVuKCk7CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1M
LT5zZXRVUkwobV91cmwpOwogICAgICAgICAgICAgLy8gRklYTUU6IHNldCBMYXN0LU1vZGlmaWVk
IGFuZCBjb29raWVzIChjdXJyZW50bHksIHRob3NlIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgSFRN
TERvY3VtZW50cykuCkBAIC0zMDUsNyArMzAwLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2hh
bmdlU3RhdGUoU3RhdGUgbgogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0ZUNo
YW5nZUxpc3RlbmVyKCkKIHsKLSAgICBpZiAoIW1fZG9jIHx8ICFtX2RvYy0+ZnJhbWUoKSkKKyAg
ICBpZiAoIWRvY3VtZW50KCkgfHwgIWRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KCk7CkBAIC0zODMsNyArMzc4
LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIAogCiBib29sIFhN
TEh0dHBSZXF1ZXN0Ojppbml0U2VuZChFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIW1f
ZG9jKQorICAgIGlmICghZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKG1fc3RhdGUgIT0gT1BFTkVEIHx8IG1fbG9hZGVyKSB7CkBAIC00MTEsNyArNDA2LDcgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChEb2N1bWVudCogZG9jdQogICAgICAgICBTdHJpbmcg
Y29udGVudFR5cGUgPSBnZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiKTsKICAgICAgICAg
aWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkgewogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9S
VCkKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZG9jLT5zZXR0aW5ncygpOwor
ICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CiAg
ICAgICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2Fy
ZENvbXBhdGliaWxpdHlNb2RlKCkpCiAgICAgICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlcklu
dGVybmFsKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVk
Iik7CiAgICAgICAgICAgICBlbHNlCkBAIC00NDMsNyArNDM4LDcgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6c2VuZChjb25zdCBTdHJpbmcmIAogICAgICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBn
ZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiKTsKICAgICAgICAgaWYgKGNvbnRlbnRUeXBl
LmlzRW1wdHkoKSkgewogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICAgICAgICAg
IFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZG9jLT5zZXR0aW5ncygpOworICAgICAgICAgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICAgICAgICAgIGlm
IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0
eU1vZGUoKSkKICAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwoIkNvbnRl
bnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKICAgICAgICAg
ICAgIGVsc2UKQEAgLTQ4Miw3ICs0NzcsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVS
ZXF1ZXN0KEV4Y2VwCiAgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hMb2FkU3RhcnRFdmVu
dCgpOwogICAgIH0KIAotICAgIG1fc2FtZU9yaWdpblJlcXVlc3QgPSBtX2RvYy0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuUmVxdWVzdChtX3VybCk7CisgICAgbV9zYW1lT3JpZ2luUmVxdWVzdCA9IGRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QobV91cmwpOwogCiAgICAgaWYg
KCFtX3NhbWVPcmlnaW5SZXF1ZXN0KSB7CiAgICAgICAgIG1ha2VDcm9zc1NpdGVBY2Nlc3NSZXF1
ZXN0KGVjKTsKQEAgLTU0OCw3ICs1NDMsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjptYWtlU2lt
cGxlQ3Jvc3NTaXRlCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKICAgICByZXF1
ZXN0LnNldEhUVFBNZXRob2QobV9tZXRob2QpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dIVFRQQ29v
a2llcyhtX2luY2x1ZGVDcmVkZW50aWFscyk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQT3JpZ2luKG1f
ZG9jLT5zZWN1cml0eU9yaWdpbigpLT50b0hUVFBPcmlnaW4oKSk7CisgICAgcmVxdWVzdC5zZXRI
VFRQT3JpZ2luKGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvSFRUUE9yaWdpbigpKTsK
IAogICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApCiAgICAgICAgIHJlcXVlc3Qu
YWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKQEAgLTU3OSw3ICs1NzQsNyBA
QCBzdGF0aWMgYm9vbCBjYW5Ta2lwUHJlbGlnaHQoUHJlZmxpZ2h0UmVzCiAKIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6Om1ha2VDcm9zc1NpdGVBY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBTdHJpbmcgb3JpZ2luID0gbV9kb2MtPnNlY3VyaXR5T3JpZ2lu
KCktPnRvSFRUUE9yaWdpbigpOworICAgIFN0cmluZyBvcmlnaW4gPSBkb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT50b0hUVFBPcmlnaW4oKTsKICAgICBLVVJMIHVybCA9IG1fdXJsOwogICAg
IHVybC5zZXRVc2VyKFN0cmluZygpKTsKICAgICB1cmwuc2V0UGFzcyhTdHJpbmcoKSk7CkBAIC02
NjcsNyArNjYyLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6aGFuZGxlQXN5bmNocm9ub3VzUAog
ICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKG1fbWV0aG9kKTsKICAgICByZXF1ZXN0LnNldEFsbG93SFRUUENvb2tpZXMobV9pbmNsdWRl
Q3JlZGVudGlhbHMpOwotICAgIHJlcXVlc3Quc2V0SFRUUE9yaWdpbihtX2RvYy0+c2VjdXJpdHlP
cmlnaW4oKS0+dG9IVFRQT3JpZ2luKCkpOworICAgIHJlcXVlc3Quc2V0SFRUUE9yaWdpbihkb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b0hUVFBPcmlnaW4oKSk7CiAKICAgICBpZiAobV9y
ZXF1ZXN0SGVhZGVycy5zaXplKCkgPiAwKQogICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJG
aWVsZHMobV9yZXF1ZXN0SGVhZGVycyk7CkBAIC02ODcsOCArNjgyLDggQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6bG9hZFJlcXVlc3RTeW5jaHJvbgogICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAg
ICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKIAotICAgIGlmIChtX2RvYy0+ZnJhbWUoKSkK
LSAgICAgICAgbV9pZGVudGlmaWVyID0gbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAg
aWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgIG1faWRlbnRpZmllciA9IGRvY3VtZW50
KCktPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3Qs
IGVycm9yLCByZXNwb25zZSwgZGF0YSk7CiAKICAgICBtX2xvYWRlciA9IDA7CiAKQEAgLTcyMCwx
MyArNzE1LDEzIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmxvYWRSZXF1ZXN0QXN5bmNocm8KICAg
ICAvLyBXZSBuZWVkIHRvIGtlZXAgY29udGVudCBzbmlmZmluZyBlbmFibGVkIGZvciBsb2NhbCBm
aWxlcyBkdWUgdG8gQ0ZOZXR3b3JrIG5vdCBwcm92aWRpbmcgYSBNSU1FIHR5cGUKICAgICAvLyBm
b3IgbG9jYWwgZmlsZXMgb3RoZXJ3aXNlLCA8cmRhcjovL3Byb2JsZW0vNTY3MTgxMz4uCiAgICAg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gIW1faW5QcmVmbGlnaHQ7Ci0gICAgbV9s
b2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jLT5mcmFtZSgpLCB0aGlzLCBy
ZXF1ZXN0LCBmYWxzZSwgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgcmVxdWVzdC51cmwoKS5p
c0xvY2FsRmlsZSgpKTsKKyAgICBtX2xvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUo
ZG9jdW1lbnQoKS0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgZmFsc2UsIHNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MsIHJlcXVlc3QudXJsKCkuaXNMb2NhbEZpbGUoKSk7CiAKICAgICBpZiAobV9s
b2FkZXIpIHsKICAgICAgICAgLy8gTmVpdGhlciB0aGlzIG9iamVjdCBub3IgdGhlIEphdmFTY3Jp
cHQgd3JhcHBlciBzaG91bGQgYmUgZGVsZXRlZCB3aGlsZQogICAgICAgICAvLyBhIHJlcXVlc3Qg
aXMgaW4gcHJvZ3Jlc3MgYmVjYXVzZSB3ZSBuZWVkIHRvIGtlZXAgdGhlIGxpc3RlbmVycyBhbGl2
ZSwKICAgICAgICAgLy8gYW5kIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIEphdmFTY3JpcHQg
d3JhcHBlci4KLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCk7CisgICAgICAgIHNldFBlbmRp
bmdBY3Rpdml0eSh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTgzMywxMiArODI4LDEyIEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkgICAKICAgICAvLyBjYW4ndCBiZSByZWNv
dXBlZCB1bnRpbCB0aGUgbG9hZCBpcyBkb25lLCBzbyBvbmx5CiAgICAgLy8gcmVwb3J0IHRoZSBl
eHRyYSBjb3N0IGF0IHRoYXQgcG9pbnQuCiAKLSAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9K
U0RPTVdpbmRvdyhtX2RvYy0+ZnJhbWUoKSk7CisgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRv
SlNET01XaW5kb3coZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAgICAgSlNDOjpKU1ZhbHVlKiB3cmFw
cGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqd2luZG93LT5nbG9iYWxEYXRhKCksIHRo
aXMpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlcikt
PnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlVGV4dC5zaXplKCkgKiAyKTsKIAotICAg
IHVuc2V0UGVuZGluZ0FjdGl2aXR5KCk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVR5cGUoY29uc3QgU3RyaW5n
JiBvdmVycmlkZSkKQEAgLTg1MCw3ICs4NDUsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRS
ZXF1ZXN0SGVhZGVyKGNvCiB7CiAgICAgaWYgKG1fc3RhdGUgIT0gT1BFTkVEIHx8IG1fbG9hZGVy
KSB7CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgICAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBtX2RvYyA/IG1fZG9jLT5zZXR0aW5ncygpIDogMDsKKyAgICAgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gZG9jdW1lbnQoKSA/IGRvY3VtZW50KCktPnNldHRpbmdzKCkgOiAwOwogICAg
ICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBh
dGliaWxpdHlNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTg2NSw5ICs4
NjAsOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvCiAgICAgfQog
CiAgICAgLy8gQSBwcml2aWxlZ2VkIHNjcmlwdCAoZS5nLiBhIERhc2hib2FyZCB3aWRnZXQpIGNh
biBzZXQgYW55IGhlYWRlcnMuCi0gICAgaWYgKCFtX2RvYy0+c2VjdXJpdHlPcmlnaW4oKS0+Y2Fu
TG9hZExvY2FsUmVzb3VyY2VzKCkgJiYgIWlzU2FmZVJlcXVlc3RIZWFkZXIobmFtZSkpIHsKLSAg
ICAgICAgaWYgKG1fZG9jICYmIG1fZG9jLT5mcmFtZSgpKQotICAgICAgICAgICAgbV9kb2MtPmZy
YW1lKCktPmRvbVdpbmRvdygpLT5jb25zb2xlKCktPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNl
LCBFcnJvck1lc3NhZ2VMZXZlbCwgIlJlZnVzZWQgdG8gc2V0IHVuc2FmZSBoZWFkZXIgXCIiICsg
bmFtZSArICJcIiIsIDEsIFN0cmluZygpKTsKKyAgICBpZiAoIWRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpICYmICFpc1NhZmVSZXF1ZXN0SGVhZGVy
KG5hbWUpKSB7CisgICAgICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkp
CisgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5kb21XaW5kb3coKS0+Y29uc29sZSgp
LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJSZWZ1c2Vk
IHRvIHNldCB1bnNhZmUgaGVhZGVyIFwiIiArIG5hbWUgKyAiXCIiLCAxLCBTdHJpbmcoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk3Nyw3ICs5NzIsNyBAQCBTdHJpbmcgWE1MSHR0
cFJlcXVlc3Q6OnN0YXR1c1RleHQoRXhjZXB0CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnByb2Nl
c3NTeW5jTG9hZFJlc3VsdHMoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fc2Ft
ZU9yaWdpblJlcXVlc3QgJiYgIW1fZG9jLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJl
c3BvbnNlLnVybCgpKSkgeworICAgIGlmIChtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFkb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKSkgewogICAg
ICAgICBhYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTAzMCw3ICsxMDI1LDcg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyhTdQogICAgICAgICAgICAg
bV9yZXNwb25zZVRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwogICAgIH0KIAotICAgIGlmIChG
cmFtZSogZnJhbWUgPSBtX2RvYy0+ZnJhbWUoKSkgeworICAgIGlmIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLT5mcmFtZSgpKSB7CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKSkgewogICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5yZXNvdXJj
ZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QobV9sb2FkZXIgPyBtX2xvYWRlci0+aWRlbnRpZmll
cigpIDogbV9pZGVudGlmaWVyLCBtX3Jlc3BvbnNlVGV4dCk7CiAgICAgICAgICAgICBwYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlTGV2ZWwsICJYSFIgZmluaXNoZWQgbG9hZGluZzogXCIiICsgbV91cmwgKyAi
XCIuIiwgbV9sYXN0U2VuZExpbmVOdW1iZXIsIG1fbGFzdFNlbmRVUkwpOwpAQCAtMTA1NiwxNSAr
MTA1MSwxNCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nUHJlCiAgICAg
aWYgKG1fYXN5bmMpCiAgICAgICAgIGhhbmRsZUFzeW5jaHJvbm91c1ByZWZsaWdodFJlc3VsdCgp
OwogCi0gICAgaWYgKG1fbG9hZGVyKSB7Ci0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCk7
Ci0gICAgfQorICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OndpbGxTZW5kUmVxdWVzdChTdWJyZXNv
dXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBi
ZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVuIGZvciBjcm9zcy1k
b21haW4gcmVxdWVzdHMuCi0gICAgaWYgKCFtX2RvYy0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVx
dWVzdChyZXF1ZXN0LnVybCgpKSkgeworICAgIGlmICghZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKSkgewogICAgICAgICBpbnRlcm5hbEFib3J0
KCk7CiAgICAgICAgIG5ldHdvcmtFcnJvcigpOwogICAgIH0KQEAgLTEwOTQsNyArMTA4OCw3IEBA
IGJvb2wgWE1MSHR0cFJlcXVlc3Q6OmFjY2Vzc0NvbnRyb2xDaGVjaygKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBhY2Nlc3NDb250cm9sT3JpZ2lu
ID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShhY2Nlc3NDb250cm9sT3JpZ2luVVJMKTsKLSAgICBp
ZiAoIWFjY2Vzc0NvbnRyb2xPcmlnaW4tPmlzU2FtZVNjaGVtZUhvc3RQb3J0KG1fZG9jLT5zZWN1
cml0eU9yaWdpbigpKSkKKyAgICBpZiAoIWFjY2Vzc0NvbnRyb2xPcmlnaW4tPmlzU2FtZVNjaGVt
ZUhvc3RQb3J0KGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAobV9pbmNsdWRlQ3JlZGVudGlhbHMpIHsKQEAgLTExOTIsNyArMTE4
Niw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVSZXNwb25zZVAKICAgICBpZiAo
IXBhcnNlQWNjZXNzQ29udHJvbE1heEFnZShyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkFjY2Vz
cy1Db250cm9sLU1heC1BZ2UiKSwgZXhwaXJ5RGVsdGEpKQogICAgICAgICBleHBpcnlEZWx0YSA9
IDU7CiAKLSAgICBhcHBlbmRQcmVmbGlnaHRSZXN1bHRDYWNoZUVudHJ5KG1fZG9jLT5zZWN1cml0
eU9yaWdpbigpLT50b0hUVFBPcmlnaW4oKSwgbV91cmwsIGV4cGlyeURlbHRhLCBtX2luY2x1ZGVD
cmVkZW50aWFscywgbWV0aG9kcy5yZWxlYXNlKCksIGhlYWRlcnMucmVsZWFzZSgpKTsKKyAgICBh
cHBlbmRQcmVmbGlnaHRSZXN1bHRDYWNoZUVudHJ5KGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCktPnRvSFRUUE9yaWdpbigpLCBtX3VybCwgZXhwaXJ5RGVsdGEsIG1faW5jbHVkZUNyZWRlbnRp
YWxzLCBtZXRob2RzLnJlbGVhc2UoKSwgaGVhZGVycy5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpyZWNlaXZlZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCkBAIC0xMzA3LDM4ICsxMzAx
LDE1IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNoUHJvZ3Jlc3NFdmUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9y
ZWNlaXZlZExlbmd0aCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihleHBlY3RlZExlbmd0aCkpOwog
fQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpjYW5jZWxSZXF1ZXN0cyhEb2N1bWVudCogbV9kb2Mp
Ci17Ci0gICAgY29uc3QgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCo+JiByZXF1ZXN0cyA9IG1fZG9j
LT54bWxIdHRwUmVxdWVzdHMoKTsKLSAgICBWZWN0b3I8WE1MSHR0cFJlcXVlc3QqPiBjb3B5Owot
ICAgIGNvcHlUb1ZlY3RvcihyZXF1ZXN0cywgY29weSk7Ci0KLSAgICB1bnNpZ25lZCBudW1SZXF1
ZXN0cyA9IGNvcHkuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbnVtUmVx
dWVzdHM7ICsraSkKLSAgICAgICAgY29weVtpXS0+aW50ZXJuYWxBYm9ydCgpOwotfQotCi12b2lk
IFhNTEh0dHBSZXF1ZXN0OjpkZXRhY2hSZXF1ZXN0cyhEb2N1bWVudCogbV9kb2MpCit2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpzdG9wKCkKIHsKLSAgICBjb25zdCBIYXNoU2V0PFhNTEh0dHBSZXF1ZXN0
Kj4mIHJlcXVlc3RzID0gbV9kb2MtPnhtbEh0dHBSZXF1ZXN0cygpOwotICAgIEhhc2hTZXQ8WE1M
SHR0cFJlcXVlc3QqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdHMuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PFhNTEh0dHBSZXF1ZXN0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVxdWVz
dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICgqaXQpLT5tX2RvYyA9IDA7
Ci0gICAgICAgICgqaXQpLT5pbnRlcm5hbEFib3J0KCk7Ci0gICAgfQotfQotCi12b2lkIFhNTEh0
dHBSZXF1ZXN0OjpzZXRQZW5kaW5nQWN0aXZpdHkoKQotewotICAgIHJlZigpOwotICAgICsrbV9w
ZW5kaW5nQWN0aXZpdHk7CisgICAgaW50ZXJuYWxBYm9ydCgpOwogfQogCi12b2lkIFhNTEh0dHBS
ZXF1ZXN0Ojp1bnNldFBlbmRpbmdBY3Rpdml0eSgpCit2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpjb250
ZXh0RGVzdHJveWVkKCkKIHsKLSAgICBBU1NFUlQobV9wZW5kaW5nQWN0aXZpdHkgPiAwKTsKLSAg
ICAtLW1fcGVuZGluZ0FjdGl2aXR5OwotICAgIGRlcmVmKCk7CisgICAgQWN0aXZlRE9NT2JqZWN0
Ojpjb250ZXh0RGVzdHJveWVkKCk7CisgICAgaW50ZXJuYWxBYm9ydCgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlIApJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiAzNzY0NykK
KysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYg
KzIwLDcgQEAKICNpZm5kZWYgWE1MSHR0cFJlcXVlc3RfaAogI2RlZmluZSBYTUxIdHRwUmVxdWVz
dF9oCiAKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJFdmVudExpc3Rl
bmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJGb3JtRGF0YS5oIgpA
QCAtMzMsNyArMzQsNyBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZpbGU7CiBjbGFzcyBUZXh0
UmVzb3VyY2VEZWNvZGVyOwogCi1jbGFzcyBYTUxIdHRwUmVxdWVzdCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFhNTEh0dHBSZXF1ZXN0PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwcml2YXRlIFN1YnJlc291
cmNlTG9hZGVyQ2xpZW50IHsKK2NsYXNzIFhNTEh0dHBSZXF1ZXN0IDogcHVibGljIFJlZkNvdW50
ZWQ8WE1MSHR0cFJlcXVlc3Q+LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHByaXZhdGUgU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgWE1MSHR0cFJlcXVlc3QoZG9jdW1lbnQpKTsgfQogICAg
IH5YTUxIdHRwUmVxdWVzdCgpOwpAQCAtNTEsOSArNTIsOCBAQCBwdWJsaWM6CiAKICAgICBGcmFt
ZSogYXNzb2NpYXRlZEZyYW1lKCkgY29uc3Q7CiAKLSAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSgpIHsgcmV0dXJuIG1fcGVuZGluZ0FjdGl2aXR5OyB9Ci0gICAgc3RhdGljIHZvaWQgZGV0YWNo
UmVxdWVzdHMoRG9jdW1lbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBjYW5jZWxSZXF1ZXN0cyhEb2N1
bWVudCopOworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CisgICAgdmlydHVh
bCB2b2lkIHN0b3AoKTsKIAogICAgIFN0cmluZyBzdGF0dXNUZXh0KEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKICAgICBpbnQgc3RhdHVzKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKQEAgLTEwNSw4ICsx
MDUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCA9IGZhbHNlKTsKICAgICBF
dmVudExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVu
ZXJzOyB9CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvYzsg
fQotCiAgICAgdXNpbmcgUmVmQ291bnRlZDxYTUxIdHRwUmVxdWVzdD46OnJlZjsKICAgICB1c2lu
ZyBSZWZDb3VudGVkPFhNTEh0dHBSZXF1ZXN0Pjo6ZGVyZWY7CiAKQEAgLTE3NCwxMSArMTcyLDYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoTG9hZFN0YXJ0RXZlbnQoKTsKICAgICB2b2lk
IGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgpOwogCi0gICAg
dm9pZCBzZXRQZW5kaW5nQWN0aXZpdHkoKTsKLSAgICB2b2lkIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KCk7Ci0KLSAgICBEb2N1bWVudCogbV9kb2M7Ci0KICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bV9vblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcjsKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bV9vbkFib3J0TGlzdGVuZXI7CiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25FcnJvckxp
c3RlbmVyOwpAQCAtMjI0LDggKzIxNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FsbG93QWNj
ZXNzOwogICAgIGJvb2wgbV9pblByZWZsaWdodDsKIAotICAgIHVuc2lnbmVkIG1fcGVuZGluZ0Fj
dGl2aXR5OwotCiAgICAgLy8gVXNlZCBmb3Igb25wcm9ncmVzcyB0cmFja2luZwogICAgIGxvbmcg
bG9uZyBtX3JlY2VpdmVkTGVuZ3RoOwogICAgIAo=
</data>
<flag name="review"
          id="11124"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>