<?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>20212</bug_id>
          
          <creation_ts>2008-07-29 11:58:08 -0700</creation_ts>
          <short_desc>[XBL] Add full support for element=&quot;&quot; attachment</short_desc>
          <delta_ts>2008-08-08 06:06:40 -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 Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>87293</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-07-29 11:58:08 -0700</bug_when>
    <thetext>Now that element &lt;binding&gt; attribute is supported (see bug20171), we need to add its handling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87382</commentid>
    <comment_count>1</comment_count>
      <attachid>22552</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-07-30 06:25:16 -0700</bug_when>
    <thetext>Created attachment 22552
First attempt: convert &quot;element&quot; into a binding stylesheet that is added to the bound document&apos;s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87393</commentid>
    <comment_count>2</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-07-30 09:27:28 -0700</bug_when>
    <thetext>There is a flaw in the patch: we modify the Document&apos;s style sheets (m_stylesheets) which are exported by styleSheet() to JavaScript.

This could be solved by adding an optional parameter to CSSStyleSelector constructor or querying the binding manager in the CSSStyleSelector constructor (we have the bound document) and adding the binding&apos;s sheets.

Leaving the patch r? to have comments on the global approach before correcting this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87632</commentid>
    <comment_count>3</comment_count>
      <attachid>22552</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-01 15:26:52 -0700</bug_when>
    <thetext>Comment on attachment 22552
First attempt: convert &quot;element&quot; into a binding stylesheet that is added to the bound document&apos;s

Shouldn&apos;t:
 49         String currentAttr = getAttribute(XBLNames::elementAttr);

Just be:
attr-&gt;value(); ?

+        Document* boundDocument = document()-&gt;isXBLDocument() ? 0 : document();
is confusing to me.  What would we do in the XBLDocument case?

Um... we&apos;ll crash here:
+        // Update the styleSelector so that bindings are updated.
+        // FIXME: is it always required?
+        boundDocument-&gt;updateStyleSelector();

This patch crashes for inline XBL.  Can&apos;t land it that way.

Argument names are not neede here:
+        XBLBindingElement(const WebCore::QualifiedName&amp; qName, WebCore::Document* doc); 

The fist one is not needed here:
+        virtual void attributeChanged(Attribute* attr, bool preserveDecls);

This should use early return, or early ASSERT:
+void XBLBindingManager::removeBindingSheet(Document* document, PassRefPtr&lt;CSSStyleSheet&gt; sheet)
+{
+    StyleSheetVector* documentSheets = m_bindingSheets.get(document);
+
+    if (documentSheets) {
+        for (StyleSheetVector::iterator it = documentSheets-&gt;begin(); it != documentSheets-&gt;end(); ++it)
+            if (*it == sheet) {
+                documentSheets-&gt;remove(it - documentSheets-&gt;begin());
+                return;
+            }
+    }
+    // We should have the sheet in our binding sheets.
+    ASSERT_NOT_REACHED();

is it OK to call removeBindingSheet after the document has already been removed from the sheets list?  Part of the code seems to assume it is, part doesn&apos;t...

You need to include a test case which tests the inline xbl case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87648</commentid>
    <comment_count>4</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-08-01 16:47:38 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 22552 [edit])
&gt; Shouldn&apos;t:
&gt;  49         String currentAttr = getAttribute(XBLNames::elementAttr);
&gt; 
&gt; Just be:
&gt; attr-&gt;value(); ?

Nope: attr may be hold the old value if the attribute has really changed. That&apos;s why we check it against the real value to determine if it is a change or an addition.

&gt; 
&gt; +        Document* boundDocument = document()-&gt;isXBLDocument() ? 0 :
&gt; document();
&gt; is confusing to me.  What would we do in the XBLDocument case?

If our Document is an XBLDocument we need to get the proper bound document but that logic is not implemented yet (the crash was intended as inline binding is the common case that would have appeared pretty soon). I will remove the isXBLDocument() and just take the current document (leaving a FIXME).

&gt; Argument names are not neede here:
&gt; +        XBLBindingElement(const WebCore::QualifiedName&amp; qName,
&gt; WebCore::Document* doc); 
&gt; 
&gt; The fist one is not needed here:
&gt; +        virtual void attributeChanged(Attribute* attr, bool preserveDecls);
&gt; 
Will fix this.

&gt; This should use early return, or early ASSERT:
&gt; +void XBLBindingManager::removeBindingSheet(Document* document,
&gt; PassRefPtr&lt;CSSStyleSheet&gt; sheet)
&gt; +{
&gt; +    StyleSheetVector* documentSheets = m_bindingSheets.get(document);
&gt; +
&gt; +    if (documentSheets) {
&gt; +        for (StyleSheetVector::iterator it = documentSheets-&gt;begin(); it !=
&gt; documentSheets-&gt;end(); ++it)
&gt; +            if (*it == sheet) {
&gt; +                documentSheets-&gt;remove(it - documentSheets-&gt;begin());
&gt; +                return;
&gt; +            }
&gt; +    }
&gt; +    // We should have the sheet in our binding sheets.
&gt; +    ASSERT_NOT_REACHED();
&gt; 
&gt; is it OK to call removeBindingSheet after the document has already been removed
&gt; from the sheets list?  Part of the code seems to assume it is, part doesn&apos;t...

No; we should have the sheet in the document&apos;s list or something went wrong (but we do not want to crash).

&gt; You need to include a test case which tests the inline xbl case.

Will be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87688</commentid>
    <comment_count>5</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-08-02 08:30:59 -0700</bug_when>
    <thetext>&gt; &gt; This should use early return, or early ASSERT:
&gt; &gt; +void XBLBindingManager::removeBindingSheet(Document* document,
&gt; &gt; PassRefPtr&lt;CSSStyleSheet&gt; sheet)
&gt; &gt; +{
&gt; &gt; +    StyleSheetVector* documentSheets = m_bindingSheets.get(document);
&gt; &gt; +
&gt; &gt; +    if (documentSheets) {
&gt; &gt; +        for (StyleSheetVector::iterator it = documentSheets-&gt;begin(); it !=
&gt; &gt; documentSheets-&gt;end(); ++it)
&gt; &gt; +            if (*it == sheet) {
&gt; &gt; +                documentSheets-&gt;remove(it - documentSheets-&gt;begin());
&gt; &gt; +                return;
&gt; &gt; +            }
&gt; &gt; +    }
&gt; &gt; +    // We should have the sheet in our binding sheets.
&gt; &gt; +    ASSERT_NOT_REACHED();
&gt; &gt; 
&gt; &gt; is it OK to call removeBindingSheet after the document has already been removed
&gt; &gt; from the sheets list?  Part of the code seems to assume it is, part doesn&apos;t...
&gt; 
&gt; No; we should have the sheet in the document&apos;s list or something went wrong
&gt; (but we do not want to crash).
&gt; 

I have not really replied to your comment: we do not want to crash, that&apos;s why there is a check on documentSheets. However we must have removed the binding sheet so that&apos;s why there is an ASSERT_NOT_REACHED. I will modify the comments to show that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87690</commentid>
    <comment_count>6</comment_count>
      <attachid>22618</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-08-02 09:15:19 -0700</bug_when>
    <thetext>Created attachment 22618
Second attempt: updated with Eric&apos;s comment + removed issue I had spotted (added a test case for that)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87710</commentid>
    <comment_count>7</comment_count>
      <attachid>22618</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-03 00:15:18 -0700</bug_when>
    <thetext>Comment on attachment 22618
Second attempt: updated with Eric&apos;s comment + removed issue I had spotted (added a test case for that)

Looks OK.  Please add a test case which fails due to this FIXME:
 53         // FIXME: If we have an XBLDocument, we need to get the bound document.
 54         Document* boundDocument = document();

when you land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88099</commentid>
    <comment_count>8</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-08-08 06:06:40 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 22618 [edit])
&gt; Looks OK.  Please add a test case which fails due to this FIXME:
&gt;  53         // FIXME: If we have an XBLDocument, we need to get the bound
&gt; document.
&gt;  54         Document* boundDocument = document();
&gt; 
&gt; when you land.

I have tried to produce this test case. However we cannot load an external XBL document for the moment  (because we do not support DocumentXBL interface, &lt;?xbl?&gt; processing instruction or really load bindinds when they are attached). As it is a fairly common situation (which will arise once the previous support is added), I have committed the patch as-is in r35640.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22552</attachid>
            <date>2008-07-30 06:25:16 -0700</date>
            <delta_ts>2008-08-01 15:26:52 -0700</delta_ts>
            <desc>First attempt: convert &quot;element&quot; into a binding stylesheet that is added to the bound document&apos;s</desc>
            <filename>XBLElementHandling.patch</filename>
            <type>text/plain</type>
            <size>20565</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNTQ0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDgtMDctMzAgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIwMjEyOiBbWEJMXSBBZGQgZnVsbCBzdXBwb3J0IGZvciBlbGVtZW50PSIiIGF0
dGFjaG1lbnQKKworICAgICAgICAtIEFkZCBhdHRyaWJ1dGVDaGFuZ2VkIG1ldGhvZCB0byBYQkxC
aW5kaW5nRWxlbWVudCB0byBjYXRjaCAiZWxlbWVudCIKKyAgICAgICAgY2hhbmdlcyBhbmQgdXBk
YXRlIHRoZSBiaW5kaW5ncy4KKworICAgICAgICAtIFRyYW5zbGF0ZSAiZWxlbWVudCIgYXR0cmli
dXRlIHRvIGEgc3R5bGVzaGVldCB0aGF0IGlzIGFkZGVkIHRvIHRoZSBib3VuZAorICAgICAgICBk
b2N1bWVudCdzIHNoZWV0cy4KKworICAgICAgICBUZXN0OiBmYXN0L3hibC94YmwtZWxlbWVudC1i
aW5kaW5nLnhodG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFhCTEJpbmRpbmdF
bGVtZW50LmNwcC4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCk6IFJlbW92
ZSBiaW5kaW5nCisgICAgICAgIHNoZWV0IGluZm9ybWF0aW9uLgorCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3Rvcik6IFdoZW4KKyAgICAgICAgcmVjYWxjdWxh
dGluZyB0aGUgc3R5bGUgc2VsZWN0b3IsIHJlbW92ZSBhbGwgdGhlIGJpbmRpbmdzCisgICAgICAg
IGFzIHRoZSByZW1vdmVkIHNoZWV0cyB3b3VsZCBuZXZlciByZW1vdmUgdGhlaXJzIGFuZAorICAg
ICAgICBhZGQgdGhlIGJpbmRpbmdzJyBzdHlsZSBzaGVldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUg
c2hlZXRzLgorCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkQmluZGluZ1NoZWV0KTog
VXBkYXRlIGJpbmRpbmcgbWFuYWdlcgorICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZW1vdmVCaW5kaW5nU2hlZXQpOiBEaXR0by4KKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIHhibC9YQkxCaW5kaW5nRWxlbWVudC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6WEJMQmluZGluZ0VsZW1lbnQ6OlhCTEJpbmRpbmdFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhCTEJpbmRpbmdFbGVtZW50OjphdHRyaWJ1dGVDaGFu
Z2VkKTogQ2hlY2sKKyAgICAgICAgZm9yICJlbGVtZW50IiBjaGFuZ2VzIGFuZCB1cGRhdGUgdGhl
IGNhY2hlZCBzaGVldCBhbmQgdGhlCisgICAgICAgIGJvdW5kIGVsZW1lbnQncyBiaW5kaW5ncyBz
dHlsZSBzaGVldHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlhCTEJpbmRpbmdFbGVtZW50OjpnZW5l
cmF0ZUJpbmRpbmdTaGVldCk6IENyZWF0ZQorICAgICAgICB0aGUgc3R5bGUgc2hlZXQgZnJvbSB0
aGUgImVsZW1lbnQiIGF0dHJpYnV0ZS4KKworICAgICAgICAqIHhibC9YQkxCaW5kaW5nRWxlbWVu
dC5oOgorICAgICAgICAqIHhibC9YQkxCaW5kaW5nTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYQkxCaW5kaW5nTWFuYWdlcjo6YWRkQmluZGluZ1NoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlhCTEJpbmRpbmdNYW5hZ2VyOjpyZW1vdmVCaW5kaW5nU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6WEJMQmluZGluZ01hbmFnZXI6OmNsZWFyQmluZGluZ1NoZWV0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpYQkxCaW5kaW5nTWFuYWdlcjo6Z2V0QmluZGluZ1NoZWV0cyk6IEFsbCA0IHByZXZp
b3VzCisgICAgICAgIG1ldGhvZHMgYXJlIHVzZWQgdG8gbWFuYWdlIHRoZSBiaW5kaW5nIHNoZWV0
cy4KKworICAgICAgICAqIHhibC9YQkxCaW5kaW5nTWFuYWdlci5oOgorCiAyMDA4LTA3LTI4ICBK
dWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM1NDEyKQorKysgV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQ0NCw2ICsxNDQ0LDcgQEAgd2ViY29yZV9i
dWlsdF9zb3VyY2VzICs9IFwKIAogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2xvYWRl
ci9DYWNoZWRYQkxEb2N1bWVudC5jcHAgXAorCVdlYkNvcmUveGJsL1hCTEJpbmRpbmdFbGVtZW50
LmNwcCBcCiAJV2ViQ29yZS94YmwvWEJMQmluZGluZ01hbmFnZXIuY3BwIFwKIAlXZWJDb3JlL3hi
bC9YQkxYQkxFbGVtZW50LmNwcAogCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDM1NDEyKQorKysgV2ViQ29yZS9X
ZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTIzNiw2ICsxMjM2LDcgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1hCTD0xKSB7CiAKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgbG9h
ZGVyL0NhY2hlZFhCTERvY3VtZW50LmNwcCBcCisgICAgICAgIHhibC9YQkxCaW5kaW5nRWxlbWVu
dC5jcHAgXAogICAgICAgICB4YmwvWEJMQmluZGluZ01hbmFnZXIuY3BwIFwKICAgICAgICAgeGJs
L1hCTFhCTEVsZW1lbnQuY3BwCiAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNTMyNSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODI5LDYgKzE4MjksNyBAQAog
CQlBMTBEMjE0MDBFMzg5QTBEMDA3RTUwMEIgLyogWEJMQmluZGluZ0VsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEQyMTNGMEUzODlBMEQw
MDdFNTAwQiAvKiBYQkxCaW5kaW5nRWxlbWVudC5oICovOyB9OwogCQlBMTBEMjE0MjBFMzg5QTE4
MDA3RTUwMEIgLyogWEJMVGVtcGxhdGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBEMjE0MTBFMzg5QTE4MDA3RTUwMEIgLyogWEJMVGVt
cGxhdGVFbGVtZW50LmggKi87IH07CiAJCUExMTcyRDZFMEUwQzUzOUUwMDE3NUM4OCAvKiBYQkxE
b2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTExNzJENkQwRTBDNTM5RTAwMTc1Qzg4IC8qIFhCTERvY3VtZW50LmggKi87IH07CisJCUExNEVG
N0FDMEUzRjEwNjkwMERBOUYzOSAvKiBYQkxCaW5kaW5nRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTRFRjdBQjBFM0YxMDY5MDBEQTlG
MzkgLyogWEJMQmluZGluZ0VsZW1lbnQuY3BwICovOyB9OwogCQlBNzE4NzYwRTBCMkExMjAxMDBB
MTZFQ0UgLyogRHJhZ0FjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3MTg3NjBEMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTg3ODkw
MEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTg3ODhGMEIyRDA0QUMwMEExNkVDRSAv
KiBEcmFnQ29udHJvbGxlck1hYy5tbSAqLzsgfTsKIAkJQTczNTJDMTkwQjFCQjg5RDAwQTk4NkQw
IC8qIFJlbmRlclNWR0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3MzUyQzE3MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5j
cHAgKi87IH07CkBAIC02MzAzLDYgKzYzMDQsNyBAQAogCQlBMTBEMjEzRjBFMzg5QTBEMDA3RTUw
MEIgLyogWEJMQmluZGluZ0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gWEJMQmluZGluZ0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEw
RDIxNDEwRTM4OUExODAwN0U1MDBCIC8qIFhCTFRlbXBsYXRlRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBYQkxUZW1wbGF0ZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTExNzJENkQwRTBDNTM5RTAwMTc1Qzg4IC8qIFhCTERvY3VtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhCTERvY3VtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNEVGN0FCMEUzRjEwNjkwMERBOUYzOSAvKiBYQkxC
aW5kaW5nRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBY
QkxCaW5kaW5nRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3
NjBEMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEcmFnQWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzE4Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnQ29udHJvbGxlck1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTczNTJDMTcwQjFCQjg5RDAwQTk4NkQwIC8q
IFJlbmRlclNWR0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJTVkdCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzMw
NSw2ICsxMzMwNyw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBMTBEMjE0MTBFMzg5QTE4MDA3
RTUwMEIgLyogWEJMVGVtcGxhdGVFbGVtZW50LmggKi8sCiAJCQkJQTEwRDIxM0YwRTM4OUEwRDAw
N0U1MDBCIC8qIFhCTEJpbmRpbmdFbGVtZW50LmggKi8sCisJCQkJQTE0RUY3QUIwRTNGMTA2OTAw
REE5RjM5IC8qIFhCTEJpbmRpbmdFbGVtZW50LmNwcCAqLywKIAkJCQlBMTBEMjBBMzBFMzg2RENG
MDA3RTUwMEIgLyogWEJMQmluZGluZy5oICovLAogCQkJCUExMEQyMEE0MEUzODZEQ0YwMDdFNTAw
QiAvKiBYQkxCaW5kaW5nTWFuYWdlci5jcHAgKi8sCiAJCQkJQTEwRDIwQTUwRTM4NkRDRjAwN0U1
MDBCIC8qIFhCTEJpbmRpbmdNYW5hZ2VyLmggKi8sCkBAIC0xNzEwMyw2ICsxNzEwNiw3IEBACiAJ
CQkJRjlDNjc2MEEwREVDNzkwMzAwOEQwQzJGIC8qIFhCTEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUY5QzY3NjBCMERFQzc5MDMwMDhEMEMyRiAvKiBYQkxOYW1lcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMTBEMjBBNzBFMzg2RENGMDA3RTUwMEIgLyogWEJMQmluZGlu
Z01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTE0RUY3QUMwRTNGMTA2OTAwREE5RjM5
IC8qIFhCTEJpbmRpbmdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMzUzMjQpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNyw2ICsxMjcsNyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoWEJMKQorI2luY2x1
ZGUgIlhCTEJpbmRpbmdNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiWEJMRWxlbWVudC5oIgogI2luY2x1
ZGUgIlhCTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiWEJMTmFtZXMuaCIKQEAgLTQwMiw2
ICs0MDMsMTAgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAjaWYgRU5BQkxFKFNWRykKICAgICBk
ZWxldGUgbV9zdmdFeHRlbnNpb25zOwogI2VuZGlmCisjaWYgRU5BQkxFKFhCTCkKKyAgICBYQkxC
aW5kaW5nTWFuYWdlciogbWFuYWdlciA9IFhCTEJpbmRpbmdNYW5hZ2VyOjpzaGFyZWRJbnN0YW5j
ZSgpOworICAgIG1hbmFnZXItPmNsZWFyQmluZGluZ1NoZWV0cyh0aGlzKTsKKyNlbmRpZgogCiAg
ICAgWE1MSHR0cFJlcXVlc3Q6OmRldGFjaFJlcXVlc3RzKHRoaXMpOwogICAgIHsKQEAgLTIyNjgs
MTIgKzIyNzMsMjkgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAg
ICAgIGlmIChzaGVldCkKICAgICAgICAgICAgIHNoZWV0cy5hcHBlbmQoc2hlZXQpOwogCisjaWYg
RU5BQkxFKFhCTCkKKyAgICAgICAgLy8gUmVtb3ZlIGFsbCBiaW5kaW5ncyBhcyBzb21lIGJpbmRp
bmcgc2hlZXRzIG1heSBiZSByZW1vdmVkCisgICAgICAgIC8vIGFuZCB0aGV5IHdvdWxkbid0IHVw
ZGF0ZSB0aGVpciBiaW5kaW5ncy4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRv
bmUgb25seSBpZiBhIGJpbmRpbmcgc2hlZXQgcmVtb3ZhbCBoYXMgaGFwcGVuZWQgaW5zdGVhZCBv
ZiBhbHdheXMuCisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAg
IFhCTEJpbmRpbmdNYW5hZ2VyKiBtYW5hZ2VyID0gWEJMQmluZGluZ01hbmFnZXI6OnNoYXJlZElu
c3RhbmNlKCk7CisgICAgICAgICAgICBtYW5hZ2VyLT5yZW1vdmVBbGxCaW5kaW5ncyhzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obikpOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgLy8gRm9yIEhU
TUwgZG9jdW1lbnRzLCBzdHlsZXNoZWV0cyBhcmUgbm90IGFsbG93ZWQgd2l0aGluL2FmdGVyIHRo
ZSA8Qk9EWT4gdGFnLiBTbyB3ZQogICAgICAgICAvLyBjYW4gc3RvcCBzZWFyY2hpbmcgaGVyZS4K
ICAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkgJiYgbi0+aGFzVGFnTmFtZShib2R5VGFnKSkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAorI2lmIEVOQUJMRShYQkwpCisgICAgLy8gQWRk
IGJpbmRpbmdzJ3Mgc3R5bGUgc2hlZXQuCisgICAgWEJMQmluZGluZ01hbmFnZXIqIG1hbmFnZXIg
PSBYQkxCaW5kaW5nTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKTsKKyAgICBTdHlsZVNoZWV0VmVj
dG9yKiBiaW5kaW5nU2hlZXRzID0gbWFuYWdlci0+Z2V0QmluZGluZ1NoZWV0cyh0aGlzKTsKKyAg
ICBpZiAoYmluZGluZ1NoZWV0cykKKyAgICAgICAgc2hlZXRzLmFwcGVuZCgqYmluZGluZ1NoZWV0
cyk7CisjZW5kaWYKKwogICAgIG1fc3R5bGVTaGVldHMtPnN3YXAoc2hlZXRzKTsKIAogICAgIC8v
IENyZWF0ZSBhIG5ldyBzdHlsZSBzZWxlY3RvcgpAQCAtMzYzNSw2ICszNjU3LDIwIEBAIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9ucyogRG9jdW1lbnQ6OmFjY2Vzc1MKIH0KICNlbmRpZgogCisjaWYgRU5B
QkxFKFhCTCkKK3ZvaWQgRG9jdW1lbnQ6OmFkZEJpbmRpbmdTaGVldChQYXNzUmVmUHRyPENTU1N0
eWxlU2hlZXQ+IHNoZWV0KQoreworICAgIFhCTEJpbmRpbmdNYW5hZ2VyKiBtYW5hZ2VyID0gWEJM
QmluZGluZ01hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCk7CisgICAgbWFuYWdlci0+YWRkQmluZGlu
Z1NoZWV0KHRoaXMsIHNoZWV0KTsKK30KKwordm9pZCBEb2N1bWVudDo6cmVtb3ZlQmluZGluZ1No
ZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0KQoreworICAgIFhCTEJpbmRpbmdNYW5hZ2VyKiBtYW5h
Z2VyID0gWEJMQmluZGluZ01hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCk7CisgICAgbWFuYWdlci0+
cmVtb3ZlQmluZGluZ1NoZWV0KHRoaXMsIHNoZWV0KTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6aW1hZ2VzKCkKIHsKICAgICByZXR1cm4gSFRNTENv
bGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jSW1hZ2VzKTsKSW5kZXg6
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkocmV2aXNpb24gMzUzMjQpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MzQsNiArOTM0LDExIEBAIHB1YmxpYzoKICAgICBTVkdEb2N1bWVudEV4dGVu
c2lvbnMqIGFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFhCTCkK
KyAgICB2b2lkIGFkZEJpbmRpbmdTaGVldChQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+KTsKKyAg
ICB2b2lkIHJlbW92ZUJpbmRpbmdTaGVldChDU1NTdHlsZVNoZWV0Kik7CisjZW5kaWYKKwogICAg
IHZvaWQgaW5pdFNlY3VyaXR5Q29udGV4dCgpOwogICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCk7IH0KIApAQCAt
OTk0LDcgKzk5OSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFNWRykKICAgICBTVkdEb2N1bWVu
dEV4dGVuc2lvbnMqIG1fc3ZnRXh0ZW5zaW9uczsKICNlbmRpZgotICAgIAorCiAjaWYgRU5BQkxF
KERBU0hCT0FSRF9TVVBQT1JUKQogICAgIFZlY3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gbV9k
YXNoYm9hcmRSZWdpb25zOwogICAgIGJvb2wgbV9oYXNEYXNoYm9hcmRSZWdpb25zOwpJbmRleDog
V2ViQ29yZS94YmwvWEJMQmluZGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eGJsL1hCTEJpbmRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveGJsL1hC
TEJpbmRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQu
b3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWEJMQmluZGluZ0Vs
ZW1lbnQuaCIKKworI2lmIEVOQUJMRShYQkwpCisKKyNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiWEJMTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitYQkxCaW5kaW5nRWxlbWVudDo6WEJMQmluZGluZ0VsZW1lbnQoY29uc3QgV2ViQ29yZTo6UXVh
bGlmaWVkTmFtZSYgcU5hbWUsIFdlYkNvcmU6OkRvY3VtZW50KiBkb2MpCisgICAgOiBYQkxFbGVt
ZW50KHFOYW1lLCBkb2MpCisgICAgLCBtX2JpbmRpbmdTaGVldCgwKQoreworfQorCit2b2lkIFhC
TEJpbmRpbmdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBw
cmVzZXJ2ZURlY2xzKQoreworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0
ci0+bmFtZSgpOworICAgIGlmIChhdHRyTmFtZSA9PSBYQkxOYW1lczo6ZWxlbWVudEF0dHIpIHsK
KyAgICAgICAgU3RyaW5nIGN1cnJlbnRBdHRyID0gZ2V0QXR0cmlidXRlKFhCTE5hbWVzOjplbGVt
ZW50QXR0cik7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5saW5lLCBpbiB0aGF0
IGNhc2UgdGhlIGJvdW5kIGRvY3VtZW50CisgICAgICAgIC8vIGlzIG91ciBkb2N1bWVudC4KKyAg
ICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaGFuZGxlIFhCTERvY3VtZW50IGNhc2UuCisgICAg
ICAgIERvY3VtZW50KiBib3VuZERvY3VtZW50ID0gZG9jdW1lbnQoKS0+aXNYQkxEb2N1bWVudCgp
ID8gMCA6IGRvY3VtZW50KCk7CisKKyAgICAgICAgaWYgKCFjdXJyZW50QXR0ci5pc051bGwoKSAm
JiBhdHRyLT52YWx1ZSgpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBBU1NFUlQobV9iaW5kaW5n
U2hlZXQpOworICAgICAgICAgICAgYm91bmREb2N1bWVudC0+cmVtb3ZlQmluZGluZ1NoZWV0KG1f
YmluZGluZ1NoZWV0LmdldCgpKTsKKyAgICAgICAgICAgIG1fYmluZGluZ1NoZWV0ID0gMDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2JpbmRpbmdTaGVldCkKKyAgICAgICAg
ICAgICAgICBib3VuZERvY3VtZW50LT5yZW1vdmVCaW5kaW5nU2hlZXQobV9iaW5kaW5nU2hlZXQu
Z2V0KCkpOworICAgICAgICAgICAgbV9iaW5kaW5nU2hlZXQgPSBnZW5lcmF0ZUJpbmRpbmdTaGVl
dCgpOworICAgICAgICAgICAgaWYgKG1fYmluZGluZ1NoZWV0KQorICAgICAgICAgICAgICAgIGJv
dW5kRG9jdW1lbnQtPmFkZEJpbmRpbmdTaGVldChtX2JpbmRpbmdTaGVldCk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gVXBkYXRlIHRoZSBzdHlsZVNlbGVjdG9yIHNvIHRoYXQgYmluZGluZ3MgYXJl
IHVwZGF0ZWQuCisgICAgICAgIC8vIEZJWE1FOiBpcyBpdCBhbHdheXMgcmVxdWlyZWQ/CisgICAg
ICAgIGJvdW5kRG9jdW1lbnQtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgWEJMRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsK
K30KKworUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBYQkxCaW5kaW5nRWxlbWVudDo6Z2VuZXJh
dGVCaW5kaW5nU2hlZXQoKQoreworICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzaGVldCA9IENT
U1N0eWxlU2hlZXQ6OmNyZWF0ZSgpOworICAgIFN0cmluZyBydWxlID0gZ2V0QXR0cmlidXRlKFhC
TE5hbWVzOjplbGVtZW50QXR0cik7CisgICAgcnVsZS5hcHBlbmQoIiB7IGJpbmRpbmc6IHVybCgn
Iik7CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBoYXZlIHRoZSBYQkxEb2N1bWVudCBjYXNl
IHdvcmtpbmcuCisgICAgRG9jdW1lbnQqIGJvdW5kRG9jdW1lbnQgPSBkb2N1bWVudCgpLT5pc1hC
TERvY3VtZW50KCkgPyAwIDogZG9jdW1lbnQoKTsKKworICAgIHJ1bGUuYXBwZW5kKGJvdW5kRG9j
dW1lbnQtPnVybCgpLnN0cmluZygpKTsKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0
byBhZGQgdGhlIElEIHRhZyB0byBtYXRjaCBhZGRCaW5kaW5nIHN5bnRheC4KKyAgICBydWxlLmFw
cGVuZCgiJyk7fSIpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgc2hlZXQtPmlu
c2VydFJ1bGUocnVsZSwgMCwgZWMpOworCisgICAgLy8gSWYgZWMgaXMgbm90IG51bGwsICdlbGVt
ZW50JyBpcyBub3QgYSB2YWxpZCBzZWxlY3Rvciwgc28KKyAgICAvLyByZW1vdmUgdGhlIG5ld2x5
IGNyZWF0ZWQgc2hlZXQuCisgICAgaWYgKGVjKQorICAgICAgICBzaGVldCA9IDA7CisKKyAgICBy
ZXR1cm4gc2hlZXQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShYQkwpCkluZGV4OiBXZWJDb3JlL3hibC9YQkxCaW5kaW5nRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUveGJsL1hCTEJpbmRpbmdFbGVtZW50LmgJKHJldmlzaW9uIDM1MzI1KQor
KysgV2ViQ29yZS94YmwvWEJMQmluZGluZ0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTIgKzMzLDIxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIEF0dHJpYnV0
ZTsKKyAgICBjbGFzcyBDU1NTdHlsZVNoZWV0OworCiAgICAgY2xhc3MgWEJMQmluZGluZ0VsZW1l
bnQgOiBwdWJsaWMgWEJMRWxlbWVudCB7CiAgICAgcHVibGljOgotICAgICAgICBYQkxCaW5kaW5n
RWxlbWVudChjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBxTmFtZSwgV2ViQ29yZTo6RG9j
dW1lbnQqIGRvYykKLSAgICAgICAgICAgIDogWEJMRWxlbWVudChxTmFtZSwgZG9jKQotICAgICAg
ICB7Ci0gICAgICAgIH0KKyAgICAgICAgWEJMQmluZGluZ0VsZW1lbnQoY29uc3QgV2ViQ29yZTo6
UXVhbGlmaWVkTmFtZSYgcU5hbWUsIFdlYkNvcmU6OkRvY3VtZW50KiBkb2MpOyAKKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJl
c2VydmVEZWNscyk7CisKKyAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBiaW5kaW5nIHNoZWV0IGFz
c29jaWF0ZWQgYnkgdGhpcyBlbGVtZW50LgorICAgICAgICBQYXNzUmVmUHRyPENTU1N0eWxlU2hl
ZXQ+IGdlbmVyYXRlQmluZGluZ1NoZWV0KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFhCTEJpbmRpbmdQcm90b3R5cGUgd2hl
biBpdCBpcyBjcmVhdGVkLgorICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9iaW5kaW5n
U2hlZXQ7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS94
YmwvWEJMQmluZGluZ01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveGJsL1hCTEJp
bmRpbmdNYW5hZ2VyLmNwcAkocmV2aXNpb24gMzU0MTYpCisrKyBXZWJDb3JlL3hibC9YQkxCaW5k
aW5nTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShYQkwpCiAKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiWEJMQmlu
ZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04OCw2ICs4OSw0MiBAQCB2b2lkIFhC
TEJpbmRpbmdNYW5hZ2VyOjpyZW1vdmVBbGxCaW5kaW5nCiAgICAgICAgIGRlbGV0ZSBlbGVtZW50
QmluZGluZ3M7CiB9CiAKKwordm9pZCBYQkxCaW5kaW5nTWFuYWdlcjo6YWRkQmluZGluZ1NoZWV0
KERvY3VtZW50KiBkb2N1bWVudCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBzaGVldCkKK3sK
KyAgICBTdHlsZVNoZWV0VmVjdG9yKiBkb2N1bWVudFNoZWV0cyA9IG1fYmluZGluZ1NoZWV0cy5n
ZXQoZG9jdW1lbnQpOworICAgIGlmICghZG9jdW1lbnRTaGVldHMpIHsKKyAgICAgICAgZG9jdW1l
bnRTaGVldHMgPSBuZXcgU3R5bGVTaGVldFZlY3RvcigpOworICAgICAgICBtX2JpbmRpbmdTaGVl
dHMuYWRkKGRvY3VtZW50LCBkb2N1bWVudFNoZWV0cyk7CisgICAgfQorICAgIGRvY3VtZW50U2hl
ZXRzLT5hcHBlbmQoc2hlZXQpOworfQorCit2b2lkIFhCTEJpbmRpbmdNYW5hZ2VyOjpyZW1vdmVC
aW5kaW5nU2hlZXQoRG9jdW1lbnQqIGRvY3VtZW50LCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+
IHNoZWV0KQoreworICAgIFN0eWxlU2hlZXRWZWN0b3IqIGRvY3VtZW50U2hlZXRzID0gbV9iaW5k
aW5nU2hlZXRzLmdldChkb2N1bWVudCk7CisKKyAgICBpZiAoZG9jdW1lbnRTaGVldHMpIHsKKyAg
ICAgICAgZm9yIChTdHlsZVNoZWV0VmVjdG9yOjppdGVyYXRvciBpdCA9IGRvY3VtZW50U2hlZXRz
LT5iZWdpbigpOyBpdCAhPSBkb2N1bWVudFNoZWV0cy0+ZW5kKCk7ICsraXQpCisgICAgICAgICAg
ICBpZiAoKml0ID09IHNoZWV0KSB7CisgICAgICAgICAgICAgICAgZG9jdW1lbnRTaGVldHMtPnJl
bW92ZShpdCAtIGRvY3VtZW50U2hlZXRzLT5iZWdpbigpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgfQorICAgIC8vIFdlIHNob3VsZCBoYXZlIHRoZSBzaGVl
dCBpbiBvdXIgYmluZGluZyBzaGVldHMuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgWEJMQmluZGluZ01hbmFnZXI6OmNsZWFyQmluZGluZ1NoZWV0cyhEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgZGVsZXRlIG1fYmluZGluZ1NoZWV0cy5nZXQoZG9jdW1lbnQpOworfQor
CitTdHlsZVNoZWV0VmVjdG9yKiBYQkxCaW5kaW5nTWFuYWdlcjo6Z2V0QmluZGluZ1NoZWV0cyhE
b2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG1fYmluZGluZ1NoZWV0cy5nZXQoZG9j
dW1lbnQpOworfQorCiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKFhCTCkKSW5kZXg6IFdlYkNvcmUv
eGJsL1hCTEJpbmRpbmdNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94YmwvWEJMQmlu
ZGluZ01hbmFnZXIuaAkocmV2aXNpb24gMzUzMjQpCisrKyBXZWJDb3JlL3hibC9YQkxCaW5kaW5n
TWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTQgQEAKIAogI2lmIEVOQUJM
RShYQkwpCiAKKyNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgInd0Zi9IYXNo
TWFwLmgiCiAjaW5jbHVkZSAid3RmL1ZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
KyAgICBjbGFzcyBDU1NTdHlsZVNoZWV0OworICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNz
IEVsZW1lbnQ7CiAgICAgY2xhc3MgWEJMQmluZGluZzsKICAgICBjbGFzcyBTdHJpbmc7CkBAIC00
OSwxMCArNTIsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFVzZWQgYnkg
RWxlbWVudCBkZXN0cnVjdG9yIHRvIHByZXZlbnQgbGVha2FnZS4KICAgICAgICAgdm9pZCByZW1v
dmVBbGxCaW5kaW5ncyhFbGVtZW50KiBib3VuZEVsZW1lbnQpOworCisgICAgICAgIC8vIEJpbmRp
bmcgc3R5bGUgc2hlZXRzIG1hbmFnZW1lbnQuCisgICAgICAgIHZvaWQgYWRkQmluZGluZ1NoZWV0
KERvY3VtZW50KiwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Pik7CisgICAgICAgIHZvaWQgcmVt
b3ZlQmluZGluZ1NoZWV0KERvY3VtZW50KiwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Pik7Cisg
ICAgICAgIHZvaWQgY2xlYXJCaW5kaW5nU2hlZXRzKERvY3VtZW50Kik7CisgICAgICAgIFN0eWxl
U2hlZXRWZWN0b3IqIGdldEJpbmRpbmdTaGVldHMoRG9jdW1lbnQqKTsKKwogICAgIHByaXZhdGU6
CiAgICAgICAgIFhCTEJpbmRpbmdNYW5hZ2VyKCk7CiAKICAgICAgICAgSGFzaE1hcDxFbGVtZW50
KiwgVmVjdG9yPFhCTEJpbmRpbmc+KiA+IG1fYmluZGluZ3M7CisgICAgICAgIEhhc2hNYXA8RG9j
dW1lbnQqLCBTdHlsZVNoZWV0VmVjdG9yKj4gbV9iaW5kaW5nU2hlZXRzOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM1NDQ1KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDgtMDct
MzAgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBjYXNlIGZvciBidWcg
MjAyMTI6IFtYQkxdIEFkZCBmdWxsIHN1cHBvcnQgZm9yIGVsZW1lbnQ9IiIgYXR0YWNobWVudAor
CisgICAgICAgICogZmFzdC94YmwveGJsLWVsZW1lbnQtYmluZGluZy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QveGJsL3hibC1lbGVtZW50LWJpbmRpbmcueGh0bWw6IEFkZGVk
LgorCiAyMDA4LTA3LTI4ICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hi
bC94YmwtZWxlbWVudC1iaW5kaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3hibC94YmwtZWxlbWVudC1iaW5kaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QveGJsL3hibC1lbGVtZW50LWJpbmRpbmctZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1Rlc3QgY2FzZSBmb3IgYnVnIDIwMjEy
IDogW1hCTF0gQWRkIGZ1bGwgc3VwcG9ydCBmb3IgZWxlbWVudD0iIiBhdHRhY2htZW50CisKK1lv
dSBzaG91bGQgc2VlICJQQVNTRUQiIG9uY2UuCisKK1BBU1NFRAorCisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QveGJsL3hibC1lbGVtZW50LWJpbmRpbmcueGh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC94YmwveGJsLWVsZW1lbnQtYmluZGluZy54aHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QveGJsL3hibC1lbGVtZW50LWJpbmRpbmcueGh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9E
VEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1s
MTEuZHRkIj4KKzxodG1sIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyB4bWxu
czp4aHRtbD0naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc+Cis8aGVhZD4KKyAgICA8c2Ny
aXB0PgorICAgIGZ1bmN0aW9uIHRlc3RCaW5kaW5nKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgdmFyIHRhcmdldDEgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndGFyZ2V0MScpOworICAgICAgICB2YXIgdGFyZ2V0MiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0YXJnZXQyJyk7CisgICAgICAgIHZhciBjb25zb2xlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKKyAgICAgICAgdmFyIGJpbmRpbmcgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnYmluZGluZycpOworCisgICAgICAgIC8vIEJpbmRpbmcgYXR0YWNoZWQg
d2l0aCBlbGVtZW50PSIiIGFyZSBhZGRlZCB3aXRoIHRoZSBkb2N1bWVudCB1cmwuCisgICAgICAg
IHZhciB1cmwgPSBkb2N1bWVudC5VUkw7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlm
ICghdGFyZ2V0MS5oYXNCaW5kaW5nKHVybCkpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmlu
bmVySFRNTCA9ICJGQUlMRUQiOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gU2V0IGFuIGludmFsaWQgc2VsZWN0b3IuCisgICAgICAgICAg
ICBiaW5kaW5nLnNldEF0dHJpYnV0ZU5TKG51bGwsICJlbGVtZW50IiwgIiN0YXJnZXQyLCIpOwor
ICAgICAgICAgICAgaWYgKHRhcmdldDEuaGFzQmluZGluZyh1cmwpIHx8IHRhcmdldDIuaGFzQmlu
ZGluZyh1cmwpKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5pbm5lckhUTUwgPSAiRkFJTEVE
IjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIE5vdyBzZXQgYSBnb29kIHNlbGVjdG9yLgorICAgICAgICAgICAgYmluZGluZy5zZXRBdHRy
aWJ1dGVOUyhudWxsLCAiZWxlbWVudCIsICIjdGFyZ2V0MiIpOworICAgICAgICAgICAgaWYgKCF0
YXJnZXQxLmhhc0JpbmRpbmcodXJsKSAmYW1wOyZhbXA7IHRhcmdldDIuaGFzQmluZGluZyh1cmwp
KQorICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5uZXJIVE1MID0gIlBBU1NFRCI7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29uc29sZS5pbm5lckhUTUwgPSAiRkFJTEVEIjsK
KyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgY29uc29sZS5pbm5lckhUTUwgPSAi
RkFJTEVEIChleGNlcHRpb24gdGhyb3duKSI7CisgICAgICAgIH0KKyAgICB9CisgICAgPC9zY3Jp
cHQ+CisKKyAgICA8IS0tIEVtcHR5IGJpbmRpbmcgLS0+CisgICAgIDx4YmwgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnL25zL3hibCI+CisgICAgICAgIDxiaW5kaW5nIGlkPSJiaW5kaW5nIiBlbGVt
ZW50PSIudGFyZ2V0Ii8+CisgICAgPC94Ymw+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3RC
aW5kaW5nKCkiPgorICAgIDxwPiBUZXN0IGNhc2UgZm9yIGJ1ZyA8YSBocmVmPSJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTIiPiAyMDIxMiA8L2E+OiBbWEJMXSBB
ZGQgZnVsbCBzdXBwb3J0IGZvciBlbGVtZW50PSIiIGF0dGFjaG1lbnQ8L3A+CisgICAgPHA+IFlv
dSBzaG91bGQgc2VlICJQQVNTRUQiIG9uY2UuIDwvcD4KKyAgICA8cCBpZD0iY29uc29sZSI+IDwv
cD4KKyAgICA8c3BhbiBpZD0idGFyZ2V0MSIgY2xhc3M9InRhcmdldCI+IDwvc3Bhbj4KKyAgICA8
c3BhbiBpZD0idGFyZ2V0MiI+IDwvc3Bhbj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="9955"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22618</attachid>
            <date>2008-08-02 09:15:19 -0700</date>
            <delta_ts>2008-08-03 00:15:18 -0700</delta_ts>
            <desc>Second attempt: updated with Eric&apos;s comment + removed issue I had spotted (added a test case for that)</desc>
            <filename>XBLElementHandling-updated.patch</filename>
            <type>text/plain</type>
            <size>26206</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNTUyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMDgtMDgtMDIgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QveGJsL3hibC1jcmFzaC1pbmxpbmUueGh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QveGJsL3hibC1kb2N1bWVudC1zaGVldHMtbW9kaWZpY2F0aW9uLnhodG1sCisgICAg
ICAgICAgICAgICBmYXN0L3hibC94YmwtZWxlbWVudC1iaW5kaW5nLnhodG1sCisKKyAgICAgICAg
QnVnIDIwMjEyOiBbWEJMXSBBZGQgZnVsbCBzdXBwb3J0IGZvciBlbGVtZW50PSIiIGF0dGFjaG1l
bnQKKworICAgICAgICAtIEFkZCBhdHRyaWJ1dGVDaGFuZ2VkIG1ldGhvZCB0byBYQkxCaW5kaW5n
RWxlbWVudCB0byBjYXRjaCAiZWxlbWVudCIKKyAgICAgICAgY2hhbmdlcyBhbmQgdXBkYXRlIHRo
ZSBiaW5kaW5ncy4KKworICAgICAgICAtIFRyYW5zbGF0ZSAiZWxlbWVudCIgYXR0cmlidXRlIHRv
IGEgc3R5bGVzaGVldCB0aGF0IGlzIGFkZGVkIHRvIHRoZSBib3VuZAorICAgICAgICBkb2N1bWVu
dCdzIHNoZWV0cy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgWEJMQmluZGluZ0Vs
ZW1lbnQuY3BwLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBEaXR0by4KKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAgICogY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3Rvcik6IEFkZCBiaW5kaW5nCisgICAgICAgIHNoZWV0cy4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3Vt
ZW50KTogUmVtb3ZlIGJpbmRpbmcKKyAgICAgICAgc2hlZXQgaW5mb3JtYXRpb24uCisKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKTogV2hlbgorICAgICAg
ICByZWNhbGN1bGF0aW5nIHRoZSBzdHlsZSBzZWxlY3RvciwgcmVtb3ZlIGFsbCB0aGUgYmluZGlu
Z3MKKyAgICAgICAgYXMgdGhlIHJlbW92ZWQgc2hlZXRzIHdvdWxkIG5ldmVyIHJlbW92ZSB0aGVp
cnMuCisKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRCaW5kaW5nU2hlZXQpOiBVcGRh
dGUgYmluZGluZyBtYW5hZ2VyCisgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnJlbW92ZUJpbmRpbmdTaGVldCk6IERpdHRvLgorCisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisgICAgICAgICogeGJsL1hCTEJpbmRpbmdFbGVtZW50LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpYQkxCaW5kaW5nRWxlbWVudDo6WEJMQmluZGluZ0VsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6WEJMQmluZGluZ0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQp
OiBDaGVjaworICAgICAgICBmb3IgImVsZW1lbnQiIGNoYW5nZXMgYW5kIHVwZGF0ZSB0aGUgY2Fj
aGVkIHNoZWV0IGFuZCB0aGUKKyAgICAgICAgYm91bmQgZWxlbWVudCdzIGJpbmRpbmdzIHN0eWxl
IHNoZWV0cy4KKworICAgICAgICAoV2ViQ29yZTo6WEJMQmluZGluZ0VsZW1lbnQ6OmdlbmVyYXRl
QmluZGluZ1NoZWV0KTogQ3JlYXRlCisgICAgICAgIHRoZSBzdHlsZSBzaGVldCBmcm9tIHRoZSAi
ZWxlbWVudCIgYXR0cmlidXRlLgorCisgICAgICAgICogeGJsL1hCTEJpbmRpbmdFbGVtZW50Lmg6
CisgICAgICAgICogeGJsL1hCTEJpbmRpbmdNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhCTEJpbmRpbmdNYW5hZ2VyOjphZGRCaW5kaW5nU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
WEJMQmluZGluZ01hbmFnZXI6OnJlbW92ZUJpbmRpbmdTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpYQkxCaW5kaW5nTWFuYWdlcjo6Y2xlYXJCaW5kaW5nU2hlZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlhCTEJpbmRpbmdNYW5hZ2VyOjpnZXRCaW5kaW5nU2hlZXRzKTogQWxsIDQgcHJldmlvdXMK
KyAgICAgICAgbWV0aG9kcyBhcmUgdXNlZCB0byBtYW5hZ2UgdGhlIGJpbmRpbmcgc2hlZXRzLgor
CisgICAgICAgICogeGJsL1hCTEJpbmRpbmdNYW5hZ2VyLmg6CisKIDIwMDgtMDctMjggIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYy4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzU0MTIpCisrKyBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ0LDYgKzE0NDQsNyBAQCB3ZWJjb3JlX2J1aWx0
X3NvdXJjZXMgKz0gXAogCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL0Nh
Y2hlZFhCTERvY3VtZW50LmNwcCBcCisJV2ViQ29yZS94YmwvWEJMQmluZGluZ0VsZW1lbnQuY3Bw
IFwKIAlXZWJDb3JlL3hibC9YQkxCaW5kaW5nTWFuYWdlci5jcHAgXAogCVdlYkNvcmUveGJsL1hC
TFhCTEVsZW1lbnQuY3BwCiAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMzU0MTIpCisrKyBXZWJDb3JlL1dlYkNv
cmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM2LDYgKzEyMzYsNyBAQCBjb250YWlucyhERUZJ
TkVTLCBFTkFCTEVfWEJMPTEpIHsKIAogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBsb2FkZXIv
Q2FjaGVkWEJMRG9jdW1lbnQuY3BwIFwKKyAgICAgICAgeGJsL1hCTEJpbmRpbmdFbGVtZW50LmNw
cCBcCiAgICAgICAgIHhibC9YQkxCaW5kaW5nTWFuYWdlci5jcHAgXAogICAgICAgICB4YmwvWEJM
WEJMRWxlbWVudC5jcHAKIApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDM1MzI1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4MjksNiArMTgyOSw3IEBACiAJCUEx
MEQyMTQwMEUzODlBMEQwMDdFNTAwQiAvKiBYQkxCaW5kaW5nRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwRDIxM0YwRTM4OUEwRDAwN0U1
MDBCIC8qIFhCTEJpbmRpbmdFbGVtZW50LmggKi87IH07CiAJCUExMEQyMTQyMEUzODlBMTgwMDdF
NTAwQiAvKiBYQkxUZW1wbGF0ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEExMEQyMTQxMEUzODlBMTgwMDdFNTAwQiAvKiBYQkxUZW1wbGF0
ZUVsZW1lbnQuaCAqLzsgfTsKIAkJQTExNzJENkUwRTBDNTM5RTAwMTc1Qzg4IC8qIFhCTERvY3Vt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTE3
MkQ2RDBFMEM1MzlFMDAxNzVDODggLyogWEJMRG9jdW1lbnQuaCAqLzsgfTsKKwkJQTE0RUY3QUMw
RTNGMTA2OTAwREE5RjM5IC8qIFhCTEJpbmRpbmdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNEVGN0FCMEUzRjEwNjkwMERBOUYzOSAv
KiBYQkxCaW5kaW5nRWxlbWVudC5jcHAgKi87IH07CiAJCUE3MTg3NjBFMEIyQTEyMDEwMEExNkVD
RSAvKiBEcmFnQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxODc4OTAwQjJE
MDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxODc4OEYwQjJEMDRBQzAwQTE2RUNFIC8qIERy
YWdDb250cm9sbGVyTWFjLm1tICovOyB9OwogCQlBNzM1MkMxOTBCMUJCODlEMDBBOTg2RDAgLyog
UmVuZGVyU1ZHQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczNTJDMTcwQjFCQjg5RDAwQTk4NkQwIC8qIFJlbmRlclNWR0Jsb2NrLmNwcCAq
LzsgfTsKQEAgLTYzMDMsNiArNjMwNCw3IEBACiAJCUExMEQyMTNGMEUzODlBMEQwMDdFNTAwQiAv
KiBYQkxCaW5kaW5nRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBY
QkxCaW5kaW5nRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTBEMjE0
MTBFMzg5QTE4MDA3RTUwMEIgLyogWEJMVGVtcGxhdGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFhCTFRlbXBsYXRlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMTE3MkQ2RDBFMEM1MzlFMDAxNzVDODggLyogWEJMRG9jdW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWEJMRG9jdW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE0RUY3QUIwRTNGMTA2OTAwREE5RjM5IC8qIFhCTEJpbmRp
bmdFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhCTEJp
bmRpbmdFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxODc2MEQw
QjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERyYWdBY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
MTg3ODhGMEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdDb250cm9sbGVyTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzM1MkMxNzBCMUJCODlEMDBBOTg2RDAgLyogUmVu
ZGVyU1ZHQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlclNWR0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzA1LDYg
KzEzMzA3LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUExMEQyMTQxMEUzODlBMTgwMDdFNTAw
QiAvKiBYQkxUZW1wbGF0ZUVsZW1lbnQuaCAqLywKIAkJCQlBMTBEMjEzRjBFMzg5QTBEMDA3RTUw
MEIgLyogWEJMQmluZGluZ0VsZW1lbnQuaCAqLywKKwkJCQlBMTRFRjdBQjBFM0YxMDY5MDBEQTlG
MzkgLyogWEJMQmluZGluZ0VsZW1lbnQuY3BwICovLAogCQkJCUExMEQyMEEzMEUzODZEQ0YwMDdF
NTAwQiAvKiBYQkxCaW5kaW5nLmggKi8sCiAJCQkJQTEwRDIwQTQwRTM4NkRDRjAwN0U1MDBCIC8q
IFhCTEJpbmRpbmdNYW5hZ2VyLmNwcCAqLywKIAkJCQlBMTBEMjBBNTBFMzg2RENGMDA3RTUwMEIg
LyogWEJMQmluZGluZ01hbmFnZXIuaCAqLywKQEAgLTE3MTAzLDYgKzE3MTA2LDcgQEAKIAkJCQlG
OUM2NzYwQTBERUM3OTAzMDA4RDBDMkYgLyogWEJMRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjlDNjc2MEIwREVDNzkwMzAwOEQwQzJGIC8qIFhCTE5hbWVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUExMEQyMEE3MEUzODZEQ0YwMDdFNTAwQiAvKiBYQkxCaW5kaW5nTWFu
YWdlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMTRFRjdBQzBFM0YxMDY5MDBEQTlGMzkgLyog
WEJMQmluZGluZ0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcAkocmV2aXNpb24gMzU0MTYpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDYgKzM3NywxOSBAQCBDU1NTdHlsZVNlbGVj
dG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHls
ZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgpKQogICAgICAgICAgICAgbV9hdXRob3JTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwg
Km1fbWVkaXVtLCB0aGlzKTsKICAgICB9CisKKyNpZiBFTkFCTEUoWEJMKQorICAgIC8vIEFkZCBi
aW5kaW5ncydzIHN0eWxlIHNoZWV0cy4KKyAgICBYQkxCaW5kaW5nTWFuYWdlciogbWFuYWdlciA9
IFhCTEJpbmRpbmdNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpOworICAgIFN0eWxlU2hlZXRWZWN0
b3IqIGJpbmRpbmdTaGVldHMgPSBtYW5hZ2VyLT5nZXRCaW5kaW5nU2hlZXRzKGRvYyk7CisKKyAg
ICBpZiAoIWJpbmRpbmdTaGVldHMpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoU3R5bGVT
aGVldFZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBiaW5kaW5nU2hlZXRzLT5iZWdpbigpOyBpdCAhPSBi
aW5kaW5nU2hlZXRzLT5lbmQoKTsgKytpdCkKKyAgICAgICAgaWYgKCgqaXQpLT5pc0NTU1N0eWxl
U2hlZXQoKSAmJiAhKCppdCktPmRpc2FibGVkKCkpCisgICAgICAgICAgICBtX2F1dGhvclN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oKCppdCkuZ2V0
KCkpLCAqbV9tZWRpdW0sIHRoaXMpOworI2VuZGlmCiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6aW5pdCgpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzNTMyNCkKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw3IEBACiAjZW5kaWYK
IAogI2lmIEVOQUJMRShYQkwpCisjaW5jbHVkZSAiWEJMQmluZGluZ01hbmFnZXIuaCIKICNpbmNs
dWRlICJYQkxFbGVtZW50LmgiCiAjaW5jbHVkZSAiWEJMRWxlbWVudEZhY3RvcnkuaCIKICNpbmNs
dWRlICJYQkxOYW1lcy5oIgpAQCAtNDAyLDYgKzQwMywxMCBAQCBEb2N1bWVudDo6fkRvY3VtZW50
KCkKICNpZiBFTkFCTEUoU1ZHKQogICAgIGRlbGV0ZSBtX3N2Z0V4dGVuc2lvbnM7CiAjZW5kaWYK
KyNpZiBFTkFCTEUoWEJMKQorICAgIFhCTEJpbmRpbmdNYW5hZ2VyKiBtYW5hZ2VyID0gWEJMQmlu
ZGluZ01hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCk7CisgICAgbWFuYWdlci0+Y2xlYXJCaW5kaW5n
U2hlZXRzKHRoaXMpOworI2VuZGlmCiAKICAgICBYTUxIdHRwUmVxdWVzdDo6ZGV0YWNoUmVxdWVz
dHModGhpcyk7CiAgICAgewpAQCAtMjI2OCw2ICsyMjczLDE1IEBAIHZvaWQgRG9jdW1lbnQ6OnJl
Y2FsY1N0eWxlU2VsZWN0b3IoKQogICAgICAgICBpZiAoc2hlZXQpCiAgICAgICAgICAgICBzaGVl
dHMuYXBwZW5kKHNoZWV0KTsKIAorI2lmIEVOQUJMRShYQkwpCisgICAgICAgIC8vIFJlbW92ZSBh
bGwgYmluZGluZ3MgYXMgc29tZSBiaW5kaW5nIHNoZWV0cyBtYXkgYmUgcmVtb3ZlZAorICAgICAg
ICAvLyBhbmQgdGhleSB3b3VsZG4ndCB1cGRhdGUgdGhlaXIgYmluZGluZ3MuCisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIG9ubHkgaWYgYSBiaW5kaW5nIHNoZWV0IHdhcyBy
ZW1vdmVkIGluc3RlYWQgb2YgYWx3YXlzLgorICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICBYQkxCaW5kaW5nTWFuYWdlciogbWFuYWdlciA9IFhCTEJpbmRpbmdN
YW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpOworICAgICAgICAgICAgbWFuYWdlci0+cmVtb3ZlQWxs
QmluZGluZ3Moc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pKTsKKyAgICAgICAgfQorI2VuZGlmCiAg
ICAgICAgIC8vIEZvciBIVE1MIGRvY3VtZW50cywgc3R5bGVzaGVldHMgYXJlIG5vdCBhbGxvd2Vk
IHdpdGhpbi9hZnRlciB0aGUgPEJPRFk+IHRhZy4gU28gd2UKICAgICAgICAgLy8gY2FuIHN0b3Ag
c2VhcmNoaW5nIGhlcmUuCiAgICAgICAgIGlmIChpc0hUTUxEb2N1bWVudCgpICYmIG4tPmhhc1Rh
Z05hbWUoYm9keVRhZykpCkBAIC0zNjM1LDYgKzM2NDksMjAgQEAgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zKiBEb2N1bWVudDo6YWNjZXNzUwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoWEJMKQordm9p
ZCBEb2N1bWVudDo6YWRkQmluZGluZ1NoZWV0KFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc2hl
ZXQpCit7CisgICAgWEJMQmluZGluZ01hbmFnZXIqIG1hbmFnZXIgPSBYQkxCaW5kaW5nTWFuYWdl
cjo6c2hhcmVkSW5zdGFuY2UoKTsKKyAgICBtYW5hZ2VyLT5hZGRCaW5kaW5nU2hlZXQodGhpcywg
c2hlZXQpOworfQorCit2b2lkIERvY3VtZW50OjpyZW1vdmVCaW5kaW5nU2hlZXQoQ1NTU3R5bGVT
aGVldCogc2hlZXQpCit7CisgICAgWEJMQmluZGluZ01hbmFnZXIqIG1hbmFnZXIgPSBYQkxCaW5k
aW5nTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKTsKKyAgICBtYW5hZ2VyLT5yZW1vdmVCaW5kaW5n
U2hlZXQodGhpcywgc2hlZXQpOworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IERvY3VtZW50OjppbWFnZXMoKQogewogICAgIHJldHVybiBIVE1MQ29sbGVjdGlvbjo6Y3Jl
YXRlKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NJbWFnZXMpOwpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lv
biAzNTMyNCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkz
NCw2ICs5MzQsMTEgQEAgcHVibGljOgogICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoWEJMKQorICAgIHZvaWQgYWRk
QmluZGluZ1NoZWV0KFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4pOworICAgIHZvaWQgcmVtb3Zl
QmluZGluZ1NoZWV0KENTU1N0eWxlU2hlZXQqKTsKKyNlbmRpZgorCiAgICAgdm9pZCBpbml0U2Vj
dXJpdHlDb250ZXh0KCk7CiAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29u
c3QgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQogCkBAIC05OTQsNyArOTk5LDcg
QEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoU1ZHKQogICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyog
bV9zdmdFeHRlbnNpb25zOwogI2VuZGlmCi0gICAgCisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NV
UFBPUlQpCiAgICAgVmVjdG9yPERhc2hib2FyZFJlZ2lvblZhbHVlPiBtX2Rhc2hib2FyZFJlZ2lv
bnM7CiAgICAgYm9vbCBtX2hhc0Rhc2hib2FyZFJlZ2lvbnM7CkluZGV4OiBXZWJDb3JlL3hibC9Y
QkxCaW5kaW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94YmwvWEJMQmluZGlu
Z0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94YmwvWEJMQmluZGluZ0VsZW1l
bnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBKdWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYQkxCaW5kaW5nRWxlbWVudC5oIgorCisj
aWYgRU5BQkxFKFhCTCkKKworI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkNTU1N0
eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlICJYQkxOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1hCTEJpbmRpbmdF
bGVtZW50OjpYQkxCaW5kaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSwgRG9j
dW1lbnQqIGRvYykKKyAgICA6IFhCTEVsZW1lbnQocU5hbWUsIGRvYykKKyAgICAsIG1fYmluZGlu
Z1NoZWV0KDApCit7Cit9CisKK3ZvaWQgWEJMQmluZGluZ0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCit7CisgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CisgICAgaWYgKGF0dHJOYW1lID09
IFhCTE5hbWVzOjplbGVtZW50QXR0cikgeworICAgICAgICBTdHJpbmcgY3VycmVudEF0dHIgPSBn
ZXRBdHRyaWJ1dGUoWEJMTmFtZXM6OmVsZW1lbnRBdHRyKTsKKworICAgICAgICAvLyBDaGVjayB0
aGF0IHdlIGFyZSBpbmxpbmUsIGluIHRoYXQgY2FzZSB0aGUgYm91bmQgZG9jdW1lbnQKKyAgICAg
ICAgLy8gaXMgb3VyIGRvY3VtZW50LgorICAgICAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBhbiBY
QkxEb2N1bWVudCwgd2UgbmVlZCB0byBnZXQgdGhlIGJvdW5kIGRvY3VtZW50LgorICAgICAgICBE
b2N1bWVudCogYm91bmREb2N1bWVudCA9IGRvY3VtZW50KCk7CisKKyAgICAgICAgaWYgKCFjdXJy
ZW50QXR0ci5pc051bGwoKSAmJiBhdHRyLT52YWx1ZSgpLmlzTnVsbCgpKSB7CisgICAgICAgICAg
ICBBU1NFUlQobV9iaW5kaW5nU2hlZXQpOworICAgICAgICAgICAgYm91bmREb2N1bWVudC0+cmVt
b3ZlQmluZGluZ1NoZWV0KG1fYmluZGluZ1NoZWV0LmdldCgpKTsKKyAgICAgICAgICAgIG1fYmlu
ZGluZ1NoZWV0ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2JpbmRp
bmdTaGVldCkKKyAgICAgICAgICAgICAgICBib3VuZERvY3VtZW50LT5yZW1vdmVCaW5kaW5nU2hl
ZXQobV9iaW5kaW5nU2hlZXQuZ2V0KCkpOworICAgICAgICAgICAgbV9iaW5kaW5nU2hlZXQgPSBn
ZW5lcmF0ZUJpbmRpbmdTaGVldCgpOworICAgICAgICAgICAgaWYgKG1fYmluZGluZ1NoZWV0KQor
ICAgICAgICAgICAgICAgIGJvdW5kRG9jdW1lbnQtPmFkZEJpbmRpbmdTaGVldChtX2JpbmRpbmdT
aGVldCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVXBkYXRlIHRoZSBzdHlsZVNlbGVjdG9yIHNv
IHRoYXQgYmluZGluZ3MgYXJlIHVwZGF0ZWQuCisgICAgICAgIC8vIEZJWE1FOiBpcyBpdCBhbHdh
eXMgcmVxdWlyZWQ/CisgICAgICAgIGJvdW5kRG9jdW1lbnQtPnVwZGF0ZVN0eWxlU2VsZWN0b3Io
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgWEJMRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRy
LCBwcmVzZXJ2ZURlY2xzKTsKK30KKworUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBYQkxCaW5k
aW5nRWxlbWVudDo6Z2VuZXJhdGVCaW5kaW5nU2hlZXQoKQoreworICAgIFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiBzaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSgpOworICAgIFN0cmluZyBydWxl
ID0gZ2V0QXR0cmlidXRlKFhCTE5hbWVzOjplbGVtZW50QXR0cik7CisgICAgcnVsZS5hcHBlbmQo
IiB7IGJpbmRpbmc6IHVybCgnIik7CisKKyAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBhbiBYQkxE
b2N1bWVudCwgd2UgbmVlZCB0byBnZXQgdGhlCisgICAgLy8gcmVhbCBib3VuZCBkb2N1bWVudC4K
KyAgICBEb2N1bWVudCogYm91bmREb2N1bWVudCA9IGRvY3VtZW50KCk7CisKKyAgICBydWxlLmFw
cGVuZChib3VuZERvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7CisKKyAgICAvLyBJZiB3ZSBoYXZl
IGFuIElEIHRhZywgYWRkIGl0IHRvIHRoZSBiaW5kaW5nIHNoZWV0IHRvCisgICAgLy8gbWF0Y2gg
YWRkQmluZGluZyBzeW50YXguCisgICAgaWYgKGhhc0lEKCkpIHsKKyAgICAgICAgcnVsZS5hcHBl
bmQoJyMnKTsKKyAgICAgICAgcnVsZS5hcHBlbmQoZ2V0SURBdHRyaWJ1dGUoKSk7CisgICAgfQor
CisgICAgcnVsZS5hcHBlbmQoIicpO30iKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIHNoZWV0LT5pbnNlcnRSdWxlKHJ1bGUsIDAsIGVjKTsKKworICAgIC8vIElmIGVjIGlzIG5v
dCBudWxsLCAnZWxlbWVudCcgaXMgbm90IGEgdmFsaWQgc2VsZWN0b3IsIHNvCisgICAgLy8gcmVt
b3ZlIHRoZSBuZXdseSBjcmVhdGVkIHNoZWV0LgorICAgIGlmIChlYykKKyAgICAgICAgc2hlZXQg
PSAwOworCisgICAgcmV0dXJuIHNoZWV0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoWEJMKQpJbmRleDogV2ViQ29yZS94YmwvWEJMQmluZGluZ0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hibC9YQkxCaW5kaW5nRWxlbWVudC5oCShyZXZp
c2lvbiAzNTMyNSkKKysrIFdlYkNvcmUveGJsL1hCTEJpbmRpbmdFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDEyICszMywyMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBj
bGFzcyBBdHRyaWJ1dGU7CisgICAgY2xhc3MgQ1NTU3R5bGVTaGVldDsKKwogICAgIGNsYXNzIFhC
TEJpbmRpbmdFbGVtZW50IDogcHVibGljIFhCTEVsZW1lbnQgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgWEJMQmluZGluZ0VsZW1lbnQoY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUs
IFdlYkNvcmU6OkRvY3VtZW50KiBkb2MpCi0gICAgICAgICAgICA6IFhCTEVsZW1lbnQocU5hbWUs
IGRvYykKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIFhCTEJpbmRpbmdFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOyAKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7
CisKKyAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBiaW5kaW5nIHNoZWV0IGFzc29jaWF0ZWQgYnkg
dGhpcyBlbGVtZW50LgorICAgICAgICBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGdlbmVyYXRl
QmluZGluZ1NoZWV0KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgYmUgbW92ZWQgdG8gdGhlIFhCTEJpbmRpbmdQcm90b3R5cGUgd2hlbiBpdCBpcyBjcmVh
dGVkLgorICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9iaW5kaW5nU2hlZXQ7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS94YmwvWEJMQmluZGlu
Z01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveGJsL1hCTEJpbmRpbmdNYW5hZ2Vy
LmNwcAkocmV2aXNpb24gMzU0MTYpCisrKyBXZWJDb3JlL3hibC9YQkxCaW5kaW5nTWFuYWdlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShYQkwpCiAK
KyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiWEJMQmluZGluZy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04OCw2ICs4OSw0NSBAQCB2b2lkIFhCTEJpbmRpbmdNYW5h
Z2VyOjpyZW1vdmVBbGxCaW5kaW5nCiAgICAgICAgIGRlbGV0ZSBlbGVtZW50QmluZGluZ3M7CiB9
CiAKKwordm9pZCBYQkxCaW5kaW5nTWFuYWdlcjo6YWRkQmluZGluZ1NoZWV0KERvY3VtZW50KiBk
b2N1bWVudCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBzaGVldCkKK3sKKyAgICBTdHlsZVNo
ZWV0VmVjdG9yKiBkb2N1bWVudFNoZWV0cyA9IG1fYmluZGluZ1NoZWV0cy5nZXQoZG9jdW1lbnQp
OworICAgIGlmICghZG9jdW1lbnRTaGVldHMpIHsKKyAgICAgICAgZG9jdW1lbnRTaGVldHMgPSBu
ZXcgU3R5bGVTaGVldFZlY3RvcigpOworICAgICAgICBtX2JpbmRpbmdTaGVldHMuYWRkKGRvY3Vt
ZW50LCBkb2N1bWVudFNoZWV0cyk7CisgICAgfQorICAgIGRvY3VtZW50U2hlZXRzLT5hcHBlbmQo
c2hlZXQpOworfQorCit2b2lkIFhCTEJpbmRpbmdNYW5hZ2VyOjpyZW1vdmVCaW5kaW5nU2hlZXQo
RG9jdW1lbnQqIGRvY3VtZW50LCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHNoZWV0KQorewor
ICAgIFN0eWxlU2hlZXRWZWN0b3IqIGRvY3VtZW50U2hlZXRzID0gbV9iaW5kaW5nU2hlZXRzLmdl
dChkb2N1bWVudCk7CisKKyAgICAvLyBkb2N1bWVudFNoZWV0cyBpcyBudWxsIGlmIG5vIHNoZWV0
cyB3ZXJlIGFkZGVkIGZvciB0aGlzIGRvY3VtZW50LgorICAgIGlmIChkb2N1bWVudFNoZWV0cykg
eworICAgICAgICBmb3IgKFN0eWxlU2hlZXRWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gZG9jdW1lbnRT
aGVldHMtPmJlZ2luKCk7IGl0ICE9IGRvY3VtZW50U2hlZXRzLT5lbmQoKTsgKytpdCkKKyAgICAg
ICAgICAgIGlmICgqaXQgPT0gc2hlZXQpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudFNoZWV0
cy0+cmVtb3ZlKGl0IC0gZG9jdW1lbnRTaGVldHMtPmJlZ2luKCkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3ZSBhcnJpdmUgaGVy
ZSwgaXQgbWVhbnMgdGhhdCB3ZSBkaWQgbm90IGZpbmQgdGhlIHNoZWV0IHRvIHJlbW92ZSwgd2hp
Y2gKKyAgICAvLyBzaG91bGQgTkVWRVIgb2NjdXIuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgWEJMQmluZGluZ01hbmFnZXI6OmNsZWFyQmluZGluZ1NoZWV0cyhEb2N1bWVu
dCogZG9jdW1lbnQpCit7CisgICAgZGVsZXRlIG1fYmluZGluZ1NoZWV0cy50YWtlKGRvY3VtZW50
KTsKK30KKworU3R5bGVTaGVldFZlY3RvciogWEJMQmluZGluZ01hbmFnZXI6OmdldEJpbmRpbmdT
aGVldHMoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBtX2JpbmRpbmdTaGVldHMu
Z2V0KGRvY3VtZW50KTsKK30KKwogfTsKIAogI2VuZGlmIC8vIEVOQUJMRShYQkwpCkluZGV4OiBX
ZWJDb3JlL3hibC9YQkxCaW5kaW5nTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveGJs
L1hCTEJpbmRpbmdNYW5hZ2VyLmgJKHJldmlzaW9uIDM1MzI0KQorKysgV2ViQ29yZS94YmwvWEJM
QmluZGluZ01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE0IEBACiAKICNp
ZiBFTkFCTEUoWEJMKQogCisjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJ3
dGYvSGFzaE1hcC5oIgogI2luY2x1ZGUgInd0Zi9WZWN0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisgICAgY2xhc3MgQ1NTU3R5bGVTaGVldDsKKyAgICBjbGFzcyBEb2N1bWVudDsKICAg
ICBjbGFzcyBFbGVtZW50OwogICAgIGNsYXNzIFhCTEJpbmRpbmc7CiAgICAgY2xhc3MgU3RyaW5n
OwpAQCAtNDksMTAgKzUyLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBV
c2VkIGJ5IEVsZW1lbnQgZGVzdHJ1Y3RvciB0byBwcmV2ZW50IGxlYWthZ2UuCiAgICAgICAgIHZv
aWQgcmVtb3ZlQWxsQmluZGluZ3MoRWxlbWVudCogYm91bmRFbGVtZW50KTsKKworICAgICAgICAv
LyBCaW5kaW5nIHN0eWxlIHNoZWV0cyBtYW5hZ2VtZW50LgorICAgICAgICB2b2lkIGFkZEJpbmRp
bmdTaGVldChEb2N1bWVudCosIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4pOworICAgICAgICB2
b2lkIHJlbW92ZUJpbmRpbmdTaGVldChEb2N1bWVudCosIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4pOworICAgICAgICB2b2lkIGNsZWFyQmluZGluZ1NoZWV0cyhEb2N1bWVudCopOworICAgICAg
ICBTdHlsZVNoZWV0VmVjdG9yKiBnZXRCaW5kaW5nU2hlZXRzKERvY3VtZW50Kik7CisKICAgICBw
cml2YXRlOgogICAgICAgICBYQkxCaW5kaW5nTWFuYWdlcigpOwogCiAgICAgICAgIEhhc2hNYXA8
RWxlbWVudCosIFZlY3RvcjxYQkxCaW5kaW5nPiogPiBtX2JpbmRpbmdzOworICAgICAgICBIYXNo
TWFwPERvY3VtZW50KiwgU3R5bGVTaGVldFZlY3Rvcio+IG1fYmluZGluZ1NoZWV0czsKICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNTUyNikKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDA4LTA4LTAyICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgY2FzZSBm
b3IgYnVnIDIwMjEyOiBbWEJMXSBBZGQgZnVsbCBzdXBwb3J0IGZvciBlbGVtZW50PSIiIGF0dGFj
aG1lbnQKKworICAgICAgICAqIGZhc3QveGJsL3hibC1jcmFzaC1pbmxpbmUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hibC94YmwtY3Jhc2gtaW5saW5lLnhodG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L3hibC94YmwtZG9jdW1lbnQtc2hlZXRzLW1vZGlmaWNhdGlvbi1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QveGJsL3hibC1kb2N1bWVudC1zaGVl
dHMtbW9kaWZpY2F0aW9uLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hibC94YmwtZWxl
bWVudC1iaW5kaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94YmwveGJs
LWVsZW1lbnQtYmluZGluZy54aHRtbDogQWRkZWQuCisKIDIwMDgtMDctMjggIEp1bGllbiBDaGFm
ZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
Yy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGJsL3hibC1jcmFzaC1pbmxpbmUtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveGJsL3hibC1jcmFzaC1pbmxpbmUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94YmwveGJsLWNy
YXNoLWlubGluZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVz
dCBjYXNlIGZvciBidWcgMjAyMTI6IEJ1ZyAyMDIxMjogW1hCTF0gQWRkIGZ1bGwgc3VwcG9ydCBm
b3IgZWxlbWVudD0iIiBhdHRhY2htZW50CisKK1RoaXMgdGVzdCBjYXNlIGlzIHBhc3NlZCBpZiBp
dCBkb2VzIG5vdCBjcmFzaC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGJsL3hibC1jcmFzaC1p
bmxpbmUueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94YmwveGJsLWNyYXNo
LWlubGluZS54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveGJsL3hibC1j
cmFzaC1pbmxpbmUueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0v
L1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RU
RC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCc+Cis8aGVhZD4KKyAgICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHRlc3QoKQorICAgIHsKKyAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAvLyBDb25zdHJ1Y3QgYW4g
WEJMRG9jdW1lbnQuCisgICAgICAgIHZhciB4YmxEb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlv
bi5jcmVhdGVEb2N1bWVudCgiaHR0cDovL3d3dy53My5vcmcvbnMveGJsIiwgbnVsbCwgbnVsbCk7
CisKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSB4YmwgYW5kIGJpbmRpbmcgZWxlbWVudC4KKyAgICAg
ICAgdmFyIHhibEVsZW1lbnQgPSB4YmxEb2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3Lncz
Lm9yZy9ucy94YmwiLCAieGJsIik7CisgICAgICAgIHZhciBiaW5kaW5nRWxlbWVudCA9IHhibERv
Yy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnL25zL3hibCIsICJiaW5kaW5nIik7
CisKKyAgICAgICAgLy8gU2V0IHRoZSAiZWxlbWVudCIgYXR0cmlidXRlLgorICAgICAgICBiaW5k
aW5nRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAiZWxlbWVudCIsICIqIik7CisKKyAgICAg
ICAgLy8gQXBwZW5kIHRoZSAyIG5vZGVzIGluIHRoZSBoaWVyYXJjaHkuCisgICAgICAgIHhibEVs
ZW1lbnQuYXBwZW5kQ2hpbGQoYmluZGluZ0VsZW1lbnQpOworICAgICAgICB4YmxEb2MuYXBwZW5k
Q2hpbGQoeGJsRWxlbWVudCk7CisKKyAgICAgICAgLy8gQ2hhbmdlIHRoZSAiZWxlbWVudCIgYXR0
cmlidXRlLgorICAgICAgICBiaW5kaW5nRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAiZWxl
bWVudCIsICIudGFyZ2V0Iik7CisgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkg
b25sb2FkPSJ0ZXN0KCkiPgorICAgIDxwPiBUZXN0IGNhc2UgZm9yIGJ1ZyA8YSBocmVmPSJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTIiPjIwMjEyPC9hPjogQnVn
IDIwMjEyOiBbWEJMXSBBZGQgZnVsbCBzdXBwb3J0IGZvciBlbGVtZW50PSIiIGF0dGFjaG1lbnQg
PC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiPiBUaGlzIHRlc3QgY2FzZSBpcyBwYXNzZWQgaWYg
aXQgZG9lcyBub3QgY3Jhc2guIDwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QveGJsL3hibC1kb2N1bWVudC1zaGVldHMtbW9kaWZpY2F0aW9uLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hibC94YmwtZG9jdW1lbnQtc2hlZXRz
LW1vZGlmaWNhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3hibC94YmwtZG9jdW1lbnQtc2hlZXRzLW1vZGlmaWNhdGlvbi1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorVGVzdCBjYXNlIGZvciBidWcgMjAyMTI6IEJ1ZyAy
MDIxMjogW1hCTF0gQWRkIGZ1bGwgc3VwcG9ydCBmb3IgZWxlbWVudD0iIiBhdHRhY2htZW50CisK
K1RoaXMgdGVzdCB2ZXJpZnkgdGhhdCBhZGRpbmcgWEJMIGJpbmRpbmcgZG9lcyBub3QgbW9kaWZ5
IHRoZSBkb2N1bWVudCdzIHNoZWV0cy4KKworWW91IHNob3VsZCBzZWUgIlBBU1NFRCIgb25jZS4K
KworUEFTU0VECkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hibC94YmwtZG9jdW1lbnQtc2hlZXRz
LW1vZGlmaWNhdGlvbi54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hibC94
YmwtZG9jdW1lbnQtc2hlZXRzLW1vZGlmaWNhdGlvbi54aHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QveGJsL3hibC1kb2N1bWVudC1zaGVldHMtbW9kaWZpY2F0aW9uLnhodG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAx
LjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgor
PGh0bWwgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnPgorPGhlYWQ+CisgICAg
PHNjcmlwdD4KKyAgICB2YXIgc2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTaGVldHM7CisKKyAgICBm
dW5jdGlvbiB0ZXN0KCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisK
KyAgICAgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScp
OworICAgICAgICB2YXIgY3VyU2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTaGVldHM7CisKKyAgICAg
ICAgaWYgKGN1clNoZWV0cy5sZW5ndGggIT0gc2hlZXRzLmxlbmd0aCkgeworICAgICAgICAgICAg
Y29uc29sZS5pbm5lckhUTUwgPSAiRkFJTEVEIChsZW5ndGggZG9lcyBub3QgbWF0Y2gpIjsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
ICZsdDsgc2hlZXRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2hlZXRzLml0ZW0o
aSkgIT09IGN1clNoZWV0cy5pdGVtKGkpKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5pbm5l
ckhUTUwgPSAiRkFJTEVEIChpdGVtICIgKyBpICsgIiBkb2VzIG5vdCBtYXRjaCkiOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb25z
b2xlLmlubmVySFRNTCA9ICJQQVNTRUQiOworICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5IG9ubG9hZD0idGVzdCgpIj4KKyAgICA8cD4gVGVzdCBjYXNlIGZvciBidWcgPGEgaHJl
Zj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjEyIj4yMDIxMjwv
YT46IEJ1ZyAyMDIxMjogW1hCTF0gQWRkIGZ1bGwgc3VwcG9ydCBmb3IgZWxlbWVudD0iIiBhdHRh
Y2htZW50IDwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0Ij4gVGhpcyB0ZXN0IHZlcmlmeSB0aGF0
IGFkZGluZyBYQkwgYmluZGluZyBkb2VzIG5vdCBtb2RpZnkgdGhlIGRvY3VtZW50J3Mgc2hlZXRz
LiA8L3A+CisgICAgPHA+IFlvdSBzaG91bGQgc2VlICJQQVNTRUQiIG9uY2UuIDwvcD4KKyAgICA8
cCBpZD0iY29uc29sZSI+IDwvcD4KKyAgICA8eGJsIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9u
cy94YmwiPgorICAgICAgPGJpbmRpbmcgZWxlbWVudD0iI2NvbnNvbGUiLz4KKyAgICAgIDxiaW5k
aW5nIGlkPSJiaW5kaW5nMiIgZWxlbWVudD0iLnAiLz4KKyAgICA8L3hibD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGJsL3hibC1lbGVtZW50LWJpbmRpbmctZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveGJsL3hibC1lbGVtZW50
LWJpbmRpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94
YmwveGJsLWVsZW1lbnQtYmluZGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNyBAQAorVGVzdCBjYXNlIGZvciBidWcgMjAyMTIgOiBbWEJMXSBBZGQgZnVsbCBzdXBwb3J0
IGZvciBlbGVtZW50PSIiIGF0dGFjaG1lbnQKKworWW91IHNob3VsZCBzZWUgIlBBU1NFRCIgb25j
ZS4KKworUEFTU0VECisKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94YmwveGJsLWVsZW1lbnQt
YmluZGluZy54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hibC94YmwtZWxl
bWVudC1iaW5kaW5nLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94Ymwv
eGJsLWVsZW1lbnQtYmluZGluZy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAor
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDov
L3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9J2h0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnIHhtbG5zOnhodG1sPSdodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sJz4KKzxoZWFkPgorICAgIDxzY3JpcHQ+CisgICAgZnVuY3Rpb24gdGVzdEJp
bmRpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAg
ICB2YXIgdGFyZ2V0MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQxJyk7CisgICAg
ICAgIHZhciB0YXJnZXQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldDInKTsKKyAg
ICAgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOwor
ICAgICAgICB2YXIgYmluZGluZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaW5kaW5nJyk7
CisKKyAgICAgICAgLy8gQmluZGluZyBhdHRhY2hlZCB3aXRoIGVsZW1lbnQ9IiIgYXJlIGFkZGVk
IHdpdGggdGhlIGRvY3VtZW50IHVybAorICAgICAgICAvLyBhbmQgYXBwZW5kaW5nICIjIiBhbmQg
dGhlIGVsZW1lbnQgSUQuCisgICAgICAgIHZhciB1cmwgPSBkb2N1bWVudC5VUkwgKyAiI2JpbmRp
bmciOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoIXRhcmdldDEuaGFzQmluZGlu
Zyh1cmwpKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5pbm5lckhUTUwgPSAiRkFJTEVEICgx
c3QpIjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFNldCBhbiBpbnZhbGlkIHNlbGVjdG9yLgorICAgICAgICAgICAgYmluZGluZy5zZXRB
dHRyaWJ1dGVOUyhudWxsLCAiZWxlbWVudCIsICIjdGFyZ2V0MiwiKTsKKyAgICAgICAgICAgIGlm
ICh0YXJnZXQxLmhhc0JpbmRpbmcodXJsKSB8fCB0YXJnZXQyLmhhc0JpbmRpbmcodXJsKSkgewor
ICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5uZXJIVE1MID0gIkZBSUxFRCAoMm5kKSI7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOb3cg
c2V0IGEgZ29vZCBzZWxlY3Rvci4KKyAgICAgICAgICAgIGJpbmRpbmcuc2V0QXR0cmlidXRlTlMo
bnVsbCwgImVsZW1lbnQiLCAiI3RhcmdldDIiKTsKKyAgICAgICAgICAgIGlmICghdGFyZ2V0MS5o
YXNCaW5kaW5nKHVybCkgJmFtcDsmYW1wOyB0YXJnZXQyLmhhc0JpbmRpbmcodXJsKSkKKyAgICAg
ICAgICAgICAgICBjb25zb2xlLmlubmVySFRNTCA9ICJQQVNTRUQiOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5uZXJIVE1MID0gIkZBSUxFRCAoM3JkKSI7Cisg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuaW5uZXJIVE1MID0gIkZB
SUxFRCAoZXhjZXB0aW9uIHRocm93bikiOworICAgICAgICB9CisgICAgfQorICAgIDwvc2NyaXB0
PgorCisgICAgPCEtLSBFbXB0eSBiaW5kaW5nIC0tPgorICAgICA8eGJsIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy9ucy94YmwiPgorICAgICAgICA8YmluZGluZyBpZD0iYmluZGluZyIgZWxlbWVu
dD0iLnRhcmdldCIvPgorICAgIDwveGJsPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0Qmlu
ZGluZygpIj4KKyAgICA8cD4gVGVzdCBjYXNlIGZvciBidWcgPGEgaHJlZj0iaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjEyIj4gMjAyMTIgPC9hPjogW1hCTF0gQWRk
IGZ1bGwgc3VwcG9ydCBmb3IgZWxlbWVudD0iIiBhdHRhY2htZW50PC9wPgorICAgIDxwPiBZb3Ug
c2hvdWxkIHNlZSAiUEFTU0VEIiBvbmNlLiA8L3A+CisgICAgPHAgaWQ9ImNvbnNvbGUiPiA8L3A+
CisgICAgPHNwYW4gaWQ9InRhcmdldDEiIGNsYXNzPSJ0YXJnZXQiPiA8L3NwYW4+CisgICAgPHNw
YW4gaWQ9InRhcmdldDIiPiA8L3NwYW4+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="9998"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>