<?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>141295</bug_id>
          
          <creation_ts>2015-02-05 10:48:51 -0800</creation_ts>
          <short_desc>Switch to file backed buffer when resource is cached to disk</short_desc>
          <delta_ts>2015-02-05 14:18:14 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>psolanki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1067142</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-05 10:48:51 -0800</bug_when>
    <thetext>Wire the mechanism used with CFNetwork cache to the new disk cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067168</commentid>
    <comment_count>1</comment_count>
      <attachid>246121</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-05 12:31:54 -0800</bug_when>
    <thetext>Created attachment 246121
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067169</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-05 12:34:09 -0800</bug_when>
    <thetext>Attachment 246121 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:284:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067172</commentid>
    <comment_count>3</comment_count>
      <attachid>246121</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 12:37:49 -0800</bug_when>
    <thetext>Comment on attachment 246121
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=246121&amp;action=review

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:146
&gt; +    typedef std::function&lt;bool (std::unique_ptr&lt;Entry&gt;)&gt; RetriveCompletionHandler;

&quot;Retrieve&quot;

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:448
&gt; +void NetworkCacheStorage::store(const NetworkCacheKey&amp; key, const Entry&amp; entry, StoreCompletionHandler completionHandler)

Since these std::function are passed by value, don&apos;t we want to WTF::move() them into the StoreOperation struct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067174</commentid>
    <comment_count>4</comment_count>
      <attachid>246121</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 12:40:46 -0800</bug_when>
    <thetext>Comment on attachment 246121
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=246121&amp;action=review

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:342
&gt; +            RefPtr&lt;NetworkResourceLoader&gt; loader(this);

Looks like this should be a Ref?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067177</commentid>
    <comment_count>5</comment_count>
      <attachid>246121</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 12:56:02 -0800</bug_when>
    <thetext>Comment on attachment 246121
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=246121&amp;action=review

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:257
&gt; +    if (!map)

On failure mmap() returns MAP_FAILED which is (void*)-1, not 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067189</commentid>
    <comment_count>6</comment_count>
      <attachid>246121</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 13:16:14 -0800</bug_when>
    <thetext>Comment on attachment 246121
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=246121&amp;action=review

r=me % a few comments.

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:448
&gt;&gt; +void NetworkCacheStorage::store(const NetworkCacheKey&amp; key, const Entry&amp; entry, StoreCompletionHandler completionHandler)
&gt; 
&gt; Since these std::function are passed by value, don&apos;t we want to WTF::move() them into the StoreOperation struct?

or pass them by const ref.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067193</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-05 13:29:31 -0800</bug_when>
    <thetext>&gt; Looks like this should be a Ref?

Ref doesn&apos;t work with C++11 lambdas since it doesn&apos;t have copy-constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067194</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-05 13:29:52 -0800</bug_when>
    <thetext>&gt; On failure mmap() returns MAP_FAILED which is (void*)-1, not 0.

Good catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067195</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 13:31:37 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Looks like this should be a Ref?
&gt; 
&gt; Ref doesn&apos;t work with C++11 lambdas since it doesn&apos;t have copy-constructor.

Right. never mind then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067197</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 13:36:52 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 246121 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=246121&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:257
&gt; &gt; +    if (!map)
&gt; 
&gt; On failure mmap() returns MAP_FAILED which is (void*)-1, not 0.

BTW, it looks like we have the same bug in decodeEntry() already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067211</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-05 14:18:14 -0800</bug_when>
    <thetext>https://trac.webkit.org/r179708</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246121</attachid>
            <date>2015-02-05 12:31:54 -0800</date>
            <delta_ts>2015-02-05 13:16:14 -0800</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-did-cache.patch</filename>
            <type>text/plain</type>
            <size>15794</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTY5NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAyLTA1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggdG8gZmlsZSBiYWNr
ZWQgYnVmZmVyIHdoZW4gcmVzb3VyY2UgaXMgY2FjaGVkIHRvIGRpc2sKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI5NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpcmUgdGhlIERpZENhY2hlUmVzb3Vy
Y2UgbWVjaGFuaXNtIHRvIHRoZSBuZXcgZGlzayBjYWNoZS4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisKKyAgICAgICAgICAgIFNlbmQg
RGlkQ2FjaGVSZXNvdXJjZSBtZXNzYWdlIHRvIHRoZSB3ZWIgcHJvY2VzcyBzbyBpdCBjYW4gc3dp
dGNoIHRoZSByZXNvdXJjZSB0byBmaWxlIGJhY2tpbmcuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OnN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjp1cGRhdGUpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgKFdlYktp
dDo6RGlzcGF0Y2hQdHI6OkRpc3BhdGNoUHRyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZVN0b3JhZ2U6OkRhdGE6OkRhdGEpOgorICAgICAgICAoV2ViS2l0OjptYXBGaWxlKToK
KyAgICAgICAgKFdlYktpdDo6ZGVjb2RlRW50cnkpOgorICAgICAgICAoV2ViS2l0OjpyZXRyaWV2
ZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0b3JhZ2U6OnJldHJpZXZl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RvcmFnZTo6c3RvcmUpOgorCisgICAg
ICAgICAgICBNYXAgZmlsZXMgbGFyZ2VyIHRoYW4gYSBtZW1vcnkgcGFnZSBhZnRlciBhIHN1Y2Nl
c3NmdWwgc3RvcmUuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RvcmFnZTo6dXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6ZW5jb2RlRW50cnkpOiBEZWxldGVkLgorCiAyMDE1LTAy
LTA0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBj
b3B5aW5nIHN0ZDo6ZnVuY3Rpb25zIGFjcm9zcyB0aHJlYWRzIGluIE5ldHdvcmtDYWNoZVN0b3Jh
Z2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTc5NjkwKQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzM2LDggKzMzNiwxOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmlu
aXNoTG9hCiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzUHJpdmF0ZSA9IHNlc3Npb25JRCgp
LmlzRXBoZW1lcmFsKCk7Ci0gICAgICAgIGlmIChoYXNDYWNoZWFibGVSZWRpcmVjdCAmJiAhaXNQ
cml2YXRlKQotICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZShvcmln
aW5hbFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgbV9idWZmZXJlZERhdGFGb3JDYWNoZS5yZWxlYXNl
KCkpOworICAgICAgICBpZiAoaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgIWlzUHJpdmF0ZSkgewor
ICAgICAgICAgICAgLy8gS2VlcCB0aGUgY29ubmVjdGlvbiBhbGl2ZS4KKyAgICAgICAgICAgIFJl
ZlB0cjxOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY29ubmVjdGlvbihjb25uZWN0aW9u
VG9XZWJQcm9jZXNzKCkpOworICAgICAgICAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRl
cj4gbG9hZGVyKHRoaXMpOworICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5z
dG9yZShvcmlnaW5hbFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgV1RGOjptb3ZlKG1fYnVmZmVyZWRE
YXRhRm9yQ2FjaGUpLCBbbG9hZGVyLCBjb25uZWN0aW9uXShOZXR3b3JrQ2FjaGU6Ok1hcHBlZEJv
ZHkmIG1hcHBlZEJvZHkpIHsKKyNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQorICAgICAg
ICAgICAgICAgIGlmIChtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlSGFuZGxlLmlzTnVsbCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgTE9HKE5ldHdv
cmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc2VuZGluZyBEaWRDYWNoZVJlc291cmNlIik7Cisg
ICAgICAgICAgICAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb246OkRpZENhY2hlUmVzb3VyY2UobG9hZGVyLT5vcmlnaW5hbFJlcXVlc3QoKSwgbWFwcGVk
Qm9keS5zaGFyZWFibGVSZXNvdXJjZUhhbmRsZSwgbG9hZGVyLT5zZXNzaW9uSUQoKSkpOworI2Vu
ZGlmCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZS5jcHAJKHJldmlzaW9uIDE3OTY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBA
QCBzdGF0aWMgYm9vbCBjYW5TdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gcmVzcG9uc2VE
YXRhKQordm9pZCBOZXR3b3JrQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZURhdGEsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoaXNFbmFibGVkKCkpOwogICAgIEFTU0VSVChyZXNwb25zZURhdGEpOwpAQCAtMjk0
LDkgKzI5NCwxOSBAQCB2b2lkIE5ldHdvcmtDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6CiAg
ICAgfQogCiAgICAgYXV0byBrZXkgPSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKLSAg
ICBhdXRvIHN0b3JhZ2VFbnRyeSA9IGVuY29kZVN0b3JhZ2VFbnRyeShvcmlnaW5hbFJlcXVlc3Qs
IHJlc3BvbnNlLCByZXNwb25zZURhdGEpOworICAgIGF1dG8gc3RvcmFnZUVudHJ5ID0gZW5jb2Rl
U3RvcmFnZUVudHJ5KG9yaWdpbmFsUmVxdWVzdCwgcmVzcG9uc2UsIFdURjo6bW92ZShyZXNwb25z
ZURhdGEpKTsKIAotICAgIG1fc3RvcmFnZS0+c3RvcmUoa2V5LCBzdG9yYWdlRW50cnksIFtdKGJv
b2wgc3VjY2VzcykgeworICAgIG1fc3RvcmFnZS0+c3RvcmUoa2V5LCBzdG9yYWdlRW50cnksIFtj
b21wbGV0aW9uSGFuZGxlcl0oYm9vbCBzdWNjZXNzLCBjb25zdCBOZXR3b3JrQ2FjaGVTdG9yYWdl
OjpEYXRhJiBib2R5RGF0YSkgeworICAgICAgICBNYXBwZWRCb2R5IG1hcHBlZEJvZHk7CisjaWYg
RU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKKyAgICAgICAgaWYgKGJvZHlEYXRhLmlzTWFwKCkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJl
ZE1lbW9yeTo6Y3JlYXRlRnJvbVZNQnVmZmVyKGNvbnN0X2Nhc3Q8dWludDhfdCo+KGJvZHlEYXRh
LmRhdGEoKSksIGJvZHlEYXRhLnNpemUoKSk7CisgICAgICAgICAgICBtYXBwZWRCb2R5LnNoYXJl
YWJsZVJlc291cmNlID0gc2hhcmVkTWVtb3J5ID8gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShX
VEY6Om1vdmUoc2hhcmVkTWVtb3J5KSwgMCwgYm9keURhdGEuc2l6ZSgpKSA6IG51bGxwdHI7Cisg
ICAgICAgICAgICBpZiAobWFwcGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZSkKKyAgICAgICAgICAg
ICAgICBtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlLT5jcmVhdGVIYW5kbGUobWFwcGVkQm9k
eS5zaGFyZWFibGVSZXNvdXJjZUhhbmRsZSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihtYXBwZWRCb2R5KTsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwg
IihOZXR3b3JrUHJvY2Vzcykgc3RvcmUgc3VjY2Vzcz0lZCIsIHN1Y2Nlc3MpOwogICAgIH0pOwog
fQpAQCAtMzExLDcgKzMyMSw3IEBAIHZvaWQgTmV0d29ya0NhY2hlOjp1cGRhdGUoY29uc3QgV2Vi
Q29yZToKICAgICBhdXRvIGtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAg
IGF1dG8gdXBkYXRlRW50cnkgPSBlbmNvZGVTdG9yYWdlRW50cnkob3JpZ2luYWxSZXF1ZXN0LCBy
ZXNwb25zZSwgZW50cnkuYnVmZmVyKTsKIAotICAgIG1fc3RvcmFnZS0+dXBkYXRlKGtleSwgdXBk
YXRlRW50cnksIGVudHJ5LnN0b3JhZ2VFbnRyeSwgW10oYm9vbCBzdWNjZXNzKSB7CisgICAgbV9z
dG9yYWdlLT51cGRhdGUoa2V5LCB1cGRhdGVFbnRyeSwgZW50cnkuc3RvcmFnZUVudHJ5LCBbXShi
b29sIHN1Y2Nlc3MsIGNvbnN0IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkRhdGEmKSB7CiAgICAgICAg
IExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHVwZGF0ZWQsIHN1Y2Nlc3M9JWQi
LCBzdWNjZXNzKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCShyZXZpc2lvbiAxNzk2OTApCisrKyBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNyArNjMsMTQgQEAgcHVibGljOgogICAgIH07CiAgICAgLy8gQ29tcGxl
dGlvbiBoYW5kbGVyIG1heSBnZXQgY2FsbGVkIGJhY2sgc3luY2hyb25vdXNseSBvbiBmYWlsdXJl
LgogICAgIHZvaWQgcmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3Rk
OjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4pOwotICAgIHZvaWQgc3Rv
cmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPik7CisKKyAgICBz
dHJ1Y3QgTWFwcGVkQm9keSB7CisjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKKyAgICAg
ICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBzaGFyZWFibGVSZXNvdXJjZTsKKyAgICAgICAg
U2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSBzaGFyZWFibGVSZXNvdXJjZUhhbmRsZTsKKyNlbmRp
ZgorICAgIH07CisgICAgdm9pZCBzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4mJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChNYXBwZWRCb2R5Jik+KTsKICAgICB2b2lk
IHVwZGF0ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBFbnRyeSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CiAKICAg
ICB2b2lkIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiAxNzk2OTAp
CisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
OiBtX3B0cihudWxscHRyKQogICAgIHsKICAgICB9CisgICAgRGlzcGF0Y2hQdHIoVCBwdHIpCisg
ICAgICAgIDogbV9wdHIocHRyKQorICAgIHsKKyAgICAgICAgaWYgKG1fcHRyKQorICAgICAgICAg
ICAgZGlzcGF0Y2hfcmV0YWluKG1fcHRyKTsKKyAgICB9CiAgICAgRGlzcGF0Y2hQdHIoY29uc3Qg
RGlzcGF0Y2hQdHImIG90aGVyKQogICAgICAgICA6IG1fcHRyKG90aGVyLm1fcHRyKQogICAgIHsK
QEAgLTEzNyw5ICsxNDMsMTIgQEAgcHVibGljOgogICAgICAgICBEYXRhIGJvZHk7CiAgICAgfTsK
ICAgICAvLyBUaGlzIG1heSBjYWxsIGNvbXBsZXRpb24gaGFuZGxlciBzeW5jaHJvbm91c2x5IG9u
IGZhaWx1cmUuCi0gICAgdm9pZCByZXRyaWV2ZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCB1bnNp
Z25lZCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjxib29sIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+
KT4pOwotICAgIHZvaWQgc3RvcmUoY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgRW50cnkm
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+KTsKLSAgICB2b2lkIHVwZGF0ZShj
b25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBFbnRyeSYgdXBkYXRlRW50cnksIGNvbnN0IEVu
dHJ5JiBleGlzdGluZ0VudHJ5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+KTsK
KyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+
IFJldHJpdmVDb21wbGV0aW9uSGFuZGxlcjsKKyAgICB2b2lkIHJldHJpZXZlKGNvbnN0IE5ldHdv
cmtDYWNoZUtleSYsIHVuc2lnbmVkIHByaW9yaXR5LCBSZXRyaXZlQ29tcGxldGlvbkhhbmRsZXIp
OworCisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2VzcywgY29uc3Qg
RGF0YSYgbWFwcGVkQm9keSk+IFN0b3JlQ29tcGxldGlvbkhhbmRsZXI7CisgICAgdm9pZCBzdG9y
ZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBFbnRyeSYsIFN0b3JlQ29tcGxldGlvbkhh
bmRsZXIpOworICAgIHZvaWQgdXBkYXRlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIGNvbnN0IEVu
dHJ5JiB1cGRhdGVFbnRyeSwgY29uc3QgRW50cnkmIGV4aXN0aW5nRW50cnksIFN0b3JlQ29tcGxl
dGlvbkhhbmRsZXIpOwogCiAgICAgdm9pZCBzZXRNYXhpbXVtU2l6ZShzaXplX3QpOwogICAgIHZv
aWQgY2xlYXIoKTsKQEAgLTE1Niw3ICsxNjUsNyBAQCBwcml2YXRlOgogCiAgICAgc3RydWN0IFJl
dHJpZXZlT3BlcmF0aW9uIHsKICAgICAgICAgTmV0d29ya0NhY2hlS2V5IGtleTsKLSAgICAgICAg
c3RkOjpmdW5jdGlvbjxib29sIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4gY29tcGxldGlvbkhh
bmRsZXI7CisgICAgICAgIFJldHJpdmVDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxl
cjsKICAgICB9OwogICAgIHZvaWQgZGlzcGF0Y2hSZXRyaWV2ZU9wZXJhdGlvbihzdGQ6OnVuaXF1
ZV9wdHI8Y29uc3QgUmV0cmlldmVPcGVyYXRpb24+KTsKICAgICB2b2lkIGRpc3BhdGNoUGVuZGlu
Z1JldHJpZXZlT3BlcmF0aW9ucygpOwpAQCAtMTY0LDE0ICsxNzMsMTQgQEAgcHJpdmF0ZToKICAg
ICBzdHJ1Y3QgU3RvcmVPcGVyYXRpb24gewogICAgICAgICBOZXR3b3JrQ2FjaGVLZXkga2V5Owog
ICAgICAgICBFbnRyeSBlbnRyeTsKLSAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sIHN1
Y2Nlc3MpPiBjb21wbGV0aW9uSGFuZGxlcjsKKyAgICAgICAgU3RvcmVDb21wbGV0aW9uSGFuZGxl
ciBjb21wbGV0aW9uSGFuZGxlcjsKICAgICB9OwogCiAgICAgc3RydWN0IFVwZGF0ZU9wZXJhdGlv
biB7CiAgICAgICAgIE5ldHdvcmtDYWNoZUtleSBrZXk7CiAgICAgICAgIEVudHJ5IGVudHJ5Owog
ICAgICAgICBFbnRyeSBleGlzdGluZ0VudHJ5OwotICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KGJvb2wgc3VjY2Vzcyk+IGNvbXBsZXRpb25IYW5kbGVyOworICAgICAgICBTdG9yZUNvbXBsZXRp
b25IYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyOwogICAgIH07CiAKICAgICBjb25zdCBTdHJpbmcg
bV9kaXJlY3RvcnlQYXRoOwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQkocmV2
aXNpb24gMTc5NjkwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw4IEBA
IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkRhdGE6OkRhdGEoY29uc3QgdWkKIAogTmV0d29ya0NhY2hl
U3RvcmFnZTo6RGF0YTo6RGF0YShEaXNwYXRjaFB0cjxkaXNwYXRjaF9kYXRhX3Q+IGRpc3BhdGNo
RGF0YSwgQmFja2luZyBiYWNraW5nKQogeworICAgIGlmICghZGlzcGF0Y2hEYXRhKQorICAgICAg
ICByZXR1cm47CiAgICAgY29uc3Qgdm9pZCogZGF0YTsKICAgICBtX2Rpc3BhdGNoRGF0YSA9IGFk
b3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVhdGVfbWFwKGRpc3BhdGNoRGF0YS5nZXQoKSwg
JmRhdGEsICZtX3NpemUpKTsKICAgICBtX2RhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSk7CkBAIC0xNjMsNyArMTY1LDcgQEAgc3RhdGljIERpc3BhdGNoUHRyPGRpc3BhdGNo
X2lvX3Q+IG9wZW5GaQogCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBGaWxlT3BlblR5
cGU6OkNyZWF0ZToKLSAgICAgICAgb2ZsYWcgPSBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5D
IHwgT19OT05CTE9DSzsKKyAgICAgICAgb2ZsYWcgPSBPX1JEV1IgfCBPX0NSRUFUIHwgT19UUlVO
QyB8IE9fTk9OQkxPQ0s7CiAgICAgICAgIG1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUjsKICAgICAg
ICAgV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKGRpcmVjdG9yeVBhdGhGb3JLZXkoa2V5LCBj
YWNoZVBhdGgpKTsKICAgICAgICAgYnJlYWs7CkBAIC0yNDksNiArMjUxLDE3IEBAIHN0YXRpYyBi
b29sIGRlY29kZUVudHJ5TWV0YURhdGEoRW50cnlNZXQKICAgICByZXR1cm4gc3VjY2VzczsKIH0K
IAorc3RhdGljIERpc3BhdGNoUHRyPGRpc3BhdGNoX2RhdGFfdD4gbWFwRmlsZShpbnQgZmQsIHNp
emVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0
ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIG9mZnNldCk7CisgICAgaWYgKCFt
YXApCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0RGlz
cGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbbWFwLCBzaXplXSB7CisgICAgICAgIG11bm1hcChtYXAsIHNpemUpOworICAgIH0p
KTsKKyAgICByZXR1cm4gYm9keU1hcDsKK30KKwogc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrQ2FjaGVTdG9yYWdlOjpFbnRyeT4gZGVjb2RlRW50cnkoZGlzcGF0Y2hfZGF0YV90IGZpbGVE
YXRhLCBpbnQgZmQsIGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5KQogewogICAgIEVudHJ5TWV0
YURhdGEgbWV0YURhdGE7CkBAIC0yNjksMTcgKzI4MiwxMyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPE5ldHdvcmtDYWNoZVN0b3JhCiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAi
KE5ldHdvcmtQcm9jZXNzKSBoZWFkZXIgY2hlY2tzdW0gbWlzbWF0Y2giKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHNpemVfdCBtYXBTaXplID0gbWV0YURhdGEuYm9keVNp
emU7Ci0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBtYXBTaXplLCBQUk9UX1JFQUQsIE1B
UF9QUklWQVRFLCBmZCwgbWV0YURhdGEuYm9keU9mZnNldCk7Ci0gICAgaWYgKCFtYXApIHsKKwor
ICAgIGF1dG8gYm9keURhdGEgPSBtYXBGaWxlKGZkLCBtZXRhRGF0YS5ib2R5T2Zmc2V0LCBtZXRh
RGF0YS5ib2R5U2l6ZSk7CisgICAgaWYgKCFib2R5RGF0YSkgewogICAgICAgICBMT0coTmV0d29y
a0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2VzcykgbWFwIGZhaWxlZCIpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvIGJvZHlEYXRhID0gYWRvcHREaXNwYXRj
aChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAsIG1ldGFEYXRhLmJvZHlTaXplLCBkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbbWFwLCBtYXBTaXplXSB7Ci0gICAgICAgIG11bm1hcChtYXAsIG1h
cFNpemUpOwotICAgIH0pKTsKLQogICAgIGlmIChtZXRhRGF0YS5ib2R5Q2hlY2tzdW0gIT0gaGFz
aERhdGEoYm9keURhdGEuZ2V0KCkpKSB7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdl
LCAiKE5ldHdvcmtQcm9jZXNzKSBkYXRhIGNoZWNrc3VtIG1pc21hdGNoIik7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMzMwLDEyICszMzksNiBAQCBzdGF0aWMgRGlzcGF0Y2hQdHI8ZGlz
cGF0Y2hfZGF0YV90PiBlbmNvCiAgICAgcmV0dXJuIGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0
YV9jcmVhdGVfY29uY2F0KGhlYWRlckRhdGEuZ2V0KCksIGFsaWdubWVudERhdGEuZ2V0KCkpKTsK
IH0KIAotc3RhdGljIERpc3BhdGNoUHRyPGRpc3BhdGNoX2RhdGFfdD4gZW5jb2RlRW50cnkoY29u
c3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5
JiBlbnRyeSkKLXsKLSAgICBhdXRvIGVuY29kZWRIZWFkZXIgPSBlbmNvZGVFbnRyeUhlYWRlcihr
ZXksIGVudHJ5KTsKLSAgICByZXR1cm4gYWRvcHREaXNwYXRjaChkaXNwYXRjaF9kYXRhX2NyZWF0
ZV9jb25jYXQoZW5jb2RlZEhlYWRlci5nZXQoKSwgZW50cnkuYm9keS5kaXNwYXRjaERhdGEoKSkp
OwotfQotCiB2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnJlbW92ZUVudHJ5KGNvbnN0IE5ldHdv
cmtDYWNoZUtleSYga2V5KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC00
MDcsNyArNDEwLDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpkaXNwYXRjaFBlbmRpbgog
ICAgIH0KIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgcmV0cmlldmVBY3RpdmUoY29uc3Qg
VCYgb3BlcmF0aW9ucywgY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIHN0ZDo6ZnVuY3Rpb248
Ym9vbCAoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5Pik+JiBjb21w
bGV0aW9uSGFuZGxlcikKK3RlbXBsYXRlIDxjbGFzcyBUPiBib29sIHJldHJpZXZlQWN0aXZlKGNv
bnN0IFQmIG9wZXJhdGlvbnMsIGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBOZXR3b3JrQ2Fj
aGVTdG9yYWdlOjpSZXRyaXZlQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucykgewogICAgICAgICBpZiAo
b3BlcmF0aW9uLT5rZXkgPT0ga2V5KSB7CkBAIC00MjIsNyArNDI1LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFQ+IGJvb2wgcmV0cmlldmVBY3RpdmUoYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpyZXRyaWV2ZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtl
eSwgdW5zaWduZWQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoc3RkOjp1bmlxdWVfcHRy
PEVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpy
ZXRyaWV2ZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgdW5zaWduZWQgcHJpb3JpdHksIFJl
dHJpdmVDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChwcmlvcml0eSA8PSBtYXhpbXVtUmV0cmll
dmVQcmlvcml0eSk7CkBAIC00NDIsNyArNDQ1LDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdl
OjpyZXRyaWV2ZShjb25zdAogICAgIGRpc3BhdGNoUGVuZGluZ1JldHJpZXZlT3BlcmF0aW9ucygp
OwogfQogCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnN0b3JlKGNvbnN0IE5ldHdvcmtDYWNo
ZUtleSYga2V5LCBjb25zdCBFbnRyeSYgZW50cnksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCBz
dWNjZXNzKT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnN0
b3JlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBFbnRyeSYgZW50cnksIFN0b3Jl
Q29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIApAQCAtNDU1LDExICs0NTgsMTUgQEAgdm9pZCBOZXR3b3JrQ2FjaGVT
dG9yYWdlOjpzdG9yZShjb25zdCBOZQogCiAgICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVBhdGhDYXB0
dXJlKG1fZGlyZWN0b3J5UGF0aCk7CiAgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9R
dWV1ZS5nZXQoKSwgW3RoaXMsICZzdG9yZSwgY2FjaGVQYXRoQ2FwdHVyZV0gewotICAgICAgICBh
dXRvIGRhdGEgPSBlbmNvZGVFbnRyeShzdG9yZS5rZXksIHN0b3JlLmVudHJ5KTsKKyAgICAgICAg
YXV0byBlbmNvZGVkSGVhZGVyID0gZW5jb2RlRW50cnlIZWFkZXIoc3RvcmUua2V5LCBzdG9yZS5l
bnRyeSk7CisgICAgICAgIGF1dG8gd3JpdGVEYXRhID0gYWRvcHREaXNwYXRjaChkaXNwYXRjaF9k
YXRhX2NyZWF0ZV9jb25jYXQoZW5jb2RlZEhlYWRlci5nZXQoKSwgc3RvcmUuZW50cnkuYm9keS5k
aXNwYXRjaERhdGEoKSkpOworCisgICAgICAgIHNpemVfdCBib2R5T2Zmc2V0ID0gZGlzcGF0Y2hf
ZGF0YV9nZXRfc2l6ZShlbmNvZGVkSGVhZGVyLmdldCgpKTsKKyAgICAgICAgc2l6ZV90IGJvZHlT
aXplID0gc3RvcmUuZW50cnkuYm9keS5zaXplKCk7CiAKICAgICAgICAgaW50IGZkOwogICAgICAg
ICBhdXRvIGNoYW5uZWwgPSBvcGVuRmlsZUZvcktleShzdG9yZS5rZXksIEZpbGVPcGVuVHlwZTo6
Q3JlYXRlLCBjYWNoZVBhdGhDYXB0dXJlLnN0cmluZygpLCBmZCk7Ci0gICAgICAgIGRpc3BhdGNo
X2lvX3dyaXRlKGNoYW5uZWwuZ2V0KCksIDAsIGRhdGEuZ2V0KCksIGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFt0aGlzLCAmc3RvcmVdKGJvb2wgZG9uZSwgZGlzcGF0Y2hfZGF0YV90LCBpbnQg
ZXJyb3IpIHsKKyAgICAgICAgZGlzcGF0Y2hfaW9fd3JpdGUoY2hhbm5lbC5nZXQoKSwgMCwgd3Jp
dGVEYXRhLmdldCgpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywgJnN0b3JlLCBm
ZCwgYm9keU9mZnNldCwgYm9keVNpemVdKGJvb2wgZG9uZSwgZGlzcGF0Y2hfZGF0YV90LCBpbnQg
ZXJyb3IpIHsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZG9uZSwgZG9uZSk7CiAgICAgICAg
ICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2Vzcykgd3JpdGUgY29t
cGxldGUgZXJyb3I9JWQiLCBlcnJvcik7CiAgICAgICAgICAgICBpZiAoZXJyb3IpIHsKQEAgLTQ2
OSw3ICs0NzYsMTEgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpzdG9yZShjb25zdCBOZQog
ICAgICAgICAgICAgICAgICAgICAtLW1fYXBwcm94aW1hdGVFbnRyeUNvdW50OwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBzdG9yZS5jb21wbGV0aW9uSGFuZGxlcighZXJyb3IpOworICAg
ICAgICAgICAgYm9vbCBzaG91bGRNYXBCb2R5ID0gIWVycm9yICYmIGJvZHlTaXplID49IHZtX3Bh
Z2Vfc2l6ZTsKKyAgICAgICAgICAgIGF1dG8gYm9keU1hcCA9IHNob3VsZE1hcEJvZHkgPyBtYXBG
aWxlKGZkLCBib2R5T2Zmc2V0LCBib2R5U2l6ZSkgOiBudWxscHRyOworCisgICAgICAgICAgICBE
YXRhIGJvZHlEYXRhKGJvZHlNYXAsIERhdGE6OkJhY2tpbmc6Ok1hcCk7CisgICAgICAgICAgICBz
dG9yZS5jb21wbGV0aW9uSGFuZGxlcighZXJyb3IsIGJvZHlEYXRhKTsKIAogICAgICAgICAgICAg
bV9hY3RpdmVTdG9yZU9wZXJhdGlvbnMucmVtb3ZlKCZzdG9yZSk7CiAgICAgICAgIH0pOwpAQCAt
NDc4LDcgKzQ4OSw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6c3RvcmUoY29uc3QgTmUK
ICAgICBzaHJpbmtJZk5lZWRlZCgpOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnVw
ZGF0ZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgRW50cnkmIHVwZGF0ZUVudHJ5
LCBjb25zdCBFbnRyeSYgZXhpc3RpbmdFbnRyeSwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sIHN1
Y2Nlc3MpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6dXBk
YXRlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBFbnRyeSYgdXBkYXRlRW50cnks
IGNvbnN0IEVudHJ5JiBleGlzdGluZ0VudHJ5LCBTdG9yZUNvbXBsZXRpb25IYW5kbGVyIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTUx
OSw3ICs1MzAsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnVwZGF0ZShjb25zdCBOCiAg
ICAgICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICAgICAgcmVtb3ZlRW50cnkodXBkYXRl
LmtleSk7CiAKLSAgICAgICAgICAgIHVwZGF0ZS5jb21wbGV0aW9uSGFuZGxlcighZXJyb3IpOwor
ICAgICAgICAgICAgdXBkYXRlLmNvbXBsZXRpb25IYW5kbGVyKCFlcnJvciwgRGF0YSgpKTsKIAog
ICAgICAgICAgICAgQVNTRVJUKG1fYWN0aXZlVXBkYXRlT3BlcmF0aW9ucy5jb250YWlucygmdXBk
YXRlKSk7CiAgICAgICAgICAgICBtX2FjdGl2ZVVwZGF0ZU9wZXJhdGlvbnMucmVtb3ZlKCZ1cGRh
dGUpOwo=
</data>
<flag name="review"
          id="271051"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>