<?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>19917</bug_id>
          
          <creation_ts>2008-07-06 14:20:33 -0700</creation_ts>
          <short_desc>[XBL] We need the ability to manage bindings</short_desc>
          <delta_ts>2008-07-24 04:03:00 -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>85284</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-07-06 14:20:33 -0700</bug_when>
    <thetext>Currently we cannot manage bindings.
We need to re-enable the XBLBindingManager and add some support methods to manage the bindings. The specification provide the ElementXBL interface to control the bindings from JavaScript.

Patch will follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85285</commentid>
    <comment_count>1</comment_count>
      <attachid>22119</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-07-06 14:22:42 -0700</bug_when>
    <thetext>Created attachment 22119
Make XBLBindingManager global, add most of ElementXBL interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85295</commentid>
    <comment_count>2</comment_count>
      <attachid>22119</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-06 18:06:56 -0700</bug_when>
    <thetext>Comment on attachment 22119
Make XBLBindingManager global, add most of ElementXBL interface

Why would a binding manager be global?  I think per-document was the right way to go.  Otherwise how do you load two different pages in two different tabs with same-named bindings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85310</commentid>
    <comment_count>3</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-07-07 01:00:53 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 22119 [edit])
&gt; Why would a binding manager be global?  I think per-document was the right way
&gt; to go.  Otherwise how do you load two different pages in two different tabs
&gt; with same-named bindings?
&gt; 

It will not matter whether the binding manager is global: a binding links a bound element with a &lt;binding&gt; element, the name is only to fetch the resource.
We index the bindings&apos; list with the bound element in the XBLBindingManager. This ensure that it will be different per-document.

Furthermore, having a per-document binding manager is a restriction that is not on the specification. For example, with a per-document binding manager, you will not be able to do the following (which is right):

var element = document.createElement(&apos;p&apos;);
element.attachBinding(&apos;http://example.com&apos;);
document.getElementById(&apos;foobar&apos;).appendChild(element);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86748</commentid>
    <comment_count>4</comment_count>
      <attachid>22119</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-07-23 12:26:58 -0700</bug_when>
    <thetext>Comment on attachment 22119
Make XBLBindingManager global, add most of ElementXBL interface

[Setting the review flag again]

As discussed with David Hyatt, a global manager is the right choice.
There may be a performance hit as we need to do a table lookup but we will postpone it for later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86770</commentid>
    <comment_count>5</comment_count>
      <attachid>22119</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-23 13:31:02 -0700</bug_when>
    <thetext>Comment on attachment 22119
Make XBLBindingManager global, add most of ElementXBL interface

static XBLBindingManager* manager;
 37 
 38 XBLBindingManager* XBLBindingManager::sharedInstance()
 39 {
 40     if (!manager)
 41         manager = new XBLBindingManager();
 42 
 43     return manager;
 44 }
 

should probably just chagne to:

sharedInstance()
{
   static XBLBindingManager manager;
   return &amp;manager;
}

Um... just fix it:
 57     // FIXME: we can add the same binding several times.
Seems like it would be easy to walk the bindings.

Why do these XBLBindings need to be new&apos;d?  Can&apos;d you just use:
Vector&lt;XBLBinding&gt; ?

Also, as much as I hate DeprecatedValueList, I think we might want to do this with a list structure.  I&apos;m not sure how fast we need removes to be... but with a vector they&apos;ll be quite slow.
I see these as quite similar to Event listeners.

Overall, I think this is fine, but I think that this should at least be:
Vector&lt;XBLBinding&gt;
instead of:
Vector&lt;XBLBinding*&gt;
for easier memory management.

You could also just use:
HashMap&lt;String, Element*&gt;

Why wouldn&apos;t this just be:
HashMap&lt;Element*, Vector&lt;std:pair&lt;String, Element*&gt; &gt; &gt;

Yeah, this just seems a bit over-designed, when all you need is a simple hash to map from elements to a list of uris.  XBLBinding could/should probably just be a private class on XBLbinding manager.

we&apos;ll talk about this over irc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86775</commentid>
    <comment_count>6</comment_count>
      <attachid>22119</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-23 14:00:33 -0700</bug_when>
    <thetext>Comment on attachment 22119
Make XBLBindingManager global, add most of ElementXBL interface

On second thought, I don&apos;t think this is quite right, but I think you&apos;ll have an easier time fixing it once you&apos;ve done more of the actual meat.  This boiler plate stuff can be reworked later as needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86837</commentid>
    <comment_count>7</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-07-24 04:03:00 -0700</bug_when>
    <thetext>Committed in r35324 with the requested changes (Vector&lt;XBLBinding*&gt; -&gt; Vector&lt;XBLBinding&gt; and XBLBindingManager defined in sharedInstance). I left the FIXME about adding the same binding multiple times as the spec does not prevent us to but we may limit that later on.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22119</attachid>
            <date>2008-07-06 14:22:42 -0700</date>
            <delta_ts>2008-07-23 14:00:33 -0700</delta_ts>
            <desc>Make XBLBindingManager global, add most of ElementXBL interface</desc>
            <filename>XBLBindingManager.patch</filename>
            <type>text/plain</type>
            <size>25646</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNTAyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDgtMDctMDYgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW1wbGVtZW50IEVsZW1lbnRYQkwgaW50ZXJmYWNlLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06IENvbXBpbGF0aW9uIGluZm9ybWF0aW9uLgorICAgICAgICAqIFdlYkNvcmUucHJv
OiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERp
dHRvLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6RG9jdW1lbnQpOiBSZW1vdmUgcGVyLWRvY3VtZW50CisgICAgICAgIFhCTEJpbmRpbmdN
YW5hZ2VyIGluc3RhbmNlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCk6
IERpdHRvLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp+RWxlbWVudCk6IFJlbW92
ZSBhc3NvY2lhdGVkIGJpbmRpbmdzCisgICAgICAgIHRvIGF2b2lkIGxlYWtzLgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6YWRkQmluZGluZyk6IEVsZW1lbnRYQkwgaW50ZXJmYWNlIHRvIG1h
bmFnZQorICAgICAgICBiaW5kaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92
ZUJpbmRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhhc0JpbmRpbmcp
OiBEaXR0by4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOiBBZGQgRWxlbWVudFhCTCBpbnRlcmZh
Y2UuCisgICAgICAgICogZG9tL0VsZW1lbnQuaWRsOiBEaXR0by4KKyAgICAgICAgKiB4YmwvWEJM
QmluZGluZy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhCTEJpbmRpbmc6OlhCTEJpbmRp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6WEJMQmluZGluZzo6dXJpKToKKyAgICAgICAgKiB4Ymwv
WEJMQmluZGluZ01hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhCTEJpbmRp
bmdNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpYQkxCaW5kaW5n
TWFuYWdlcjo6WEJMQmluZGluZ01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6WEJMQmluZGlu
Z01hbmFnZXI6OmFkZEJpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WEJMQmluZGluZ01hbmFn
ZXI6OnJlbW92ZUJpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WEJMQmluZGluZ01hbmFnZXI6
Omhhc0JpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WEJMQmluZGluZ01hbmFnZXI6OnJlbW92
ZUFsbEJpbmRpbmdzKTogVXNlZCBpbiBFbGVtZW50CisgICAgICAgIGRlc3RydWN0b3IgdG8gcmVt
b3ZlIGFsbCB0aGUgYmluZGluZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBFbGVtZW50LgorCisgICAg
ICAgICogeGJsL1hCTEJpbmRpbmdNYW5hZ2VyLmg6IEFkZGVkLgorCiAyMDA4LTA2LTI4ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEVyaWMuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM1MDI0KQorKysgV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQzNSwxOSArMTQzNSw2IEBAIGVuZGlmICMgRU5E
IEVOQUJMRV9YUEFUSAogaWYgRU5BQkxFX1hCTAogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQg
Kz0gRU5BQkxFX1hCTD0xCiAKLXdlYmNvcmVfY3BwZmxhZ3MgKz0gLURFTkFCTEVfWEJMPTEKLQot
d2ViY29yZV9zb3VyY2VzICs9IFwKLSAgICBXZWJDb3JlL2xvYWRlci9DYWNoZWRYQkxEb2N1bWVu
dC5jcHAKLQotZW5kaWYgIyBFTkQgRU5BQkxFX1hCTAotCi0jIC0tLS0KLSMgWEJMIFN1cHBvcnQK
LSMgLS0tLQotaWYgRU5BQkxFX1hCTAotRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5B
QkxFX1hCTD0xCi0KIHdlYmNvcmVfY3BwZmxhZ3MgKz0gLURFTkFCTEVfWEJMPTEgXAogCS1JXCQo
dG9wX3NyY2RpcikvV2ViQ29yZS94YmwKIApAQCAtMTQ1Nyw2ICsxNDQ0LDcgQEAgd2ViY29yZV9i
dWlsdF9zb3VyY2VzICs9IFwgCiAKIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkWEJMRG9jdW1lbnQuY3BwIFwKKwlXZWJDb3JlL3hibC9YQkxCaW5kaW5nTWFuYWdl
ci5jcHAgXAogCVdlYkNvcmUveGJsL1hCTFhCTEVsZW1lbnQuY3BwCiAKIGVuZGlmICMgRU5EIEVO
QUJMRV9YQkwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMzUwMjQpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjM2LDYgKzEyMzYsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfWEJMPTEpIHsKIAogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBsb2FkZXIvQ2FjaGVkWEJM
RG9jdW1lbnQuY3BwIFwKKyAgICAgICAgeGJsL1hCTEJpbmRpbmdNYW5hZ2VyLmNwcCBcCiAgICAg
ICAgIHhibC9YQkxYQkxFbGVtZW50LmNwcAogCiAgICAgICAgIFhCTF9OQU1FUyA9ICQkUFdEL3hi
bC94Ymx0YWdzLmluCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMzUwMjQpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgyMyw2ICsxODIzLDkgQEAKIAkJOTU5NjlC
NDgwREQ4RDIxQjAwRjY1M0VFIC8qIEphdmFTY3JpcHRQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTU5NjlCNDQwREQ4RDIxQjAwRjY1
M0VFIC8qIEphdmFTY3JpcHRQcm9maWxlTm9kZS5oICovOyB9OwogCQk5NTk2OUI0OTBERDhEMjFC
MDBGNjUzRUUgLyogSmF2YVNjcmlwdFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTU5NjlCNDUwREQ4RDIxQjAwRjY1M0VFIC8qIEphdmFT
Y3JpcHRQcm9maWxlLmNwcCAqLzsgfTsKIAkJOTU5NjlCNEEwREQ4RDIxQjAwRjY1M0VFIC8qIEph
dmFTY3JpcHRQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NTk2OUI0NjBERDhEMjFCMDBGNjUzRUUgLyogSmF2YVNjcmlwdFByb2ZpbGUuaCAq
LzsgfTsKKwkJQTFFODE2MDgwRTIxNURFQjAwRDk1QjdDIC8qIFhCTEJpbmRpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExRTgxNjA1MEUyMTVERUIw
MEQ5NUI3QyAvKiBYQkxCaW5kaW5nLmggKi87IH07CisJCUExRTgxNjA5MEUyMTVERUIwMEQ5NUI3
QyAvKiBYQkxCaW5kaW5nTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMUU4MTYwNjBFMjE1REVCMDBEOTVCN0MgLyogWEJMQmluZGluZ01h
bmFnZXIuY3BwICovOyB9OworCQlBMUU4MTYwQTBFMjE1REVCMDBEOTVCN0MgLyogWEJMQmluZGlu
Z01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExRTgxNjA3MEUyMTVERUIwMEQ5NUI3QyAvKiBYQkxCaW5kaW5nTWFuYWdlci5oICovOyB9Owog
CQlBNzE4NzYwRTBCMkExMjAxMDBBMTZFQ0UgLyogRHJhZ0FjdGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTg3NjBEMEIyQTEyMDEwMEExNkVD
RSAvKiBEcmFnQWN0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3MTg3ODkwMEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTg3
ODhGMEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSAqLzsgfTsKIAkJQTcz
NTJDMTkwQjFCQjg5RDAwQTk4NkQwIC8qIFJlbmRlclNWR0Jsb2NrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MzUyQzE3MEIxQkI4OUQwMEE5ODZE
MCAvKiBSZW5kZXJTVkdCbG9jay5jcHAgKi87IH07CkBAIC00MDM4LDcgKzQwNDEsNiBAQAogCQlF
REVDOTgwMzBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdG
IC8qIFdlYkNvcmVQcmVmaXguaCAqLzsgfTsKIAkJRjkxNkM0OEQwREI1MTBGODAwNzZDRDgzIC8q
IEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5MTZDNDhCMERCNTEwRjgwMDc2Q0Q4MyAvKiBKU1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHAgKi87IH07CiAJCUY5MTZDNDhFMERCNTEwRjgw
MDc2Q0Q4MyAvKiBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjkxNkM0OEMwREI1MTBGODAwNzZDRDgz
IC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi87IH07Ci0JCUY5RjBFRDdBMERC
NTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5RjBFRDc3MERCNTBDQTIwMEQx
NkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJRjlDNjc1NUYw
REVDNzZBNTAwOEQwQzJGIC8qIFhCTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5QzY3NTVCMERFQzc2QTUwMDhEMEMyRiAvKiBYQkxFbGVt
ZW50LmggKi87IH07CiAJCUY5QzY3NTYxMERFQzc2QTUwMDhEMEMyRiAvKiBYQkxYQkxFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5QzY3
NTVEMERFQzc2QTUwMDhEMEMyRiAvKiBYQkxYQkxFbGVtZW50LmNwcCAqLzsgfTsKIAkJRjlDNjc1
NjIwREVDNzZBNTAwOEQwQzJGIC8qIFhCTFhCTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5QzY3NTVFMERFQzc2QTUwMDhEMEMyRiAvKiBY
QkxYQkxFbGVtZW50LmggKi87IH07CkBAIC00MDQ2LDYgKzQwNDgsNyBAQAogCQlGOUM2NzYwQjBE
RUM3OTAzMDA4RDBDMkYgLyogWEJMTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjlDNjc2MDkwREVDNzkwMzAwOEQwQzJGIC8qIFhCTE5hbWVz
LmNwcCAqLzsgfTsKIAkJRjlDNjc2MEQwREVDN0Q0QzAwOEQwQzJGIC8qIFhCTEVsZW1lbnRGYWN0
b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGOUM2
NzYwQzBERUM3RDRDMDA4RDBDMkYgLyogWEJMRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJRjlD
Njc2MEYwREVDN0Q3QTAwOEQwQzJGIC8qIFhCTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGOUM2NzYwRTBERUM3RDdBMDA4RDBDMkYgLyogWEJM
TmFtZXMuaCAqLzsgfTsKKwkJRjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjlGMEVENzcwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudC5oICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC02MjkxLDYgKzYyOTQsOSBA
QAogCQk5NTk2OUI0NDBERDhEMjFCMDBGNjUzRUUgLyogSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHRQcm9maWxlTm9kZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTk2OUI0NTBERDhEMjFCMDBGNjUzRUUg
LyogSmF2YVNjcmlwdFByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSmF2YVNjcmlwdFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5NTk2OUI0NjBERDhEMjFCMDBGNjUzRUUgLyogSmF2YVNjcmlwdFByb2ZpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVNjcmlwdFByb2ZpbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTFFODE2MDUwRTIxNURFQjAwRDk1QjdDIC8qIFhCTEJpbmRp
bmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWEJMQmluZGluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUU4MTYwNjBFMjE1REVCMDBEOTVCN0MgLyogWEJM
QmluZGluZ01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
WEJMQmluZGluZ01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUU4
MTYwNzBFMjE1REVCMDBEOTVCN0MgLyogWEJMQmluZGluZ01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gWEJMQmluZGluZ01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYWdBY3Rpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3ODhGMEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29u
dHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERy
YWdDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzM1MkMx
NzBCMUJCODlEMDBBOTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTg0NjMsMTYgKzg0NjksMTYgQEAKIAkJRjgyMTYyOTkwMjlGNEZCNTAx
MDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gSmF2
YVNjcmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQlGOTE2QzQ4QjBEQjUxMEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjkxNkM0OEMwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGOUYwRUQ3NzBEQjUw
Q0EyMDBEMTZEQjkgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjlGMEVENzgwREI1MENBMjAwRDE2REI5IC8qIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZFNDlFRjk3MERDNTE0NjIwMDQyNjZFMSAvKiBEYXNoYm9hcmRTdXBwb3J0Q1NTUHJvcGVy
dHlOYW1lcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEYXNoYm9hcmRTdXBwb3J0Q1NTUHJv
cGVydHlOYW1lcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjlDNjc1NUIwREVD
NzZBNTAwOEQwQzJGIC8qIFhCTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFhCTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjlDNjc1
NUQwREVDNzZBNTAwOEQwQzJGIC8qIFhCTFhCTEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhCTFhCTEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGOUM2NzU1RTBERUM3NkE1MDA4RDBDMkYgLyogWEJMWEJMRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWEJMWEJMRWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGOUM2NzYwODBERUM3OTAzMDA4RDBDMkYgLyogWEJM
RWxlbWVudEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFhCTEVsZW1lbnRGYWN0b3J5LmNwcDsgcGF0aCA9IFhCTEVsZW1lbnRGYWN0b3J5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjlDNjc2MEMwREVDN0Q0QzAwOEQwQzJGIC8qIFhC
TEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYQkxF
bGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGOUM2NzYwODBE
RUM3OTAzMDA4RDBDMkYgLyogWEJMRWxlbWVudEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhCTEVsZW1lbnRGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjlDNjc2MDkwREVDNzkwMzAwOEQwQzJGIC8qIFhCTE5hbWVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYQkxOYW1lcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY5QzY3NjBDMERFQzdENEMwMDhEMEMyRiAvKiBY
QkxFbGVtZW50RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWEJM
RWxlbWVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjlDNjc2MEUw
REVDN0Q3QTAwOEQwQzJGIC8qIFhCTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBYQkxOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGOUYwRUQ3
NzBEQjUwQ0EyMDBEMTZEQjkgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjlGMEVENzgwREI1MENBMjAwRDE2REI5
IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFNDlFRjk3MERDNTE0NjIwMDQyNjZFMSAvKiBEYXNoYm9hcmRTdXBwb3J0Q1NT
UHJvcGVydHlOYW1lcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEYXNoYm9hcmRTdXBwb3J0
Q1NTUHJvcGVydHlOYW1lcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTMyOTEsNiArMTMyOTcsOSBAQAogCQlGOUM2NzU1QTBERUM3
NkE1MDA4RDBDMkYgLyogeGJsICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlBMUU4MTYwNTBFMjE1REVCMDBEOTVCN0MgLyogWEJMQmluZGluZy5oICovLAor
CQkJCUExRTgxNjA2MEUyMTVERUIwMEQ5NUI3QyAvKiBYQkxCaW5kaW5nTWFuYWdlci5jcHAgKi8s
CisJCQkJQTFFODE2MDcwRTIxNURFQjAwRDk1QjdDIC8qIFhCTEJpbmRpbmdNYW5hZ2VyLmggKi8s
CiAJCQkJRjlDNjc1NUIwREVDNzZBNTAwOEQwQzJGIC8qIFhCTEVsZW1lbnQuaCAqLywKIAkJCQlG
OUM2NzU1RDBERUM3NkE1MDA4RDBDMkYgLyogWEJMWEJMRWxlbWVudC5jcHAgKi8sCiAJCQkJRjlD
Njc1NUUwREVDNzZBNTAwOEQwQzJGIC8qIFhCTFhCTEVsZW1lbnQuaCAqLywKQEAgLTE1MzA0LDYg
KzE1MzEzLDggQEAKIAkJCQkzNzg0QzM0QjBFMTFBQTM0MDA3RDhENDggLyogRm9udFRyYWl0c01h
c2suaCBpbiBIZWFkZXJzICovLAogCQkJCUY5QzY3NjBEMERFQzdENEMwMDhEMEMyRiAvKiBYQkxF
bGVtZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjlDNjc2MEYwREVDN0Q3QTAwOEQw
QzJGIC8qIFhCTE5hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMUU4MTYwODBFMjE1REVCMDBE
OTVCN0MgLyogWEJMQmluZGluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTFFODE2MEEwRTIxNURF
QjAwRDk1QjdDIC8qIFhCTEJpbmRpbmdNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3MDc5
LDYgKzE3MDkwLDcgQEAKIAkJCQlGOUM2NzU2MTBERUM3NkE1MDA4RDBDMkYgLyogWEJMWEJMRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGOUM2NzYwQTBERUM3OTAzMDA4RDBDMkYgLyog
WEJMRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjlDNjc2MEIwREVDNzkw
MzAwOEQwQzJGIC8qIFhCTE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUExRTgxNjA5MEUy
MTVERUIwMEQ5NUI3QyAvKiBYQkxCaW5kaW5nTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHJldmlzaW9uIDM1MDI0KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsOSArMjcyLDYgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZy
YW1lKiBmcmFtZSwgYm9vbCBpcwogI2VuZGlmCiAgICAgLCBtX3htbFZlcnNpb24oIjEuMCIpCiAg
ICAgLCBtX3htbFN0YW5kYWxvbmUoZmFsc2UpCi0jaWYgRU5BQkxFKERFUFJFQ0FURURfWEJMKQot
ICAgICwgbV9iaW5kaW5nTWFuYWdlcihuZXcgWEJMQmluZGluZ01hbmFnZXIodGhpcykpCi0jZW5k
aWYKICAgICAsIG1fc2F2ZWRSZW5kZXJlcigwKQogICAgICwgbV9zZWN1cmVGb3JtcygwKQogICAg
ICwgbV9kZXNpZ25Nb2RlKGluaGVyaXQpCkBAIC00MjgsMTAgKzQyNSw2IEBAIERvY3VtZW50Ojp+
RG9jdW1lbnQoKQogICAgIHhtbEZyZWVEb2MoKHhtbERvY1B0ciltX3RyYW5zZm9ybVNvdXJjZSk7
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShERVBSRUNBVEVEX1hCTCkKLSAgICBkZWxldGUgbV9iaW5k
aW5nTWFuYWdlcjsKLSNlbmRpZgotCiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fbWFya2Vycyk7CiAK
ICAgICBjbGVhckFYT2JqZWN0Q2FjaGUoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzUwMjQpCisr
KyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTcsMTEgKzY5Nyw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KERvY3VtZW50
KiBkb2MpIHsgbV90cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCA9IGRvYzsgfQogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoREVQUkVDQVRFRF9YQkwpCi0gICAgLy8gWEJMIG1ldGhvZHMKLSAgICBYQkxCaW5k
aW5nTWFuYWdlciogYmluZGluZ01hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX2JpbmRpbmdNYW5h
Z2VyOyB9Ci0jZW5kaWYKLQogICAgIHZvaWQgaW5jRE9NVHJlZVZlcnNpb24oKSB7ICsrbV9kb210
cmVlX3ZlcnNpb247IH0KICAgICB1bnNpZ25lZCBkb21UcmVlVmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZG9tdHJlZV92ZXJzaW9uOyB9CiAKQEAgLTg4NiwxMCArODgxLDYgQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQ7CiAjZW5kaWYK
IAotI2lmIEVOQUJMRShERVBSRUNBVEVEX1hCTCkKLSAgICBYQkxCaW5kaW5nTWFuYWdlciogbV9i
aW5kaW5nTWFuYWdlcjsgLy8gVGhlIGFjY2VzcyBwb2ludCB0aHJvdWdoIHdoaWNoIGRvY3VtZW50
cyBhbmQgZWxlbWVudHMgY29tbXVuaWNhdGUgd2l0aCBYQkwuCi0jZW5kaWYKLSAgICAKICAgICB0
eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEhUTUxNYXBFbGVtZW50Kj4gSW1hZ2VN
YXBzQnlOYW1lOwogICAgIEltYWdlTWFwc0J5TmFtZSBtX2ltYWdlTWFwc0J5TmFtZTsKIApJbmRl
eDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAJKHJldmlzaW9uIDM1MDI0KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgog
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJYQkxCaW5kaW5nTWFuYWdlci5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExNyw2ICsxMTgsMTMgQEAgRWxlbWVudDo6fkVs
ZW1lbnQoKQogICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKICAgICAgICAgZGF0YU1hcC5yZW1v
dmUoaXQpOwogICAgIH0KKworI2lmIEVOQUJMRShYQkwpCisgICAgLy8gQ2xlYW4gYmluZGluZ3MK
KyAgICAvLyBGSVhNRTogd2UgbmVlZCBhIGZsYWcgdG8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGxz
LgorICAgIFhCTEJpbmRpbmdNYW5hZ2VyKiBtYW5hZ2VyID0gWEJMQmluZGluZ01hbmFnZXI6OnNo
YXJlZEluc3RhbmNlKCk7CisgICAgbWFuYWdlci0+cmVtb3ZlQWxsQmluZGluZ3ModGhpcyk7Cisj
ZW5kaWYKIH0KIAogaW5saW5lIEVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6cmFyZURhdGEoKQpA
QCAtMTI4Nyw0ICsxMjk1LDMwIEBAIHVuc2lnbmVkIEVsZW1lbnQ6OmNoaWxkRWxlbWVudENvdW50
KCkgY28KICAgICByZXR1cm4gY291bnQ7CiB9CiAKKyNpZiBFTkFCTEUoWEJMKQordm9pZCBFbGVt
ZW50OjphZGRCaW5kaW5nKGNvbnN0IFN0cmluZyYgdXJpLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIWlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFV
RVNUX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFhCTEJpbmRpbmdNYW5hZ2Vy
KiBtYW5hZ2VyID0gWEJMQmluZGluZ01hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCk7CisgICAgbWFu
YWdlci0+YWRkQmluZGluZyh0aGlzLCB1cmkpOworfQorCit2b2lkIEVsZW1lbnQ6OnJlbW92ZUJp
bmRpbmcoY29uc3QgU3RyaW5nJiB1cmkpCit7CisgICAgWEJMQmluZGluZ01hbmFnZXIqIG1hbmFn
ZXIgPSBYQkxCaW5kaW5nTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKTsKKyAgICBtYW5hZ2VyLT5y
ZW1vdmVCaW5kaW5nKHRoaXMsIHVyaSk7Cit9CisKK2Jvb2wgRWxlbWVudDo6aGFzQmluZGluZyhj
b25zdCBTdHJpbmcmIHVyaSkKK3sKKyAgICBYQkxCaW5kaW5nTWFuYWdlciogbWFuYWdlciA9IFhC
TEJpbmRpbmdNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpOworICAgIHJldHVybiBtYW5hZ2VyLT5o
YXNCaW5kaW5nKHRoaXMsIHVyaSk7Cit9CisKKyNlbmRpZgorCiB9CkluZGV4OiBXZWJDb3JlL2Rv
bS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lv
biAzNTAyNCkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3
LDYgKzE5NywxMiBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogbmV4dEVsZW1lbnRTaWJsaW5nKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgY2hpbGRFbGVtZW50Q291bnQoKSBjb25zdDsKIAorI2lmIEVO
QUJMRShYQkwpCisgICAgdm9pZCBhZGRCaW5kaW5nKGNvbnN0IFN0cmluZyYgdXJpLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCByZW1vdmVCaW5kaW5nKGNvbnN0IFN0cmluZyYgdXJpKTsKKyAg
ICBib29sIGhhc0JpbmRpbmcoY29uc3QgU3RyaW5nJiB1cmkpOworI2VuZGlmCisKIHByaXZhdGU6
CiAgICAgRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSgpOwogICAgIGNvbnN0IEVsZW1lbnRSYXJl
RGF0YSogcmFyZURhdGEoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCShyZXZpc2lvbiAzNTAyNCkKKysr
IFdlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDE0
IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBp
bm5lclRleHQ7CiAjZW5kaWYKIAorI2lmIEVOQUJMRV9YQkwKKyAgICAgICAgLy8gRWxlbWVudFhC
TCBpbnRlcmZhY2UKKyAgICAgICAgdm9pZCBhZGRCaW5kaW5nKGluIERPTVN0cmluZyBiaW5kaW5n
VVJJKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgdm9pZCBy
ZW1vdmVCaW5kaW5nKGluIERPTVN0cmluZyBiaW5kaW5nVVJJKTsKKyAgICAgICAgYm9vbGVhbiBo
YXNCaW5kaW5nKGluIERPTVN0cmluZyBiaW5kaW5nVVJJKTsKKyNlbmRpZgogICAgIH07CiAKIH0K
SW5kZXg6IFdlYkNvcmUveGJsL1hCTEJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hi
bC9YQkxCaW5kaW5nLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hibC9YQkxCaW5kaW5nLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgSnVsaWVu
IENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBYQkxCaW5kaW5nX2gKKyNkZWZpbmUgWEJMQmluZGluZ19oCisKKyNp
ZiBFTkFCTEUoWEJMKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisgICAgY2xhc3MgWEJMQmluZGluZyB7CisgICAgcHVibGljOgorICAgICAg
ICBYQkxCaW5kaW5nKFN0cmluZyYgdXJpKQorICAgICAgICAgICAgOiBtX3VyaSh1cmkpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB1cmkoKSB7IHJldHVybiBtX3VyaTsg
fQorICAgIHByaXZhdGU6CisgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSB0aGUgPGJp
bmRpbmc+IGVsZW1lbnQgdG9vLgorICAgICAgICBTdHJpbmcmIG1fdXJpOworICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShYQkwpCisKKyNlbmRpZiAv
LyBYQkxCaW5kaW5nTWFuYWdlcl9oCkluZGV4OiBXZWJDb3JlL3hibC9YQkxCaW5kaW5nTWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94YmwvWEJMQmluZGluZ01hbmFnZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS94YmwvWEJMQmluZGluZ01hbmFnZXIuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIEp1bGllbiBDaGFmZnJh
aXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYQkxCaW5kaW5nTWFuYWdlci5oIgorCisj
aWYgRU5BQkxFKFhCTCkKKworI2luY2x1ZGUgIlhCTEJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgWEJMQmluZGluZ01hbmFnZXIqIG1hbmFnZXI7CisKK1hCTEJpbmRp
bmdNYW5hZ2VyKiBYQkxCaW5kaW5nTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKQoreworICAgIGlm
ICghbWFuYWdlcikKKyAgICAgICAgbWFuYWdlciA9IG5ldyBYQkxCaW5kaW5nTWFuYWdlcigpOwor
CisgICAgcmV0dXJuIG1hbmFnZXI7Cit9CisKK1hCTEJpbmRpbmdNYW5hZ2VyOjpYQkxCaW5kaW5n
TWFuYWdlcigpCit7Cit9CisKK3ZvaWQgWEJMQmluZGluZ01hbmFnZXI6OmFkZEJpbmRpbmcoRWxl
bWVudCogYm91bmRFbGVtZW50LCBjb25zdCBTdHJpbmcmIHVyaSkKK3sKKyAgICBWZWN0b3I8WEJM
QmluZGluZyo+KiBlbGVtZW50QmluZGluZ3MgPSBtX2JpbmRpbmdzLmdldChib3VuZEVsZW1lbnQp
OworICAgIGlmICghZWxlbWVudEJpbmRpbmdzKSB7CisgICAgICAgIGVsZW1lbnRCaW5kaW5ncyA9
IG5ldyBWZWN0b3I8WEJMQmluZGluZyo+KCk7CisgICAgICAgIG1fYmluZGluZ3MuYWRkKGJvdW5k
RWxlbWVudCwgZWxlbWVudEJpbmRpbmdzKTsKKyAgICB9CisgICAgLy8gRklYTUU6IHdlIGNhbiBh
ZGQgdGhlIHNhbWUgYmluZGluZyBzZXZlcmFsIHRpbWVzLgorICAgIGVsZW1lbnRCaW5kaW5ncy0+
YXBwZW5kKG5ldyBYQkxCaW5kaW5nKGNvbnN0X2Nhc3Q8U3RyaW5nJj4odXJpKSkpOworfQorCit2
b2lkIFhCTEJpbmRpbmdNYW5hZ2VyOjpyZW1vdmVCaW5kaW5nKEVsZW1lbnQqIGJvdW5kRWxlbWVu
dCwgY29uc3QgU3RyaW5nJiB1cmkpCit7CisgICAgVmVjdG9yPFhCTEJpbmRpbmcqPiogZWxlbWVu
dEJpbmRpbmdzID0gbV9iaW5kaW5ncy5nZXQoYm91bmRFbGVtZW50KTsKKyAgICBpZiAoZWxlbWVu
dEJpbmRpbmdzKSB7CisgICAgICAgIGZvciAoVmVjdG9yPFhCTEJpbmRpbmcqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBlbGVtZW50QmluZGluZ3MtPmJlZ2luKCk7IGl0ICE9IGVsZW1lbnRCaW5kaW5n
cy0+ZW5kKCk7ICsraXQpCisgICAgICAgICAgICBpZiAoKCppdCktPnVyaSgpID09IHVyaSkgewor
ICAgICAgICAgICAgICAgIGVsZW1lbnRCaW5kaW5ncy0+cmVtb3ZlKGl0IC0gZWxlbWVudEJpbmRp
bmdzLT5iZWdpbigpKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgKml0OworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgWEJMQmluZGluZ01h
bmFnZXI6Omhhc0JpbmRpbmcoRWxlbWVudCogYm91bmRFbGVtZW50LCBjb25zdCBTdHJpbmcmIHVy
aSkKK3sKKyAgICBWZWN0b3I8WEJMQmluZGluZyo+KiBlbGVtZW50QmluZGluZ3MgPSBtX2JpbmRp
bmdzLmdldChib3VuZEVsZW1lbnQpOworICAgIGlmIChlbGVtZW50QmluZGluZ3MpCisgICAgICAg
IGZvciAoVmVjdG9yPFhCTEJpbmRpbmcqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBlbGVtZW50Qmlu
ZGluZ3MtPmJlZ2luKCk7IGl0ICE9IGVsZW1lbnRCaW5kaW5ncy0+ZW5kKCk7ICsraXQpCisgICAg
ICAgICAgICBpZiAoKCppdCktPnVyaSgpID09IHVyaSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBYQkxCaW5kaW5nTWFuYWdlcjo6
cmVtb3ZlQWxsQmluZGluZ3MoRWxlbWVudCogYm91bmRFbGVtZW50KQoreworICAgIFZlY3RvcjxY
QkxCaW5kaW5nKj4qIGVsZW1lbnRCaW5kaW5ncyA9IG1fYmluZGluZ3MudGFrZShib3VuZEVsZW1l
bnQpOworICAgIGlmIChlbGVtZW50QmluZGluZ3MpCisgICAgICAgIGRlbGV0ZSBlbGVtZW50Qmlu
ZGluZ3M7Cit9CisKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoWEJMKQpJbmRleDogV2ViQ29yZS94
YmwvWEJMQmluZGluZ01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hibC9YQkxCaW5k
aW5nTWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94YmwvWEJMQmluZGluZ01hbmFn
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBK
dWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+LiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFhCTEJpbmRpbmdNYW5hZ2VyX2gKKyNkZWZpbmUgWEJMQmlu
ZGluZ01hbmFnZXJfaAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoWEJMKQor
CisjaW5jbHVkZSAid3RmL0hhc2hNYXAuaCIKKyNpbmNsdWRlICJ3dGYvVmVjdG9yLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgWEJMQmlu
ZGluZ0VsZW1lbnQ7CisgICAgY2xhc3MgWEJMQmluZGluZzsKKyAgICBjbGFzcyBTdHJpbmc7CisK
KyAgICBjbGFzcyBYQkxCaW5kaW5nTWFuYWdlciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgWEJMQmluZGluZ01hbmFnZXIqIHNoYXJlZEluc3RhbmNlKCk7CisKKyAgICAgICAgdm9pZCBh
ZGRCaW5kaW5nKEVsZW1lbnQqIGJvdW5kRWxlbWVudCwgY29uc3QgU3RyaW5nJiB1cmkpOworICAg
ICAgICB2b2lkIHJlbW92ZUJpbmRpbmcoRWxlbWVudCogYm91bmRFbGVtZW50LCBjb25zdCBTdHJp
bmcmIHVyaSk7CisgICAgICAgIGJvb2wgaGFzQmluZGluZyhFbGVtZW50KiBib3VuZEVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgdXJpKTsKKworICAgICAgICAvLyBVc2VkIGJ5IGVsZW1lbnQgZGVzdHJ1
Y3RvciB0byBwcmV2ZW50IGxlYWthZ2UuCisgICAgICAgIHZvaWQgcmVtb3ZlQWxsQmluZGluZ3Mo
RWxlbWVudCogYm91bmRFbGVtZW50KTsKKyAgICBwcml2YXRlOgorICAgICAgICBYQkxCaW5kaW5n
TWFuYWdlcigpOworCisgICAgICAgIEhhc2hNYXA8RWxlbWVudCosIFZlY3RvcjxYQkxCaW5kaW5n
Kj4qID4gbV9iaW5kaW5nczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoWEJMKQorCisjZW5kaWYgLy8gWEJMQmluZGluZ01hbmFnZXJfaAo=
</data>
<flag name="review"
          id="9740"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>