<?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>125827</bug_id>
          
          <creation_ts>2013-12-16 19:50:44 -0800</creation_ts>
          <short_desc>Implement an ordered multimap in WTF</short_desc>
          <delta_ts>2013-12-19 19:13:47 -0800</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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ggaren</cc>
    
    <cc>jonlee</cc>
    
    <cc>mrowe</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>960368</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 19:50:44 -0800</bug_when>
    <thetext>Implement an ordered multimap in WTF</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960369</commentid>
    <comment_count>1</comment_count>
      <attachid>219387</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 19:54:15 -0800</bug_when>
    <thetext>Created attachment 219387
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960386</commentid>
    <comment_count>2</comment_count>
      <attachid>219393</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-16 21:15:58 -0800</bug_when>
    <thetext>Created attachment 219393
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960394</commentid>
    <comment_count>3</comment_count>
      <attachid>219393</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-16 21:49:20 -0800</bug_when>
    <thetext>Comment on attachment 219393
Patch

Our typical strategy for keyed collections in WebKit is to use a hash table. The reason is that it is faster.

Did you test the performance of this data structure? Did you compare it to the performance of a simple hash table, in which the values are vectors or linked lists? I&apos;m hoping you did, but your ChangeLog doesn&apos;t contain any performance information, so I think you didn&apos;t.

Our typical strategy for memory management is to use smart pointers. The reason is that raw pointers leak and crash. Did you consider unique_ptr with move semantics or some other smart pointer solution instead of manual new and delete?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960578</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2013-12-17 10:50:02 -0800</bug_when>
    <thetext>Clearly a hash table is faster than a binary tree for the operations it supports; however, I am working on a patch (https://bugs.webkit.org/show_bug.cgi?id=125477) that needs to iterate over the items in a map in increasing key order, which a hashmap doesn&apos;t support. I would have used a RedBlackTree directly, but I need to store multiple key-value pairs with the same key in this data structure. That led me to use a RedBlackTree of DoublyLinkedLists. Another reason I cannot use a HashTable is that I need to keep multiple iterators into this data structure, even while other keys value pairs are being added and removed, which  HashTable doesn&apos;t support (it&apos;s add() function calls invalidateIterators()).

I originally was using std::multimap for my work, but was told to use WTF types instead, so I had to create this class.

I did not measure the performance, because I do not have anything to compare performance numbers against (because there is no other class in WTF with similar semantics).

I used new and delete because they are the best fit for the existing base classes for RedBlackTree&lt;&gt;::Node and DoublyLinkedListNode&lt;&gt;. RedBlackTree&lt;&gt;::Node declares it&apos;s own left and right pointers as raw pointers; I could declare my own overriding left and right OwnPtr&lt;&gt;s, but that would end up with essentially an entirely new Node type and no code reuse with the existing Node class. I think making this new Node type is fine, but I think it belongs in RedBlackTee.h, which probably should be in another patch. Should I do this, or keep it as it is?

For the DoublyLinkedListNode case, my subclass keeps the pointer members, however operations on the list itself (like append() and tail()) deal with raw pointers. Because DoublyLinkedList itself calls the  assignment operator on the previous and next pointers, without using adoptRef, I would end up having to re-implement an entirely new LinkedList implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960580</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-12-17 10:58:47 -0800</bug_when>
    <thetext>I think a sorted vector would be fine here because the IOSurface management code is going to dwarf the cache management code here anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960595</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-17 11:30:25 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Clearly a hash table is faster than a binary tree for the operations it supports; however, I am working on a patch (https://bugs.webkit.org/show_bug.cgi?id=125477) that needs to iterate over the items in a map in increasing key order, which a hashmap doesn&apos;t support.

I see. This sounds like a red flag.

If we&apos;re willing to pay the cost of iterating the data structure, we can probably use a much simpler data structure. If we&apos;re not willing to pay the cost of iterating the data structure, we need a different design.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219387</attachid>
            <date>2013-12-16 19:54:15 -0800</date>
            <delta_ts>2013-12-16 21:15:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125827-20131216195414.patch</filename>
            <type>text/plain</type>
            <size>13058</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc5ODkyNWI4NWFhMWFmMDRkMGM1ZThh
ZWZjZjdiNjI0Zjk5MjRlNWEuLmJkZGU4N2U0M2JkNTRhZTdlY2IzYWY3MGRmNWE2YjVkMDliZjA1
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTMtMTItMTYgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYW4gb3JkZXJlZCBtdWx0
aW1hcCBpbiBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNTgyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFsbG93aW5nIGZvciBhIHF1aWNrIGxvb2t1cCBvZiBhbiBhcHByb3ByaWF0ZWx5IHNpemVk
IElPU3VyZmFjZSByZXF1aXJlcyB0aGUKKyAgICAgICAgdXNlIG9mIGFuIG9yZGVyZWQgbXVsdGlt
YXAuIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgY2FuIGJlIGNyZWF0ZWQgZnJvbSBhCisgICAgICAgIGJp
bmFyeSB0cmVlIGFuZCBhIGxpbmtlZCBsaXN0LCBib3RoIG9mIHdoaWNoIGFscmVhZHkgZXhpc3Qg
d2l0aGluIFdURi4gVGhpcworICAgICAgICBjbGFzcyB1c2VzIGEgdHJlZSBvZiBsaXN0cyBpbiBv
cmRlciB0byBpbXBsZW1lbnQgdGhlIG9yZGVyZWQgbXVsdGltYXAuCisKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvT3JkZXJlZE11bHRpbWFw
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXBMaXN0Tm9kZTo6T3JkZXJl
ZE11bHRpbWFwTGlzdE5vZGUpOiBMaXN0IG5vZGUsIGhvbGRzCisgICAgICAgIGEgdHVwbGUgb2Yg
dGhlIGtleSBhbmQgdmFsdWUKKyAgICAgICAgKFdURjo6T3JkZXJlZE11bHRpbWFwTGlzdE5vZGU6
OmdldCk6IFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBLZXlWYWx1ZVBhaXIKKyAgICAgICAgKFdU
Rjo6T3JkZXJlZE11bHRpbWFwTm9kZTo6T3JkZXJlZE11bHRpbWFwTm9kZSk6IFRyZWUgbm9kZSwg
aG9sZHMgYSBkb3VibHktCisgICAgICAgIGxpbmtlZCBsaXN0IG9mIE9yZGVyZWRNdWx0aW1hcExp
c3ROb2RlcworICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXBOb2RlOjprZXkpOgorICAgICAg
ICAoV1RGOjpPcmRlcmVkTXVsdGltYXBOb2RlOjpiZWdpbik6CisgICAgICAgIChXVEY6Ok9yZGVy
ZWRNdWx0aW1hcE5vZGU6OmVuZCk6CisgICAgICAgIChXVEY6Ok9yZGVyZWRNdWx0aW1hcE5vZGU6
OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXBOb2RlOjphcHBlbmQpOgor
ICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXBOb2RlOjpzaXplKToKKyAgICAgICAgKFdURjo6
T3JkZXJlZE11bHRpbWFwOjppdGVyYXRvcjo6aXRlcmF0b3IpOiBIb2xkcyBhIHBvaW50ZXIgdG8g
YSB0cmVlIG5vZGUKKyAgICAgICAgYW5kIGEgbGlzdCBub2RlLgorICAgICAgICAoV1RGOjpPcmRl
cmVkTXVsdGltYXA6Oml0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGlt
YXA6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXA6
Oml0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdURjo6T3JkZXJlZE11bHRpbWFwOjpp
dGVyYXRvcjo6b3BlcmF0b3IrKyk6IEluY3JlbWVudCB0aGUgbGlzdCBub2RlLiBJZiB3ZSByZWFj
aAorICAgICAgICB0aGUgZW5kLCBpbmNyZW1lbnQgdGhlIHRyZWUgbm9kZQorICAgICAgICAoV1RG
OjpPcmRlcmVkTXVsdGltYXA6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6
T3JkZXJlZE11bHRpbWFwOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Ok9y
ZGVyZWRNdWx0aW1hcDo6YmVnaW4pOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXA6OmVu
ZCk6CisgICAgICAgIChXVEY6Ok9yZGVyZWRNdWx0aW1hcDo6aW5zZXJ0KTogSW5zZXJ0cyBhIHRy
ZWUgbm9kZSBpZiBvbmUgaXMgbm90IHByZXNlbnQuIEluc2VydHMKKyAgICAgICAgYSBsaXN0IG5v
ZGUgaW50byB0aGUgcmVsZXZhbnQgdHJlZSBub2RlLgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVs
dGltYXA6OnJlbW92ZSk6IExvb2sgdXAgdGhlIHJlbGV2YW50IHRyZWUgbm9kZSwgdGhlbiByZW1v
dmUgdGhlCisgICAgICAgIGxpbmtlZCBsaXN0IG5vZGUKKyAgICAgICAgKFdURjo6T3JkZXJlZE11
bHRpbWFwOjpmaW5kRXhhY3QpOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXA6OmZpbmRM
ZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbCk6CisgICAgICAgIChXVEY6Ok9yZGVyZWRNdWx0aW1hcDo6
ZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKToKKyAgICAgICAgKFdURjo6T3JkZXJlZE11bHRp
bWFwOjpzaXplKToKKyAgICAgICAgKFdURjo6T3JkZXJlZE11bHRpbWFwOjppc0VtcHR5KToKKwog
MjAxMy0xMi0xMSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IERlZmluZSBtX2hhc0JhZFBhcmVudCBpbiBJbmxpbmVCb3ggaWYgZGVmaW5lZChBRERSRVNTX1NB
TklUSVpFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDBh
NzhmMDUwOGRmZDc4ODk4NjE2NGFlNmYwMTE2MjBkYjA0ZDhlYTAuLmZhN2RlMDBmNzQ5MmU1Y2Fj
Zjg5MDMyYmQwMjE2ZWJiNWQ4N2RkMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNTUsNiArNTUsNyBAQAogCQkxQTFEOEI5RTE3MzE4Nzk4MDAxNDFEQTQg
LyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMUQ4QjlEMTczMTg3OTgwMDE0MURBNCAvKiBGdW5jdGlvbkRpc3Bh
dGNoZXIuY3BwICovOyB9OwogCQkxQTIzM0M3RDE3REFBNkUzMDBBOTNBQ0YgLyogTWFsbG9jUHRy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIzM0M3
QzE3REFBNkUzMDBBOTNBQ0YgLyogTWFsbG9jUHRyLmggKi87IH07CiAJCTFBNkJCNzY5MTYyRjMw
MDUwMEREMTZEQiAvKiBTdHJlYW1CdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkJCNzY4MTYyRjMwMDUwMEREMTZEQiAvKiBTdHJlYW1CdWZm
ZXIuaCAqLzsgfTsKKwkJMUMyN0NDRUMxODU5NzAwMzAwMkE0MzA0IC8qIE9yZGVyZWRNdWx0aW1h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyN0ND
RUIxODU5NzAwMzAwMkE0MzA0IC8qIE9yZGVyZWRNdWx0aW1hcC5oICovOyB9OwogCQkxRkE0N0M4
QTE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkE0N0M4ODE1MjUwMkRBMDA1NjhEMUIgLyog
V2ViQ29yZVRocmVhZC5jcHAgKi87IH07CiAJCTFGQTQ3QzhCMTUyNTAyREEwMDU2OEQxQiAvKiBX
ZWJDb3JlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxRkE0N0M4OTE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5oICovOyB9Owog
CQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYxNDdCMDgx
NUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCAqLzsgfTsKQEAg
LTMyMiw2ICszMjMsNyBAQAogCQkxQTIzM0M3QzE3REFBNkUzMDBBOTNBQ0YgLyogTWFsbG9jUHRy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hbGxvY1B0ci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTNGNkJFNjE3NEFEQTIxMDBCMkVFQTcgLyogTmV2ZXJE
ZXN0cm95ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV2ZXJEZXN0cm95ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUE2QkI3NjgxNjJGMzAwNTAwREQxNkRCIC8qIFN0cmVhbUJ1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1CdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMyN0NDRUIxODU5NzAwMzAwMkE0MzA0IC8qIE9y
ZGVyZWRNdWx0aW1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcmRlcmVk
TXVsdGltYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUZBNDdDODgxNTI1MDJE
QTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViQ29yZVRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFGQTQ3Qzg5MTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjYxNDdCMDgxNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmlu
Z0NvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdlclRv
U3RyaW5nQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQyLDYg
Kzc0NCw3IEBACiAJCQkJQThBNDcyRDUxNTFBODI1QjAwNDEyM0ZGIC8qIE51bWJlck9mQ29yZXMu
Y3BwICovLAogCQkJCUE4QTQ3MkQ2MTUxQTgyNUIwMDQxMjNGRiAvKiBOdW1iZXJPZkNvcmVzLmgg
Ki8sCiAJCQkJN0UyOUMzM0QxNUZGRDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmgg
Ki8sCisJCQkJMUMyN0NDRUIxODU5NzAwMzAwMkE0MzA0IC8qIE9yZGVyZWRNdWx0aW1hcC5oICov
LAogCQkJCUE4QTQ3MkQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRvci5oICovLAogCQkJ
CUE4QTQ3MkQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLywKIAkJ
CQlBOEE0NzJEQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuY3BwICovLApAQCAt
MTEwMiw2ICsxMTA1LDcgQEAKIAkJCQlBOEE0NzNCODE1MUE4MjVCMDA0MTIzRkYgLyogc3RydG9k
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyRTE1MUE4MjVCMDA0MTIzRkYgLyogVENQYWNr
ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MkYxNTFBODI1QjAwNDEyM0ZGIC8q
IFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUMyN0NDRUMxODU5NzAwMzAwMkE0MzA0
IC8qIE9yZGVyZWRNdWx0aW1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDMyMTUx
QTgyNUIwMDQxMjNGRiAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5Q2hhbmdlLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL09yZGVyZWRNdWx0aW1hcC5oIGIvU291cmNlL1dU
Ri93dGYvT3JkZXJlZE11bHRpbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk1YTg5N2FmZDI5NmRlZmJiM2Zl
MGVmZmM4ODM4ZGI5ZTFjYTFlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL09y
ZGVyZWRNdWx0aW1hcC5oCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBP
cmRlcmVkTXVsdGltYXBfaAorI2RlZmluZSBPcmRlcmVkTXVsdGltYXBfaAorCisjaW5jbHVkZSA8
d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvRXhwb3J0TWFjcm9zLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgor
I2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgT3JkZXJlZE11bHRpbWFw
TGlzdE5vZGUgOiBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8T3JkZXJlZE11bHRpbWFwTGlz
dE5vZGU8S2V5LCBWYWx1ZT4+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBPcmRlcmVkTXVsdGltYXBMaXN0Tm9kZShLZXlWYWx1ZVBhaXI8S2V5LCBWYWx1ZT4m
JiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHN0ZDo6Zm9yd2FyZDxLZXlWYWx1ZVBhaXI8S2V5
LCBWYWx1ZT4+KHZhbHVlKSkKKyAgICB7CisgICAgfQorICAgIEtleVZhbHVlUGFpcjxLZXksIFZh
bHVlPiogZ2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiAmbV92YWx1ZTsKKyAgICB9CisgICAg
T3JkZXJlZE11bHRpbWFwTGlzdE5vZGUqIG1fcHJldjsKKyAgICBPcmRlcmVkTXVsdGltYXBMaXN0
Tm9kZSogbV9uZXh0OworcHJpdmF0ZToKKyAgICBLZXlWYWx1ZVBhaXI8S2V5LCBWYWx1ZT4gbV92
YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xh
c3MgT3JkZXJlZE11bHRpbWFwOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZT4KK2NsYXNzIE9yZGVyZWRNdWx0aW1hcE5vZGUgOiBwdWJsaWMgUmVkQmxhY2tUcmVlPE9y
ZGVyZWRNdWx0aW1hcE5vZGU8S2V5LCBWYWx1ZT4sIEtleT46Ok5vZGUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9yZGVyZWRNdWx0aW1hcE5vZGUoT3JkZXJl
ZE11bHRpbWFwTGlzdE5vZGU8S2V5LCBWYWx1ZT4qIGZpcnN0RWxlbWVudCkKKyAgICB7CisgICAg
ICAgIGFwcGVuZChmaXJzdEVsZW1lbnQpOworICAgIH0KKyAgICBjb25zdCBLZXkmIGtleSgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9saXN0LmhlYWQoKS0+Z2V0KCktPmtleTsKKyAgICB9Cisg
ICAgT3JkZXJlZE11bHRpbWFwTGlzdE5vZGU8S2V5LCBWYWx1ZT4qIGJlZ2luKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2xpc3QuaGVhZCgpOworICAgIH0KKyAgICBPcmRlcmVkTXVsdGltYXBM
aXN0Tm9kZTxLZXksIFZhbHVlPiogZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBib29sIGlzRW1wdHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGlzdC5pc0Vt
cHR5KCk7CisgICAgfQorICAgIHZvaWQgYXBwZW5kKE9yZGVyZWRNdWx0aW1hcExpc3ROb2RlPEtl
eSwgVmFsdWU+KiBsaXN0Tm9kZSkKKyAgICB7CisgICAgICAgIG1fbGlzdC5hcHBlbmQobGlzdE5v
ZGUpOworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9saXN0LnNpemUoKTsKKyAgICB9Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBPcmRl
cmVkTXVsdGltYXA8S2V5LCBWYWx1ZT47CisgICAgRG91Ymx5TGlua2VkTGlzdDxPcmRlcmVkTXVs
dGltYXBMaXN0Tm9kZTxLZXksIFZhbHVlPj4gbV9saXN0OworfTsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+CitjbGFzcyBPcmRlcmVkTXVsdGltYXAgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgY2xhc3MgaXRlcmF0b3Igewor
ICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX25vZGUoMCkK
KyAgICAgICAgICAgICwgbV9saXN0Tm9kZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgS2V5VmFsdWVQYWlyPEtleSwgVmFsdWU+KiBnZXQoKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9saXN0Tm9kZS0+Z2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgS2V5
VmFsdWVQYWlyPEtleSwgVmFsdWU+JiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKmdldCgpOworICAgICAgICB9CisgICAgICAgIEtleVZhbHVlUGFpcjxLZXksIFZh
bHVlPiogb3BlcmF0b3ItPigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnZXQoKTsK
KyAgICAgICAgfQorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fbGlzdE5vZGUgPSBtX2xpc3ROb2RlLT5uZXh0KCk7CisgICAgICAgICAgICBp
ZiAobV9saXN0Tm9kZSA9PSBtX25vZGUtPmVuZCgpKSB7CisgICAgICAgICAgICAgICAgbV9ub2Rl
ID0gbV9ub2RlLT5zdWNjZXNzb3IoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlKQorICAg
ICAgICAgICAgICAgICAgICBtX2xpc3ROb2RlID0gbV9ub2RlLT5iZWdpbigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciBpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9ub2RlID09IGkubV9ub2RlICYmIG1fbGlzdE5vZGUgPT0gaS5tX2xpc3ROb2RlOworICAg
ICAgICB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciBpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBpKTsKKyAgICAgICAgfQorICAgIHBy
aXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcmRlcmVkTXVsdGltYXA8S2V5LCBWYWx1ZT47
CisgICAgICAgIE9yZGVyZWRNdWx0aW1hcE5vZGU8S2V5LCBWYWx1ZT4qIG1fbm9kZTsKKyAgICAg
ICAgT3JkZXJlZE11bHRpbWFwTGlzdE5vZGU8S2V5LCBWYWx1ZT4qIG1fbGlzdE5vZGU7CisgICAg
fTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIGl0ZXJhdG9y
IGk7CisgICAgICAgIGkubV9ub2RlID0gbV90cmVlLmZpcnN0KCk7CisgICAgICAgIGlmIChpLm1f
bm9kZSkKKyAgICAgICAgICAgIGkubV9saXN0Tm9kZSA9IGkubV9ub2RlLT5iZWdpbigpOworICAg
ICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7CisgICAgfQorICAgIAorICAgIGl0ZXJhdG9yIGlu
c2VydChLZXkmJiBrZXksIFZhbHVlJiYgdmFsdWUpCisgICAgeworICAgICAgICBpdGVyYXRvciBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2xpc3ROb2RlID0gbmV3IE9yZGVyZWRNdWx0aW1hcExp
c3ROb2RlPEtleSwgVmFsdWU+KEtleVZhbHVlUGFpcjxLZXksIFZhbHVlPihrZXksIHZhbHVlKSk7
CisgICAgICAgIE9yZGVyZWRNdWx0aW1hcE5vZGU8S2V5LCBWYWx1ZT4qIGZvdW5kID0gbV90cmVl
LmZpbmRFeGFjdChrZXkpOworICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBmb3Vu
ZCA9IG5ldyBPcmRlcmVkTXVsdGltYXBOb2RlPEtleSwgVmFsdWU+KHJlc3VsdC5tX2xpc3ROb2Rl
KTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnQoZm91bmQpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGZvdW5kLT5hcHBlbmQocmVzdWx0Lm1fbGlzdE5vZGUpOworICAgICAgICByZXN1
bHQubV9ub2RlID0gZm91bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGkpCisgICAgeworICAgICAgICBkZWxldGUgaS5tX2xp
c3ROb2RlOworICAgICAgICBpLm1fbm9kZS0+bV9saXN0LnJlbW92ZShpLm1fbGlzdE5vZGUpOwor
ICAgICAgICBpZiAoaS5tX25vZGUtPmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZGVsZXRlIGku
bV9ub2RlOworICAgICAgICAgICAgbV90cmVlLnJlbW92ZShpLm1fbm9kZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgaXRlcmF0b3IgZmluZEV4YWN0KGNvbnN0IEtleSYga2V5KSBjb25z
dAorICAgIHsKKyAgICAgICAgaXRlcmF0b3IgaTsKKyAgICAgICAgaS5tX25vZGUgPSBtX3RyZWUu
ZmluZEV4YWN0KGtleSk7CisgICAgICAgIGlmIChpLm1fbm9kZSkKKyAgICAgICAgICAgIGkubV9s
aXN0Tm9kZSA9IGkubV9ub2RlLT5iZWdpbigpOworICAgICAgICByZXR1cm4gaTsKKyAgICB9Cisg
ICAgCisgICAgaXRlcmF0b3IgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleSYg
a2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgaXRlcmF0b3IgaTsKKyAgICAgICAgaS5tX25vZGUg
PSBtX3RyZWUuZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGtleSk7CisgICAgICAgIGlmIChp
Lm1fbm9kZSkKKyAgICAgICAgICAgIGkubV9saXN0Tm9kZSA9IGkubV9ub2RlLT5iZWdpbigpOwor
ICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBpdGVyYXRvciBmaW5kR3JlYXRlc3RMZXNz
VGhhbk9yRXF1YWwoY29uc3QgS2V5JiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBpdGVyYXRv
ciBpOworICAgICAgICBpLm1fbm9kZSA9IG1fdHJlZS5maW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1
YWwoa2V5KTsKKyAgICAgICAgaWYgKGkubV9ub2RlKQorICAgICAgICAgICAgaS5tX2xpc3ROb2Rl
ID0gaS5tX25vZGUtPmJlZ2luKCk7CisgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICAKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgdG90YWwgPSAwOwor
ICAgICAgICBmb3IgKGF1dG8qIGkgPSBtX3RyZWUuZmlyc3QoKTsgaTsgaSA9IG1fdHJlZS5zdWNj
ZXNzb3IoaSkpCisgICAgICAgICAgICB0b3RhbCArPSBpLT5zaXplKCk7CisgICAgICAgIHJldHVy
biB0b3RhbDsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdHJlZS5pc0VtcHR5KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBSZWRCbGFj
a1RyZWU8T3JkZXJlZE11bHRpbWFwTm9kZTxLZXksIFZhbHVlPiwgS2V5PiBtX3RyZWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpPcmRlcmVkTXVsdGltYXA7CisKKyNl
bmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219393</attachid>
            <date>2013-12-16 21:15:58 -0800</date>
            <delta_ts>2013-12-19 19:13:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125827-20131216211558.patch</filename>
            <type>text/plain</type>
            <size>13058</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc5ODkyNWI4NWFhMWFmMDRkMGM1ZThh
ZWZjZjdiNjI0Zjk5MjRlNWEuLmJkZGU4N2U0M2JkNTRhZTdlY2IzYWY3MGRmNWE2YjVkMDliZjA1
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTMtMTItMTYgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYW4gb3JkZXJlZCBtdWx0
aW1hcCBpbiBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNTgyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFsbG93aW5nIGZvciBhIHF1aWNrIGxvb2t1cCBvZiBhbiBhcHByb3ByaWF0ZWx5IHNpemVk
IElPU3VyZmFjZSByZXF1aXJlcyB0aGUKKyAgICAgICAgdXNlIG9mIGFuIG9yZGVyZWQgbXVsdGlt
YXAuIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgY2FuIGJlIGNyZWF0ZWQgZnJvbSBhCisgICAgICAgIGJp
bmFyeSB0cmVlIGFuZCBhIGxpbmtlZCBsaXN0LCBib3RoIG9mIHdoaWNoIGFscmVhZHkgZXhpc3Qg
d2l0aGluIFdURi4gVGhpcworICAgICAgICBjbGFzcyB1c2VzIGEgdHJlZSBvZiBsaXN0cyBpbiBv
cmRlciB0byBpbXBsZW1lbnQgdGhlIG9yZGVyZWQgbXVsdGltYXAuCisKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvT3JkZXJlZE11bHRpbWFw
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXBMaXN0Tm9kZTo6T3JkZXJl
ZE11bHRpbWFwTGlzdE5vZGUpOiBMaXN0IG5vZGUsIGhvbGRzCisgICAgICAgIGEgdHVwbGUgb2Yg
dGhlIGtleSBhbmQgdmFsdWUKKyAgICAgICAgKFdURjo6T3JkZXJlZE11bHRpbWFwTGlzdE5vZGU6
OmdldCk6IFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBLZXlWYWx1ZVBhaXIKKyAgICAgICAgKFdU
Rjo6T3JkZXJlZE11bHRpbWFwTm9kZTo6T3JkZXJlZE11bHRpbWFwTm9kZSk6IFRyZWUgbm9kZSwg
aG9sZHMgYSBkb3VibHktCisgICAgICAgIGxpbmtlZCBsaXN0IG9mIE9yZGVyZWRNdWx0aW1hcExp
c3ROb2RlcworICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXBOb2RlOjprZXkpOgorICAgICAg
ICAoV1RGOjpPcmRlcmVkTXVsdGltYXBOb2RlOjpiZWdpbik6CisgICAgICAgIChXVEY6Ok9yZGVy
ZWRNdWx0aW1hcE5vZGU6OmVuZCk6CisgICAgICAgIChXVEY6Ok9yZGVyZWRNdWx0aW1hcE5vZGU6
OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXBOb2RlOjphcHBlbmQpOgor
ICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXBOb2RlOjpzaXplKToKKyAgICAgICAgKFdURjo6
T3JkZXJlZE11bHRpbWFwOjppdGVyYXRvcjo6aXRlcmF0b3IpOiBIb2xkcyBhIHBvaW50ZXIgdG8g
YSB0cmVlIG5vZGUKKyAgICAgICAgYW5kIGEgbGlzdCBub2RlLgorICAgICAgICAoV1RGOjpPcmRl
cmVkTXVsdGltYXA6Oml0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGlt
YXA6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXA6
Oml0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdURjo6T3JkZXJlZE11bHRpbWFwOjpp
dGVyYXRvcjo6b3BlcmF0b3IrKyk6IEluY3JlbWVudCB0aGUgbGlzdCBub2RlLiBJZiB3ZSByZWFj
aAorICAgICAgICB0aGUgZW5kLCBpbmNyZW1lbnQgdGhlIHRyZWUgbm9kZQorICAgICAgICAoV1RG
OjpPcmRlcmVkTXVsdGltYXA6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6
T3JkZXJlZE11bHRpbWFwOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Ok9y
ZGVyZWRNdWx0aW1hcDo6YmVnaW4pOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXA6OmVu
ZCk6CisgICAgICAgIChXVEY6Ok9yZGVyZWRNdWx0aW1hcDo6aW5zZXJ0KTogSW5zZXJ0cyBhIHRy
ZWUgbm9kZSBpZiBvbmUgaXMgbm90IHByZXNlbnQuIEluc2VydHMKKyAgICAgICAgYSBsaXN0IG5v
ZGUgaW50byB0aGUgcmVsZXZhbnQgdHJlZSBub2RlLgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVs
dGltYXA6OnJlbW92ZSk6IExvb2sgdXAgdGhlIHJlbGV2YW50IHRyZWUgbm9kZSwgdGhlbiByZW1v
dmUgdGhlCisgICAgICAgIGxpbmtlZCBsaXN0IG5vZGUKKyAgICAgICAgKFdURjo6T3JkZXJlZE11
bHRpbWFwOjpmaW5kRXhhY3QpOgorICAgICAgICAoV1RGOjpPcmRlcmVkTXVsdGltYXA6OmZpbmRM
ZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbCk6CisgICAgICAgIChXVEY6Ok9yZGVyZWRNdWx0aW1hcDo6
ZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKToKKyAgICAgICAgKFdURjo6T3JkZXJlZE11bHRp
bWFwOjpzaXplKToKKyAgICAgICAgKFdURjo6T3JkZXJlZE11bHRpbWFwOjppc0VtcHR5KToKKwog
MjAxMy0xMi0xMSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IERlZmluZSBtX2hhc0JhZFBhcmVudCBpbiBJbmxpbmVCb3ggaWYgZGVmaW5lZChBRERSRVNTX1NB
TklUSVpFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDBh
NzhmMDUwOGRmZDc4ODk4NjE2NGFlNmYwMTE2MjBkYjA0ZDhlYTAuLmZhN2RlMDBmNzQ5MmU1Y2Fj
Zjg5MDMyYmQwMjE2ZWJiNWQ4N2RkMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNTUsNiArNTUsNyBAQAogCQkxQTFEOEI5RTE3MzE4Nzk4MDAxNDFEQTQg
LyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMUQ4QjlEMTczMTg3OTgwMDE0MURBNCAvKiBGdW5jdGlvbkRpc3Bh
dGNoZXIuY3BwICovOyB9OwogCQkxQTIzM0M3RDE3REFBNkUzMDBBOTNBQ0YgLyogTWFsbG9jUHRy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIzM0M3
QzE3REFBNkUzMDBBOTNBQ0YgLyogTWFsbG9jUHRyLmggKi87IH07CiAJCTFBNkJCNzY5MTYyRjMw
MDUwMEREMTZEQiAvKiBTdHJlYW1CdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkJCNzY4MTYyRjMwMDUwMEREMTZEQiAvKiBTdHJlYW1CdWZm
ZXIuaCAqLzsgfTsKKwkJMUMyN0NDRUMxODU5NzAwMzAwMkE0MzA0IC8qIE9yZGVyZWRNdWx0aW1h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyN0ND
RUIxODU5NzAwMzAwMkE0MzA0IC8qIE9yZGVyZWRNdWx0aW1hcC5oICovOyB9OwogCQkxRkE0N0M4
QTE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkE0N0M4ODE1MjUwMkRBMDA1NjhEMUIgLyog
V2ViQ29yZVRocmVhZC5jcHAgKi87IH07CiAJCTFGQTQ3QzhCMTUyNTAyREEwMDU2OEQxQiAvKiBX
ZWJDb3JlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxRkE0N0M4OTE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5oICovOyB9Owog
CQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYxNDdCMDgx
NUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCAqLzsgfTsKQEAg
LTMyMiw2ICszMjMsNyBAQAogCQkxQTIzM0M3QzE3REFBNkUzMDBBOTNBQ0YgLyogTWFsbG9jUHRy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hbGxvY1B0ci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTNGNkJFNjE3NEFEQTIxMDBCMkVFQTcgLyogTmV2ZXJE
ZXN0cm95ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV2ZXJEZXN0cm95ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUE2QkI3NjgxNjJGMzAwNTAwREQxNkRCIC8qIFN0cmVhbUJ1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1CdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMyN0NDRUIxODU5NzAwMzAwMkE0MzA0IC8qIE9y
ZGVyZWRNdWx0aW1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcmRlcmVk
TXVsdGltYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUZBNDdDODgxNTI1MDJE
QTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViQ29yZVRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFGQTQ3Qzg5MTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjYxNDdCMDgxNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmlu
Z0NvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdlclRv
U3RyaW5nQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQyLDYg
Kzc0NCw3IEBACiAJCQkJQThBNDcyRDUxNTFBODI1QjAwNDEyM0ZGIC8qIE51bWJlck9mQ29yZXMu
Y3BwICovLAogCQkJCUE4QTQ3MkQ2MTUxQTgyNUIwMDQxMjNGRiAvKiBOdW1iZXJPZkNvcmVzLmgg
Ki8sCiAJCQkJN0UyOUMzM0QxNUZGRDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmgg
Ki8sCisJCQkJMUMyN0NDRUIxODU5NzAwMzAwMkE0MzA0IC8qIE9yZGVyZWRNdWx0aW1hcC5oICov
LAogCQkJCUE4QTQ3MkQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRvci5oICovLAogCQkJ
CUE4QTQ3MkQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLywKIAkJ
CQlBOEE0NzJEQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuY3BwICovLApAQCAt
MTEwMiw2ICsxMTA1LDcgQEAKIAkJCQlBOEE0NzNCODE1MUE4MjVCMDA0MTIzRkYgLyogc3RydG9k
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyRTE1MUE4MjVCMDA0MTIzRkYgLyogVENQYWNr
ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MkYxNTFBODI1QjAwNDEyM0ZGIC8q
IFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUMyN0NDRUMxODU5NzAwMzAwMkE0MzA0
IC8qIE9yZGVyZWRNdWx0aW1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDMyMTUx
QTgyNUIwMDQxMjNGRiAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5Q2hhbmdlLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL09yZGVyZWRNdWx0aW1hcC5oIGIvU291cmNlL1dU
Ri93dGYvT3JkZXJlZE11bHRpbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU5YmVlNTA5NDk1Nzk2NmVkMmE1
ZDgzNzJkOTYwMGM3ZmY2NWE4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL09y
ZGVyZWRNdWx0aW1hcC5oCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBP
cmRlcmVkTXVsdGltYXBfaAorI2RlZmluZSBPcmRlcmVkTXVsdGltYXBfaAorCisjaW5jbHVkZSA8
d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvRXhwb3J0TWFjcm9zLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgor
I2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgT3JkZXJlZE11bHRpbWFw
TGlzdE5vZGUgOiBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8T3JkZXJlZE11bHRpbWFwTGlz
dE5vZGU8S2V5LCBWYWx1ZT4+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBPcmRlcmVkTXVsdGltYXBMaXN0Tm9kZShLZXlWYWx1ZVBhaXI8S2V5LCBWYWx1ZT4m
JiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHN0ZDo6Zm9yd2FyZDxLZXlWYWx1ZVBhaXI8S2V5
LCBWYWx1ZT4+KHZhbHVlKSkKKyAgICB7CisgICAgfQorICAgIEtleVZhbHVlUGFpcjxLZXksIFZh
bHVlPiogZ2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiAmbV92YWx1ZTsKKyAgICB9CisgICAg
T3JkZXJlZE11bHRpbWFwTGlzdE5vZGUqIG1fcHJldjsKKyAgICBPcmRlcmVkTXVsdGltYXBMaXN0
Tm9kZSogbV9uZXh0OworcHJpdmF0ZToKKyAgICBLZXlWYWx1ZVBhaXI8S2V5LCBWYWx1ZT4gbV92
YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xh
c3MgT3JkZXJlZE11bHRpbWFwOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZT4KK2NsYXNzIE9yZGVyZWRNdWx0aW1hcE5vZGUgOiBwdWJsaWMgUmVkQmxhY2tUcmVlPE9y
ZGVyZWRNdWx0aW1hcE5vZGU8S2V5LCBWYWx1ZT4sIEtleT46Ok5vZGUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9yZGVyZWRNdWx0aW1hcE5vZGUoT3JkZXJl
ZE11bHRpbWFwTGlzdE5vZGU8S2V5LCBWYWx1ZT4qIGZpcnN0RWxlbWVudCkKKyAgICB7CisgICAg
ICAgIGFwcGVuZChmaXJzdEVsZW1lbnQpOworICAgIH0KKyAgICBjb25zdCBLZXkmIGtleSgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9saXN0LmhlYWQoKS0+Z2V0KCktPmtleTsKKyAgICB9Cisg
ICAgT3JkZXJlZE11bHRpbWFwTGlzdE5vZGU8S2V5LCBWYWx1ZT4qIGJlZ2luKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2xpc3QuaGVhZCgpOworICAgIH0KKyAgICBPcmRlcmVkTXVsdGltYXBM
aXN0Tm9kZTxLZXksIFZhbHVlPiogZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBib29sIGlzRW1wdHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGlzdC5pc0Vt
cHR5KCk7CisgICAgfQorICAgIHZvaWQgYXBwZW5kKE9yZGVyZWRNdWx0aW1hcExpc3ROb2RlPEtl
eSwgVmFsdWU+KiBsaXN0Tm9kZSkKKyAgICB7CisgICAgICAgIG1fbGlzdC5hcHBlbmQobGlzdE5v
ZGUpOworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9saXN0LnNpemUoKTsKKyAgICB9Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBPcmRl
cmVkTXVsdGltYXA8S2V5LCBWYWx1ZT47CisgICAgRG91Ymx5TGlua2VkTGlzdDxPcmRlcmVkTXVs
dGltYXBMaXN0Tm9kZTxLZXksIFZhbHVlPj4gbV9saXN0OworfTsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+CitjbGFzcyBPcmRlcmVkTXVsdGltYXAgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgY2xhc3MgaXRlcmF0b3Igewor
ICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX25vZGUoMCkK
KyAgICAgICAgICAgICwgbV9saXN0Tm9kZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgS2V5VmFsdWVQYWlyPEtleSwgVmFsdWU+KiBnZXQoKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9saXN0Tm9kZS0+Z2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgS2V5
VmFsdWVQYWlyPEtleSwgVmFsdWU+JiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKmdldCgpOworICAgICAgICB9CisgICAgICAgIEtleVZhbHVlUGFpcjxLZXksIFZh
bHVlPiogb3BlcmF0b3ItPigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnZXQoKTsK
KyAgICAgICAgfQorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fbGlzdE5vZGUgPSBtX2xpc3ROb2RlLT5uZXh0KCk7CisgICAgICAgICAgICBp
ZiAobV9saXN0Tm9kZSA9PSBtX25vZGUtPmVuZCgpKSB7CisgICAgICAgICAgICAgICAgbV9ub2Rl
ID0gbV9ub2RlLT5zdWNjZXNzb3IoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlKQorICAg
ICAgICAgICAgICAgICAgICBtX2xpc3ROb2RlID0gbV9ub2RlLT5iZWdpbigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciBpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9ub2RlID09IGkubV9ub2RlICYmIG1fbGlzdE5vZGUgPT0gaS5tX2xpc3ROb2RlOworICAg
ICAgICB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciBpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBpKTsKKyAgICAgICAgfQorICAgIHBy
aXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcmRlcmVkTXVsdGltYXA8S2V5LCBWYWx1ZT47
CisgICAgICAgIE9yZGVyZWRNdWx0aW1hcE5vZGU8S2V5LCBWYWx1ZT4qIG1fbm9kZTsKKyAgICAg
ICAgT3JkZXJlZE11bHRpbWFwTGlzdE5vZGU8S2V5LCBWYWx1ZT4qIG1fbGlzdE5vZGU7CisgICAg
fTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIGl0ZXJhdG9y
IGk7CisgICAgICAgIGkubV9ub2RlID0gbV90cmVlLmZpcnN0KCk7CisgICAgICAgIGlmIChpLm1f
bm9kZSkKKyAgICAgICAgICAgIGkubV9saXN0Tm9kZSA9IGkubV9ub2RlLT5iZWdpbigpOworICAg
ICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7CisgICAgfQorICAgIAorICAgIGl0ZXJhdG9yIGlu
c2VydChLZXkmJiBrZXksIFZhbHVlJiYgdmFsdWUpCisgICAgeworICAgICAgICBpdGVyYXRvciBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2xpc3ROb2RlID0gbmV3IE9yZGVyZWRNdWx0aW1hcExp
c3ROb2RlPEtleSwgVmFsdWU+KEtleVZhbHVlUGFpcjxLZXksIFZhbHVlPihrZXksIHZhbHVlKSk7
CisgICAgICAgIE9yZGVyZWRNdWx0aW1hcE5vZGU8S2V5LCBWYWx1ZT4qIGZvdW5kID0gbV90cmVl
LmZpbmRFeGFjdChrZXkpOworICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBmb3Vu
ZCA9IG5ldyBPcmRlcmVkTXVsdGltYXBOb2RlPEtleSwgVmFsdWU+KHJlc3VsdC5tX2xpc3ROb2Rl
KTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnQoZm91bmQpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGZvdW5kLT5hcHBlbmQocmVzdWx0Lm1fbGlzdE5vZGUpOworICAgICAgICByZXN1
bHQubV9ub2RlID0gZm91bmQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGkpCisgICAgeworICAgICAgICBpLm1fbm9kZS0+bV9s
aXN0LnJlbW92ZShpLm1fbGlzdE5vZGUpOworICAgICAgICBkZWxldGUgaS5tX2xpc3ROb2RlOwor
ICAgICAgICBpZiAoaS5tX25vZGUtPmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV90cmVlLnJl
bW92ZShpLm1fbm9kZSk7CisgICAgICAgICAgICBkZWxldGUgaS5tX25vZGU7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgaXRlcmF0b3IgZmluZEV4YWN0KGNvbnN0IEtleSYga2V5KSBjb25z
dAorICAgIHsKKyAgICAgICAgaXRlcmF0b3IgaTsKKyAgICAgICAgaS5tX25vZGUgPSBtX3RyZWUu
ZmluZEV4YWN0KGtleSk7CisgICAgICAgIGlmIChpLm1fbm9kZSkKKyAgICAgICAgICAgIGkubV9s
aXN0Tm9kZSA9IGkubV9ub2RlLT5iZWdpbigpOworICAgICAgICByZXR1cm4gaTsKKyAgICB9Cisg
ICAgCisgICAgaXRlcmF0b3IgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleSYg
a2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgaXRlcmF0b3IgaTsKKyAgICAgICAgaS5tX25vZGUg
PSBtX3RyZWUuZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGtleSk7CisgICAgICAgIGlmIChp
Lm1fbm9kZSkKKyAgICAgICAgICAgIGkubV9saXN0Tm9kZSA9IGkubV9ub2RlLT5iZWdpbigpOwor
ICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBpdGVyYXRvciBmaW5kR3JlYXRlc3RMZXNz
VGhhbk9yRXF1YWwoY29uc3QgS2V5JiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBpdGVyYXRv
ciBpOworICAgICAgICBpLm1fbm9kZSA9IG1fdHJlZS5maW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1
YWwoa2V5KTsKKyAgICAgICAgaWYgKGkubV9ub2RlKQorICAgICAgICAgICAgaS5tX2xpc3ROb2Rl
ID0gaS5tX25vZGUtPmJlZ2luKCk7CisgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICAKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgdG90YWwgPSAwOwor
ICAgICAgICBmb3IgKGF1dG8qIGkgPSBtX3RyZWUuZmlyc3QoKTsgaTsgaSA9IG1fdHJlZS5zdWNj
ZXNzb3IoaSkpCisgICAgICAgICAgICB0b3RhbCArPSBpLT5zaXplKCk7CisgICAgICAgIHJldHVy
biB0b3RhbDsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdHJlZS5pc0VtcHR5KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBSZWRCbGFj
a1RyZWU8T3JkZXJlZE11bHRpbWFwTm9kZTxLZXksIFZhbHVlPiwgS2V5PiBtX3RyZWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpPcmRlcmVkTXVsdGltYXA7CisKKyNl
bmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>