<?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>123138</bug_id>
          
          <creation_ts>2013-10-21 23:06:44 -0700</creation_ts>
          <short_desc>Add a cross-platform IDBRecordIdentifier</short_desc>
          <delta_ts>2013-10-22 10:07:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>123027</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>charles.wei</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>942163</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-21 23:06:44 -0700</bug_when>
    <thetext>Add a cross-platform IDBRecordIdentifier

Turns out it&apos;s already a cross platform concept.  Just need the right header and other code changes to adapt.

More work towards https://bugs.webkit.org/show_bug.cgi?id=123027</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942164</commentid>
    <comment_count>1</comment_count>
      <attachid>214820</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-21 23:13:01 -0700</bug_when>
    <thetext>Created attachment 214820
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942325</commentid>
    <comment_count>2</comment_count>
      <attachid>214820</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-22 09:14:18 -0700</bug_when>
    <thetext>Comment on attachment 214820
Patch v1 

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

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStoreInterface.h:71
&gt; +        virtual const IDBRecordIdentifier* recordIdentifier() const = 0;

Why is this a pointer instead now? Will it ever be null?

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:947
&gt; +    ASSERT(recordIdentifier);

It would be nicer to pass the IDBRecordIdentifier here by reference. Then you wouldn&apos;t need this ugly assertion..

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:1195
&gt; +    ASSERT(recordIdentifier);

It would be nicer to pass the IDBRecordIdentifier here by reference. Then you wouldn&apos;t need this ugly assertion..

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:66
&gt; +    ASSERT(recordIdentifier);

It would be nicer to pass the IDBRecordIdentifier here by reference. Then you wouldn&apos;t need this ugly assertion..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942329</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-22 09:24:06 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 214820 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214820&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBBackingStoreInterface.h:71
&gt; &gt; +        virtual const IDBRecordIdentifier* recordIdentifier() const = 0;
&gt; 
&gt; Why is this a pointer instead now? Will it ever be null?

I forgot ptr-&gt;reference is your thing.  It might be null, in that previously it might have been a default constructed object representing nothing.

I&apos;ll see if I can make it back to a reference...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942334</commentid>
    <comment_count>4</comment_count>
      <attachid>214866</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-22 09:49:31 -0700</bug_when>
    <thetext>Created attachment 214866
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942339</commentid>
    <comment_count>5</comment_count>
      <attachid>214866</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-22 09:57:08 -0700</bug_when>
    <thetext>Comment on attachment 214866
Patch v2 

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

Okay. r=me

Looking forward to your &quot;fix all of this terrible code&quot; refactor :)

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:1643
&gt; +    virtual const IDBRecordIdentifier&amp; recordIdentifier() const OVERRIDE { ASSERT_NOT_REACHED(); return *(m_recordIdentifier.get()); }

return *m_recordIdentifier;

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:1734
&gt; +    virtual const IDBRecordIdentifier&amp; recordIdentifier() const OVERRIDE { ASSERT_NOT_REACHED(); return *(m_recordIdentifier.get()); }

return *m_recordIdentifier;

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:117
&gt; +        virtual const IDBRecordIdentifier&amp; recordIdentifier() const OVERRIDE { return *(m_recordIdentifier.get()); }

return *m_recordIdentifier;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942343</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-22 10:07:07 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/157798</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942346</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-10-22 10:07:39 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 214866 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214866&amp;action=review
&gt; 
&gt; Okay. r=me
&gt; 
&gt; Looking forward to your &quot;fix all of this terrible code&quot; refactor :)

Me too, brother, me too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214820</attachid>
            <date>2013-10-21 23:13:01 -0700</date>
            <delta_ts>2013-10-22 09:49:31 -0700</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>37118</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZDViOTUxLi4wZmRkYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDUg
QEAKIDIwMTMtMTAtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEFkZCBhIGNyb3NzLXBsYXRmb3JtIElEQlJlY29yZElkZW50aWZpZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzEzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0aGUgY3Jvc3MtcGxhdGZv
cm0gaGVhZGVyOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlY29yZElkZW50aWZp
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZWNvcmRJZGVudGlmaWVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVjb3JkSWRlbnRpZmllcjo6ZW5jb2RlZFByaW1h
cnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVjb3JkSWRlbnRpZmllcjo6dmVyc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJSZWNvcmRJZGVudGlmaWVyOjpyZXNldCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZWNvcmRJZGVudGlmaWVyOjpJREJSZWNvcmRJZGVudGlmaWVyKToKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKworICAgICAgICBSZW1vdmUgdGhlIG9sZCBhYnN0cmFjdCBhbmQg
TGV2ZWxEQiBjbGFzc2VzOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZUludGVyZmFjZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
QmFja2luZ1N0b3JlTGV2ZWxEQi5oOgorCisgICAgICAgIFVzZSB0aGUgY3Jvc3MtcGxhdGZvcm0g
b25lIGV2ZXJ5d2hlcmU6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJC
YWNraW5nU3RvcmVMZXZlbERCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZUxldmVsREI6OnB1dFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVM
ZXZlbERCOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3Jl
TGV2ZWxEQjo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmVMZXZlbERCOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2Vi
Q29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAg
IChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KToKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJ
bmRleEtleXMpOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyOjp3cml0ZUluZGV4S2V5cyk6CisKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVs
REIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJh
dGlvbjo6cGVyZm9ybSk6CisKKzIwMTMtMTAtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgorCiAgICAgICAgIE1ha2UgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIg
Y3Jvc3MgcGxhdGZvcm0KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMzEyNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBkNzVhMGE5
Li45NGU5NzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE4NDEsNiArMTg0
MSw3IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlY29yZElkZW50aWZpZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCiAJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oCmluZGV4IDQ5OWQ2MGQuLjVkMmMwMGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZUludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZUludGVyZmFjZS5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQktleVBhdGg7CiBjbGFzcyBJREJLZXlSYW5n
ZTsKK2NsYXNzIElEQlJlY29yZElkZW50aWZpZXI7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIGNs
YXNzIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZT4gewpAQCAtNTEsMTUgKzUyLDYgQEAgcHVibGljOgogICAgICAgICB2
aXJ0dWFsIH5UcmFuc2FjdGlvbigpIHsgfQogICAgIH07CiAKLSAgICBjbGFzcyBSZWNvcmRJZGVu
dGlmaWVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflJlY29yZElkZW50aWZpZXIo
KSB7IH0KLQotICAgICAgICB2aXJ0dWFsIGNvbnN0IFZlY3RvcjxjaGFyPiBwcmltYXJ5S2V5KCkg
Y29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIGludDY0X3QgdmVyc2lvbigpIGNvbnN0ID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtl
eSwgaW50NjRfdCB2ZXJzaW9uKSA9IDA7Ci0gICAgfTsKLQogICAgIGNsYXNzIEN1cnNvciA6IHB1
YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4gewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBJdGVy
YXRvclN0YXRlIHsKQEAgLTc2LDIzICs2OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDdXJzb3I+IGNsb25lKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBj
b25zdCBSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKCkgY29uc3QgPSAwOworICAg
ICAgICB2aXJ0dWFsIGNvbnN0IElEQlJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIo
KSBjb25zdCA9IDA7CiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSosIGJvb2wmIGZv
dW5kKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFi
YXNlSWQsIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwKiBvYmplY3RTdG9yZXMp
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBp
bnQ2NF90JiByb3dJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlOjpSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJv
b2wmIGZvdW5kKSA9IDA7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWZQdHI8SURCUmVjb3Jk
SWRlbnRpZmllcj4mIGZvdW5kSURCUmVjb3JkSWRlbnRpZmllcikgPSAwOwogCi0gICAgdmlydHVh
bCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlOjpSZWNvcmRJZGVudGlmaWVyJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERh
dGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYsIGNvbnN0IElEQlJlY29yZElkZW50aWZpZXIqKSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXks
IGJvb2wmIGV4aXN0cykgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFz
ZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0
X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGdl
dFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFZlY3Rvcjxj
aGFyPiYgcmVjb3JkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2
YWx1ZSwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpSZWNvcmRJZGVudGlmaWVyKikgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlJlY29yZElkZW50aWZpZXImKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgSURCUmVjb3JkSWRlbnRp
ZmllciopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciopID0gMDsKIAogICAgIHZpcnR1
YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCkgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlY29yZElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlY29yZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43Y2E3NzgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVjb3JkSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJREJS
ZWNvcmRJZGVudGlmaWVyX2gKKyNkZWZpbmUgSURCUmVjb3JkSWRlbnRpZmllcl9oCisKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElE
QlJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJSZWNvcmRJZGVudGlmaWVy
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4g
Y3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXksIGludDY0X3QgdmVy
c2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCUmVjb3JkSWRlbnRp
ZmllcihlbmNvZGVkUHJpbWFyeUtleSwgdmVyc2lvbikpOworICAgIH0KKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQlJlY29yZElkZW50aWZpZXIpOworICAgIH0KKworICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2Vu
Y29kZWRQcmltYXJ5S2V5OyB9CisgICAgaW50NjRfdCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4g
bV92ZXJzaW9uOyB9CisgICAgdm9pZCByZXNldChjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQ
cmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pCisgICAgeworICAgICAgICBtX2VuY29kZWRQcmlt
YXJ5S2V5ID0gZW5jb2RlZFByaW1hcnlLZXk7CisgICAgICAgIG1fdmVyc2lvbiA9IHZlcnNpb247
CisgICAgfQorCitwcml2YXRlOgorICAgIElEQlJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9y
PGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKQorICAgICAgICA6IG1f
ZW5jb2RlZFByaW1hcnlLZXkoZW5jb2RlZFByaW1hcnlLZXkpCisgICAgICAgICwgbV92ZXJzaW9u
KHZlcnNpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIWVuY29kZWRQcmltYXJ5S2V5LmlzRW1w
dHkoKSk7CisgICAgfQorCisgICAgSURCUmVjb3JkSWRlbnRpZmllcigpCisgICAgICAgIDogbV92
ZXJzaW9uKC0xKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkUHJp
bWFyeUtleTsKKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJSZWNvcmRJZGVudGlmaWVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCmluZGV4IDI4MzE4YTkuLmE2NDZlMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcApAQCAtODk4LDcgKzg5OCw3IEBA
IFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURC
QmFja2luZ1N0b3JlTGV2ZWxEQjo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBw
cnBWYWx1ZSwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpwdXRSZWNvcmQoSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IHBycFZhbHVlLCBJREJSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3JlTGV2
ZWxEQjo6cHV0UmVjb3JkIik7CiAgICAgaWYgKCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQpKQpAQCAtOTQxLDE3ICs5NDEsMTkgQEAgYm9vbCBJREJCYWNraW5n
U3RvcmVMZXZlbERCOjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6
VHJhbnNhY3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJCYWNraW5nU3RvcmVMZXZl
bERCOjpkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlJlY29yZElkZW50aWZpZXImIHJlY29yZElk
ZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmRlbGV0ZVJlY29yZChJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQlJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNraW5n
U3RvcmVMZXZlbERCOjpkZWxldGVSZWNvcmQiKTsKKyAgICBBU1NFUlQocmVjb3JkSWRlbnRpZmll
cik7CisKICAgICBpZiAoIUtleVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxl
dmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OlRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAotICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBvYmplY3RTdG9yZURhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCByZWNvcmRJZGVudGlmaWVyLnByaW1hcnlLZXkoKSk7Cisg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlRGF0YUtleSA9IE9iamVjdFN0b3JlRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHJlY29yZElkZW50aWZpZXIt
PmVuY29kZWRQcmltYXJ5S2V5KCkpOwogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cmVtb3ZlKG9i
amVjdFN0b3JlRGF0YUtleSk7CiAKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlL
ZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHJl
Y29yZElkZW50aWZpZXIucHJpbWFyeUtleSgpKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhp
c3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIHJlY29yZElkZW50aWZpZXItPmVuY29kZWRQcmltYXJ5S2V5KCkpOwogICAgIGxldmVs
REJUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5KTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTEwMjcsMTIgKzEwMjksMTIgQEAgYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpt
YXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3IKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjprZXlFeGlzdHNJ
bk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiBrZXksIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6UmVjb3JkSWRlbnRpZmllciog
Zm91bmRSZWNvcmRJZGVudGlmaWVyLCBib29sJiBmb3VuZCkKK2Jvb2wgSURCQmFja2luZ1N0b3Jl
TGV2ZWxEQjo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmll
cj4mIGZvdW5kSURCUmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklE
QkJhY2tpbmdTdG9yZUxldmVsREI6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUiKTsKICAgICBpZiAo
IUtleVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tp
bmdTdG9yZUxldmVsREI6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAgVmVj
dG9yPGNoYXI+IGRhdGE7CkBAIC0xMDQ5LDcgKzEwNTEsNyBAQCBib29sIElEQkJhY2tpbmdTdG9y
ZUxldmVsREI6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
OjpUcgogICAgIGlmICghZGVjb2RlVmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVy
c2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvdW5kUmVjb3JkSWRlbnRpZmll
ci0+cmVzZXQoZW5jb2RlSURCS2V5KGtleSksIHZlcnNpb24pOworICAgIGZvdW5kSURCUmVjb3Jk
SWRlbnRpZmllciA9IElEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoa2V5
KSwgdmVyc2lvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExODYsMTkgKzExODgsMjAg
QEAgYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpkZWxldGVJbmRleChJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElE
QkJhY2tpbmdTdG9yZUxldmVsREI6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBr
ZXksIGNvbnN0IElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6UmVjb3JkSWRlbnRpZmllciYgcmVj
b3JkSWRlbnRpZmllcikKK2Jvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6cHV0SW5kZXhEYXRh
Rm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciogcmVj
b3JkSWRlbnRpZmllcikKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxl
dmVsREI6OnB1dEluZGV4RGF0YUZvclJlY29yZCIpOwogICAgIEFTU0VSVChrZXkuaXNWYWxpZCgp
KTsKKyAgICBBU1NFUlQocmVjb3JkSWRlbnRpZmllcik7CiAgICAgaWYgKCFLZXlQcmVmaXg6OnZh
bGlkSWRzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9
IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25G
cm9tKHRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0g
SW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
ZW5jb2RlSURCS2V5KGtleSksIHJlY29yZElkZW50aWZpZXIucHJpbWFyeUtleSgpKTsKKyAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgZW5jb2RlSURCS2V5KGtleSksIHJlY29y
ZElkZW50aWZpZXItPmVuY29kZWRQcmltYXJ5S2V5KCkpOwogCiAgICAgVmVjdG9yPGNoYXI+IGRh
dGE7Ci0gICAgZGF0YS5hcHBlbmRWZWN0b3IoZW5jb2RlVmFySW50KHJlY29yZElkZW50aWZpZXIu
dmVyc2lvbigpKSk7Ci0gICAgZGF0YS5hcHBlbmRWZWN0b3IocmVjb3JkSWRlbnRpZmllci5wcmlt
YXJ5S2V5KCkpOworICAgIGRhdGEuYXBwZW5kVmVjdG9yKGVuY29kZVZhckludChyZWNvcmRJZGVu
dGlmaWVyLT52ZXJzaW9uKCkpKTsKKyAgICBkYXRhLmFwcGVuZFZlY3RvcihyZWNvcmRJZGVudGlm
aWVyLT5lbmNvZGVkUHJpbWFyeUtleSgpKTsKIAogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cHV0
KGluZGV4RGF0YUtleSwgZGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTA1LDggKzE1MDgs
OCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Q3Vy
c29yCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBjb25zdCB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgYm9vbCBsb2Fk
Q3VycmVudFJvdygpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVl
KCkgY29uc3QgT1ZFUlJJREUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKSBPVkVSUklERTsKIAogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgVmVjdG9yPGNoYXI+IGVuY29kZUtleShjb25zdCBJREJLZXkgJmtleSkKQEAg
LTE1NDgsNyArMTU1MSw3IEBAIGJvb2wgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3Vy
cmVudFJvdygpCiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdh
cyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCi0gICAgbV9yZWNvcmRJZGVudGlmaWVy
LnJlc2V0KGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7CisgICAgbV9yZWNv
cmRJZGVudGlmaWVyLT5yZXNldChlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24p
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNTY2LDggKzE1NjksOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Q3Vyc29yCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRWYWx1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9jdXJyZW50VmFsdWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKSBP
VkVSUklERTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgVmVjdG9yPGNoYXI+IGVuY29kZUtl
eShjb25zdCBJREJLZXkgJmtleSkKQEAgLTE2MTIsNyArMTYxNSw3IEBAIGJvb2wgT2JqZWN0U3Rv
cmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRo
aXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCi0g
ICAgbV9yZWNvcmRJZGVudGlmaWVyLnJlc2V0KGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwg
dmVyc2lvbik7CisgICAgbV9yZWNvcmRJZGVudGlmaWVyLT5yZXNldChlbmNvZGVJREJLZXkoKm1f
Y3VycmVudEtleSksIHZlcnNpb24pOwogCiAgICAgVmVjdG9yPGNoYXI+IHZhbHVlOwogICAgIHZh
bHVlLmFwcGVuZCh2YWx1ZVBvc2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpIC0gdmFs
dWVQb3NpdGlvbik7CkBAIC0xNjMzLDEwICsxNjM2LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICAvLyBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpDdXJzb3IKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiAwOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZpcnR1YWwgY29uc3QgSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtl
eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgSURCUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0IE9WRVJS
SURFIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXIuZ2V0
KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKSBPVkVSUklERTsKIAogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgVmVjdG9yPGNoYXI+IGVuY29kZUtleShjb25zdCBJREJLZXkg
JmtleSkKQEAgLTE3MjQsMTAgKzE3MjcsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElE
QkJhY2tpbmdTdG9yZUxldmVsREI6OkN1cnNvcgotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9w
cmltYXJ5S2V5OyB9Ci0gICAgdmlydHVhbCBjb25zdCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpS
ZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIG1fcmVjb3JkSWRlbnRpZmllcjsgfQotICAgIGJvb2wgbG9hZEN1cnJl
bnRSb3coKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcHJp
bWFyeUtleTsgfQorICAgIHZpcnR1YWwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciogcmVjb3Jk
SWRlbnRpZmllcigpIGNvbnN0IE9WRVJSSURFIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBtX3JlY29yZElkZW50aWZpZXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJl
bnRSb3coKSBPVkVSUklERTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgVmVjdG9yPGNoYXI+
IGVuY29kZUtleShjb25zdCBJREJLZXkgJmtleSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZl
bERCLmgKaW5kZXggODBlYzg1OS4uNzljNjFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVM
ZXZlbERCLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgor
I2luY2x1ZGUgIklEQlJlY29yZElkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmRleGVkREIuaCIK
ICNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rp
b24uaCIKQEAgLTc3LDQzICs3OCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNyZWF0
ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBP
VkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKLSAgICBjbGFzcyBSZWNvcmRJZGVudGlmaWVy
IDogcHVibGljIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6UmVjb3JkSWRlbnRpZmllciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBSZWNvcmRJZGVudGlmaWVyKGNvbnN0IFZlY3RvcjxjaGFyPiYg
cHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKQotICAgICAgICAgICAgOiBJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2U6OlJlY29yZElkZW50aWZpZXIoKQotICAgICAgICAgICAgLCBtX3ByaW1hcnlL
ZXkocHJpbWFyeUtleSkKLSAgICAgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgUmVjb3JkSWRlbnRpZmllcigpCi0gICAgICAgICAgICA6IElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6UmVjb3JkSWRlbnRpZmllcigpCi0gICAgICAgICAgICAsIG1fcHJpbWFy
eUtleSgpCi0gICAgICAgICAgICAsIG1fdmVyc2lvbigtMSkKLSAgICAgICAgewotICAgICAgICB9
Ci0KLSAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHByaW1hcnlLZXkoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KLSAgICAgICAgaW50NjRfdCB2ZXJzaW9uKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBy
ZXNldChjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgT1ZF
UlJJREUgeyBtX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5OyBtX3ZlcnNpb24gPSB2ZXJzaW9uOyB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBG
SVhNRTogTWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNp
b24gb2YgdGhlIGtleS4KLSAgICAgICAgaW50NjRfdCBtX3ZlcnNpb247Ci0gICAgfTsKLQogICAg
IHZpcnR1YWwgYm9vbCBnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBWZWN0b3I8Y2hhcj4mIHJlY29yZCkgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJO
OwotICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXkmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6UmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5JiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBJREJSZWNv
cmRJZGVudGlmaWVyKikgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZpcnR1YWwg
Ym9vbCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUg
V0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVSZWNvcmQoSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlJlY29y
ZElkZW50aWZpZXImKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBi
b29sIGRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQlJlY29y
ZElkZW50aWZpZXIqKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdmlydHVhbCBi
b29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90JiBjdXJyZW50TnVtYmVyKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CiAg
ICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50
KSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0
c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRl
bnRpZmllciwgYm9vbCYgZm91bmQpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2
aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYsIFJlZlB0cjxJREJSZWNvcmRJZGVudGlmaWVyPiYgZm91bmRJREJS
ZWNvcmRJZGVudGlmaWVyKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKICAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlx
dWUsIGJvb2wgaXNNdWx0aUVudHJ5KSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
dmlydHVhbCBib29sIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29s
IHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpS
ZWNvcmRJZGVudGlmaWVyJikgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1
YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IElEQlJlY29yZElkZW50aWZpZXIq
KSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdmlydHVhbCBib29sIGdldFByaW1h
cnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JiwgUmVmUHRyPElEQktleT4mIHByaW1hcnlLZXkpIE9WRVJSSURFIFdBUk5f
VU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtl
eSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSwgYm9vbCYgZXhpc3RzKSBPVkVSUklE
RSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKQEAgLTEzOSw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OkN1cnNvcj4g
Y2xvbmUoKSBPVkVSUklERSA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+
IHByaW1hcnlLZXkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KICAg
ICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBjb25zdCBPVkVS
UklERSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYgcmVjb3Jk
SWRlbnRpZmllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcmVjb3JkSWRlbnRpZmllcjsg
fQorICAgICAgICB2aXJ0dWFsIGNvbnN0IElEQlJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50
aWZpZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXIuZ2V0KCk7
IH0KICAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBs
b2FkQ3VycmVudFJvdygpID0gMDsKIApAQCAtMTQ3LDYgKzEyMiw3IEBAIHB1YmxpYzoKICAgICAg
ICAgQ3Vyc29yKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9w
dGlvbnMmIGN1cnNvck9wdGlvbnMpCiAgICAgICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb24pCiAgICAgICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRpb25zKQorICAg
ICAgICAgICAgLCBtX3JlY29yZElkZW50aWZpZXIoSURCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRl
KCkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICBleHBsaWNpdCBDdXJzb3IoY29uc3Qg
SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Q3Vyc29yKiBvdGhlcik7CkBAIC0xNjAsNyArMTM2LDcg
QEAgcHVibGljOgogICAgICAgICBjb25zdCBDdXJzb3JPcHRpb25zIG1fY3Vyc29yT3B0aW9uczsK
ICAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gbV9pdGVyYXRvcjsKICAgICAgICAgUmVm
UHRyPElEQktleT4gbV9jdXJyZW50S2V5OwotICAgICAgICBJREJCYWNraW5nU3RvcmVMZXZlbERC
OjpSZWNvcmRJZGVudGlmaWVyIG1fcmVjb3JkSWRlbnRpZmllcjsKKyAgICAgICAgUmVmUHRyPElE
QlJlY29yZElkZW50aWZpZXI+IG1fcmVjb3JkSWRlbnRpZmllcjsKICAgICB9OwogCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBvcGVuT2Jq
ZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlS
YW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKSBPVkVSUklERTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwCmluZGV4IDE4MWUyNTAuLmM5ODcwMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcApAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQogCi0j
aW5jbHVkZSAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQkJhY2tpbmdT
dG9yZUludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRMZXZlbERCLmgiCiAj
aW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFj
a2VuZExldmVsREIuaCIKQEAgLTI0OCwxNCArMjQ4LDEzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQjo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplCiAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlLZXk7CiAgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gc3RvcmUgPSBiYWNraW5nU3RvcmUoKTsK
ICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQgd2Ug
bmVlZCB0byBldmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5LgotICAg
IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmll
cjsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlz
dHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgJnJlY29yZElkZW50aWZp
ZXIsIGZvdW5kKTsKKyAgICBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRp
ZmllcjsKKyAgICBib29sIG9rID0gc3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fbWV0YWRhdGEuaWQsIG9iamVjdFN0
b3JlSWQsICpwcmltYXJ5S2V5LCByZWNvcmRJZGVudGlmaWVyKTsKICAgICBpZiAoIW9rKSB7CiAg
ICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5k
ZXgga2V5cy4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFmb3VuZCkgewor
ICAgIGlmICghcmVjb3JkSWRlbnRpZmllcikgewogICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcg
aW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlLiIpKTsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFi
b3J0KGVycm9yLnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI3OCw3ICsyNzcsNyBA
QCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5k
TGV2ZWxEQjo6SW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgp
OwotICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllciwg
KnN0b3JlLmdldCgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaWQo
KSwgb2JqZWN0U3RvcmVJZCk7CisgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhy
ZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqc3RvcmUuZ2V0KCksIHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBpZCgpLCBvYmplY3RTdG9yZUlkKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwCmluZGV4IDQyNDA1
YjEuLjhiYjk4NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZl
bERCLmNwcApAQCAtNjEsOCArNjEsOSBAQCBib29sIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVs
REI6OkluZGV4V3JpdGVyOjp2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlSQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OkluZGV4
V3JpdGVyOjp3cml0ZUluZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpSZWNv
cmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2Um
IGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25z
dAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRlcjo6d3JpdGVJ
bmRleEtleXMoY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllciwgSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3QKIHsKKyAgICBBU1NFUlQocmVjb3JkSWRlbnRpZmllcik7
CiAgICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFkYXRhLmlkOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYm9vbCBv
ayA9IGJhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24sIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgpLCBy
ZWNvcmRJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZl
bERCLmgKaW5kZXggMmU4MmRlMC4uZWY2MzRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRMZXZlbERCLmgKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIElEQk9iamVj
dFN0b3JlQmFja2VuZExldmVsREIgewogCiAgICAgICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZSYsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkgPSAw
LCBTdHJpbmcqIGVycm9yTWVzc2FnZSA9IDApIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKIAot
ICAgICAgICB2b2lkIHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZUxldmVsREI6
OlJlY29yZElkZW50aWZpZXImLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UmLCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpIGNvbnN0OworICAgICAgICB2b2lkIHdyaXRlSW5kZXhLZXlzKGNvbnN0
IElEQlJlY29yZElkZW50aWZpZXIqLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UmLCBJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBh
ZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSYsIElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkqIGluZGV4S2V5LCBjb25z
dCBJREJLZXkqIHByaW1hcnlLZXksIGJvb2wmIGFsbG93ZWQpIGNvbnN0IFdBUk5fVU5VU0VEX1JF
VFVSTjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQk9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCT3BlcmF0aW9ucy5jcHAKaW5kZXggNmUxNDQwZS4uNDg0N2RiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5jcHAK
QEAgLTE5MywxNSArMTkzLDE0IEBAIHZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKCkKICAgICBB
U1NFUlQoa2V5KTsKICAgICBBU1NFUlQoa2V5LT5pc1ZhbGlkKCkpOwogCi0gICAgSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOworICAgIFJl
ZlB0cjxJREJSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyOwogICAgIGlmIChtX3B1
dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5KSB7Ci0gICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5r
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgJnJlY29yZElkZW50
aWZpZXIsIGZvdW5kKTsKKyAgICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlz
dHNJbk9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgcmVjb3JkSWRlbnRpZmllcik7
CiAgICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgIGlmIChy
ZWNvcmRJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJv
ciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjIxLDcgKzIyMCw3IEBAIHZvaWQgUHV0T3BlcmF0
aW9uOjpwZXJmb3JtKCkKICAgICB9CiAKICAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3Qg
ZG8gYW55IG11dGF0aW9uLiBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rp
b24gaW4gY2FzZSBvZiBlcnJvci4KLSAgICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV9iYWNraW5n
U3RvcmUtPnB1dFJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1fdmFsdWUsICZyZWNvcmRJ
ZGVudGlmaWVyKTsKKyAgICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPnB1
dFJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1fdmFsdWUsIHJlY29yZElkZW50aWZpZXIu
Z2V0KCkpOwogICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgewogICAgICAgICBtX2NhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBl
cmZvcm1pbmcgcHV0L2FkZC4iKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIyOSw3ICsyMjgsNyBA
QCB2b2lkIFB1dE9wZXJhdGlvbjo6cGVyZm9ybSgpCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewogICAgICAgICBJREJPYmplY3RTdG9yZUJh
Y2tlbmRMZXZlbERCOjpJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0u
Z2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlm
aWVyLCAqbV9iYWNraW5nU3RvcmUsIG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7CisgICAgICAgIGluZGV4V3Jp
dGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqbV9iYWNraW5nU3Rv
cmUsIG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJ
ZCwgbV9vYmplY3RTdG9yZS5pZCk7CiAgICAgfQogCiAgICAgaWYgKG1fb2JqZWN0U3RvcmUuYXV0
b0luY3JlbWVudCAmJiBtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpD
dXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NGJkODdhYS4uMGU5MmE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTgxMyw2ICsxODEzLDcgQEAKIAkJNTFFNjgyMTAxNjM4
NzMwMjAwM0JCRjNDIC8qIExvYWRlclN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUU2ODIwRjE2Mzg3MzAyMDAzQkJGM0MgLyogTG9hZGVy
U3RyYXRlZ3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1MUVBQzU2NzE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVB
QzU2NTE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87
IH07CiAJCTUxRUFDNTY4MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVB
QzU2NjE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxRUFDNUIyMTgx
NjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVBQzVCMDE4MTYzRjRFMDA0RjFCQTQgLyog
SURCUmVjb3JkSWRlbnRpZmllci5oICovOyB9OwogCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDgg
LyogSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUM5MjVEMENFOTBERDQwMEY5MDMwOCAv
KiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwICovOyB9OwogCQk1MUY2RTBB
MzE4MTFEMjUyMDA1OEEwMEEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY2RTA4RjE4MTFE
MjUyMDA1OEEwMEEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFGQTJENzgxNTIxMzJC
MzAwQzFCQTBCIC8qIERPTVdpbmRvd0V4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RkJBMTgxNTFBQTcxQjAwQjU3OTU5IC8qIERPTVdp
bmRvd0V4dGVuc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC04NDEzLDYgKzg0MTQsNyBAQAogCQk1MUU2ODIwRjE2Mzg3MzAyMDAzQkJGM0Mg
LyogTG9hZGVyU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9h
ZGVyU3RyYXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFQUM1NjUxODE1
RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRUFDNTY2MTgxNUVEM0UwMDRGMUJBNCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTFFQUM1QjAxODE2M0Y0RTAwNEYxQkE0IC8qIElEQlJlY29yZElkZW50aWZpZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUmVjb3JkSWRlbnRpZmllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUVDOTI1RDBDRTkwREQ0MDBGOTAzMDgg
LyogSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjZBM0Q1MDY2M0JGMDQwMDREMjkx
OSAvKiBIVE1MQ2FudmFzRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MQ2FudmFzRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1MUY2QTNE
NjA2NjNCRjA0MDA0RDI5MTkgLyogSFRNTENhbnZhc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENhbnZhc0VsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBA
IC0xNjc1Myw2ICsxNjc1NSw3IEBACiAJCQkJNTFENzE5OUUxODExMDZFMDAwMTZEQzUxIC8qIElE
Qk9wZW5EQlJlcXVlc3QuaWRsICovLAogCQkJCTUxRDcxOTlGMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCAqLywKIAkJCQk1MUQ3MTlBMDE4MTEwNkUw
MDAxNkRDNTEgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oICovLAorCQkJCTUxRUFD
NUIwMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggKi8sCiAJCQkJNTFE
NzE5QTExODExMDZFMDAwMTZEQzUxIC8qIElEQlJlcXVlc3QuY3BwICovLAogCQkJCTUxRDcxOUEy
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJSZXF1ZXN0LmggKi8sCiAJCQkJNTFENzE5QTMxODExMDZF
MDAwMTZEQzUxIC8qIElEQlJlcXVlc3QuaWRsICovLApAQCAtMjE4MTgsNiArMjE4MjEsNyBAQAog
CQkJCUJDNTNDNjkyMERBNTkxMTQwMDIxRUI1RCAvKiBDU1NHcmFkaWVudFZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwNzhFMDk0MzE3RDE2RTFDMDA0MjBBQTEgLyogUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUwRjUzREMwOUQxNUREQTAw
QzlCMEM4IC8qIENTU0dyYW1tYXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxRUFDNUIyMTgxNjNG
NEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
QjMwNTZDMjE2OUU1REFDMDA5NkEyMzIgLyogQ1NTR3JvdXBpbmdSdWxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzc3MkIzQzBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTSGVscGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGQjQ5QzM5RDE2Nzg0OTQ3MDA3RkZCNUQgLyogQ1NTSG9zdFJ1bGUuaCBpbiBI
ZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214866</attachid>
            <date>2013-10-22 09:49:31 -0700</date>
            <delta_ts>2013-10-22 09:57:08 -0700</delta_ts>
            <desc>Patch v2 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>38599</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZDViOTUxLi4wZmRkYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDUg
QEAKIDIwMTMtMTAtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEFkZCBhIGNyb3NzLXBsYXRmb3JtIElEQlJlY29yZElkZW50aWZpZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzEzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0aGUgY3Jvc3MtcGxhdGZv
cm0gaGVhZGVyOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlY29yZElkZW50aWZp
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZWNvcmRJZGVudGlmaWVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVjb3JkSWRlbnRpZmllcjo6ZW5jb2RlZFByaW1h
cnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVjb3JkSWRlbnRpZmllcjo6dmVyc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJSZWNvcmRJZGVudGlmaWVyOjpyZXNldCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZWNvcmRJZGVudGlmaWVyOjpJREJSZWNvcmRJZGVudGlmaWVyKToKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKworICAgICAgICBSZW1vdmUgdGhlIG9sZCBhYnN0cmFjdCBhbmQg
TGV2ZWxEQiBjbGFzc2VzOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZUludGVyZmFjZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
QmFja2luZ1N0b3JlTGV2ZWxEQi5oOgorCisgICAgICAgIFVzZSB0aGUgY3Jvc3MtcGxhdGZvcm0g
b25lIGV2ZXJ5d2hlcmU6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJC
YWNraW5nU3RvcmVMZXZlbERCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZUxldmVsREI6OnB1dFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVM
ZXZlbERCOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3Jl
TGV2ZWxEQjo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmVMZXZlbERCOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2Vi
Q29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAg
IChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KToKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJ
bmRleEtleXMpOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyOjp3cml0ZUluZGV4S2V5cyk6CisKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVs
REIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJh
dGlvbjo6cGVyZm9ybSk6CisKKzIwMTMtMTAtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgorCiAgICAgICAgIE1ha2UgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIg
Y3Jvc3MgcGxhdGZvcm0KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMzEyNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBkNzVhMGE5
Li45NGU5NzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE4NDEsNiArMTg0
MSw3IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlY29yZElkZW50aWZpZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCiAJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oCmluZGV4IDQ5OWQ2MGQuLmExM2JhZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZUludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZUludGVyZmFjZS5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQktleVBhdGg7CiBjbGFzcyBJREJLZXlSYW5n
ZTsKK2NsYXNzIElEQlJlY29yZElkZW50aWZpZXI7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIGNs
YXNzIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZT4gewpAQCAtNTEsMTUgKzUyLDYgQEAgcHVibGljOgogICAgICAgICB2
aXJ0dWFsIH5UcmFuc2FjdGlvbigpIHsgfQogICAgIH07CiAKLSAgICBjbGFzcyBSZWNvcmRJZGVu
dGlmaWVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflJlY29yZElkZW50aWZpZXIo
KSB7IH0KLQotICAgICAgICB2aXJ0dWFsIGNvbnN0IFZlY3RvcjxjaGFyPiBwcmltYXJ5S2V5KCkg
Y29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIGludDY0X3QgdmVyc2lvbigpIGNvbnN0ID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtl
eSwgaW50NjRfdCB2ZXJzaW9uKSA9IDA7Ci0gICAgfTsKLQogICAgIGNsYXNzIEN1cnNvciA6IHB1
YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4gewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBJdGVy
YXRvclN0YXRlIHsKQEAgLTc2LDIzICs2OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDdXJzb3I+IGNsb25lKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBj
b25zdCBSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKCkgY29uc3QgPSAwOworICAg
ICAgICB2aXJ0dWFsIGNvbnN0IElEQlJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIo
KSBjb25zdCA9IDA7CiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSosIGJvb2wmIGZv
dW5kKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFi
YXNlSWQsIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwKiBvYmplY3RTdG9yZXMp
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBp
bnQ2NF90JiByb3dJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlOjpSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJv
b2wmIGZvdW5kKSA9IDA7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWZQdHI8SURCUmVjb3Jk
SWRlbnRpZmllcj4mIGZvdW5kSURCUmVjb3JkSWRlbnRpZmllcikgPSAwOwogCi0gICAgdmlydHVh
bCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlOjpSZWNvcmRJZGVudGlmaWVyJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERh
dGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYsIGNvbnN0IElEQlJlY29yZElkZW50aWZpZXIqKSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXks
IGJvb2wmIGV4aXN0cykgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFz
ZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0
X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGdl
dFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFZlY3Rvcjxj
aGFyPiYgcmVjb3JkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2
YWx1ZSwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpSZWNvcmRJZGVudGlmaWVyKikgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlJlY29yZElkZW50aWZpZXImKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgSURCUmVjb3JkSWRlbnRp
ZmllciopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciYpID0gMDsKIAogICAgIHZpcnR1
YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCkgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlY29yZElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlY29yZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43Y2E3NzgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVjb3JkSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJREJS
ZWNvcmRJZGVudGlmaWVyX2gKKyNkZWZpbmUgSURCUmVjb3JkSWRlbnRpZmllcl9oCisKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElE
QlJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJSZWNvcmRJZGVudGlmaWVy
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4g
Y3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXksIGludDY0X3QgdmVy
c2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCUmVjb3JkSWRlbnRp
ZmllcihlbmNvZGVkUHJpbWFyeUtleSwgdmVyc2lvbikpOworICAgIH0KKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQlJlY29yZElkZW50aWZpZXIpOworICAgIH0KKworICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2Vu
Y29kZWRQcmltYXJ5S2V5OyB9CisgICAgaW50NjRfdCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4g
bV92ZXJzaW9uOyB9CisgICAgdm9pZCByZXNldChjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQ
cmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pCisgICAgeworICAgICAgICBtX2VuY29kZWRQcmlt
YXJ5S2V5ID0gZW5jb2RlZFByaW1hcnlLZXk7CisgICAgICAgIG1fdmVyc2lvbiA9IHZlcnNpb247
CisgICAgfQorCitwcml2YXRlOgorICAgIElEQlJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9y
PGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKQorICAgICAgICA6IG1f
ZW5jb2RlZFByaW1hcnlLZXkoZW5jb2RlZFByaW1hcnlLZXkpCisgICAgICAgICwgbV92ZXJzaW9u
KHZlcnNpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIWVuY29kZWRQcmltYXJ5S2V5LmlzRW1w
dHkoKSk7CisgICAgfQorCisgICAgSURCUmVjb3JkSWRlbnRpZmllcigpCisgICAgICAgIDogbV92
ZXJzaW9uKC0xKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkUHJp
bWFyeUtleTsKKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJSZWNvcmRJZGVudGlmaWVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCmluZGV4IDI4MzE4YTkuLjg4ZGRhOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcApAQCAtODk4LDcgKzg5OCw3IEBA
IFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURC
QmFja2luZ1N0b3JlTGV2ZWxEQjo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBw
cnBWYWx1ZSwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpwdXRSZWNvcmQoSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IHBycFZhbHVlLCBJREJSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3JlTGV2
ZWxEQjo6cHV0UmVjb3JkIik7CiAgICAgaWYgKCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQpKQpAQCAtOTQxLDE3ICs5NDEsMTggQEAgYm9vbCBJREJCYWNraW5n
U3RvcmVMZXZlbERCOjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6
VHJhbnNhY3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJCYWNraW5nU3RvcmVMZXZl
bERCOjpkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlJlY29yZElkZW50aWZpZXImIHJlY29yZElk
ZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmRlbGV0ZVJlY29yZChJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQlJlY29yZElkZW50aWZp
ZXImIHJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNraW5n
U3RvcmVMZXZlbERCOjpkZWxldGVSZWNvcmQiKTsKKwogICAgIGlmICghS2V5UHJlZml4Ojp2YWxp
ZElkcyhkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0
b3JlTGV2ZWxEQjo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rp
b24pOwogCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlRGF0YUtleSA9IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHJlY29yZElk
ZW50aWZpZXIucHJpbWFyeUtleSgpKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3Rv
cmVEYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgcmVjb3JkSWRlbnRpZmllci5lbmNvZGVkUHJpbWFyeUtleSgpKTsKICAgICBsZXZl
bERCVHJhbnNhY3Rpb24tPnJlbW92ZShvYmplY3RTdG9yZURhdGFLZXkpOwogCi0gICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCByZWNvcmRJZGVudGlmaWVyLnByaW1hcnlLZXkoKSk7Cisg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByZWNvcmRJZGVudGlmaWVyLmVuY29kZWRQ
cmltYXJ5S2V5KCkpOwogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5
S2V5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMjcsMTIgKzEwMjgsMTIgQEAgYm9vbCBJ
REJCYWNraW5nU3RvcmVMZXZlbERCOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIoSURCQmFja2luZ1N0b3IKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJCYWNraW5n
U3RvcmVMZXZlbERCOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZTo6UmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyLCBib29sJiBmb3Vu
ZCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBS
ZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4mIGZvdW5kSURCUmVjb3JkSWRlbnRpZmllcikKIHsK
ICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6OmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUiKTsKICAgICBpZiAoIUtleVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3VuZCA9IGZhbHNl
OworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OlRyYW5zYWN0aW9uOjpsZXZl
bERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
bGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CkBAIC0xMDQ5LDcgKzEwNTAs
NyBAQCBib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcgogICAgIGlmICghZGVjb2RlVmFySW50KGRhdGEu
YmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGZvdW5kUmVjb3JkSWRlbnRpZmllci0+cmVzZXQoZW5jb2RlSURCS2V5KGtleSksIHZlcnNp
b24pOworICAgIGZvdW5kSURCUmVjb3JkSWRlbnRpZmllciA9IElEQlJlY29yZElkZW50aWZpZXI6
OmNyZWF0ZShlbmNvZGVJREJLZXkoa2V5KSwgdmVyc2lvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTExODYsMTkgKzExODcsMjAgQEAgYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpk
ZWxldGVJbmRleChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKgogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OnB1dEluZGV4RGF0
YUZvclJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZTo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllcikKK2Jvb2wgSURCQmFja2luZ1N0
b3JlTGV2ZWxEQjo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3Qg
SURCUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBMT0coU3RvcmFn
ZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6OnB1dEluZGV4RGF0YUZvclJlY29yZCIpOwog
ICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQocmVjb3JkSWRlbnRpZmllcik7
CiAgICAgaWYgKCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OlRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgZW5jb2RlSURCS2V5KGtleSksIHJlY29yZElkZW50aWZp
ZXIucHJpbWFyeUtleSgpKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0g
SW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
ZW5jb2RlSURCS2V5KGtleSksIHJlY29yZElkZW50aWZpZXItPmVuY29kZWRQcmltYXJ5S2V5KCkp
OwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmRWZWN0b3IoZW5jb2Rl
VmFySW50KHJlY29yZElkZW50aWZpZXIudmVyc2lvbigpKSk7Ci0gICAgZGF0YS5hcHBlbmRWZWN0
b3IocmVjb3JkSWRlbnRpZmllci5wcmltYXJ5S2V5KCkpOworICAgIGRhdGEuYXBwZW5kVmVjdG9y
KGVuY29kZVZhckludChyZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpKTsKKyAgICBkYXRhLmFw
cGVuZFZlY3RvcihyZWNvcmRJZGVudGlmaWVyLT5lbmNvZGVkUHJpbWFyeUtleSgpKTsKIAogICAg
IGxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0xMzM2LDYgKzEzMzgsNyBAQCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpDdXJz
b3I6OkN1cnNvcihjb25zdCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpDdXJzb3IqIG90aAogICAg
IDogbV90cmFuc2FjdGlvbihvdGhlci0+bV90cmFuc2FjdGlvbikKICAgICAsIG1fY3Vyc29yT3B0
aW9ucyhvdGhlci0+bV9jdXJzb3JPcHRpb25zKQogICAgICwgbV9jdXJyZW50S2V5KG90aGVyLT5t
X2N1cnJlbnRLZXkpCisgICAgLCBtX3JlY29yZElkZW50aWZpZXIoSURCUmVjb3JkSWRlbnRpZmll
cjo6Y3JlYXRlKCkpCiB7CiAgICAgaWYgKG90aGVyLT5tX2l0ZXJhdG9yKSB7CiAgICAgICAgIG1f
aXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwpAQCAtMTM0NSw2ICsx
MzQ4LDggQEAgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Q3Vyc29yOjpDdXJzb3IoY29uc3QgSURC
QmFja2luZ1N0b3JlTGV2ZWxEQjo6Q3Vyc29yKiBvdGgKICAgICAgICAgICAgIEFTU0VSVChtX2l0
ZXJhdG9yLT5pc1ZhbGlkKCkpOwogICAgICAgICB9CiAgICAgfQorCisgICAgbV9yZWNvcmRJZGVu
dGlmaWVyLT5yZXNldChvdGhlci0+bV9yZWNvcmRJZGVudGlmaWVyLT5lbmNvZGVkUHJpbWFyeUtl
eSgpLCBvdGhlci0+bV9yZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpOwogfQogCiBib29sIElE
QkJhY2tpbmdTdG9yZUxldmVsREI6OkN1cnNvcjo6Zmlyc3RTZWVrKCkKQEAgLTE1MDUsOCArMTUx
MCw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpD
dXJzb3IKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBib29sIGxv
YWRDdXJyZW50Um93KCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFs
dWUoKSBjb25zdCBPVkVSUklERSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpIE9WRVJSSURFOwogCiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCBWZWN0b3I8Y2hhcj4gZW5jb2RlS2V5KGNvbnN0IElEQktleSAma2V5KQpA
QCAtMTU0OCw3ICsxNTUzLDcgQEAgYm9vbCBPYmplY3RTdG9yZUtleUN1cnNvckltcGw6OmxvYWRD
dXJyZW50Um93KCkKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyByZS1lbmNvZGVzIHdoYXQg
d2FzIGp1c3QgZGVjb2RlZDsgdHJ5IGFuZCBvcHRpbWl6ZS4KLSAgICBtX3JlY29yZElkZW50aWZp
ZXIucmVzZXQoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9uKTsKKyAgICBtX3Jl
Y29yZElkZW50aWZpZXItPnJlc2V0KGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lv
bik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE1NjYsOCArMTU3MSw4IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICAvLyBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpDdXJzb3IKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudFZhbHVlOyB9Ci0gICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX2N1cnJlbnRWYWx1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygp
IE9WRVJSSURFOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBWZWN0b3I8Y2hhcj4gZW5jb2Rl
S2V5KGNvbnN0IElEQktleSAma2V5KQpAQCAtMTYxMiw3ICsxNjE3LDcgQEAgYm9vbCBPYmplY3RT
dG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICB9CiAKICAgICAvLyBGSVhNRTog
VGhpcyByZS1lbmNvZGVzIHdoYXQgd2FzIGp1c3QgZGVjb2RlZDsgdHJ5IGFuZCBvcHRpbWl6ZS4K
LSAgICBtX3JlY29yZElkZW50aWZpZXIucmVzZXQoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkp
LCB2ZXJzaW9uKTsKKyAgICBtX3JlY29yZElkZW50aWZpZXItPnJlc2V0KGVuY29kZUlEQktleSgq
bV9jdXJyZW50S2V5KSwgdmVyc2lvbik7CiAKICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7CiAgICAg
dmFsdWUuYXBwZW5kKHZhbHVlUG9zaXRpb24sIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCkgLSB2
YWx1ZVBvc2l0aW9uKTsKQEAgLTE2MjAsNyArMTYyNSw3IEBAIGJvb2wgT2JqZWN0U3RvcmVDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNsYXNzIElu
ZGV4S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpDdXJzb3Ig
eworY2xhc3MgSW5kZXhLZXlDdXJzb3JJbXBsIEZJTkFMIDogcHVibGljIElEQkJhY2tpbmdTdG9y
ZUxldmVsREI6OkN1cnNvciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhL
ZXlDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JP
cHRpb25zKQogICAgIHsKQEAgLTE2MzMsMTAgKzE2MzgsMTAgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIC8vIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OkN1cnNvcgotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkg
Y29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgdmlydHVhbCBjb25zdCBJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKCkgY29u
c3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIG1fcmVjb3JkSWRlbnRpZmllcjsgfQot
ICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkgY29uc3QgT1ZFUlJJREUgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CisgICAgdmlydHVh
bCBjb25zdCBJREJSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKCkgY29uc3QgT1ZF
UlJJREUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuICoobV9yZWNvcmRJZGVudGlmaWVy
LmdldCgpKTsgfQorICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpIE9WRVJSSURFOwog
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBWZWN0b3I8Y2hhcj4gZW5jb2RlS2V5KGNvbnN0IElE
QktleSAma2V5KQpAQCAtMTcxMSw3ICsxNzE2LDcgQEAgYm9vbCBJbmRleEtleUN1cnNvckltcGw6
OmxvYWRDdXJyZW50Um93KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY2xhc3MgSW5kZXhDdXJz
b3JJbXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OkN1cnNvciB7CitjbGFzcyBJ
bmRleEN1cnNvckltcGwgRklOQUwgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Q3Vy
c29yIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvckltcGw+IGNy
ZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3Rv
cmVMZXZlbERCOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiAgICAgewpA
QCAtMTcyNCwxMCArMTcyOSwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6Q3Vyc29yCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlL
ZXk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OlJlY29yZElk
ZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gbV9yZWNvcmRJZGVudGlmaWVyOyB9Ci0gICAgYm9vbCBsb2FkQ3VycmVudFJvdygp
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wcmltYXJ5S2V5
OyB9CisgICAgdmlydHVhbCBjb25zdCBJREJSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlm
aWVyKCkgY29uc3QgT1ZFUlJJREUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuICoobV9y
ZWNvcmRJZGVudGlmaWVyLmdldCgpKTsgfQorICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJv
dygpIE9WRVJSSURFOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBWZWN0b3I8Y2hhcj4gZW5j
b2RlS2V5KGNvbnN0IElEQktleSAma2V5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIu
aAppbmRleCA4MGVjODU5Li44ODkzNTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVs
REIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCisjaW5j
bHVkZSAiSURCUmVjb3JkSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogI2lu
Y2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5o
IgpAQCAtNzcsNDMgKzc4LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2Jq
ZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgYm9vbCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJS
SURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAotICAgIGNsYXNzIFJlY29yZElkZW50aWZpZXIgOiBw
dWJsaWMgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpSZWNvcmRJZGVudGlmaWVyIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIFJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmlt
YXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pCi0gICAgICAgICAgICA6IElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZTo6UmVjb3JkSWRlbnRpZmllcigpCi0gICAgICAgICAgICAsIG1fcHJpbWFyeUtleShw
cmltYXJ5S2V5KQotICAgICAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKCFwcmltYXJ5S2V5LmlzRW1wdHkoKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWNvcmRJZGVudGlmaWVyKCkKLSAgICAgICAgICAgIDogSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlOjpSZWNvcmRJZGVudGlmaWVyKCkKLSAgICAgICAgICAgICwgbV9wcmltYXJ5S2V5
KCkKLSAgICAgICAgICAgICwgbV92ZXJzaW9uKC0xKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgICAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX3ZlcnNpb247IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0
KGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSBPVkVSUklE
RSB7IG1fcHJpbWFyeUtleSA9IHByaW1hcnlLZXk7IG1fdmVyc2lvbiA9IHZlcnNpb247IH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlLZXk7IC8vIEZJWE1F
OiBNYWtlIGl0IG1vcmUgY2xlYXIgdGhhdCB0aGlzIGlzIHRoZSAqZW5jb2RlZCogdmVyc2lvbiBv
ZiB0aGUga2V5LgotICAgICAgICBpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICB9OwotCiAgICAgdmly
dHVhbCBib29sIGdldFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIFZlY3RvcjxjaGFyPiYgcmVjb3JkKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0g
ICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlOjpSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJO
OworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXkmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIElEQlJlY29yZElk
ZW50aWZpZXIqKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdmlydHVhbCBib29s
IGNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSBXQVJO
X1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVJlY29yZChJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6UmVjb3JkSWRl
bnRpZmllciYpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCUmVjb3JkSWRl
bnRpZmllciYpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QmIGN1cnJlbnROdW1iZXIpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2
aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpIE9W
RVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5P
YmplY3RTdG9yZShJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIElEQkJh
Y2tpbmdTdG9yZUludGVyZmFjZTo6UmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlm
aWVyLCBib29sJiBmb3VuZCkgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5JiwgUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+JiBmb3VuZElEQlJlY29y
ZElkZW50aWZpZXIpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIHZpcnR1YWwg
Ym9vbCBjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwg
Ym9vbCBpc011bHRpRW50cnkpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQpIE9WRVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0
SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlJlY29y
ZElkZW50aWZpZXImKSBPVkVSUklERSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBi
b29sIHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciopIE9W
RVJSSURFIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWFyeUtl
eVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXkmLCBSZWZQdHI8SURCS2V5PiYgcHJpbWFyeUtleSkgT1ZFUlJJREUgV0FSTl9VTlVT
RURfUkVUVVJOOwogICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBS
ZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5LCBib29sJiBleGlzdHMpIE9WRVJSSURFIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKIApAQCAtMTM5LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTo6Q3Vyc29yPiBjbG9u
ZSgpIE9WRVJSSURFID0gMDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQogICAgICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0IE9WRVJSSURF
ID0gMDsKLSAgICAgICAgdmlydHVhbCBjb25zdCBSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVu
dGlmaWVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9yZWNvcmRJZGVudGlmaWVyOyB9Cisg
ICAgICAgIHZpcnR1YWwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmll
cigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICoobV9yZWNvcmRJZGVudGlmaWVyLmdldCgpKTsg
fQogICAgICAgICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH0KICAgICAgICAgdmlydHVhbCBib29sIGxv
YWRDdXJyZW50Um93KCkgPSAwOwogCkBAIC0xNDcsNiArMTIyLDcgQEAgcHVibGljOgogICAgICAg
ICBDdXJzb3IoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0
aW9ucyYgY3Vyc29yT3B0aW9ucykKICAgICAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKICAgICAgICAgICAgICwgbV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCisgICAg
ICAgICAgICAsIG1fcmVjb3JkSWRlbnRpZmllcihJREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUo
KSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIGV4cGxpY2l0IEN1cnNvcihjb25zdCBJ
REJCYWNraW5nU3RvcmVMZXZlbERCOjpDdXJzb3IqIG90aGVyKTsKQEAgLTE2MCw3ICsxMzYsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IEN1cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOwog
ICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2l0ZXJhdG9yOwogICAgICAgICBSZWZQ
dHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7Ci0gICAgICAgIElEQkJhY2tpbmdTdG9yZUxldmVsREI6
OlJlY29yZElkZW50aWZpZXIgbV9yZWNvcmRJZGVudGlmaWVyOworICAgICAgICBSZWZQdHI8SURC
UmVjb3JkSWRlbnRpZmllcj4gbV9yZWNvcmRJZGVudGlmaWVyOwogICAgIH07CiAKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpDdXJzb3I+IG9wZW5PYmpl
Y3RTdG9yZUtleUN1cnNvcihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJh
bmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAKaW5kZXggMTgxZTI1MC4uYzk4NzAyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCiAKLSNp
bmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCIKICNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQi5oIgpAQCAtMjQ4LDE0ICsyNDgsMTMgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amUKICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKICAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBzdG9yZSA9IGJhY2tpbmdTdG9yZSgpOwog
ICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBjb3VsZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBu
ZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29ydGggdGhlIGV4dHJhIGNvbXBsZXhpdHkuCi0gICAg
SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVy
OwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBib29sIG9rID0gc3RvcmUtPmtleUV4aXN0
c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
bWV0YWRhdGEuaWQsIG9iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5LCAmcmVjb3JkSWRlbnRpZmll
ciwgZm91bmQpOworICAgIFJlZlB0cjxJREJSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlm
aWVyOworICAgIGJvb2wgb2sgPSBzdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3Rv
cmVJZCwgKnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIpOwogICAgIGlmICghb2spIHsKICAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBpbmRl
eCBrZXlzLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIWZvdW5kKSB7Cisg
ICAgaWYgKCFyZWNvcmRJZGVudGlmaWVyKSB7CiAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBp
bmRleCBrZXlzIGZvciBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJv
cnQoZXJyb3IucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjc4LDcgKzI3Nyw3IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
ZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewogICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRM
ZXZlbERCOjpJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7
Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAq
c3RvcmUuZ2V0KCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpZCgp
LCBvYmplY3RTdG9yZUlkKTsKKyAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJl
Y29yZElkZW50aWZpZXIuZ2V0KCksICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAKaW5kZXggNDI0MDVi
MS4uOGJiOTg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVs
REIuY3BwCkBAIC02MSw4ICs2MSw5IEBAIGJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxE
Qjo6SW5kZXhXcml0ZXI6OnZlcmlmeUluZGV4S2V5cyhJREJCYWNraW5nU3RvcmVJCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6SW5kZXhX
cml0ZXI6OndyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OlJlY29y
ZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSYg
YmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0
Cit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyOjp3cml0ZUlu
ZGV4S2V5cyhjb25zdCBJREJSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyLCBJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKSBjb25zdAogeworICAgIEFTU0VSVChyZWNvcmRJZGVudGlmaWVyKTsK
ICAgICBpbnQ2NF90IGluZGV4SWQgPSBtX2luZGV4TWV0YWRhdGEuaWQ7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewogICAgICAgICBib29sIG9r
ID0gYmFja2luZ1N0b3JlLnB1dEluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKihtX2luZGV4S2V5cylbaV0uZ2V0KCksIHJl
Y29yZElkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVs
REIuaAppbmRleCAyZTgyZGUwLi5lZjYzNGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZExldmVsREIuaApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgSURCT2JqZWN0
U3RvcmVCYWNrZW5kTGV2ZWxEQiB7CiAKICAgICAgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlJiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtleXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDAs
IFN0cmluZyogZXJyb3JNZXNzYWdlID0gMCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOwogCi0g
ICAgICAgIHZvaWQgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6
UmVjb3JkSWRlbnRpZmllciYsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSYsIElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgY29uc3Q7CisgICAgICAgIHZvaWQgd3JpdGVJbmRleEtleXMoY29uc3Qg
SURCUmVjb3JkSWRlbnRpZmllciosIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSYsIElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIGFk
ZGluZ0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlJiwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0
IElEQktleSogcHJpbWFyeUtleSwgYm9vbCYgYWxsb3dlZCkgY29uc3QgV0FSTl9VTlVTRURfUkVU
VVJOOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REJPcGVyYXRpb25zLmNwcAppbmRleCA2ZTE0NDBlLi40ODQ3ZGJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREJPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJPcGVyYXRpb25zLmNwcApA
QCAtMTkzLDE1ICsxOTMsMTQgQEAgdm9pZCBQdXRPcGVyYXRpb246OnBlcmZvcm0oKQogICAgIEFT
U0VSVChrZXkpOwogICAgIEFTU0VSVChrZXktPmlzVmFsaWQoKSk7CiAKLSAgICBJREJCYWNraW5n
U3RvcmVMZXZlbERCOjpSZWNvcmRJZGVudGlmaWVyIHJlY29yZElkZW50aWZpZXI7CisgICAgUmVm
UHRyPElEQlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXI7CiAgICAgaWYgKG1fcHV0
TW9kZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9ubHkpIHsKLSAgICAgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmtl
eUV4aXN0c0luT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCAmcmVjb3JkSWRlbnRp
ZmllciwgZm91bmQpOworICAgICAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0
c0luT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyKTsK
ICAgICAgICAgaWYgKCFvaykgewogICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
ICJJbnRlcm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgaWYgKHJl
Y29yZElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9y
LCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yMjEsNyArMjIwLDcgQEAgdm9pZCBQdXRPcGVyYXRp
b246OnBlcmZvcm0oKQogICAgIH0KIAogICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBk
byBhbnkgbXV0YXRpb24uIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlv
biBpbiBjYXNlIG9mIGVycm9yLgotICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdT
dG9yZS0+cHV0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgJnJlY29yZElk
ZW50aWZpZXIpOworICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+cHV0
UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgcmVjb3JkSWRlbnRpZmllci5n
ZXQoKSk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CiAgICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVy
Zm9ybWluZyBwdXQvYWRkLiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjI5LDcgKzIyOCw3IEBA
IHZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKCkKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIElEQk9iamVjdFN0b3JlQmFj
a2VuZExldmVsREI6OkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5n
ZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZp
ZXIsICptX2JhY2tpbmdTdG9yZSwgbV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKKyAgICAgICAgaW5kZXhXcml0
ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICptX2JhY2tpbmdTdG9y
ZSwgbV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlk
LCBtX29iamVjdFN0b3JlLmlkKTsKICAgICB9CiAKICAgICBpZiAobV9vYmplY3RTdG9yZS5hdXRv
SW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkN1
cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0
YmQ4N2FhLi4wZTkyYTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xODEzLDYgKzE4MTMsNyBAQAogCQk1MUU2ODIxMDE2Mzg3
MzAyMDAzQkJGM0MgLyogTG9hZGVyU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTY4MjBGMTYzODczMDIwMDNCQkYzQyAvKiBMb2FkZXJT
dHJhdGVneS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUxRUFDNTY3MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUFD
NTY1MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsg
fTsKIAkJNTFFQUM1NjgxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUFD
NTY2MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTFFQUM1QjIxODE2
M0Y0RTAwNEYxQkE0IC8qIElEQlJlY29yZElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUFDNUIwMTgxNjNGNEUwMDRGMUJBNCAvKiBJ
REJSZWNvcmRJZGVudGlmaWVyLmggKi87IH07CiAJCTUxRUM5MjY1MENFOTBERDQwMEY5MDMwOCAv
KiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFQzkyNUQwQ0U5MERENDAwRjkwMzA4IC8q
IEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi87IH07CiAJCTUxRjZFMEEz
MTgxMUQyNTIwMDU4QTAwQSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjZFMDhGMTgxMUQy
NTIwMDU4QTAwQSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUZBMkQ3ODE1MjEzMkIz
MDBDMUJBMEIgLyogRE9NV2luZG93RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdGQkExODE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2lu
ZG93RXh0ZW5zaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTg0MTMsNiArODQxNCw3IEBACiAJCTUxRTY4MjBGMTYzODczMDIwMDNCQkYzQyAv
KiBMb2FkZXJTdHJhdGVneS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2Fk
ZXJTdHJhdGVneS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUVBQzU2NTE4MTVF
RDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFQUM1NjYxODE1RUQzRTAwNEYxQkE0IC8q
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MUVBQzVCMDE4MTYzRjRFMDA0RjFCQTQgLyogSURCUmVjb3JkSWRlbnRpZmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJSZWNvcmRJZGVudGlmaWVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRUM5MjVEMENFOTBERDQwMEY5MDMwOCAv
KiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGNkEzRDUwNjYzQkYwNDAwNEQyOTE5
IC8qIEhUTUxDYW52YXNFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxDYW52YXNFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTUxRjZBM0Q2
MDY2M0JGMDQwMDREMjkxOSAvKiBIVE1MQ2FudmFzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQ2FudmFzRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAg
LTE2NzUzLDYgKzE2NzU1LDcgQEAKIAkJCQk1MUQ3MTk5RTE4MTEwNkUwMDAxNkRDNTEgLyogSURC
T3BlbkRCUmVxdWVzdC5pZGwgKi8sCiAJCQkJNTFENzE5OUYxODExMDZFMDAwMTZEQzUxIC8qIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovLAogCQkJCTUxRDcxOUEwMTgxMTA2RTAw
MDE2REM1MSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi8sCisJCQkJNTFFQUM1
QjAxODE2M0Y0RTAwNEYxQkE0IC8qIElEQlJlY29yZElkZW50aWZpZXIuaCAqLywKIAkJCQk1MUQ3
MTlBMTE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5jcHAgKi8sCiAJCQkJNTFENzE5QTIx
ODExMDZFMDAwMTZEQzUxIC8qIElEQlJlcXVlc3QuaCAqLywKIAkJCQk1MUQ3MTlBMzE4MTEwNkUw
MDAxNkRDNTEgLyogSURCUmVxdWVzdC5pZGwgKi8sCkBAIC0yMTgxOCw2ICsyMTgyMSw3IEBACiAJ
CQkJQkM1M0M2OTIwREE1OTExNDAwMjFFQjVEIC8qIENTU0dyYWRpZW50VmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA3OEUwOTQzMTdEMTZFMUMwMDQyMEFBMSAvKiBSVENTZXNzaW9uRGVzY3Jp
cHRpb25EZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTBGNTNEQzA5RDE1RERBMDBD
OUIwQzggLyogQ1NTR3JhbW1hci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFFQUM1QjIxODE2M0Y0
RTAwNEYxQkE0IC8qIElEQlJlY29yZElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZC
MzA1NkMyMTY5RTVEQUMwMDk2QTIzMiAvKiBDU1NHcm91cGluZ1J1bGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNzcyQjNDMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NIZWxwZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZCNDlDMzlEMTY3ODQ5NDcwMDdGRkI1RCAvKiBDU1NIb3N0UnVsZS5oIGluIEhl
YWRlcnMgKi8sCg==
</data>
<flag name="review"
          id="237476"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>