<?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>29655</bug_id>
          
          <creation_ts>2009-09-22 15:23:08 -0700</creation_ts>
          <short_desc>Chromium needs to be able to override the way storage events are delivered</short_desc>
          <delta_ts>2009-09-30 11:17:36 -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>New Bugs</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="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>beidson</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>149218</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-22 15:23:08 -0700</bug_when>
    <thetext>Chromium needs to be able to override the way storage events are delivered.  This is a possible alternative to https://bugs.webkit.org/show_bug.cgi?id=29257 that would be faster (no vtables and extra allocation) and somewhat cleaner (no dependency injection).  This is necessary because Chromium needs to transport events across a process barrier and then dispatch them without use of a Frame*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149223</commentid>
    <comment_count>1</comment_count>
      <attachid>39951</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-22 15:27:51 -0700</bug_when>
    <thetext>Created attachment 39951
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149225</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-22 15:28:40 -0700</bug_when>
    <thetext>What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149242</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-22 16:01:43 -0700</bug_when>
    <thetext>I&apos;m not looking at the other change side-by-side with this one, but this one seems super straight forward. So +1 in my book.

*************************
I think getting rid of all of these...

31  #include &quot;DOMWindow.h&quot;
32  #include &quot;EventNames.h&quot;
33 #include &quot;ExceptionCode.h&quot;
34 #include &quot;Frame.h&quot;
35  #include &quot;Page.h&quot;
36  #include &quot;PageGroup.h&quot;
37  #include &quot;SecurityOrigin.h&quot;
38 #include &quot;Settings.h&quot;
39  #include &quot;StorageEvent.h&quot;
40 #include &quot;StorageAreaSync.h&quot;

And replacing them with just this...

35 #include &quot;StorageEventDispatcher.h&quot;

... is a really good sign


***********************
Not a big deal, you could make the StorageAreaImpl changes even smaller by retaining the dispatchStorageEvent() method, but implementing it in terms of your new static method.

void StorageAreaImpl::dispatchStorageEvent(...)
{
  StorageEventDispatcher::dispatch(...);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149245</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-22 16:08:59 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I&apos;m not looking at the other change side-by-side with this one, but this one
&gt; seems super straight forward. So +1 in my book.
&gt; 
&gt; *************************
&gt; I think getting rid of all of these...
&gt; 
&gt; 31  #include &quot;DOMWindow.h&quot;
&gt; 32  #include &quot;EventNames.h&quot;
&gt; 33 #include &quot;ExceptionCode.h&quot;
&gt; 34 #include &quot;Frame.h&quot;
&gt; 35  #include &quot;Page.h&quot;
&gt; 36  #include &quot;PageGroup.h&quot;
&gt; 37  #include &quot;SecurityOrigin.h&quot;
&gt; 38 #include &quot;Settings.h&quot;
&gt; 39  #include &quot;StorageEvent.h&quot;
&gt; 40 #include &quot;StorageAreaSync.h&quot;
&gt; 
&gt; And replacing them with just this...
&gt; 
&gt; 35 #include &quot;StorageEventDispatcher.h&quot;
&gt; 
&gt; ... is a really good sign

Well, to be fair, essentially I split StorageAreaImpl into that and StorageEventDispatcher.  It just so happens that half the includes were only necessary for that one function.  :-)

&gt; ***********************
&gt; Not a big deal, you could make the StorageAreaImpl changes even smaller by
&gt; retaining the dispatchStorageEvent() method, but implementing it in terms of
&gt; your new static method.
&gt; 
&gt; void StorageAreaImpl::dispatchStorageEvent(...)
&gt; {
&gt;   StorageEventDispatcher::dispatch(...);
&gt; }

I thought about it, but it didn&apos;t really seem worth it.  I can change if anyone feels strongly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149582</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-23 17:41:31 -0700</bug_when>
    <thetext>Big patch in an area I don&apos;t know much about.  Who is the storage expert @ Apple?  Can you CC them?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149584</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-23 17:45:05 -0700</bug_when>
    <thetext>Sure, but Darin&apos;s actually done 95% of the reviews of this stuff lately.

If Brady has time to review a DOM Storage patch, looking at https://bugs.webkit.org/show_bug.cgi?id=29265 would be much more valuable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149588</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-23 17:47:26 -0700</bug_when>
    <thetext>Also, if you look closely, the actual change is quite small and obviously correct.  90% of the patch is just a svn cp since I&apos;m splitting DOM Storage event dispatching into its own file.

Btw, in case anyone&apos;s interested in the Chromium side of this (which is mostly finished): http://codereview.chromium.org/223013/show</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151297</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-30 11:17:36 -0700</bug_when>
    <thetext>Committed r48937: &lt;http://trac.webkit.org/changeset/48937&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39951</attachid>
            <date>2009-09-22 15:27:51 -0700</date>
            <delta_ts>2009-09-24 18:21:12 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-29655-20090922152749.patch</filename>
            <type>text/plain</type>
            <size>31845</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODY1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMDktMjIgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2hyb21pdW0gbmVlZHMgdG8gYmUgYWJsZSB0byBvdmVycmlkZSB0aGUgd2F5IHN0b3JhZ2UgZXZl
bnRzIGFyZSBkZWxpdmVyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI5NjU1CisKKyAgICAgICAgQ2hyb21pdW0gbmVlZHMgdG8gYmUgYWJsZSB0byBv
dmVycmlkZSB0aGUgd2F5IHN0b3JhZ2UgZXZlbnRzIGFyZSBkZWxpdmVyZWQuIAorICAgICAgICBU
aGlzIGlzIGEgcG9zc2libGUgYWx0ZXJuYXRpdmUgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI5MjU3CisgICAgICAgIHRoYXQgd291bGQgYmUgZmFzdGVyIChubyB2
dGFibGVzIGFuZCBleHRyYSBhbGxvY2F0aW9uKSBhbmQgc29tZXdoYXQgY2xlYW5lciAobm8KKyAg
ICAgICAgZGVwZW5kZW5jeSBpbmplY3Rpb24pLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBD
aHJvbWl1bSBuZWVkcyB0byB0cmFuc3BvcnQKKyAgICAgICAgZXZlbnRzIGFjcm9zcyBhIHByb2Nl
c3MgYmFycmllciBhbmQgdGhlbiBkaXNwYXRjaCB0aGVtIHdpdGhvdXQgdXNlIG9mIGEgRnJhbWUq
LgorCisgICAgICAgIEJlaGF2aW9yIHNob3VsZCBub3QgY2hhbmdlIHdpdGggdGhpcywgc28gbm8g
dXBkYXRlcyB0byB0ZXN0cy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
V2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUFyZWFJbXBsOjpjbGVhcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJl
YUltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwOiBD
b3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKToKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDogQWRkZWQuCisKIDIwMDktMDktMjIgIER1
bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ4NjUxKQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjIyMyw2ICsyMjIzLDcgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBc
CiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUV2ZW50LmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNo
ZXIuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmggXAogCVdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlTWFwLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaCBcCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkocmV2aXNpb24gNDg2NTEpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBj
b3B5KQpAQCAtMzAxOSw2ICszMDE5LDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VB
cmVhU3luYy5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2Uv
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlci5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VNYXAuY3Bw
JywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VNYXAuaCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3VyY2Vz
LmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24g
NDg2NTEpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAt
MTA1NSw2ICsxMDU1LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5l
ZQogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKICAgICAgICAgc3RvcmFnZS9T
dG9yYWdlQXJlYVN5bmMuY3BwCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUV2ZW50LmNwcAorICAg
ICAgICBzdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwCiAgICAgICAgIHN0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZS5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmNwcApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0ODY1MSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxMDg4LDYgKzMxMDg4
LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN0b3JhZ2VcU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZU1hcC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDQ4NjUxKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1MDIsNiArNDUwMiw4IEBACiAJCUM1MTYwRUVCMTAwNDU0M0Ew
MEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTYwRUU5MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJl
YUltcGwuaCAqLzsgfTsKIAkJQzU1RTM4QkYxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1l
c3BhY2VJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCAqLzsg
fTsKIAkJQzU1RTM4QzAxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NUUzOEJD
MTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi87IH07CisJCUM1
RTlCNjc3MTA2OTdFMTMwMEM3QkIxQSAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RTlCNjc2MTA2OTdF
MTMwMEM3QkIxQSAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcCAqLzsgfTsKKwkJQzVFQkRE
ODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgxMTA1RURERUMwMDU2
ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2RDc0QUQ1MDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAv
KiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRBRTQwOUFBMjkwQTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyog
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKIAkJQ0U1NEZEMzgxMDE2RDlBNjAw
OEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTU0RkQzNzEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0
U291cmNlUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtOTU5OCw2ICs5NjAwLDggQEAKIAkJQzUxNjBFRTkxMDA0NTQzQTAwQTdDRUUy
IC8qIFN0b3JhZ2VBcmVhSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dG9yYWdlQXJlYUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU1RTM4QkIx
MDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNw
YWNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdl
TmFtZXNwYWNlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1RTlCNjc2
MTA2OTdFMTMwMEM3QkIxQSAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyog
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1
MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0U1NEZEMzcxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNvdXJj
ZVByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFNvdXJj
ZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDIyMSw2ICsxMDIy
NSw4IEBACiAJCQkJNTFFMEJBQkEwREE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5jcHAg
Ki8sCiAJCQkJNTFFMEJBQjkwREE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5oICovLAog
CQkJCTUxRTBCQUJEMERBNTU0ODQwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuaWRsICovLAorCQkJ
CUM1RTlCNjc2MTA2OTdFMTMwMEM3QkIxQSAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcCAq
LywKKwkJCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hl
ci5oICovLAogCQkJCTUxRTBCQjM3MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNwcCAq
LywKIAkJCQk1MUUwQkIzNjBEQTVBQ0I2MDBBOUU0MTcgLyogU3RvcmFnZU1hcC5oICovLAogCQkJ
CUM1MEQwRTgwMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmNwcCAqLywKQEAg
LTE3ODU1LDYgKzE3ODYxLDcgQEAKIAkJCQk1MTBENEE0RjEwMzE3N0EyMDA0OUVBNTQgLyogV2Vi
U29ja2V0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwRDRBNTAxMDMxNzdBMjAwNDlF
QTU0IC8qIFdlYlNvY2tldENoYW5uZWxDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQUJB
RTQ1MTA0M0FCNEEwMDhDNTI2MCAvKiBXZWJTb2NrZXRIYW5kc2hha2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGQUJFNzJGNTEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1M
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkFCRTcyRjcxMDU5QzFFQjAwRDk5OUREIC8q
IE1hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZBQkU3
MkY5MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0xOTk4OSw2ICsxOTk5Niw3IEBACiAJCQkJRkFCRTcyRkUxMDU5QzIxMTAwRDk5OUREIC8q
IE1hdGhNTE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0U1OEFDMTA2MUU4Q0YwMDhG
QjM1QSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0U1OEFG
MTA2MUU5MEMwMDhGQjM1QSAvKiBKU0RvY3VtZW50RnJhZ21lbnRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQzVFOUI2NzcxMDY5N0UxMzAwQzdCQjFBIC8qIFN0b3JhZ2VFdmVudERpc3Bh
dGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmNwcAkocmV2aXNpb24gNDg2NTEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTYgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCiAKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdG9yYWdlRXZlbnQu
aCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKKyNpbmNsdWRlICJTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VT
eW5jTWFuYWdlci5oIgogCkBAIC0xNDksNyArMTQ0LDcgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6
OnNldEl0ZW0oY29uc3QgU3RyaQogICAgIGlmIChvbGRWYWx1ZSAhPSB2YWx1ZSkgewogICAgICAg
ICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAgICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+
c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIHZhbHVlKTsKLSAgICAgICAgZGlzcGF0Y2hTdG9yYWdl
RXZlbnQoa2V5LCBvbGRWYWx1ZSwgdmFsdWUsIGZyYW1lKTsKKyAgICAgICAgU3RvcmFnZUV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goa2V5LCBvbGRWYWx1ZSwgdmFsdWUsIG1fc3RvcmFnZVR5cGUs
IG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGZyYW1lKTsKICAgICB9CiB9CiAKQEAgLTE3MCw3ICsx
NjUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShjb25zdCBTCiAgICAgaWYg
KCFvbGRWYWx1ZS5pc051bGwoKSkgewogICAgICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAg
ICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0
cmluZygpKTsKLSAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3Ry
aW5nKCksIGZyYW1lKTsKKyAgICAgICAgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
a2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIG1fc3RvcmFnZVR5cGUsIG1fc2VjdXJpdHlPcmlnaW4u
Z2V0KCksIGZyYW1lKTsKICAgICB9CiB9CiAKQEAgLTE4Niw3ICsxODEsNyBAQCB2b2lkIFN0b3Jh
Z2VBcmVhSW1wbDo6Y2xlYXIoRnJhbWUqIGZyYW1lCiAKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5
bmMpCiAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7Ci0gICAgZGlz
cGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgZnJhbWUpOwor
ICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKFN0cmluZygpLCBTdHJpbmcoKSwg
U3RyaW5nKCksIG1fc3RvcmFnZVR5cGUsIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGZyYW1lKTsK
IH0KIAogYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBj
b25zdApAQCAtMjI0LDQ1ICsyMTksNiBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRp
bEltcG9ydENvCiAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcm
IG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCi17Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0p
Ci0gICAgLy8gRklYTUU6IEV2ZW50cyBhcmUgY3VycmVudGx5IGJyb2tlbiBpbiBDaHJvbWl1bS4K
LSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIFBhZ2UqIHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFn
ZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbmVlZCB0
byBjb3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVjdG9yIHNp
bmNlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZyYW1l
IHRyZWUKLSAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3IgbXV0YXRlIHRo
ZSBwYWdlIGdyb3VwIGl0c2VsZi4KLSAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1lczsK
LSAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkgewotICAgICAgICAvLyBT
ZW5kIGV2ZW50cyBvbmx5IHRvIG91ciBwYWdlLgotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICBmcmFtZXMu
YXBwZW5kKGZyYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50
KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1
bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tp
XS0+ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKCkpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBTZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlLgotICAgICAgICBjb25zdCBIYXNoU2V0PFBh
Z2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7Ci0gICAgICAgIEhhc2hTZXQ8UGFn
ZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKLSAgICAgICAgZm9yIChIYXNo
U2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gKCppdCktPm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1
YWwoc2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQo
ZnJhbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGZyYW1lc1tpXS0+
ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJh
bWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNvdXJjZUZyYW1lLT5kb21XaW5kb3coKSwg
ZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKCkpKTsKLSAgICB9Ci19Ci0KIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFJbXBsLmgJKHJldmlzaW9uIDQ4NjUxKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw4ICs2NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OwogCi0g
ICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VG
cmFtZSk7Ci0KICAgICAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKICAgICAgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBSZWZQdHI8U3Rv
cmFnZU1hcD4gbV9zdG9yYWdlTWFwOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZl
bnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gNDg2NTEpCShmcm9tIFdlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYUltcGwuY3BwOjQ4NjUxKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCisjaW5j
bHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0b3Jh
Z2VBcmVhSW1wbDo6flN0b3JhZ2VBcmVhSW1wbCgpCit7Cit9CisKK1N0b3JhZ2VBcmVhSW1wbDo6
U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFu
YWdlcikKKyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5
T3JpZ2luKG9yaWdpbikKKyAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkK
KyAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQorI2lmbmRlZiBOREVCVUcK
KyAgICAsIG1faXNTaHV0ZG93bihmYWxzZSkKKyNlbmRpZgoreworICAgIEFTU0VSVChtX3NlY3Vy
aXR5T3JpZ2luKTsKKyAgICBBU1NFUlQobV9zdG9yYWdlTWFwKTsKKworICAgIC8vIEZJWE1FOiBJ
ZiB0aGVyZSdzIG5vIGJhY2tpbmcgc3RvcmFnZSBmb3IgTG9jYWxTdG9yYWdlLCB0aGUgZGVmYXVs
dCBXZWJLaXQgYmVoYXZpb3Igc2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2luZywKKyAg
ICAvLyBub3Qgc2lsZW50bHkgaWdub3JpbmcgaXQuICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjU4OTQKKyAgICBpZiAobV9zdG9yYWdlU3luY01hbmFnZXIpIHsKKyAg
ICAgICAgbV9zdG9yYWdlQXJlYVN5bmMgPSBTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShtX3N0b3Jh
Z2VTeW5jTWFuYWdlciwgdGhpcyk7CisgICAgICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhU3luYyk7
CisgICAgfQorfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gU3RvcmFnZUFyZWFJbXBs
Ojpjb3B5KCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdG9yYWdlQXJlYUltcGwodGhpcykpOworfQorCitTdG9yYWdlQXJlYUltcGw6OlN0
b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJlYUltcGwqIGFyZWEpCisgICAgOiBtX3N0b3JhZ2VUeXBl
KGFyZWEtPm1fc3RvcmFnZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKGFyZWEtPm1fc2Vj
dXJpdHlPcmlnaW4pCisgICAgLCBtX3N0b3JhZ2VNYXAoYXJlYS0+bV9zdG9yYWdlTWFwKQorICAg
ICwgbV9zdG9yYWdlU3luY01hbmFnZXIoYXJlYS0+bV9zdG9yYWdlU3luY01hbmFnZXIpCisjaWZu
ZGVmIE5ERUJVRworICAgICwgbV9pc1NodXRkb3duKGFyZWEtPm1faXNTaHV0ZG93bikKKyNlbmRp
ZgoreworICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKKyAgICBBU1NFUlQobV9zdG9yYWdl
TWFwKTsKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Cit9CisKK3N0YXRpYyBib29sIHByaXZh
dGVCcm93c2luZ0VuYWJsZWQoRnJhbWUqIGZyYW1lKQoreworI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQorICAgIC8vIFRoZSBmcmFtZSBwb2ludGVyIGNhbiBiZSBOVUxMIGluIENocm9taXVtIHNpbmNl
IHRoaXMgY2FsbCBpcyBtYWRlIGluIGEgZGlmZmVyZW50CisgICAgLy8gcHJvY2VzcyBmcm9tIHdo
ZXJlIHRoZSBGcmFtZSBvYmplY3QgZXhpc3RzLiAgTHVja2lseSwgcHJpdmF0ZSBicm93c2Vpbmcg
aXMKKyAgICAvLyBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSBpbiBDaHJvbWl1bSwgc28gaXQnZCBu
ZXZlciByZXR1cm4gdHJ1ZSBhbnl3YXkuCisgICAgQVNTRVJUKCFmcmFtZSk7CisgICAgcmV0dXJu
IGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworI2VuZGlmCit9CisKK3Vuc2lnbmVkIFN0b3JhZ2VBcmVh
SW1wbDo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAg
cmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7Cit9CisKK1N0cmluZyBTdG9yYWdlQXJlYUlt
cGw6OmtleSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93
bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgcmV0dXJuIG1fc3RvcmFn
ZU1hcC0+a2V5KGluZGV4KTsKK30KKworU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6Z2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Cisg
ICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICByZXR1cm4gbV9zdG9yYWdlTWFw
LT5nZXRJdGVtKGtleSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJh
bWUqIGZyYW1lKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBBU1NFUlQoIXZh
bHVlLmlzTnVsbCgpKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAgIGlm
IChwcml2YXRlQnJvd3NpbmdFbmFibGVkKGZyYW1lKSkgeworICAgICAgICBlYyA9IFFVT1RBX0VY
Q0VFREVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBGb3Ig
TG9jYWxTdG9yYWdlIHdoZXJlIGEgZGlzayBxdW90YSB3aWxsIGJlIGVuZm9yY2VkLCBoZXJlIGlz
IHdoZXJlIHdlIG5lZWQgdG8gZG8gcXVvdGEgY2hlY2tpbmcuCisgICAgLy8gICAgICAgIElmIHdl
IGRlY2lkZSB0byBlbmZvcmNlIGEgbWVtb3J5IHF1b3RhIGZvciBTZXNzaW9uU3RvcmFnZSwgdGhp
cyBpcyB3aGVyZSB3ZSdkIGRvIHRoYXQsIGFsc28uCisgICAgLy8gaWYgKDxvdmVyIHF1b3RhPikg
eworICAgIC8vICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKKyAgICAvLyAgICAgcmV0dXJu
OworICAgIC8vIH0KKworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBSZWZQdHI8U3RvcmFnZU1h
cD4gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlKTsK
KworICAgIGlmIChuZXdNYXApCisgICAgICAgIG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNl
KCk7CisKKyAgICAvLyBPbmx5IG5vdGlmeSB0aGUgY2xpZW50IGlmIGFuIGl0ZW0gd2FzIGFjdHVh
bGx5IGNoYW5nZWQKKyAgICBpZiAob2xkVmFsdWUgIT0gdmFsdWUpIHsKKyAgICAgICAgaWYgKG1f
c3RvcmFnZUFyZWFTeW5jKQorICAgICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxl
SXRlbUZvclN5bmMoa2V5LCB2YWx1ZSk7CisgICAgICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtl
eSwgb2xkVmFsdWUsIHZhbHVlLCBmcmFtZSk7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VBcmVh
SW1wbDo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQoreworICAg
IEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsK
KworICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKGZyYW1lKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBuZXdNYXAg
PSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CisgICAgaWYgKG5ld01h
cCkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFwLnJlbGVhc2UoKTsKKworICAgIC8vIE9u
bHkgbm90aWZ5IHRoZSBjbGllbnQgaWYgYW4gaXRlbSB3YXMgYWN0dWFsbHkgcmVtb3ZlZAorICAg
IGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5j
KQorICAgICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5
LCBTdHJpbmcoKSk7CisgICAgICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUs
IFN0cmluZygpLCBmcmFtZSk7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xl
YXIoRnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBibG9j
a1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVk
KGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1h
cDo6Y3JlYXRlKCk7CisKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3Rv
cmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7CisgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQo
U3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgZnJhbWUpOworfQorCitib29sIFN0b3JhZ2VB
cmVhSW1wbDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworCisgICAg
cmV0dXJuIG1fc3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKK30KKwordm9pZCBTdG9yYWdlQXJl
YUltcGw6OmltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIG1fc3RvcmFnZU1hcC0+aW1wb3J0
SXRlbShrZXksIHZhbHVlKTsKK30KKworU2VjdXJpdHlPcmlnaW4qIFN0b3JhZ2VBcmVhSW1wbDo6
c2VjdXJpdHlPcmlnaW4oKQoreworICAgIHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOwor
fQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2UoKQoreworICAgIGlmIChtX3N0b3JhZ2VB
cmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlRmluYWxTeW5jKCk7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKKyNlbmRpZgorfQor
Cit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QK
K3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5j
LT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6
OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9s
ZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCit7Cisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgLy8gRklYTUU6IEV2ZW50cyBhcmUgY3VycmVudGx5
IGJyb2tlbiBpbiBDaHJvbWl1bS4KKyAgICByZXR1cm47CisjZW5kaWYKKworICAgIFBhZ2UqIHBh
Z2UgPSBzb3VyY2VGcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gV2UgbmVlZCB0byBjb3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVy
eSBwYWdlIHRvIGEgdmVjdG9yIHNpbmNlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBt
aWdodCBtdXRhdGUgdGhlIGZyYW1lIHRyZWUKKyAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0
aGUgZ3JvdXAgb3IgbXV0YXRlIHRoZSBwYWdlIGdyb3VwIGl0c2VsZi4KKyAgICBWZWN0b3I8UmVm
UHRyPEZyYW1lPiA+IGZyYW1lczsKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3Rv
cmFnZSkgeworICAgICAgICAvLyBTZW5kIGV2ZW50cyBvbmx5IHRvIG91ciBwYWdlLgorICAgICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKKyAg
ICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFs
dWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+
ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKCkpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBTZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlLgorICAg
ICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7
CisgICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQo
KTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICAg
ICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9y
YWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVl
LCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNvdXJj
ZUZyYW1lLT5kb21XaW5kb3coKSwgZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdl
KCkpKTsKKyAgICB9Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAJKHJldmlzaW9u
IDQ4NjUxKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwyMTMgKzI0LDIyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuaCIKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAogI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
U3luYy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKLSNpbmNsdWRlICJTdG9yYWdlU3luY01h
bmFnZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdG9yYWdlQXJlYUltcGw6On5TdG9y
YWdlQXJlYUltcGwoKQordm9pZCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdW
YWx1ZSwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbiwgRnJhbWUqIHNvdXJjZUZyYW1lKQogewotfQotCi1TdG9yYWdlQXJlYUltcGw6OlN0b3Jh
Z2VBcmVhSW1wbChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIp
Ci0gICAgOiBtX3N0b3JhZ2VUeXBlKHN0b3JhZ2VUeXBlKQotICAgICwgbV9zZWN1cml0eU9yaWdp
bihvcmlnaW4pCi0gICAgLCBtX3N0b3JhZ2VNYXAoU3RvcmFnZU1hcDo6Y3JlYXRlKCkpCi0gICAg
LCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihzeW5jTWFuYWdlcikKLSNpZm5kZWYgTkRFQlVHCi0gICAg
LCBtX2lzU2h1dGRvd24oZmFsc2UpCi0jZW5kaWYKLXsKLSAgICBBU1NFUlQobV9zZWN1cml0eU9y
aWdpbik7Ci0gICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7Ci0KLSAgICAvLyBGSVhNRTogSWYgdGhl
cmUncyBubyBiYWNraW5nIHN0b3JhZ2UgZm9yIExvY2FsU3RvcmFnZSwgdGhlIGRlZmF1bHQgV2Vi
S2l0IGJlaGF2aW9yIHNob3VsZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCi0gICAgLy8g
bm90IHNpbGVudGx5IGlnbm9yaW5nIGl0LiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI1ODk0Ci0gICAgaWYgKG1fc3RvcmFnZVN5bmNNYW5hZ2VyKSB7Ci0gICAgICAg
IG1fc3RvcmFnZUFyZWFTeW5jID0gU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUobV9zdG9yYWdlU3lu
Y01hbmFnZXIsIHRoaXMpOwotICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYVN5bmMpOwotICAg
IH0KLX0KLQotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IFN0b3JhZ2VBcmVhSW1wbDo6Y29w
eSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU3RvcmFnZUFyZWFJbXBsKHRoaXMpKTsKLX0KLQotU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdl
QXJlYUltcGwoU3RvcmFnZUFyZWFJbXBsKiBhcmVhKQotICAgIDogbV9zdG9yYWdlVHlwZShhcmVh
LT5tX3N0b3JhZ2VUeXBlKQotICAgICwgbV9zZWN1cml0eU9yaWdpbihhcmVhLT5tX3NlY3VyaXR5
T3JpZ2luKQotICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKLSAgICAsIG1f
c3RvcmFnZVN5bmNNYW5hZ2VyKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQotI2lmbmRlZiBO
REVCVUcKLSAgICAsIG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCi0jZW5kaWYKLXsK
LSAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7Ci0gICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7
Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotfQotCi1zdGF0aWMgYm9vbCBwcml2YXRlQnJv
d3NpbmdFbmFibGVkKEZyYW1lKiBmcmFtZSkKLXsKLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSAg
ICAvLyBUaGUgZnJhbWUgcG9pbnRlciBjYW4gYmUgTlVMTCBpbiBDaHJvbWl1bSBzaW5jZSB0aGlz
IGNhbGwgaXMgbWFkZSBpbiBhIGRpZmZlcmVudAotICAgIC8vIHByb2Nlc3MgZnJvbSB3aGVyZSB0
aGUgRnJhbWUgb2JqZWN0IGV4aXN0cy4gIEx1Y2tpbHksIHByaXZhdGUgYnJvd3NlaW5nIGlzCi0g
ICAgLy8gaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkgaW4gQ2hyb21pdW0sIHNvIGl0J2QgbmV2ZXIg
cmV0dXJuIHRydWUgYW55d2F5LgotICAgIEFTU0VSVCghZnJhbWUpOwotICAgIHJldHVybiBmYWxz
ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVC
cm93c2luZ0VuYWJsZWQoKTsKLSNlbmRpZgotfQotCi11bnNpZ25lZCBTdG9yYWdlQXJlYUltcGw6
Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIHJldHVy
biBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwotfQotCi1TdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjpr
ZXkodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwot
ICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotICAgIHJldHVybiBtX3N0b3JhZ2VNYXAt
PmtleShpbmRleCk7Ci19Ci0KLVN0cmluZyBTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJs
b2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0
SXRlbShrZXkpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBm
cmFtZSkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgQVNTRVJUKCF2YWx1ZS5p
c051bGwoKSk7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0KLSAgICBpZiAocHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFtZSkpIHsKLSAgICAgICAgZWMgPSBRVU9UQV9FWENFRURF
RF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRm9yIExvY2Fs
U3RvcmFnZSB3aGVyZSBhIGRpc2sgcXVvdGEgd2lsbCBiZSBlbmZvcmNlZCwgaGVyZSBpcyB3aGVy
ZSB3ZSBuZWVkIHRvIGRvIHF1b3RhIGNoZWNraW5nLgotICAgIC8vICAgICAgICBJZiB3ZSBkZWNp
ZGUgdG8gZW5mb3JjZSBhIG1lbW9yeSBxdW90YSBmb3IgU2Vzc2lvblN0b3JhZ2UsIHRoaXMgaXMg
d2hlcmUgd2UnZCBkbyB0aGF0LCBhbHNvLgotICAgIC8vIGlmICg8b3ZlciBxdW90YT4pIHsKLSAg
ICAvLyAgICAgZWMgPSBRVU9UQV9FWENFRURFRF9FUlI7Ci0gICAgLy8gICAgIHJldHVybjsKLSAg
ICAvLyB9Ci0KLSAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5l
d01hcCA9IG1fc3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSk7Ci0KLSAg
ICBpZiAobmV3TWFwKQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgpOwot
Ci0gICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxseSBj
aGFuZ2VkCi0gICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICAgIGlmIChtX3N0b3Jh
Z2VBcmVhU3luYykKLSAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1G
b3JTeW5jKGtleSwgdmFsdWUpOwotICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9s
ZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6
OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NF
UlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0KLSAg
ICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFtZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbmV3TWFwID0gbV9z
dG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwotICAgIGlmIChuZXdNYXApCi0g
ICAgICAgIG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7Ci0KLSAgICAvLyBPbmx5IG5v
dGlmeSB0aGUgY2xpZW50IGlmIGFuIGl0ZW0gd2FzIGFjdHVhbGx5IHJlbW92ZWQKLSAgICBpZiAo
IW9sZFZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKLSAg
ICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgU3Ry
aW5nKCkpOwotICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBTdHJp
bmcoKSwgZnJhbWUpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyKEZy
YW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCk7Ci0KLSAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFt
ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNy
ZWF0ZSgpOwotCi0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3JhZ2VB
cmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOwotICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0cmlu
ZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIGZyYW1lKTsKLX0KLQotYm9vbCBTdG9yYWdlQXJlYUlt
cGw6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAotewotICAgIEFTU0VSVCghbV9p
c1NodXRkb3duKTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLQotICAgIHJldHVy
biBtX3N0b3JhZ2VNYXAtPmNvbnRhaW5zKGtleSk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFJbXBs
OjppbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW0o
a2V5LCB2YWx1ZSk7Ci19Ci0KLVNlY3VyaXR5T3JpZ2luKiBTdG9yYWdlQXJlYUltcGw6OnNlY3Vy
aXR5T3JpZ2luKCkKLXsKLSAgICByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsKLX0KLQot
dm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsb3NlKCkKLXsKLSAgICBpZiAobV9zdG9yYWdlQXJlYVN5
bmMpCi0gICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOwotCi0j
aWZuZGVmIE5ERUJVRwotICAgIG1faXNTaHV0ZG93biA9IHRydWU7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBTdG9yYWdlQXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+Ymxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpkaXNw
YXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1
ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQotewotI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQotICAgIC8vIEZJWE1FOiBFdmVudHMgYXJlIGN1cnJlbnRseSBicm9r
ZW4gaW4gQ2hyb21pdW0uCi0gICAgcmV0dXJuOwotI2VuZGlmCi0KICAgICBQYWdlKiBwYWdlID0g
c291cmNlRnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKQEAg
LTIzOCwxMCArNDcsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2
ZQogICAgIC8vIFdlIG5lZWQgdG8gY29weSBhbGwgcmVsZXZhbnQgZnJhbWVzIGZyb20gZXZlcnkg
cGFnZSB0byBhIHZlY3RvciBzaW5jZSBzZW5kaW5nIHRoZSBldmVudCB0byBvbmUgZnJhbWUgbWln
aHQgbXV0YXRlIHRoZSBmcmFtZSB0cmVlCiAgICAgLy8gb2YgYW55IGdpdmVuIHBhZ2UgaW4gdGhl
IGdyb3VwIG9yIG11dGF0ZSB0aGUgcGFnZSBncm91cCBpdHNlbGYuCiAgICAgVmVjdG9yPFJlZlB0
cjxGcmFtZT4gPiBmcmFtZXM7Ci0gICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gU2Vzc2lvblN0b3Jh
Z2UpIHsKKyAgICBpZiAoc3RvcmFnZVR5cGUgPT0gU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAgICAg
Ly8gU2VuZCBldmVudHMgb25seSB0byBvdXIgcGFnZS4KICAgICAgICAgZm9yIChGcmFtZSogZnJh
bWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICBpZiAoZnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKSkK
ICAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKICAgICAgICAgfQogCkBAIC0y
NTMsNyArNjIsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6ZGlzcGF0Y2hTdG9yYWdlRXZlCiAg
ICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsK
ICAgICAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICAgICAg
aWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9y
aWdpbikpCiAgICAgICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNw
YXRjaGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlcl9oCisjZGVmaW5lIFN0b3JhZ2VFdmVudERpc3BhdGNoZXJfaAorCisjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTdG9yYWdlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAvLyBUaGlz
IGlzIGluIGl0cyBvd24gY2xhc3Mgc2luY2UgQ2hyb21pdW0gbXVzdCBvdmVycmlkZSBpdC4KKyAg
ICBjbGFzcyBTdG9yYWdlRXZlbnREaXNwYXRjaGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZh
bHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4q
LCBGcmFtZSogc291cmNlRnJhbWUpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gRG8gbm90
IGluc3RhbnRpYXRlLgorICAgICAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVyKCk7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdF
KQorCisjZW5kaWYgLy8gU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcl9o
</data>
<flag name="review"
          id="21105"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="21278"
          type_id="3"
          status="-"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>