<?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>122861</bug_id>
          
          <creation_ts>2013-10-15 14:03:39 -0700</creation_ts>
          <short_desc>Baseline JIT should use the DFG GetById IC</short_desc>
          <delta_ts>2013-10-16 18:19:59 -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>JavaScriptCore</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>121641</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>roger_fong</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>940119</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 14:03:39 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940127</commentid>
    <comment_count>1</comment_count>
      <attachid>214299</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 14:28:44 -0700</bug_when>
    <thetext>Created attachment 214299
work in progress

Almost done.  Still testing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940201</commentid>
    <comment_count>2</comment_count>
      <attachid>214323</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 17:14:01 -0700</bug_when>
    <thetext>Created attachment 214323
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940207</commentid>
    <comment_count>3</comment_count>
      <attachid>214323</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-10-15 17:35:43 -0700</bug_when>
    <thetext>Comment on attachment 214323
the patch

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

wow, that is a lot of red

&gt; Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:473
&gt;      BEGIN_UNINTERRUPTED_SEQUENCE(sequenceGetByIdHotPath);

Remove this -- you&apos;ve removed the corresponding end.  Maybe worth just having an initial patch remove the *_UNINTERRUPTED_* macros -- assuming the patchable jump/label logic is handling everything correctly we no long reed to worry about inline constant pools breaking repatching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940213</commentid>
    <comment_count>4</comment_count>
      <attachid>214323</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-15 17:55:52 -0700</bug_when>
    <thetext>Comment on attachment 214323
the patch

Attachment 214323 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/3744094</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940218</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 18:38:22 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 214323 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214323&amp;action=review
&gt; 
&gt; wow, that is a lot of red
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:473
&gt; &gt;      BEGIN_UNINTERRUPTED_SEQUENCE(sequenceGetByIdHotPath);
&gt; 
&gt; Remove this -- you&apos;ve removed the corresponding end.  Maybe worth just having an initial patch remove the *_UNINTERRUPTED_* macros -- assuming the patchable jump/label logic is handling everything correctly we no long reed to worry about inline constant pools breaking repatching.

And, I don&apos;t think we use inline constant pools on any of the platforms we care about...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940219</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 18:40:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 214323 [details])
&gt; Attachment 214323 [details] did not pass win-ews (win):
&gt; Output: http://webkit-queues.appspot.com/results/3744094

Oops, those look like easy 32-bit fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940220</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 18:41:17 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 214323 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214323&amp;action=review
&gt; 
&gt; wow, that is a lot of red
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:473
&gt; &gt;      BEGIN_UNINTERRUPTED_SEQUENCE(sequenceGetByIdHotPath);
&gt; 
&gt; Remove this -- you&apos;ve removed the corresponding end.  Maybe worth just having an initial patch remove the *_UNINTERRUPTED_* macros -- assuming the patchable jump/label logic is handling everything correctly we no long reed to worry about inline constant pools breaking repatching.

I think after this lands, I&apos;ll do a couple of cycles of looking for stupidities to remove, including those macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940221</commentid>
    <comment_count>8</comment_count>
      <attachid>214328</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 18:45:22 -0700</bug_when>
    <thetext>Created attachment 214328
patch for ews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940227</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 19:35:47 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/157480</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940479</commentid>
    <comment_count>10</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-10-16 12:08:07 -0700</bug_when>
    <thetext>Hi, I think the following failure started occurring on Windows after this patch:
http://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/r157480%20(39294)/js/dictionary-prototype-caching-pretty-diff.html

does this look related to you? thx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940501</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-16 13:04:01 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Hi, I think the following failure started occurring on Windows after this patch:
&gt; http://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/r157480%20(39294)/js/dictionary-prototype-caching-pretty-diff.html
&gt; 
&gt; does this look related to you? thx

See https://bugs.webkit.org/show_bug.cgi?id=122902</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940608</commentid>
    <comment_count>12</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-10-16 18:19:59 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Hi, I think the following failure started occurring on Windows after this patch:
&gt; &gt; http://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/r157480%20(39294)/js/dictionary-prototype-caching-pretty-diff.html
&gt; &gt; 
&gt; &gt; does this look related to you? thx
&gt; 
&gt; See https://bugs.webkit.org/show_bug.cgi?id=122902

Hmm this is a layout test failure and not a jscore test failure, still broken. I&apos;ll take a closer look and let you know what i find.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214299</attachid>
            <date>2013-10-15 14:28:44 -0700</date>
            <delta_ts>2013-10-15 17:14:01 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>104644</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NDcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QmFzZWxpbmUgSklUIHNob3VsZCB1c2UgdGhlIERGRyBHZXRCeUlkIElDCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI4NjEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFN0aWxsIHRlc3Rpbmcg
aXQuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOjpjb3B5VG9TdHViSW5mbyk6
CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVN0dWJDb21waWxh
dGlvbkluZm86OlByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogaml0L0pJ
VElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpjYWxs
T3BlcmF0aW9uKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAg
ICAgIChKU0M6OnJlcGF0Y2hHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6YnVpbGRHZXRCeUlETGlz
dCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgICogaml0L1Ro
dW5rR2VuZXJhdG9ycy5oOgorCiAyMDEzLTEwLTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVu
YmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsIHNob3Vs
ZG4ndCBzdG9yZSBhIEpTQ29udGV4dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw2IEBACiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklU
U3R1YnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCkBAIC0yMzc3LDI5ICsyMzc2LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldFN0dWJJbnRl
cm5hbChSZXBhdGMKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4KICAgICAgICAgZGF0YUxv
ZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICIsIHN0YXRpY19jYXN0PGludD4oc3R1
YkluZm8uYWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50ZXIodGhpcyksICIuXG4iKTsKICAg
ICB9Ci0KLSAgICBzd2l0Y2ggKGppdFR5cGUoKSkgewotICAgIGNhc2UgSklUQ29kZTo6QmFzZWxp
bmVKSVQ6Ci0gICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAg
ICAgICBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHViSW5mbyk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNQdXRCeUlkQWNjZXNz
KGFjY2Vzc1R5cGUpKTsKLSAgICAgICAgICAgIHJlc2V0UHV0QnlJRChyZXBhdGNoQnVmZmVyLCBz
dHViSW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb2RlOjpE
RkdKSVQ6Ci0gICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAg
ICAgICByZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwotICAgICAgICBlbHNl
IGlmIChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAgICAgICByZXNldFB1dEJ5
SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGlzSW5BY2Nlc3MoYWNjZXNzVHlwZSkpOwotICAgICAgICAgICAgcmVz
ZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgYnJlYWs7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNKSVQoaml0
VHlwZSgpKSk7CisgICAgCisgICAgaWYgKGlzR2V0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSkKKyAg
ICAgICAgcmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAgICBlbHNlIGlm
IChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCisgICAgICAgIHJlc2V0UHV0QnlJRChyZXBh
dGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAgZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGlzSW5BY2Nlc3MoYWNjZXNzVHlwZSkpOworICAgICAgICByZXNldEluKHJlcGF0Y2hCdWZmZXIs
IHN0dWJJbmZvKTsKICAgICB9CiAgICAgCiAgICAgc3R1YkluZm8ucmVzZXQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDU1ICs0OTIsNTIg
QEAgQUxXQVlTX0lOTElORSB2b2lkIFByb3BlcnR5U3R1YkNvbXBpbGF0aQogICAgIGluZm8uY29k
ZU9yaWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7CiAgICAgaW5mby5jYWxsUmV0dXJu
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbFJldHVybkxvY2F0aW9uKTsKIAor
ICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1cmVU
b0NvbXBhcmUpLCBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgaW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihz
dHJ1Y3R1cmVDaGVjaykpOworICAgIAorICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY29sZFBhdGhCZWdpbikpOwor
ICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihkb25lKSk7CisgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdl
TG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9wZXJ0eVN0b3JhZ2VMb2Fk
KSk7CisgICAgCisgICAgaW5mby5wYXRjaC5kZmcuYmFzZUdQUiA9IEdQUkluZm86OnJlZ1QwOwor
CisgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChH
UFJJbmZvOjpyZWdUMCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KSAvLyBKU1ZBTFVFIGNhc2VzCiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
aG90UGF0aEJlZ2luKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW5M
b2NhdGlvbjsKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVUb0Nv
bXBhcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhC
ZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlVG9Db21wYXJlKSk7
Ci0gICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2sgPSBNYWNy
b0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9u
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlQ2hlY2spKTsKLSAgICAgICAgaW5mby5w
YXRjaC5iYXNlbGluZS51LmdldC5wcm9wZXJ0eVN0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHByb3BlcnR5U3RvcmFnZUxvYWQpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsID0gTWFj
cm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldERpc3BsYWNlbWVudExhYmVsKSk7Ci0jZWxzZQot
ICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsMSA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKLSAgICAg
ICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1lbnRMYWJlbDIgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwyKSk7Ci0jZW5kaWYKLSAg
ICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQgPSBNYWNyb0Fzc2VtYmxl
cjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoZG9uZSkpOwotICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LmNvbGRQYXRoQmVnaW4gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGNhbGxSZXR1cm5Mb2NhdGlvbikpOworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgaW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbCkpOworICAgICAgICBpbmZvLnBhdGNoLmRm
Zy52YWx1ZUdQUiA9IEdQUkluZm86OnJlZ1QwOwogICAgICAgICBicmVhazsKLSAgICB9CiAgICAg
Y2FzZSBQdXRCeUlkOgotICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxs
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Yoc3RydWN0dXJlVG9Db21wYXJlKSwgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pOwot
ICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVyZUNoZWNrKSk7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKICAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbCkpOwotI2Vsc2UK
LSAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbDIpKTsKLSAgICAg
ICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0RGlzcGxhY2VtZW50TGFiZWwxKSk7Ci0jZW5kaWYK
LSAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSk7Ci0gICAgICAgIGluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25l
KSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQgPSBNYWNy
b0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvcGVydHlTdG9yYWdlTG9hZCkpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIGluZm8ucGF0Y2guZGZnLmJhc2VHUFIgPSBHUFJJbmZvOjpy
ZWdUMDsKICAgICAgICAgaW5mby5wYXRjaC5kZmcudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMTsK
LSAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKLSAgICAgICAgdXNlZFJlZ2lzdGVy
cy5zZXQoR1BSSW5mbzo6cmVnVDApOwogICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZv
OjpyZWdUMSk7Ci0gICAgICAgIHVzZWRSZWdpc3RlcnMuY29weUluZm8oaW5mby5wYXRjaC5kZmcu
dXNlZFJlZ2lzdGVycyk7Ci0jZWxzZQotICAgICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbHNlIC8vIEpTVkFMVUUg
Y2FzZXMKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAg
aW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVy
OjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbDIpKTsKKyAgICAgICAgaW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwxKSk7CisgICAgICAgIGluZm8ucGF0
Y2guZGZnLnZhbHVlR1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGluZm8ucGF0Y2guZGZn
LnZhbHVlVGFnR1BSID0gR1BSSW5mbzo6cmVnVDE7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0
KEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUlkOgorICAg
ICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsMikpOworICAgICAgICBp
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKICAgICAgICAgaW5m
by5wYXRjaC5kZmcudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMjsKICAgICAgICAgaW5mby5wYXRj
aC5kZmcudmFsdWVUYWdHUFIgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVyczsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDAp
OwogICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgIHVz
ZWRSZWdpc3RlcnMuc2V0KEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5j
b3B5SW5mbyhpbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKLSNlbmRpZgotICAgICAgICBp
bmZvLnBhdGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQorI2VuZGlmIC8vIEpTVkFMVUUgY2FzZXMKKyAgICAKKyAgICB1c2VkUmVnaXN0ZXJzLmNv
cHlJbmZvKGluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOworICAgIGluZm8ucGF0Y2guZGZn
LnJlZ2lzdGVyc0ZsdXNoZWQgPSB0cnVlOwogfQogCiBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnBy
aXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAKICAgICAgICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAotICAgICAgICAg
ICAgUHJvcGVydHlTdHViR2V0QnlJZF9ULCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgaG90UGF0aEJlZ2luLAorICAgICAgICAgICAgUHJvcGVydHlTdHViR2V0
QnlJZF9ULCB1bnNpZ25lZCBieXRlY29kZUluZGV4LAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmUsCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjaywKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLApAQCAt
MTk2LDcgKzE5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGRvbmUpCiAgICAgICAgICAgICA6IG1fdHlwZShHZXRCeUlkKQogICAgICAgICAg
ICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICAsIGhvdFBhdGhC
ZWdpbihob3RQYXRoQmVnaW4pCiAgICAgICAgICAgICAsIHN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1
Y3R1cmVUb0NvbXBhcmUpCiAgICAgICAgICAgICAsIHN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNo
ZWNrKQogICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFnZUxv
YWQpCkBAIC0zMTEsMzkgKzMxMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoY2FsbExpbmtJbmZvLCBjYWxsZWVDb2RlQmxvY2ss
IGV4cGVjdGVkU3RydWN0dXJlLCBleHBlY3RlZEV4ZWN1dGFibGUsIGNvZGVQdHIpOwogICAgICAg
ICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRQcm90byhWTSogdm0sIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVT
dHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwot
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Y29kZU9yaWdpbi5i
eXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlJZFByb3Rv
KHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNh
Y2hlZE9mZnNldCwgcmV0dXJuQWRkcmVzcywgY2FsbEZyYW1lKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoVk0qIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKLSAgICAgICAgewot
ICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAg
ICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdChzdHViSW5mbywgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVzLCBjdXJyZW50SW5kZXgsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNh
Y2hlZE9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5
SWRQcm90b0xpc3QoVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBpbnQgY3VycmVudEluZGV4LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0
IGNhY2hlZE9mZnNldCkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5
SWRQcm90b0xpc3Qoc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGN1cnJlbnRJbmRl
eCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBjYWNoZWRPZmZz
ZXQsIGNhbGxGcmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdl
dEJ5SWRDaGFpbkxpc3QoVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBpbnQgY3VycmVudEluZGV4LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3Bl
cnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2
bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1Yklu
Zm8tPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbkxpc3Qoc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGN1
cnJlbnRJbmRleCwgc3RydWN0dXJlLCBjaGFpbiwgY291bnQsIGlkZW50LCBzbG90LCBjYWNoZWRP
ZmZzZXQsIGNhbGxGcmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBjb21w
aWxlR2V0QnlJZENoYWluKFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVk
T2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29k
ZU9mZnNldCA9IHN0dWJJbmZvLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAg
ICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oc3R1YkluZm8sIHN0cnVjdHVyZSwgY2hh
aW4sIGNvdW50LCBpZGVudCwgc2xvdCwgY2FjaGVkT2Zmc2V0LCByZXR1cm5BZGRyZXNzLCBjYWxs
RnJhbWUpOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
R2V0QnlWYWwoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKQEAgLTM3
MSwyMSArMzM3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaml0LnBy
aXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbCh2bSwgZnVuYyk7CiAgICAgICAgIH0KIAotICAgICAg
ICBzdGF0aWMgdm9pZCByZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJl
U3R1YkluZm8qKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hl
ZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0cik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGls
ZVBhdGNoR2V0QXJyYXlMZW5ndGgoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2spOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICAgICAgLy8gRm9y
Y2UgcHJvZmlsaW5nIHRvIGJlIGVuYWJsZWQgZHVyaW5nIHN0dWIgZ2VuZXJhdGlvbi4KLSAgICAg
ICAgICAgIGppdC5tX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGppdC5tX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGppdC5tX3Nob3VsZEVt
aXRQcm9maWxpbmcgPSB0cnVlOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAg
ICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgocmV0dXJuQWRk
cmVzcyk7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rRm9yKEV4ZWNTdGF0
ZSosIEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrLCBDb2RlUHRyLCBDYWxsTGlua0luZm8qLCBWTSosIENvZGVT
cGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rU2xvd0NhbGwoQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENhbGxMaW5rSW5mbyopOwogCkBAIC0zOTksMTIgKzM1
MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZUNsb3N1cmVDYWxsKENhbGxMaW5rSW5mbyosIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2Nr
LCBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7CiAg
ICAgICAgIAotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cnVjdHVy
ZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIsIENhbGxGcmFtZSopOwotICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiwgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KTsKLSAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1Yklu
Zm8qLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0
cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKLSAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1Yklu
Zm8qLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0
cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKLSAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyos
IFN0cnVjdHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBS
ZXR1cm5BZGRyZXNzUHRyLCBDYWxsRnJhbWUqKTsKLSAgICAgICAgCiAgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJh
eU1vZGUpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwg
UmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIApAQCAtNTUzLDcgKzQ5OCw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
bnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKIAogICAgICAgICB2b2lk
IGNvbXBpbGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7Ci0gICAgICAgIHZvaWQg
Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0VlJlZywgaW50IGJhc2VWUmVnLCBjb25z
dCBJZGVudGlmaWVyKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAg
ICB2b2lkIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IHJlc3VsdFRhZywgUmVnaXN0ZXJJRCByZXN1bHRQYXlsb2FkLCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQpOwogICAgICAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNPYmplY3Qq
IGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0VGFnLCBSZWdpc3RlcklEIHJlc3VsdFBheWxvYWQsIFBy
b3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCk7CiAgICAgICAgIHZvaWQgY29tcGlsZUdldERpcmVj
dE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0VGFnLCBSZWdpc3RlcklE
IHJlc3VsdFBheWxvYWQsIFJlZ2lzdGVySUQgb2Zmc2V0LCBGaW5hbE9iamVjdE1vZGUgPSBNYXlC
ZUZpbmFsKTsKQEAgLTU2NCwyOCArNTA4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFN1YjMyQ29uc3RhbnQoaW50IGRzdCwgaW50IG9wLCBpbnQzMl90IGNvbnN0YW50LCBS
ZXN1bHRUeXBlIG9wVHlwZSk7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKE9wY29k
ZUlELCBpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBu
b3RJbnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMg
PSB0cnVlLCBib29sIG9wMklzSW5SZWdpc3RlcnMgPSB0cnVlKTsKIAotI2lmIENQVShBUk1fVFJB
RElUSU9OQUwpCi0gICAgICAgIC8vIHNlcXVlbmNlT3BDYWxsCi0gICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgc2VxdWVuY2VPcENhbGxJbnN0cnVjdGlvblNwYWNlID0gMTI7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgc2VxdWVuY2VPcENhbGxDb25zdGFudFNwYWNlID0gMjsKLSAgICAgICAgLy8g
c2VxdWVuY2VHZXRCeUlkSG90UGF0aAotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNl
R2V0QnlJZEhvdFBhdGhJbnN0cnVjdGlvblNwYWNlID0gMzY7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgc2VxdWVuY2VHZXRCeUlkSG90UGF0aENvbnN0YW50U3BhY2UgPSA0OwotICAgICAgICAv
LyBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVl
bmNlR2V0QnlJZFNsb3dDYXNlSW5zdHJ1Y3Rpb25TcGFjZSA9IDgwOwotICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlQ29uc3RhbnRTcGFjZSA9IDQ7Ci0jZWxp
ZiBDUFUoU0g0KQotICAgICAgICAvLyBzZXF1ZW5jZU9wQ2FsbAotICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHNlcXVlbmNlT3BDYWxsSW5zdHJ1Y3Rpb25TcGFjZSA9IDEyOwotICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHNlcXVlbmNlT3BDYWxsQ29uc3RhbnRTcGFjZSA9IDI7Ci0gICAgICAgIC8v
IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5j
ZUdldEJ5SWRIb3RQYXRoSW5zdHJ1Y3Rpb25TcGFjZSA9IDM2OwotICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhDb25zdGFudFNwYWNlID0gNTsKLSAgICAgICAg
Ly8gc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1
ZW5jZUdldEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3BhY2UgPSAzODsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUNvbnN0YW50U3BhY2UgPSA0OwotI2Vu
ZGlmCi0KICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIC8qIFRoaXMgZnVuY3Rp
b24gaXMgZGVwcmVjYXRlZC4gKi8KICAgICAgICAgdm9pZCBlbWl0R2V0SklUU3R1YkFyZyhpbnQg
YXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KTsKQEAgLTYyOCw3ICs1NTAsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKElu
c3RydWN0aW9uKiwgT3Bjb2RlSUQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBp
bnQgZHN0LCBpbnQgc3JjMSwgaW50IHNyYzIsIE9wZXJhbmRUeXBlcywgYm9vbCBvcDFIYXNJbW1l
ZGlhdGVJbnRGYXN0Q2FzZSwgYm9vbCBvcDJIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSk7CiAKICAg
ICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2VWUmVnLCBjb25zdCBJZGVu
dGlmaWVyKik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0
VlJlZywgaW50IGJhc2VWUmVnLCBjb25zdCBJZGVudGlmaWVyKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zm
c2V0KTsKICAgICAgICAgdm9pZCBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNl
LCBSZWdpc3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KTsKICAgICAg
ICAgdm9pZCBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCByZXN1bHQsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3RlcklEIHNjcmF0Y2gsIEZpbmFsT2Jq
ZWN0TW9kZSA9IE1heUJlRmluYWwpOwpAQCAtODUzLDYgKzc3NCwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhjb25zdCBGdW5jdGlvblB0ciYpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25Q
dHImKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImLCBpbnQpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRyJiwgaW50KTsKKyAgICAgICAg
CisgICAgICAgIGVudW0gV2l0aFByb2ZpbGVUYWcgeyBXaXRoUHJvZmlsZSB9OworICAgICAgICAK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlv
bl9FKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9w
ZXJhdGlvbl9FTywgR1BSUmVnKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FU3QsIFN0cnVjdHVyZSopOwpAQCAtODY0LDEwICs3ODks
MTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUFhcEpjcFosIGludCwgQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSosIGNvbnN0IEpTVmFsdWUqLCBpbnQzMl90KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQywgaW50LCBKU0NlbGwqKTsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
SiwgaW50LCBHUFJSZWcpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VK
SSwgaW50LCBHUFJSZWcsIFN0cmluZ0ltcGwqKTsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VK
SSwgaW50LCBHUFJSZWcsIEdQUlJlZywgU3RyaW5nSW1wbCopOworI2VuZGlmCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJZGMsIGlu
dCwgR1BSUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQUlJlZywgR1BSUmVn
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FUCwgaW50LCB2b2lkKik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBjLCBpbnQsIEluc3RydWN0aW9uKik7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklU
T3BlcmF0aW9uX0VQYywgaW50LCBJbnN0cnVjdGlvbiopOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaLCBpbnQsIGludDMyX3QpOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9u
X0VKUywgR1BSUmVnLCBzaXplX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VaLCBpbnQzMl90KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTc0NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIz
MSwxOCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgaW50IGRzdCkKK3sKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdUNCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisjZWxz
ZQorICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlMlJlZ2lzdGVyLCByZXR1cm5WYWx1ZVJl
Z2lzdGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjYWxsOworfQorCiBBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FIG9w
ZXJhdGlvbikKIHsKICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwpAQCAtMjY4LDYgKzI4
MCwxMiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHJlZ09wMSwgcmVnT3AyLCBUcnVzdGVkSW1tUHRyKHVp
ZCkpOwogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CiB9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0
aW9uKEpJVDo6V2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIGlu
dCBkc3QsIEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CisgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUob3Bl
cmF0aW9uLCBkc3QpOworfQogI2VuZGlmCiAKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBpbnQg
ZHN0KQpAQCAtMzI0LDEwICszNDIsMTAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQYyBvcGVyYXRp
b24sIGludCBkc3QsIEluc3RydWN0aW9uKiBieXRlY29kZVBDKQorQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklU
T3BlcmF0aW9uX0VQYyBvcGVyYXRpb24sIGludCBkc3QsIEluc3RydWN0aW9uKiBieXRlY29kZVBD
KQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGJ5dGVj
b2RlUEMpKTsKLSAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG9wZXJhdGlvbiwgZHN0KTsKIH0K
IAogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBpbnQgZHN0LCBpbnQzMl90IGFyZykKQEAgLTQ4
Niw2ICs1MDQsMTIgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6Ogog
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChv
cGVyYXRpb24sIGRzdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjpjYWxsT3BlcmF0aW9uKEpJVDo6V2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VK
SSBvcGVyYXRpb24sIGludCBkc3QsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQs
IFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFC
SV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFRydXN0ZWRJbW1QdHIodWlk
KSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUob3BlcmF0aW9uLCBkc3QpOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSklkYyBv
cGVyYXRpb24sIGludCBkc3QsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIGNv
bnN0IElkZW50aWZpZXIqIGFyZzIpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRy
KGFyZzIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDY1LDExICs0NjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qCiAKIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWRlbnRpZmllciog
aWRlbnQpCiB7Ci0gICAgLy8gQXMgZm9yIHB1dF9ieV9pZCwgZ2V0X2J5X2lkIHJlcXVpcmVzIHRo
ZSBvZmZzZXQgb2YgdGhlIFN0cnVjdHVyZSBhbmQgdGhlIG9mZnNldCBvZiB0aGUgYWNjZXNzIHRv
IGJlIHBhdGNoZWQuCi0gICAgLy8gQWRkaXRpb25hbGx5LCBmb3IgZ2V0X2J5X2lkIHdlIG5lZWQg
cGF0Y2ggdGhlIG9mZnNldCBvZiB0aGUgYnJhbmNoIHRvIHRoZSBzbG93IGNhc2UgKHdlIHBhdGNo
IHRoaXMgdG8ganVtcAotICAgIC8vIHRvIGFycmF5LWxlbmd0aCAvIHByb3RvdHlwZSBhY2Nlc3Mg
dHJhbnBvbGluZXMsIGFuZCBmaW5hbGx5IHdlIGFsc28gdGhlIHRoZSBwcm9wZXJ0eS1tYXAgYWNj
ZXNzIG9mZnNldCBhcyBhIGxhYmVsCi0gICAgLy8gdG8ganVtcCBiYWNrIHRvIGlmIG9uZSBvZiB0
aGVzZSB0cmFtcG9saWVzIGZpbmRzIGEgbWF0Y2guCi0gICAgCiAgICAgaWYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHJlZ1QyKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgo
cmVnVDIsIHJlZ1QzLCBtX2J5dGVjb2RlT2Zmc2V0KTsKQEAgLTQ3Nyw1NCArNDcyLDQyIEBAIHZv
aWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWQKIAogICAgIEJFR0lOX1VOSU5U
RVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkSG90UGF0aCk7CiAgICAgCi0gICAgTGFi
ZWwgaG90UGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVU
b0NvbXBhcmU7Ci0gICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOworICAgIFBhdGNo
YWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCisg
ICAgICAgIE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlVG9Db21wYXJlLAorICAgICAgICBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7CisgICAgCiAgICAgYWRkU2xvd0Nhc2Uoc3Ry
dWN0dXJlQ2hlY2spOwogICAgIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3Rv
cmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2Vt
ZW50TGFiZWwxID0gbG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3Mo
cmVnVDIsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7IC8vIHBheWxvYWQKLSAg
ICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsMiA9IGxvYWRQdHJXaXRoQ29tcGFj
dEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1QyLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zm
c2V0KSwgcmVnVDEpOyAvLyB0YWcKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0
b3JhZ2VMb2FkID0KKyAgICAgICAgY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKICAgICAKLSAgICBMYWJlbCBwdXRS
ZXN1bHQodGhpcyk7CisgICAgRGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoVGFnID0gbG9h
ZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAgIEFkZHJlc3MocmVnVDAs
IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMSk7CisgICAgRGF0YUxhYmVsQ29tcGFj
dCBsb2FkV2l0aFBhdGNoUGF5bG9hZCA9IGxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBh
dGNoKAorICAgICAgICBBZGRyZXNzKHJlZ1QwLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwg
cmVnVDApOwogICAgIAotICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0
QnlJZEhvdFBhdGgpOwotCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBl
bmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YkdldEJ5SWQsIG1fYnl0
ZWNvZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVD
aGVjaywgcHJvcGVydHlTdG9yYWdlTG9hZCwgZGlzcGxhY2VtZW50TGFiZWwxLCBkaXNwbGFjZW1l
bnRMYWJlbDIsIHB1dFJlc3VsdCkpOworICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAor
ICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKAorICAgICAgICBQcm9w
ZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oCisgICAgICAgICAgICBQcm9wZXJ0eVN0dWJHZXRCeUlk
LCBtX2J5dGVjb2RlT2Zmc2V0LCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNrLAor
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlTG9hZCwgbG9hZFdpdGhQYXRjaFBheWxvYWQsIGxv
YWRXaXRoUGF0Y2hUYWcsIGRvbmUpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBpbnQgaWRlbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
ICAgIAotICAgIGNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoZHN0LCBiYXNlLCAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGlkZW50KSksIGl0ZXIpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
cmVnVDQpOwotfQorICAgIGludCByZXN1bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAKLXZvaWQgSklUOjpjb21w
aWxlR2V0QnlJZFNsb3dDYXNlKGludCBkc3QsIGludCBiYXNlLCBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICAvLyBB
cyBmb3IgdGhlIGhvdCBwYXRoIG9mIGdldF9ieV9pZCwgYWJvdmUsIHdlIGVuc3VyZSB0aGF0IHdl
IGNhbiB1c2UgYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9mZnNldAotICAgIC8vIHNvIHRoYXQg
d2Ugb25seSBuZWVkIHRyYWNrIG9uZSBwb2ludGVyIGludG8gdGhlIHNsb3cgY2FzZSBjb2RlIC0g
d2UgdHJhY2sgYSBwb2ludGVyIHRvIHRoZSBsb2NhdGlvbgotICAgIC8vIG9mIHRoZSBjYWxsICh3
aGljaCB3ZSBjYW4gdXNlIHRvIGxvb2sgdXAgdGhlIHBhdGNoIGluZm9ybWF0aW9uKSwgYnV0IHNo
b3VsZCBhIGFycmF5LWxlbmd0aCBvcgotICAgIC8vIHByb3RvdHlwZSBhY2Nlc3MgdHJhbXBvbGlu
ZSBmYWlsIHdlIHdhbnQgdG8gYmFpbCBvdXQgYmFjayB0byBoZXJlLiAgVG8gZG8gc28gd2UgY2Fu
IHN1YnRyYWN0IGJhY2sKLSAgICAvLyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2FsbCB0byB0aGUg
aGVhZCBvZiB0aGUgc2xvdyBjYXNlLgotICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIs
IGJhc2UpOworICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2VWUmVnKTsKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKICAgICAKLSAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJ
ZFNsb3dDYXNlKTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWQpOwotICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KHJlZ1QxLCByZWdUMCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1
c3RlZEltbVB0cihpZGVudCkpOwotICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsK
LSAgICAKLSAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRV9GT1JfUFVUKHNlcXVlbmNlR2V0
QnlJZFNsb3dDYXNlLCBkc3QpOwotICAgIAotICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0
aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4K
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKFdpdGhQcm9maWxlLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisK
ICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApA
QCAtNjMzLDQzNCArNjE2LDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNP
YmplYwogICAgIGxvYWQzMihBZGRyZXNzKHJlc3VsdFRhZywgb2Zmc2V0SW5CdXR0ZXJmbHkoY2Fj
aGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcpOwogfQogCi12b2lkIEpJVDo6
cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zm
c2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfZ2V0X2J5X2lk
X2dlbmVyaWMuCi0gICAgLy8gU2hvdWxkIHByb2JhYmx5IGdvIHRvIEpJVFN0dWJzOjpjdGlfb3Bf
Z2V0X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3Rpbmcg
cmlnaHQgbm93LgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1
cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotICAg
IAotICAgIC8vIFBhdGNoIHRoZSBvZmZzZXQgaW50byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2Fk
IGZyb20sIHRoZW4gcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZvci4KLSAgICByZXBhdGNo
QnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNl
dChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlVG9Db21wYXJlKSwgc3Ry
dWN0dXJlKTsKLSAgICByZXBhdGNoQnVmZmVyLnNldExvYWRJbnN0cnVjdGlvbklzQWN0aXZlKHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4uY29udmVydGlibGVMb2FkQXRPZmZzZXQoc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUuZ2V0LnByb3BlcnR5U3RvcmFnZUxvYWQpLCBpc091dE9mTGluZU9mZnNl
dChjYWNoZWRPZmZzZXQpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2Vs
aW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsMSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3Rv
cmFnZShjYWNoZWRPZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKTsgLy8gcGF5bG9hZAotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+
aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFz
ZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50TGFiZWwyKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRT
dG9yYWdlKGNhY2hlZE9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSk7IC8vIHRhZwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5
TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSAmbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpOwotICAgIAotICAgIC8vIHJlZ1QwIGhvbGRzIGEgSlNDZWxsKgotICAgIAotICAgIC8vIENo
ZWNrIGZvciBhcnJheQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFuY2hUZXN0
MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihJc0FycmF5KSk7Ci0gICAgSnVtcCBmYWlsdXJl
Q2FzZXMyID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSW5kZXhpbmdT
aGFwZU1hc2spKTsKLSAgICAKLSAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5n
dGggZnJvbSB0aGUgc3RvcmFnZQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgCi0gICAgSnVtcCBmYWls
dXJlQ2FzZXMzID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSU5UX01BWCkp
OwotICAgIG1vdmUocmVnVDIsIHJlZ1QwKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwotICAg
IAotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdp
bik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxLCBzbG93Q2FzZUJlZ2luKTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIHNsb3dDYXNlQmVnaW4pOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMywgc2xvd0Nhc2VCZWdpbik7Ci0gICAgCi0g
ICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEg
cG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7Ci0gICAgCi0gICAg
Ly8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxl
dGVkIGxhdGVyLgotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9p
ZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4u
bGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgLy8gRmlu
YWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8g
anVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
LSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4g
ZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICByZXBhdGNoQnVmZmVy
LnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRQcm90byhTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQot
ewotICAgIC8vIHJlZ1QwIGhvbGRzIGEgSlNDZWxsKgotICAgIAotICAgIC8vIFRoZSBwcm90b3R5
cGUgb2JqZWN0IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2Rl
QmxvY2sgaXMgcmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcwotICAgIC8vIHJlZmVyZW5j
aW5nIHRoZSBwcm90b3R5cGUgb2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRpdmVseSBsb2FkIGl0J3Mg
dGFibGUgbmljZSBhbmQgZWFybHkhKQotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2Jq
ZWN0KHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgIAotICAg
IEp1bXAgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpOwot
ICAgIAotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBu
b3QgY2hhbmdlZC4KLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBhZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2socHJvdG9PYmplY3QsIHByb3RvdHlwZVN0cnVjdHVyZSwgc3R1YkluZm8sIHJlZ1Qz
KTsKLQotICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOwotICAgIC8vIENoZWNrcyBvdXQg
b2theSEKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgIG5lZWRz
U3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2Jq
ZWN0LCByZWdUMiwgcmVnVDEsIGNhY2hlZE9mZnNldCk7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfZ2V0dGVyX3N0dWIpOwotICAgICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJl
Z1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1
YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7
Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2N1c3RvbV9zdHViKTsKLSAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihwcm90b09iamVjdCkpOwotICAgICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0
dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoVHJ1c3RlZEltbVB0cihjb25zdF9jYXN0PElkZW50aWZpZXIqPigmaWRlbnQpKSk7Ci0gICAg
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwo
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVj
dCwgcmVnVDEsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwotICAgIAotICAgIEp1bXAgc3VjY2VzcyA9
IGp1bXAoKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBt
X2NvZGVCbG9jayk7Ci0gICAgCi0gICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBs
aW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0
aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5jb2xkUGF0aEJlZ2luKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEs
IHNsb3dDYXNlQmVnaW4pOwotICAgIGlmIChmYWlsdXJlQ2FzZXMyLmlzU2V0KCkpCi0gICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgCi0g
ICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEg
cG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7Ci0KLSAgICBpZiAo
bmVlZHNTdHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0
b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3
aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRl
SklUU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9y
ICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0
KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAotICAgICAgICBtX2NvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1YkxpbmspOwotICAgIAot
ICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhv
dCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4g
b25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwotfQotCi0KLXZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLCBpbnQg
Y3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
KQotewotICAgIC8vIHJlZ1QwIGhvbGRzIGEgSlNDZWxsKgotICAgIEp1bXAgZmFpbHVyZUNhc2Ug
PSBjaGVja1N0cnVjdHVyZShyZWdUMCwgc3RydWN0dXJlKTsKLSAgICBib29sIG5lZWRzU3R1Ykxp
bmsgPSBmYWxzZTsKLSAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAgaWYgKHNsb3QuaXND
YWNoZWFibGVHZXR0ZXIoKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAg
ICAgY29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMCwgcmVnVDIsIHJlZ1QxLCBjYWNoZWRPZmZz
ZXQpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lk
X2dldHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAg
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRh
YmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgaWYg
KHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1
ZTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9j
dXN0b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1
c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkp
OwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2Fs
bC5jYWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwotICAgICAg
ICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNl
dCk7Ci0gICAgfQotCi0gICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBpZiAobmVl
ZHNTdHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3Ig
aXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAgICAgIH0KLSAgICB9
ICAgIAotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVy
ZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJS
b3V0aW5lOjphc0NvZGVQdHIocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lKSk7Ci0gICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKLSAgICAgICAg
bGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKLSAgICAK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlLCBsYXN0UHJvdG9CZWdpbik7Ci0gICAg
Ci0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0
IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBw
YXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9m
ZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7Ci0KLSAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUo
Ci0gICAgICAgIEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAg
ICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHNlbGYgbGlzdCBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRh
KCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV92bSwKLSAgICAgICAgbV9jb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLAotICAgICAgICBuZWVkc1N0dWJMaW5rKTsKLQotICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV92bSwgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0gICAg
Ci0gICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUg
aG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1w
TG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+
cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVt
cExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90
b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
U3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgLy8gcmVnVDAgaG9sZHMgYSBKU0NlbGwqCi0gICAg
Ci0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlmIHRoaXMg
c3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVyZSB0aGF0
IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVj
dWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3Qq
IHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2Fs
bEZyYW1lKSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmln
aHQgU3RydWN0dXJlLgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKHJl
Z1QwLCBzdHJ1Y3R1cmUpOwotICAgIAotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0
J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBh
ZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2socHJvdG9PYmplY3QsIHByb3RvdHlwZVN0cnVjdHVy
ZSwgc3R1YkluZm8sIHJlZ1QzKTsKLSAgICAKLSAgICBib29sIG5lZWRzU3R1YkxpbmsgPSBmYWxz
ZTsKLSAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVH
ZXR0ZXIoKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgY29tcGls
ZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDIsIHJlZ1QxLCBjYWNoZWRPZmZzZXQp
OwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dl
dHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgaWYgKHNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsK
LSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9jdXN0
b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIocHJv
dG9PYmplY3QpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihG
dW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0g
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVu
dGlmaWVyKj4oJmlkZW50KSkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaXNEaXJl
Y3QgPSB0cnVlOwotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCBy
ZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7Ci0gICAgfQotICAgIAotICAgIEp1bXAgc3VjY2Vz
cyA9IGp1bXAoKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlz
LCBtX2NvZGVCbG9jayk7Ci0gICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKLSAgICAgICAgZm9yIChW
ZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+dG8pCi0g
ICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhpdGVyLT5mcm9tLCBGdW5jdGlvblB0cihp
dGVyLT50bykpOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3Jt
YXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93
IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENv
ZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90eXBlU3RydWN0
dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwotICAgIGlmIChmYWlsdXJl
Q2FzZXMyLmlzU2V0KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwg
bGFzdFByb3RvQmVnaW4pOwotICAgIAotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8g
dGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUg
dG8gZGVzdCBmb3IgdXMuCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LnB1dFJlc3VsdCkpOwotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJv
dG8gbGlzdCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0
b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV92bSwK
LSAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICBuZWVkc1N0
dWJMaW5rKTsKLQotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5z
ZXQoY2FsbEZyYW1lLT52bSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJS
b3V0aW5lLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOwotICAgIAot
ICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhv
dCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
LX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90
eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIC8vIHJlZ1QwIGhvbGRzIGEgSlNDZWxsKgot
ICAgIEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgSnVtcExpc3QgYnVja2V0c09mRmFpbDsKLSAg
ICAKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUu
Ci0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUocmVnVDAsIHN0cnVjdHVy
ZSkpOwotICAgIAotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgIEpTT2Jq
ZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyArK2ksICsraXQpIHsKLSAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0
dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1
cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIHRlc3RQcm90b3R5cGUocHJvdG9PYmplY3QsIGJ1Y2tl
dHNPZkZhaWwsIHN0dWJJbmZvKTsKLSAgICB9Ci0gICAgQVNTRVJUKHByb3RvT2JqZWN0KTsKLSAg
ICAKLSAgICBib29sIG5lZWRzU3R1YkxpbmsgPSBmYWxzZTsKLSAgICBib29sIGlzRGlyZWN0ID0g
ZmFsc2U7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgewotICAgICAgICBuZWVk
c1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09i
amVjdCwgcmVnVDIsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwotICAgICAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9zdHViKTsKLSAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChy
ZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1Yklu
Zm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0
dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkg
ewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1Yik7Ci0gICAgICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpKTsKLSAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdl
dHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkpOwotICAg
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxs
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwotICAgICAgICBjb21w
aWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNl
dCk7Ci0gICAgfQotCi0gICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBpZiAobmVl
ZHNTdHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3Ig
aXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNh
c2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRp
bmU6OmFzQ29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFd
LnN0dWJSb3V0aW5lKSk7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWls
LCBsYXN0UHJvdG9CZWdpbik7Ci0gICAgCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0
byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9y
ZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQucHV0UmVzdWx0KSk7Ci0gICAgCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICBGSU5BTElaRV9DT0RFKAotICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBj
aGFpbiBsaXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAg
IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3Zt
LAotICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRz
U3R1YkxpbmspOwotICAgIAotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBz
byB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+dm0oKSwgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3Qp
OwotICAgIAotICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1
bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgLy8g
cmVnVDAgaG9sZHMgYSBKU0NlbGwqCi0gICAgQVNTRVJUKGNvdW50KTsKLSAgICAKLSAgICBKdW1w
TGlzdCBidWNrZXRzT2ZGYWlsOwotICAgIAotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qg
b2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0
cnVjdHVyZShyZWdUMCwgc3RydWN0dXJlKSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBjdXJyU3Ry
dWN0dXJlID0gc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNo
YWluLT5oZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBwcm90b09iamVj
dCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUp
KTsKLSAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgdGVzdFByb3Rv
dHlwZShwcm90b09iamVjdCwgYnVja2V0c09mRmFpbCwgc3R1YkluZm8pOwotICAgIH0KLSAgICBB
U1NFUlQocHJvdG9PYmplY3QpOwotICAgIAotICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNl
OwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgbmVlZHNTdHVi
TGluayA9IHRydWU7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3Qs
IHJlZ1QyLCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9nZXR0ZXJfc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDAp
OwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2Fs
bC5jYWxsKCk7Ci0gICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAg
ICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSk7Ci0gICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIo
KSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChU
cnVzdGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmllcio+KCZpZGVudCkpKTsKLSAgICAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwot
ICAgIH0gZWxzZQotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCBy
ZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7Ci0gICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwot
ICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2Nr
KTsKLSAgICBpZiAobmVlZHNTdHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVj
b3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5r
IHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5l
LgotICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFpbCwgc3R1YkluZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
Y29sZFBhdGhCZWdpbikpOwotICAgIAotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8g
dGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUg
dG8gZGVzdCBmb3IgdXMuCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LnB1dFJlc3VsdCkpOwotICAgIAotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRl
ZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFM
SVpFX0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiQmFzZWxp
bmUgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAg
ICAgICptX3ZtLAotICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAg
ICAgIG5lZWRzU3R1YkxpbmspOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0
aW5lOwotICAgIAotICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJh
Y2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlv
bkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhh
biBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICBy
ZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7Ci19Ci0KIHZvaWQgSklUOjpjb21w
aWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCByZXN1bHRUYWcs
IFJlZ2lzdGVySUQgcmVzdWx0UGF5bG9hZCwgUmVnaXN0ZXJJRCBvZmZzZXQsIEZpbmFsT2JqZWN0
TW9kZSBmaW5hbE9iamVjdE1vZGUpCiB7CiAgICAgQVNTRVJUKHNpemVvZihKU1ZhbHVlKSA9PSA4
KTsKQEAgLTEyNzAsOCArODI1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKElucwogICAgICAgICByZXR1cm47CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0
aW9uKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0
aW9uKFdpdGhQcnBmaWxlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3Ry
dWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3Qq
IG9wZXJhbmRTbG90LCBpbnQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzNywyMiArNTM3LDI1IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50
IGJhc2UKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgocmVn
VDEsIHJlZ1QyLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICB9CiAKLSAgICBCRUdJTl9VTklOVEVS
UlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgpOwotCi0gICAgTGFiZWwgaG90
UGF0aEJlZ2luKHRoaXMpOwotCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsK
LSAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0
aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CisgICAgUGF0Y2hhYmxlSnVtcCBz
dHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVUb0NvbXBhcmUsCisgICAgICAgIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4odW51c2VkUG9pbnRlcikpKTsKKyAgICAKICAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVj
ayk7Ci0KLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29u
dmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsID0gbG9h
ZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRC
eUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKLQotICAgIExhYmVsIGRvbmUodGhpcyk7Ci0KLSAg
ICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoKTsKLQot
ICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFByb3BlcnR5U3R1YkNv
bXBpbGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJHZXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBob3RQ
YXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssIHByb3BlcnR5U3Rv
cmFnZUxvYWQsIGRpc3BsYWNlbWVudExhYmVsLCBkb25lKSk7CisgICAgCisgICAgQ29udmVydGli
bGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9CisgICAgICAgIGNvbnZlcnRpYmxlTG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgCisgICAgRGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbG9hZDY0V2l0aENv
bXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAgIEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0
QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVs
KCk7CisgICAgCisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCisg
ICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygKKyAgICAgICAgICAgIFByb3BlcnR5
U3R1YkdldEJ5SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0
dXJlQ2hlY2ssCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBsb2FkV2l0aFBhdGNo
LCBkb25lKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKQEAgLTU2MSwzMiArNTY0LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoSW5zdHJ1Y3QKICAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAKLSAgICBjb21waWxl
R2V0QnlJZFNsb3dDYXNlKHJlc3VsdFZSZWcsIGJhc2VWUmVnLCBpZGVudCwgaXRlcik7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdUNCk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlR2V0
QnlJZFNsb3dDYXNlKGludCByZXN1bHRWUmVnLCBpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IC8vIEFzIGZvciB0aGUgaG90IHBhdGggb2YgZ2V0X2J5X2lkLCBhYm92ZSwgd2UgZW5zdXJlIHRo
YXQgd2UgY2FuIHVzZSBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgb2Zmc2V0Ci0gICAgLy8gc28g
dGhhdCB3ZSBvbmx5IG5lZWQgdHJhY2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNv
ZGUgLSB3ZSB0cmFjayBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uCi0gICAgLy8gb2YgdGhlIGNh
bGwgKHdoaWNoIHdlIGNhbiB1c2UgdG8gbG9vayB1cCB0aGUgcGF0Y2ggaW5mb3JtYXRpb24pLCBi
dXQgc2hvdWxkIGEgYXJyYXktbGVuZ3RoIG9yCi0gICAgLy8gcHJvdG90eXBlIGFjY2VzcyB0cmFt
cG9saW5lIGZhaWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBUbyBkbyBzbyB3
ZSBjYW4gc3VidHJhY3QgYmFjawotICAgIC8vIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBjYWxsIHRv
IHRoZSBoZWFkIG9mIHRoZSBzbG93IGNhc2UuCi0KICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpdGVyLCBiYXNlVlJlZyk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgQkVHSU5f
VU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSk7Ci0KLSAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9nZXRfYnlfaWQpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGlkZW50KSk7Ci0gICAgQ2FsbCBj
YWxsID0gc3R1YkNhbGwuY2FsbChyZXN1bHRWUmVnKTsKLQotICAgIEVORF9VTklOVEVSUlVQVEVE
X1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKFdpdGhQ
cm9maWxlLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIHJlZ1QwLCBpZGVu
dC0+aW1wbCgpKTsKIAotICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhp
cyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4KICAgICBtX3Byb3Bl
cnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
KytdLnNsb3dDYXNlSW5mbyhjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtNjkzLDQyOCAr
Njc3LDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNPYmplYwogICAgIGxv
YWQ2NChBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0KTsKIH0KIAotdm9pZCBKSVQ6OnBh
dGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNl
dCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRj
aCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfZ2V0X2J5X2lkX2dlbmVy
aWMuCi0gICAgLy8gU2hvdWxkIHByb2JhYmx5IGdvIHRvIGN0aV9vcF9nZXRfYnlfaWRfZmFpbCwg
YnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCi0gICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7Ci0KLSAgICAvLyBQYXRjaCB0aGUg
b2Zmc2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVuIHBhdGNoIHRo
ZSBTdHJ1Y3R1cmUgdG8gbG9vayBmb3IuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsUHRyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnN0cnVjdHVyZVRvQ29tcGFyZSksIHN0cnVjdHVyZSk7Ci0gICAgcmVwYXRj
aEJ1ZmZlci5zZXRMb2FkSW5zdHJ1Y3Rpb25Jc0FjdGl2ZShzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5w
cm9wZXJ0eVN0b3JhZ2VMb2FkKSwgaXNPdXRPZkxpbmVPZmZzZXQoY2FjaGVkT2Zmc2V0KSk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1l
bnRMYWJlbCksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShjYWNoZWRPZmZzZXQpKTsK
LX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gJm1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLQotICAgIC8v
IENoZWNrIGVheCBpcyBhbiBhcnJheQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihJc0FycmF5KSk7Ci0gICAgSnVt
cCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
SW5kZXhpbmdTaGFwZU1hc2spKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhl
IGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgSnVtcCBmYWls
dXJlQ2FzZXMzID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMCkpOwot
Ci0gICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwotICAgIEp1
bXAgc3VjY2VzcyA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0s
IHRoaXMsIG1fY29kZUJsb2NrKTsKLQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQuY29sZFBhdGhCZWdpbik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2Fz
ZXMxLCBzbG93Q2FzZUJlZ2luKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIs
IHNsb3dDYXNlQmVnaW4pOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMywgc2xv
d0Nhc2VCZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3Qg
cGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3Qg
Zm9yIHVzLgotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1
bHQpKTsKLQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0
IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNs
aW5lIEpJVCBnZXRfYnlfaWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAotICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLAotICAgICAg
ICAgICAgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKLQotICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNl
IGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2Nh
dGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZz
ZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNo
IG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJp
Yy4KLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Ci19Ci0KLXZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVy
dHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIC8vIFRoZSBwcm90b3R5cGUgb2JqZWN0IGRlZmlu
aXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxvY2sgaXMgcmVmZXJl
bmNpbmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcwotICAgIC8vIHJlZmVyZW5jaW5nIHRoZSBwcm90b3R5
cGUgb2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRpdmVseSBsb2FkIGl0J3MgdGFibGUgbmljZSBhbmQg
ZWFybHkhKQotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+
cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFu
IG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9
IGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHBy
b3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAgIEp1bXAgZmFp
bHVyZUNhc2VzMiA9IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhwcm90b09iamVjdCwgcHJv
dG90eXBlU3RydWN0dXJlLCBzdHViSW5mbywgcmVnVDMpOwotCi0gICAgYm9vbCBuZWVkc1N0dWJM
aW5rID0gZmFsc2U7Ci0gICAgCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5IQotICAgIGlmIChzbG90
LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7Ci0g
ICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QxLCBjYWNoZWRP
ZmZzZXQpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5
X2lkX2dldHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwot
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2Ug
aWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0g
dHJ1ZTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9p
ZF9jdXN0b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1Q
dHIocHJvdG9PYmplY3QpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2Fz
dDxJZGVudGlmaWVyKj4oJmlkZW50KSkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChU
cnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNv
bXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwot
ICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7Ci0KLSAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0
aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBj
YXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJ
bmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVy
ZUNhc2VzMSwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgaWYgKGZhaWx1cmVDYXNlczIuaXNTZXQoKSkK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBzbG93Q2FzZUJlZ2luKTsK
LQotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBh
dCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCi0gICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwotCi0gICAg
aWYgKG5lZWRzU3R1YkxpbmspIHsKLSAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytp
dGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+dG8pCi0gICAgICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhpdGVyLT5mcm9tLCBGdW5jdGlvblB0cihpdGVyLT50bykpOwotICAgICAgICB9
Ci0gICAgfQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0
IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVh
dGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAotICAgICAgICBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1YkxpbmspOwot
Ci0gICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUg
aG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1w
TG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+
cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVt
cExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9u
Y2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0
cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFNlbGZMaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMsIGludCBjdXJy
ZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCi17
Ci0gICAgSnVtcCBmYWlsdXJlQ2FzZSA9IGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUp
OwotICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOwotICAgIGJvb2wgaXNEaXJlY3QgPSBm
YWxzZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgIG5lZWRz
U3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCBy
ZWdUMSwgY2FjaGVkT2Zmc2V0KTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX2dldF9ieV9pZF9nZXR0ZXJfc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7
Ci0gICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgbmVl
ZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoRnVu
Y3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAg
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRp
Zmllcio+KCZpZGVudCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
LSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlzRGlyZWN0
ID0gdHJ1ZTsKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMCwgcmVnVDAsIGNh
Y2hlZE9mZnNldCk7Ci0gICAgfQotICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLQotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLQotICAgIGlm
IChuZWVkc1N0dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVy
YXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRl
cikgewotICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFp
bHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0
dWJSb3V0aW5lOjphc0NvZGVQdHIocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJ
bmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7Ci0gICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKLSAgICAg
ICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKLQot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2UsIGxhc3RQcm90b0JlZ2luKTsKLQotICAg
IC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBv
aW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCi0gICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwotCi0gICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViQ29kZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAg
ICBGSU5BTElaRV9DT0RFKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAo
IkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgbGlzdCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVw
IiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpLAotICAgICAgICAqbV92bSwKLSAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLAotICAgICAgICBuZWVkc1N0dWJMaW5rKTsKLQotICAgIHBvbHltb3JwaGljU3RydWN0dXJl
cy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV92bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0KLSAgICAvLyBGaW5hbGx5
IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1w
IGhlcmUgaW5zdGVhZC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5zdHJ1Y3R1cmVDaGVjayk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1f
Y29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJDb2RlLT5jb2RlKCkuY29kZSgpKSk7Ci19Ci0KLXZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGlu
dCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlw
ZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
LXsKLSAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5IGV4aXN0cyAoaWYgdGhp
cyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5nIGEgU3RydWN0dXJlIHRo
YXQgaXMKLSAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9iamVjdCAtIGxldCdzIHNw
ZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5ISkKLSAgICBKU09iamVj
dCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChj
YWxsRnJhbWUpKTsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0
IFN0cnVjdHVyZS4KLSAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBjaGVja1N0cnVjdHVyZShyZWdU
MCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3Ry
dWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBhZGRTdHJ1
Y3R1cmVUcmFuc2l0aW9uQ2hlY2socHJvdG9PYmplY3QsIHByb3RvdHlwZVN0cnVjdHVyZSwgc3R1
YkluZm8sIHJlZ1QzKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEKLSAgICBib29sIG5lZWRz
U3R1YkxpbmsgPSBmYWxzZTsKLSAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAgaWYgKHNs
b3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsK
LSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIGNhY2hl
ZE9mZnNldCk7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRf
YnlfaWRfZ2V0dGVyX3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7
Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxz
ZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgIG5lZWRzU3R1Ykxpbmsg
PSB0cnVlOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5
X2lkX2N1c3RvbV9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cihwcm90b09iamVjdCkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tUHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjb25zdF9j
YXN0PElkZW50aWZpZXIqPigmaWRlbnQpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpc0RpcmVjdCA9IHRydWU7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9P
YmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwotICAgIH0KLQotICAgIEp1bXAgc3VjY2VzcyA9
IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29k
ZUJsb2NrKTsKLQotICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9y
PENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1f
Y2FsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+
dG8pKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRp
b24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNh
c2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90eXBlU3RydWN0dXJl
cy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwotICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwotICAgIGlmIChmYWlsdXJlQ2Fz
ZXMyLmlzU2V0KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgbGFz
dFByb3RvQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90
IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0
IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KSk7Ci0KLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJDb2RlID0gY3JlYXRlSklU
U3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1
ZmZlciwKLSAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBsaXN0IHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAotICAgICAgICBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1YkxpbmspOwot
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fdm0sIG1f
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJvdG90
eXBlU3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0KLSAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1w
IHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4K
LSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVD
aGVjayk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJDb2RlLT5jb2RlKCkuY29kZSgpKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3Vu
dCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBB
U1NFUlQoY291bnQpOwotICAgIEp1bXBMaXN0IGJ1Y2tldHNPZkZhaWw7Ci0KLSAgICAvLyBDaGVj
ayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgSnVtcCBiYXNl
T2JqZWN0Q2hlY2sgPSBjaGVja1N0cnVjdHVyZShyZWdUMCwgc3RydWN0dXJlKTsKLSAgICBidWNr
ZXRzT2ZGYWlsLmFwcGVuZChiYXNlT2JqZWN0Q2hlY2spOwotCi0gICAgU3RydWN0dXJlKiBjdXJy
U3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9
IGNoYWluLT5oZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBwcm90b09i
amVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJh
bWUpKTsKLSAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgdGVzdFBy
b3RvdHlwZShwcm90b09iamVjdCwgYnVja2V0c09mRmFpbCwgc3R1YkluZm8pOwotICAgIH0KLSAg
ICBBU1NFUlQocHJvdG9PYmplY3QpOwotICAgIAotICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZh
bHNlOwotICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZUdldHRlcigpKSB7Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBjb21w
aWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsKLSAg
ICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9nZXR0ZXJf
c3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChU
cnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlIGlmIChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7Ci0gICAg
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfY3VzdG9tX3N0
dWIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHByb3RvT2Jq
ZWN0KSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoRnVuY3Rp
b25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmll
cio+KCZpZGVudCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0
cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAg
ICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlzRGlyZWN0ID0g
dHJ1ZTsKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAs
IGNhY2hlZE9mZnNldCk7Ci0gICAgfQotICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLQotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICAK
LSAgICBpZiAobmVlZHNTdHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3Jk
Pjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgp
OyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJl
bChKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3Vy
cmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUpKTsKLQotICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVj
a2V0c09mRmFpbCwgbGFzdFByb3RvQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4g
YmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRo
ZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQucHV0UmVzdWx0KSk7Ci0KLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0NPREUoCi0g
ICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9i
eV9pZCBjaGFpbiBsaXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAg
ICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAg
ICptX3ZtLAotICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAg
IG5lZWRzU3R1YkxpbmspOwotCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVk
IHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT52bSgpLCBtX2NvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVj
dCk7Ci0KLSAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGlu
IHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBDb2RlTG9jYXRpb25KdW1w
IGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7Ci0gICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIEFTU0VS
VChjb3VudCk7Ci0KLSAgICBKdW1wTGlzdCBidWNrZXRzT2ZGYWlsOwotCi0gICAgLy8gQ2hlY2sg
ZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgotICAgIGJ1Y2tldHNPZkZh
aWwuYXBwZW5kKGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpKTsKLQotICAgIFN0cnVj
dHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAg
ICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29r
dXAoY2FsbEZyYW1lKSk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAg
ICAgIHRlc3RQcm90b3R5cGUocHJvdG9PYmplY3QsIGJ1Y2tldHNPZkZhaWwsIHN0dWJJbmZvKTsK
LSAgICB9Ci0gICAgQVNTRVJUKHByb3RvT2JqZWN0KTsKLQotICAgIGJvb2wgbmVlZHNTdHViTGlu
ayA9IGZhbHNlOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAg
bmVlZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJv
dG9PYmplY3QsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdU
MCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJD
YWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewot
ICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpKTsKLSAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRl
cigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3Qs
IHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwotICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLQotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLQotICAg
IGlmIChuZWVkc1N0dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+Ojpp
dGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUg
ZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQ
YXRoQmVnaW4pKTsKLQotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBw
YXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBm
b3IgdXMuCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3Vs
dCkpOwotCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQg
d2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5
X2lkIGNoYWluIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAg
IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3Zt
LAotICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRz
U3R1YkxpbmspOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwotCi0g
ICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90
IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9j
YXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwot
Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVy
ZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRf
YnlfaWRfcHJvdG9fbGlzdCkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNr
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVj
dGlvbkNoZWNrcykKQEAgLTEyNDMsOCArODA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKElucwogICAgICAgICByZXR1cm47CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVu
dEluc3RydWN0aW9uKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHJlZ1Q0KTsKKyAgICBj
YWxsT3BlcmF0aW9uKFdpdGhQcm9maWxlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3Vy
cmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1
aW50cHRyX3QqIG9wZXJhbmRTbG90LCBpbnQgdmFsdWUpCkBAIC0xMzIyLDE0ICs4ODMsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0CiAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0
ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKIH0KIAotdm9pZCBKSVQ6OnJlc2V0
UGF0Y2hHZXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLCBjdGlfb3BfZ2V0X2J5X2lkKTsKLSAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlVG9Db21wYXJlKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby0+
cGF0Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50TGFiZWwpLCAwKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spLCBzdHViSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5jb2xkUGF0aEJlZ2luKSk7Ci19Ci0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHZhbHVl
LCBSZWdpc3RlcklEIHNjcmF0Y2gsIFJlZ2lzdGVySUQgc2NyYXRjaDIsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTA2ICsx
MjMsNiBAQCB2b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9uCiAjZW5kaWYK
IH0KIAotTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8p
Ci17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwot
ICAgIAotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBj
aGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVy
IGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KLQotICAgIC8vIEZJWE1FOiBD
YWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUu
aXNDZWxsKCkpIHsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9j
aywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVk0qIHZtID0gJmNhbGxGcmFtZS0+
dm0oKTsKLQotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0g
Y2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIEpJVDo6Y29tcGls
ZVBhdGNoR2V0QXJyYXlMZW5ndGgoY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjb2RlQmxvY2ss
IHJldHVybkFkZHJlc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChp
c0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNhbGxGcmFtZS0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICAvLyBUaGUgdHJhZGVvZmYgb2YgY29tcGlsaW5n
IGFuIHBhdGNoZWQgaW5saW5lIHN0cmluZyBsZW5ndGggYWNjZXNzIHJvdXRpbmUgZG9lcyBub3Qg
c2VlbQotICAgICAgICAvLyB0byBwYXkgb2ZmLCBzbyB3ZSBjdXJyZW50bHkgb25seSBkbyB0aGlz
IGZvciBhcnJheXMuCi0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxv
Y2ssIHJldHVybkFkZHJlc3MsIHZtLT5nZXRDVElTdHViKHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVH
ZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBVbmNh
Y2hlYWJsZTogZ2l2ZSB1cC4KLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkgewotICAgICAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYzsKLSAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotCi0gICAgaWYg
KHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpIHsKLSAgICAgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWM7Ci0gICAgICAgIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gQ2FjaGUgaGl0OiBTcGVjaWFsaXplIGluc3RydWN0aW9uIGFuZCByZWYgU3RydWN0dXJlcy4K
LQotICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgICAg
IGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgIU1hY3JvQXNzZW1ibGVyOjppc0NvbXBh
Y3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV9pZF9zZWxmX2ZhaWwpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKSVQ6OnBh
dGNoR2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpLCByZXR1cm5BZGRyZXNzKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0
QnlJZFNlbGYoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHJ1Y3R1cmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYzsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV9pZF9nZW5lcmljKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc2xv
dC5zbG90QmFzZSgpID09IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkp
IHsKLSAgICAgICAgSlNPYmplY3QqIHNsb3RCYXNlT2JqZWN0ID0gYXNPYmplY3Qoc2xvdC5zbG90
QmFzZSgpKTsKLSAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0K
LSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0
eVNsb3QoKSkgewotICAgICAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0
X2J5X2lkX2dlbmVyaWM7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
Y29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2dl
bmVyaWMpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwgaXQncyBh
IGdvb2QgYmV0IHRoYXQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEg
ZGljdGlvbmFyeS4KLSAgICAgICAgaWYgKHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNE
aWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgIHNsb3RCYXNlT2JqZWN0LT5mbGF0dGVuRGljdGlv
bmFyeU9iamVjdChjYWxsRnJhbWUtPnZtKCkpOwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdEJh
c2VPYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoY2FsbEZyYW1lLT52bSgpLCBwcm9wZXJ0eU5hbWUp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90
byhjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVy
ZSwgc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSk7
Ci0KLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKLSAgICAgICAg
QVNTRVJUKCFzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKTsKLSAg
ICAgICAgSklUOjpjb21waWxlR2V0QnlJZFByb3RvKGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwg
Y2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0
LT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQsIHJldHVybkFkZHJlc3Mp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNl
KCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3Rv
dHlwZUNoYWluKSB7Ci0gICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9i
eV9pZF9nZW5lcmljOwotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJs
b2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICBzdHVi
SW5mby0+aW5pdEdldEJ5SWRDaGFpbihjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKSk7Ci0gICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluKGNhbGxGcmFtZS0+
c2NvcGUoKS0+dm0oKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUs
IHByb3RvdHlwZUNoYWluLCBjb3VudCwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQsIHJldHVy
bkFkZHJlc3MpOwotfQotCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogCiBleHRlcm4gIkMiIHsKQEAg
LTM2OCw2ICsyNjgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCB0aHJvd0V4Y2Vw
CiAjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgcnR5cGUgSklUX1NUVUIg
Y3RpXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2VuZGlmCiAKKy8vIEZJWE1FOiBUaGlz
IGlzIHN0aWxsIHVzZWQgYnkgZ2V0X2FyZ3VtZW50c19sZW5ndGgsIGJ1dCBvdGhlciB0aGFuIHRo
YXQgaXQncyBkZWFkLgogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dl
dF9ieV9pZF9nZW5lcmljKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKQEAgLTM4MywyNzAgKzI4NCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfaWQpCi17Ci0gICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBz
dGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gJmNvZGVCbG9jay0+Z2V0U3R1YkluZm8oU1RVQl9SRVRVUk5fQUREUkVTUyk7
Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1l
LmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3Qp
OwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwotCi0gICAgaWYgKCFzdHViSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgc3R1YkluZm8t
PnNldFNlZW4oKTsKLSAgICBlbHNlCi0gICAgICAgIHRyeUNhY2hlR2V0QnlJRChjYWxsRnJhbWUs
IGNvZGVCbG9jaywgU1RVQl9SRVRVUk5fQUREUkVTUywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwg
c3R1YkluZm8pOwotCi0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKEVu
Y29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfaWRfc2VsZl9mYWlsKQotewotICAgIFNUVUJfSU5JVF9T
VEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3Rh
Y2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFy
Z3NbMV0uaWRlbnRpZmllcigpOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9ICZjb2Rl
QmxvY2stPmdldFN0dWJJbmZvKFNUVUJfUkVUVVJOX0FERFJFU1MpOwotICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBl
KTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUo
KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKLSAgICAKLSAgICBpZiAo
YWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlw
ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLQotICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKLQotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAg
ICYmIHNsb3QuaXNDYWNoZWFibGUoKQotICAgICAgICAmJiAhYmFzZVZhbHVlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKQotICAgICAgICAmJiBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0KLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGludCBsaXN0SW5k
ZXggPSAxOwotCi0gICAgICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5z
ZXQpCi0gICAgICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmKGNhbGxGcmFtZS0+dm0o
KSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKSk7Ci0KLSAgICAgICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZikgewotICAgICAgICAgICAgQVNTRVJUKCFzdHViSW5mby0+c3R1YlJvdXRp
bmUpOwotICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIDAsIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksIHRydWUpOwotICAgICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZkxp
c3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxm
TGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8tPnUu
Z2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsaXN0SW5k
ZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKLSAgICAgICAgICAgIHN0dWJJbmZv
LT51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSsrOwotICAgICAgICAgICAgSklUOjpjb21waWxl
R2V0QnlJZFNlbGZMaXN0KGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY29kZUJsb2NrLCBzdHVi
SW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIGJhc2VWYWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCksIGlkZW50LCBzbG90LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLQot
ICAgICAgICAgICAgaWYgKGxpc3RJbmRleCA9PSAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
IC0gMSkpCi0gICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVC
bG9jaywgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9n
ZW5lcmljKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1Ms
IEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYykpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChWTSYgdm0sIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGludCYg
bGlzdEluZGV4KQotewotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90
eXBlU3RydWN0dXJlTGlzdCA9IDA7Ci0gICAgbGlzdEluZGV4ID0gMTsKLQotICAgIHN3aXRjaCAo
c3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86
Ci0gICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KHZtLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+
dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0
QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJ
bmZvLT5zdHViUm91dGluZS5jbGVhcigpOwotICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQ
cm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgcHJvdG90eXBlU3RydWN0dXJl
TGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qodm0sIG93bmVyLCBzdHVi
SW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUp
OwotICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUuY2xlYXIoKTsKLSAgICAgICAgc3R1Yklu
Zm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKLSAgICAg
ICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRQcm90b0xpc3Qu
c3RydWN0dXJlTGlzdDsKLSAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8tPnUuZ2V0QnlJZFBy
b3RvTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSkKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90b0xpc3Qu
bGlzdFNpemUrKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGxpc3RJbmRl
eCA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBwcm90b3R5cGVT
dHJ1Y3R1cmVMaXN0OwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfZ2V0X2J5X2lkX2dldHRlcl9zdHViKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShz
dGFja0ZyYW1lKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZy
YW1lOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbEdldHRlcihjYWxsRnJhbWUsIHN0YWNrRnJh
bWUuYXJnc1sxXS5qc09iamVjdCgpLCBzdGFja0ZyYW1lLmFyZ3NbMF0uanNPYmplY3QoKSk7Ci0g
ICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVyblRvVGhyb3dU
cmFtcG9saW5lKCZjYWxsRnJhbWUtPnZtKCksIHN0YWNrRnJhbWUuYXJnc1syXS5yZXR1cm5BZGRy
ZXNzKCksIFNUVUJfUkVUVVJOX0FERFJFU1MpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3Bf
Z2V0X2J5X2lkX2N1c3RvbV9zdHViKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OwotICAgIEpTT2JqZWN0KiBzbG90QmFzZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc09iamVjdCgp
OwotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHN0YWNrRnJhbWUuYXJnc1sxXS5hc1BvaW50
ZXIpOwotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhY2tGcmFtZS5hcmdzWzJdLmlk
ZW50aWZpZXIoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldHRlcihjYWxsRnJhbWUsIHNsb3RC
YXNlLCBpZGVudCk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVyblRvVGhyb3dUcmFtcG9saW5lKCZjYWxsRnJhbWUtPnZtKCksIHN0YWNrRnJhbWUuYXJn
c1szXS5yZXR1cm5BZGRyZXNzKCksIFNUVUJfUkVUVVJOX0FERFJFU1MpOwotICAgIAotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04o
RW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV9pZF9wcm90b19saXN0KQotewotICAgIFNUVUJfSU5J
VF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
c3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKTsKLQotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSAmY29kZUJsb2NrLT5nZXRTdHViSW5mbyhTVFVCX1JFVFVSTl9BRERSRVNTKTsK
LSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUu
YXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwotCi0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotCi0gICAgaWYgKGFjY2Vzc1R5
cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpCi0gICAg
ICAgIHx8ICFiYXNlVmFsdWUuaXNDZWxsKCkKLSAgICAgICAgfHwgIXNsb3QuaXNDYWNoZWFibGUo
KQotICAgICAgICB8fCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25h
cnkoKQotICAgICAgICB8fCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpKSB7Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNT
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIH0KLQotICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0KLSAgICBKU09iamVj
dCogc2xvdEJhc2VPYmplY3QgPSBhc09iamVjdChzbG90LnNsb3RCYXNlKCkpOwotICAgIAotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICBpZiAo
c2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKGNvZGVCbG9jaywgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7Ci0gICAgZWxzZSBpZiAoc2xvdC5zbG90QmFzZSgp
ID09IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnByb3RvdHlwZUZvckxvb2t1cChj
YWxsRnJhbWUpKSB7Ci0gICAgICAgIEFTU0VSVCghYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKS0+aXNEaWN0aW9uYXJ5KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGJhc2VWYWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlT
bG90KCkpIHsKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxv
Y2ssIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJv
dG9fZmFpbCkpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBw
cm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAotICAgICAgICAvLyBz
aG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgotICAgICAgICBpZiAoc2xvdEJh
c2VPYmplY3QtPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgc2xv
dEJhc2VPYmplY3QtPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFtZS0+dm0oKSk7Ci0g
ICAgICAgICAgICBvZmZzZXQgPSBzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmdldChjYWxs
RnJhbWUtPnZtKCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbGlz
dEluZGV4OwotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlw
ZVN0cnVjdHVyZUxpc3QgPSBnZXRQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTbG90KGNh
bGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8sIGxp
c3RJbmRleCk7Ci0gICAgICAgIGlmIChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUpIHsKLSAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5SWRQcm90b0xpc3QoY2FsbEZy
YW1lLT5zY29wZSgpLT52bSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHByb3Rv
dHlwZVN0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc3RydWN0dXJlLCBzbG90QmFzZU9iamVjdC0+
c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0KTsKLQotICAgICAgICAgICAg
aWYgKGxpc3RJbmRleCA9PSAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCi0gICAg
ICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgU1RVQl9S
RVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0X2Z1
bGwpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IG5v
cm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoY2FsbEZyYW1lLCBiYXNlVmFsdWUs
IHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgICAgICBpZiAoY291
bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKSB7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0
cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJU
KCFiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSk7Ci0gICAg
ICAgIGludCBsaXN0SW5kZXg7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IGdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdFNsb3QoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViSW5mbywgbGlzdEluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChsaXN0SW5kZXggPCBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b0NoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihjYWxsRnJhbWUpOwotICAg
ICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluTGlzdChjYWxsRnJhbWUtPnNjb3BlKCkt
PnZtKCksIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJl
TGlzdCwgbGlzdEluZGV4LCBzdHJ1Y3R1cmUsIHByb3RvQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIG9mZnNldCk7Ci0KLSAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPT0gKFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQotICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLURFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKQot
ewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBQcm9wZXJ0eVNs
b3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChz
dGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgc2xv
dCk7Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wX2dldF9ieV9pZF9wcm90b19mYWlsKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzBdLmpzVmFsdWUoKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3Rh
Y2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgc2xvdCk7Ci0KLSAgICBDSEVDS19GT1JfRVhD
RVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0K
LQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV9pZF9hcnJh
eV9mYWlsKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZp
ZXIoKSwgc2xvdCk7Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04o
RW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkKLXsKLSAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0
YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoc3RhY2tGcmFtZS5jYWxs
RnJhbWUsIHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCksIHNsb3QpOwotCi0gICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Ci19Ci0KIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3RlYXJfb2ZmX2FjdGl2
YXRpb24pCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU3NDU4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzAs
MTYgKzMzMCw3IEBAIGV4dGVybiAiQyIgdm9pZCBjdGlNYXNtUHJvYmVUcmFtcG9saW5lKCkKIHZv
aWQgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb25zKFZNKik7CiAKIGV4dGVybiAi
QyIgewotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZChTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9v
cF9nZXRfYnlfaWRfYXJyYXlfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRf
U1RVQiBjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX2dldHRl
cl9zdHViKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFs
dWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9i
eV9pZF9wcm90b19saXN0KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0X2Z1bGwoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RV
QiBjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5n
X2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1
ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVy
aWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBX
VEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2MCw2ICszNjAsOCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdl
dEJ5SUQoRXhlY1N0YXRlKiBlCiAKIHZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsK
KyAgICAKICAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOwogICAgIGlmICghY2FjaGVkKQogICAgICAg
ICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKQEAgLTU5OSw2ICs2MDEsOCBAQCBzdGF0aWMgYm9vbCB0
cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAKIHZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQogeworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygp
LT5tX2xvY2spOworICAgIAogICAgIGJvb2wgZG9udENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5
SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7CiAg
ICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShy
ZXZpc2lvbiAxNTc0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw2NiArMjczLDYgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaAogICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtH
ZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgSlNJbnRl
cmZhY2VKSVQgaml0KHZtKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIENoZWNr
IGVheCBpcyBhIHN0cmluZwotICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVDYXNlczEg
PSBqaXQuZW1pdEp1bXBJZk5vdEpTQ2VsbChKU0ludGVyZmFjZUpJVDo6cmVnVDApOwotICAgIEpT
SW50ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVDYXNlczIgPSBqaXQuYnJhbmNoUHRyKAotICAgICAg
ICBKU0ludGVyZmFjZUpJVDo6Tm90RXF1YWwsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKAotICAg
ICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodm0tPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3Ro
IGZyb20gdGhlIFVzdHJpbmcuCi0gICAgaml0LmxvYWQzMigKLSAgICAgICAgSlNJbnRlcmZhY2VK
SVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5n
dGgoKSksCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0KLSAgICBKU0ludGVyZmFj
ZUpJVDo6SnVtcCBmYWlsdXJlQ2FzZXMzID0gaml0LmJyYW5jaDMyKAotICAgICAgICBKU0ludGVy
ZmFjZUpJVDo6TGVzc1RoYW4sIEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6
OlRydXN0ZWRJbW0zMigwKSk7Ci0KLSAgICAvLyByZWdUMCBjb250YWlucyBhIDY0IGJpdCB2YWx1
ZSAoaXMgcG9zaXRpdmUsIGlzIHplcm8gZXh0ZW5kZWQpIHNvIHdlIGRvbid0IG5lZWQgc2lnbiBl
eHRlbmQgaGVyZS4KLSAgICBqaXQuZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhKU0ludGVy
ZmFjZUpJVDo6cmVnVDAsIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0gICAgCi0jZWxzZSAvLyBV
U0UoSlNWQUxVRTY0KQotICAgIC8vIHJlZ1QwIGhvbGRzIHBheWxvYWQsIHJlZ1QxIGhvbGRzIHRh
ZwotCi0gICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZmFpbHVyZUNhc2VzMSA9IGppdC5icmFuY2gz
MigKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDEsCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpOwotICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVDYXNlczIgPSBqaXQuYnJhbmNo
UHRyKAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6Tm90RXF1YWwsCi0gICAgICAgIEpTSW50ZXJm
YWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHZtLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhl
IGxlbmd0aCBmcm9tIHRoZSBVc3RyaW5nLgotICAgIGppdC5sb2FkMzIoCi0gICAgICAgIEpTSW50
ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNTdHJpbmc6Om9mZnNl
dE9mTGVuZ3RoKCkpLAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwotCi0gICAgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgZmFpbHVyZUNhc2VzMyA9IGppdC5icmFuY2gzMigKLSAgICAgICAg
SlNJbnRlcmZhY2VKSVQ6OkFib3ZlLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNl
SklUOjpUcnVzdGVkSW1tMzIoSU5UX01BWCkpOwotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklU
OjpyZWdUMiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICBqaXQubW92ZShKU0ludGVyZmFj
ZUpJVDo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QxKTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCi0gICAgaml0LnJldCgpOwotICAgIAot
ICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGZhaWx1cmVDYXNlczFDYWxsID0gaml0Lm1ha2VUYWls
UmVjdXJzaXZlQ2FsbChmYWlsdXJlQ2FzZXMxKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBm
YWlsdXJlQ2FzZXMyQ2FsbCA9IGppdC5tYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoZmFpbHVyZUNhc2Vz
Mik7Ci0gICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZmFpbHVyZUNhc2VzM0NhbGwgPSBqaXQubWFr
ZVRhaWxSZWN1cnNpdmVDYWxsKGZhaWx1cmVDYXNlczMpOwotICAgIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIAotICAgIHBhdGNo
QnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMUNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlf
aWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczJDYWxs
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlQ2FzZXMzQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9p
ZF9zdHJpbmdfZmFpbCkpOwotICAgIAotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoInN0cmluZyBsZW5ndGggdHJhbXBvbGluZSIpKTsKLX0KLQogc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZW5lcmF0b3IoVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCiB7CiAgICAgaW50IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uID0gTmF0
aXZlRXhlY3V0YWJsZTo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTU3
NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Ns
b3N1cmVDYWxsVGh1CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVy
YXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dl
bmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBv
bGluZUdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5l
cmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0
b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwKFZNKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214323</attachid>
            <date>2013-10-15 17:14:01 -0700</date>
            <delta_ts>2013-10-15 18:45:22 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>104869</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NDcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDEzLTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QmFzZWxpbmUgSklUIHNob3VsZCB1c2UgdGhlIERGRyBHZXRCeUlkIElDCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI4NjEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbW9zdGx5IGp1
c3Qga2lsbHMgYSB0b24gb2YgY29kZS4KKyAgICAgICAgCisgICAgICAgIE5vdGUgdGhhdCB0aGlz
IGRvZXNuJ3QgeWV0IGRvIGFsbCBvZiB0aGUgc2ltcGxpZmljYXRpb25zIHRoYXQgY2FuIGJlIGRv
bmUsIGJ1dCBpdCBkb2VzCisgICAgICAgIGtpbGwgZGVhZCBjb2RlLiBJJ2xsIGhhdmUgYW5vdGhl
ciBjaGFuZ2UgdG8gc2ltcGxpZnkgU3RydWN0dXJlU3R1YkluZm8ncyB1bmlvbnMgYW5kIHN1Y2gu
CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnJlc2V0U3R1YkludGVybmFsKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOjpjb3B5VG9TdHViSW5mbyk6Cisg
ICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVN0dWJDb21waWxhdGlv
bkluZm86OlByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogaml0L0pJVElu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3Bl
cmF0aW9uKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
ZnJvbV9zY29wZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAg
IChKU0M6OnJlcGF0Y2hHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6YnVpbGRHZXRCeUlETGlzdCk6
CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgICogaml0L1RodW5r
R2VuZXJhdG9ycy5oOgorCiAyMDEzLTEwLTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVy
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsIHNob3VsZG4n
dCBzdG9yZSBhIEpTQ29udGV4dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2
IEBACiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUU3R1
YnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CkBAIC0yMzc3LDI5ICsyMzc2LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldFN0dWJJbnRlcm5h
bChSZXBhdGMKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4KICAgICAgICAgZGF0YUxvZygi
Q2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICIsIHN0YXRpY19jYXN0PGludD4oc3R1Yklu
Zm8uYWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50ZXIodGhpcyksICIuXG4iKTsKICAgICB9
Ci0KLSAgICBzd2l0Y2ggKGppdFR5cGUoKSkgewotICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVK
SVQ6Ci0gICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAgICAg
ICBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHViSW5mbyk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNQdXRCeUlkQWNjZXNzKGFj
Y2Vzc1R5cGUpKTsKLSAgICAgICAgICAgIHJlc2V0UHV0QnlJRChyZXBhdGNoQnVmZmVyLCBzdHVi
SW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb2RlOjpERkdK
SVQ6Ci0gICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAgICAg
ICByZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwotICAgICAgICBlbHNlIGlm
IChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAgICAgICByZXNldFB1dEJ5SUQo
cmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlzSW5BY2Nlc3MoYWNjZXNzVHlwZSkpOwotICAgICAgICAgICAgcmVzZXRJ
bihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNKSVQoaml0VHlw
ZSgpKSk7CisgICAgCisgICAgaWYgKGlzR2V0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSkKKyAgICAg
ICAgcmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAgICBlbHNlIGlmIChp
c1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCisgICAgICAgIHJlc2V0UHV0QnlJRChyZXBhdGNo
QnVmZmVyLCBzdHViSW5mbyk7CisgICAgZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
SW5BY2Nlc3MoYWNjZXNzVHlwZSkpOworICAgICAgICByZXNldEluKHJlcGF0Y2hCdWZmZXIsIHN0
dWJJbmZvKTsKICAgICB9CiAgICAgCiAgICAgc3R1YkluZm8ucmVzZXQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDU1ICs0OTIsNTIgQEAg
QUxXQVlTX0lOTElORSB2b2lkIFByb3BlcnR5U3R1YkNvbXBpbGF0aQogICAgIGluZm8uY29kZU9y
aWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7CiAgICAgaW5mby5jYWxsUmV0dXJuTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbFJldHVybkxvY2F0aW9uKTsKIAorICAg
IGluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1cmVUb0Nv
bXBhcmUpLCBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgaW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9TdHJ1Y3RDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1
Y3R1cmVDaGVjaykpOworICAgIAorICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY29sZFBhdGhCZWdpbikpOworICAg
IGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9j
YXRpb25PZihkb25lKSk7CisgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdlTG9h
ZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7
CisgICAgCisgICAgaW5mby5wYXRjaC5kZmcuYmFzZUdQUiA9IEdQUkluZm86OnJlZ1QwOworCisg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJ
bmZvOjpyZWdUMCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KSAvLyBKU1ZBTFVFIGNhc2VzCiAgICAg
c3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgaG90UGF0aEJlZ2luTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaG90
UGF0aEJlZ2luKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW5Mb2Nh
dGlvbjsKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVUb0NvbXBh
cmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdp
bkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlVG9Db21wYXJlKSk7Ci0g
ICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2sgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlQ2hlY2spKTsKLSAgICAgICAgaW5mby5wYXRj
aC5iYXNlbGluZS51LmdldC5wcm9wZXJ0eVN0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHByb3BlcnR5U3RvcmFnZUxvYWQpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsID0gTWFjcm9B
c3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldERpc3BsYWNlbWVudExhYmVsKSk7Ci0jZWxzZQotICAg
ICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsMSA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24s
IGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKLSAgICAgICAg
aW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1lbnRMYWJlbDIgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwyKSk7Ci0jZW5kaWYKLSAgICAg
ICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoZG9uZSkpOwotICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNv
bGRQYXRoQmVnaW4gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxp
bmtCdWZmZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGNhbGxSZXR1cm5Mb2NhdGlvbikpOworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgaW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9j
YXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbCkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy52
YWx1ZUdQUiA9IEdQUkluZm86OnJlZ1QwOwogICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2Fz
ZSBQdXRCeUlkOgotICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsID0g
TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc3RydWN0dXJlVG9Db21wYXJlKSwgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pOwotICAg
ICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVyZUNoZWNrKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbCkpOwotI2Vsc2UKLSAg
ICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbDIpKTsKLSAgICAgICAg
aW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0RGlzcGxhY2VtZW50TGFiZWwxKSk7Ci0jZW5kaWYKLSAg
ICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNzZW1ibGVy
OjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7
Ci0gICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvcGVydHlTdG9yYWdlTG9hZCkpOwotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGluZm8ucGF0Y2guZGZnLmJhc2VHUFIgPSBHUFJJbmZvOjpyZWdU
MDsKICAgICAgICAgaW5mby5wYXRjaC5kZmcudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMTsKLSAg
ICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5z
ZXQoR1BSSW5mbzo6cmVnVDApOwogICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpy
ZWdUMSk7Ci0gICAgICAgIHVzZWRSZWdpc3RlcnMuY29weUluZm8oaW5mby5wYXRjaC5kZmcudXNl
ZFJlZ2lzdGVycyk7Ci0jZWxzZQotICAgICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbHNlIC8vIEpTVkFMVUUgY2Fz
ZXMKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgaW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbDIpKTsKKyAgICAgICAgaW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwxKSk7CisgICAgICAgIGluZm8ucGF0Y2gu
ZGZnLnZhbHVlR1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLnZh
bHVlVGFnR1BSID0gR1BSSW5mbzo6cmVnVDE7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQ
UkluZm86OnJlZ1QxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUlkOgorICAgICAg
ICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsMikpOworICAgICAgICBpbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVy
OjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKICAgICAgICAgaW5mby5w
YXRjaC5kZmcudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMjsKICAgICAgICAgaW5mby5wYXRjaC5k
ZmcudmFsdWVUYWdHUFIgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVyczsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDApOwog
ICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgIHVzZWRS
ZWdpc3RlcnMuc2V0KEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5jb3B5
SW5mbyhpbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKLSNlbmRpZgotICAgICAgICBpbmZv
LnBhdGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorI2VuZGlmIC8vIEpTVkFMVUUgY2FzZXMKKyAgICAKKyAgICB1c2VkUmVnaXN0ZXJzLmNvcHlJ
bmZvKGluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOworICAgIGluZm8ucGF0Y2guZGZnLnJl
Z2lzdGVyc0ZsdXNoZWQgPSB0cnVlOwogfQogCiBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZh
dGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAKICAgICAgICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAotICAgICAgICAgICAg
UHJvcGVydHlTdHViR2V0QnlJZF9ULCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgaG90UGF0aEJlZ2luLAorICAgICAgICAgICAgUHJvcGVydHlTdHViR2V0QnlJ
ZF9ULCB1bnNpZ25lZCBieXRlY29kZUluZGV4LAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmUsCiAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjaywKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLApAQCAtMTk2
LDcgKzE5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGRvbmUpCiAgICAgICAgICAgICA6IG1fdHlwZShHZXRCeUlkKQogICAgICAgICAgICAg
LCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICAsIGhvdFBhdGhCZWdp
bihob3RQYXRoQmVnaW4pCiAgICAgICAgICAgICAsIHN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1
cmVUb0NvbXBhcmUpCiAgICAgICAgICAgICAsIHN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNr
KQogICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFnZUxvYWQp
CkBAIC0zMTEsMzkgKzMxMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoY2FsbExpbmtJbmZvLCBjYWxsZWVDb2RlQmxvY2ssIGV4
cGVjdGVkU3RydWN0dXJlLCBleHBlY3RlZEV4ZWN1dGFibGUsIGNvZGVQdHIpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRQcm90byhWTSogdm0sIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1
Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAg
ICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Y29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKHN0
dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hl
ZE9mZnNldCwgcmV0dXJuQWRkcmVzcywgY2FsbEZyYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoVk0qIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKLSAgICAgICAgewotICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVj
b2RlT2Zmc2V0ID0gc3R1YkluZm8tPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdChzdHViSW5mbywgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVzLCBjdXJyZW50SW5kZXgsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hl
ZE9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRQ
cm90b0xpc3QoVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90b0xpc3Qoc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGN1cnJlbnRJbmRleCwg
c3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBjYWNoZWRPZmZzZXQs
IGNhbGxGcmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5
SWRDaGFpbkxpc3QoVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBpbnQgY3VycmVudEluZGV4LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5
T2Zmc2V0IGNhY2hlZE9mZnNldCkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8t
PmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbkxpc3Qoc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGN1cnJl
bnRJbmRleCwgc3RydWN0dXJlLCBjaGFpbiwgY291bnQsIGlkZW50LCBzbG90LCBjYWNoZWRPZmZz
ZXQsIGNhbGxGcmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
R2V0QnlJZENoYWluKFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zm
c2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZU9m
ZnNldCA9IHN0dWJJbmZvLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBq
aXQucHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oc3R1YkluZm8sIHN0cnVjdHVyZSwgY2hhaW4s
IGNvdW50LCBpZGVudCwgc2xvdCwgY2FjaGVkT2Zmc2V0LCByZXR1cm5BZGRyZXNzLCBjYWxsRnJh
bWUpOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0
QnlWYWwoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkK
ICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKQEAgLTM3MSwy
MSArMzM3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaml0LnByaXZh
dGVDb21waWxlQ1RJTmF0aXZlQ2FsbCh2bSwgZnVuYyk7CiAgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgdm9pZCByZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1
YkluZm8qKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9m
ZnNldCwgUmV0dXJuQWRkcmVzc1B0cik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVBh
dGNoR2V0QXJyYXlMZW5ndGgoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZt
LCBjb2RlQmxvY2spOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICAgICAgLy8gRm9yY2Ug
cHJvZmlsaW5nIHRvIGJlIGVuYWJsZWQgZHVyaW5nIHN0dWIgZ2VuZXJhdGlvbi4KLSAgICAgICAg
ICAgIGppdC5tX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGppdC5tX2NhbkJl
T3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGppdC5tX3Nob3VsZEVtaXRQ
cm9maWxpbmcgPSB0cnVlOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAgICAg
cmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgocmV0dXJuQWRkcmVz
cyk7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSos
IEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9j
ayogY2FsbGVlQ29kZUJsb2NrLCBDb2RlUHRyLCBDYWxsTGlua0luZm8qLCBWTSosIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOwogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rU2xvd0NhbGwoQ29kZUJs
b2NrKiBjYWxsZXJDb2RlQmxvY2ssIENhbGxMaW5rSW5mbyopOwogCkBAIC0zOTksMTIgKzM1MCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGls
ZUNsb3N1cmVDYWxsKENhbGxMaW5rSW5mbyosIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBT
dHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7CiAgICAg
ICAgIAotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cnVjdHVyZVN0
dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRP
ZmZzZXQsIFJldHVybkFkZHJlc3NQdHIsIENhbGxGcmFtZSopOwotICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiwgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KTsKLSAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8q
LCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVj
dHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKLSAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8q
LCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVj
dHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKLSAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0
cnVjdHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1
cm5BZGRyZXNzUHRyLCBDYWxsRnJhbWUqKTsKLSAgICAgICAgCiAgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1v
ZGUpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0
dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIApAQCAtNTUzLDcgKzQ5OCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKIAogICAgICAgICB2b2lkIGNv
bXBpbGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7Ci0gICAgICAgIHZvaWQgY29t
cGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0VlJlZywgaW50IGJhc2VWUmVnLCBjb25zdCBJ
ZGVudGlmaWVyKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2
b2lkIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJl
c3VsdFRhZywgUmVnaXN0ZXJJRCByZXN1bHRQYXlsb2FkLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRP
ZmZzZXQpOwogICAgICAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNPYmplY3QqIGJh
c2UsIFJlZ2lzdGVySUQgcmVzdWx0VGFnLCBSZWdpc3RlcklEIHJlc3VsdFBheWxvYWQsIFByb3Bl
cnR5T2Zmc2V0IGNhY2hlZE9mZnNldCk7CiAgICAgICAgIHZvaWQgY29tcGlsZUdldERpcmVjdE9m
ZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0VGFnLCBSZWdpc3RlcklEIHJl
c3VsdFBheWxvYWQsIFJlZ2lzdGVySUQgb2Zmc2V0LCBGaW5hbE9iamVjdE1vZGUgPSBNYXlCZUZp
bmFsKTsKQEAgLTU2NCwyOCArNTA4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdFN1YjMyQ29uc3RhbnQoaW50IGRzdCwgaW50IG9wLCBpbnQzMl90IGNvbnN0YW50LCBSZXN1
bHRUeXBlIG9wVHlwZSk7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKE9wY29kZUlE
LCBpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBub3RJ
bnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMgPSB0
cnVlLCBib29sIG9wMklzSW5SZWdpc3RlcnMgPSB0cnVlKTsKIAotI2lmIENQVShBUk1fVFJBRElU
SU9OQUwpCi0gICAgICAgIC8vIHNlcXVlbmNlT3BDYWxsCi0gICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgc2VxdWVuY2VPcENhbGxJbnN0cnVjdGlvblNwYWNlID0gMTI7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgc2VxdWVuY2VPcENhbGxDb25zdGFudFNwYWNlID0gMjsKLSAgICAgICAgLy8gc2Vx
dWVuY2VHZXRCeUlkSG90UGF0aAotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0
QnlJZEhvdFBhdGhJbnN0cnVjdGlvblNwYWNlID0gMzY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgc2VxdWVuY2VHZXRCeUlkSG90UGF0aENvbnN0YW50U3BhY2UgPSA0OwotICAgICAgICAvLyBz
ZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNl
R2V0QnlJZFNsb3dDYXNlSW5zdHJ1Y3Rpb25TcGFjZSA9IDgwOwotICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlQ29uc3RhbnRTcGFjZSA9IDQ7Ci0jZWxpZiBD
UFUoU0g0KQotICAgICAgICAvLyBzZXF1ZW5jZU9wQ2FsbAotICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHNlcXVlbmNlT3BDYWxsSW5zdHJ1Y3Rpb25TcGFjZSA9IDEyOwotICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHNlcXVlbmNlT3BDYWxsQ29uc3RhbnRTcGFjZSA9IDI7Ci0gICAgICAgIC8vIHNl
cXVlbmNlR2V0QnlJZEhvdFBhdGgKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdl
dEJ5SWRIb3RQYXRoSW5zdHJ1Y3Rpb25TcGFjZSA9IDM2OwotICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhDb25zdGFudFNwYWNlID0gNTsKLSAgICAgICAgLy8g
c2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5j
ZUdldEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3BhY2UgPSAzODsKLSAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUNvbnN0YW50U3BhY2UgPSA0OwotI2VuZGlm
Ci0KICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIC8qIFRoaXMgZnVuY3Rpb24g
aXMgZGVwcmVjYXRlZC4gKi8KICAgICAgICAgdm9pZCBlbWl0R2V0SklUU3R1YkFyZyhpbnQgYXJn
dW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KTsKQEAgLTYyOCw3ICs1NTAsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKEluc3Ry
dWN0aW9uKiwgT3Bjb2RlSUQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBpbnQg
ZHN0LCBpbnQgc3JjMSwgaW50IHNyYzIsIE9wZXJhbmRUeXBlcywgYm9vbCBvcDFIYXNJbW1lZGlh
dGVJbnRGYXN0Q2FzZSwgYm9vbCBvcDJIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSk7CiAKICAgICAg
ICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2VWUmVnLCBjb25zdCBJZGVudGlm
aWVyKik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0VlJl
ZywgaW50IGJhc2VWUmVnLCBjb25zdCBJZGVudGlmaWVyKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
KTsKICAgICAgICAgdm9pZCBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNlLCBS
ZWdpc3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KTsKICAgICAgICAg
dm9pZCBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBy
ZXN1bHQsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3RlcklEIHNjcmF0Y2gsIEZpbmFsT2JqZWN0
TW9kZSA9IE1heUJlRmluYWwpOwpAQCAtODUzLDYgKzc3NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhjb25zdCBGdW5jdGlvblB0ciYpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHIm
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImLCBpbnQpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRyJiwgaW50KTsKKyAgICAgICAgCisg
ICAgICAgIGVudW0gV2l0aFByb2ZpbGVUYWcgeyBXaXRoUHJvZmlsZSB9OworICAgICAgICAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9F
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJh
dGlvbl9FTywgR1BSUmVnKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0pJVE9wZXJhdGlvbl9FU3QsIFN0cnVjdHVyZSopOwpAQCAtODY0LDEwICs3ODksMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUFhcEpjcFosIGludCwgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSosIGNvbnN0IEpTVmFsdWUqLCBpbnQzMl90KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQywgaW50LCBKU0NlbGwqKTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSiwg
aW50LCBHUFJSZWcpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSSwg
aW50LCBHUFJSZWcsIFN0cmluZ0ltcGwqKTsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSSwg
aW50LCBHUFJSZWcsIEdQUlJlZywgU3RyaW5nSW1wbCopOworI2VuZGlmCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJZGMsIGludCwg
R1BSUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQUlJlZywgR1BSUmVnKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FUCwgaW50LCB2b2lkKik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRVBjLCBpbnQsIEluc3RydWN0aW9uKik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3Bl
cmF0aW9uX0VQYywgaW50LCBJbnN0cnVjdGlvbiopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaLCBpbnQsIGludDMyX3QpOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VK
UywgR1BSUmVnLCBzaXplX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfSklUT3BlcmF0aW9uX0VaLCBpbnQzMl90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTc0NTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSwx
OCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJu
IGNhbGw7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0
IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgaW50IGRzdCkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdUNCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisjZWxzZQor
ICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlMlJlZ2lzdGVyLCByZXR1cm5WYWx1ZVJlZ2lz
dGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjYWxsOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FIG9wZXJh
dGlvbikKIHsKICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwpAQCAtMjY4LDYgKzI4MCwx
MiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKHJlZ09wMSwgcmVnT3AyLCBUcnVzdGVkSW1tUHRyKHVpZCkp
OwogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiB9
CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9u
KEpJVDo6V2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIGludCBk
c3QsIEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CisgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUob3BlcmF0
aW9uLCBkc3QpOworfQogI2VuZGlmCiAKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBpbnQgZHN0
KQpAQCAtMzI0LDEwICszNDIsMTAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQYyBvcGVyYXRpb24s
IGludCBkc3QsIEluc3RydWN0aW9uKiBieXRlY29kZVBDKQorQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3Bl
cmF0aW9uX0VQYyBvcGVyYXRpb24sIGludCBkc3QsIEluc3RydWN0aW9uKiBieXRlY29kZVBDKQog
ewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGJ5dGVjb2Rl
UEMpKTsKLSAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHQob3BlcmF0aW9uLCBkc3QpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG9wZXJhdGlvbiwgZHN0KTsKIH0KIAog
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBpbnQgZHN0LCBpbnQzMl90IGFyZykKQEAgLTQ4Niw2
ICs1MDQsMTIgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVy
YXRpb24sIGRzdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjpjYWxsT3BlcmF0aW9uKEpJVDo6V2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSSBv
cGVyYXRpb24sIGludCBkc3QsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIFN0
cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8z
MkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFRydXN0ZWRJbW1QdHIodWlkKSk7
CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUob3BlcmF0aW9uLCBkc3QpOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSklkYyBvcGVy
YXRpb24sIGludCBkc3QsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIGNvbnN0
IElkZW50aWZpZXIqIGFyZzIpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVB
QklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKGFy
ZzIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDY1LDExICs0NjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24q
CiAKIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWRlbnRpZmllciogaWRl
bnQpCiB7Ci0gICAgLy8gQXMgZm9yIHB1dF9ieV9pZCwgZ2V0X2J5X2lkIHJlcXVpcmVzIHRoZSBv
ZmZzZXQgb2YgdGhlIFN0cnVjdHVyZSBhbmQgdGhlIG9mZnNldCBvZiB0aGUgYWNjZXNzIHRvIGJl
IHBhdGNoZWQuCi0gICAgLy8gQWRkaXRpb25hbGx5LCBmb3IgZ2V0X2J5X2lkIHdlIG5lZWQgcGF0
Y2ggdGhlIG9mZnNldCBvZiB0aGUgYnJhbmNoIHRvIHRoZSBzbG93IGNhc2UgKHdlIHBhdGNoIHRo
aXMgdG8ganVtcAotICAgIC8vIHRvIGFycmF5LWxlbmd0aCAvIHByb3RvdHlwZSBhY2Nlc3MgdHJh
bnBvbGluZXMsIGFuZCBmaW5hbGx5IHdlIGFsc28gdGhlIHRoZSBwcm9wZXJ0eS1tYXAgYWNjZXNz
IG9mZnNldCBhcyBhIGxhYmVsCi0gICAgLy8gdG8ganVtcCBiYWNrIHRvIGlmIG9uZSBvZiB0aGVz
ZSB0cmFtcG9saWVzIGZpbmRzIGEgbWF0Y2guCi0gICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJl
Z1QyKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgocmVn
VDIsIHJlZ1QzLCBtX2J5dGVjb2RlT2Zmc2V0KTsKQEAgLTQ3Nyw1NCArNDcyLDQyIEBAIHZvaWQg
SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWQKIAogICAgIEJFR0lOX1VOSU5URVJS
VVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkSG90UGF0aCk7CiAgICAgCi0gICAgTGFiZWwg
aG90UGF0aEJlZ2luKHRoaXMpOwotICAgIAogICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0Nv
bXBhcmU7Ci0gICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5j
aFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9j
YXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOworICAgIFBhdGNoYWJs
ZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCisgICAg
ICAgIE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0dXJlVG9Db21wYXJlLAorICAgICAgICBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7CisgICAgCiAgICAgYWRkU2xvd0Nhc2Uoc3RydWN0
dXJlQ2hlY2spOwogICAgIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFn
ZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50
TGFiZWwxID0gbG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MocmVn
VDIsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7IC8vIHBheWxvYWQKLSAgICBE
YXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsMiA9IGxvYWRQdHJXaXRoQ29tcGFjdEFk
ZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1QyLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0
KSwgcmVnVDEpOyAvLyB0YWcKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3Jh
Z2VMb2FkID0KKyAgICAgICAgY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKICAgICAKLSAgICBMYWJlbCBwdXRSZXN1
bHQodGhpcyk7CisgICAgRGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoVGFnID0gbG9hZDMy
V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAgIEFkZHJlc3MocmVnVDAsIHBh
dGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMSk7CisgICAgRGF0YUxhYmVsQ29tcGFjdCBs
b2FkV2l0aFBhdGNoUGF5bG9hZCA9IGxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNo
KAorICAgICAgICBBZGRyZXNzKHJlZ1QwLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVn
VDApOwogICAgIAotICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJ
ZEhvdFBhdGgpOwotCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQo
UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YkdldEJ5SWQsIG1fYnl0ZWNv
ZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVj
aywgcHJvcGVydHlTdG9yYWdlTG9hZCwgZGlzcGxhY2VtZW50TGFiZWwxLCBkaXNwbGFjZW1lbnRM
YWJlbDIsIHB1dFJlc3VsdCkpOworICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAg
IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKAorICAgICAgICBQcm9wZXJ0
eVN0dWJDb21waWxhdGlvbkluZm8oCisgICAgICAgICAgICBQcm9wZXJ0eVN0dWJHZXRCeUlkLCBt
X2J5dGVjb2RlT2Zmc2V0LCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNrLAorICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlTG9hZCwgbG9hZFdpdGhQYXRjaFBheWxvYWQsIGxvYWRX
aXRoUGF0Y2hUYWcsIGRvbmUpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICBpbnQgaWRlbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAg
IAotICAgIGNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoZHN0LCBiYXNlLCAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGlkZW50KSksIGl0ZXIpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUocmVn
VDQpOwotfQorICAgIGludCByZXN1bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAKLXZvaWQgSklUOjpjb21waWxl
R2V0QnlJZFNsb3dDYXNlKGludCBkc3QsIGludCBiYXNlLCBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICAvLyBBcyBm
b3IgdGhlIGhvdCBwYXRoIG9mIGdldF9ieV9pZCwgYWJvdmUsIHdlIGVuc3VyZSB0aGF0IHdlIGNh
biB1c2UgYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9mZnNldAotICAgIC8vIHNvIHRoYXQgd2Ug
b25seSBuZWVkIHRyYWNrIG9uZSBwb2ludGVyIGludG8gdGhlIHNsb3cgY2FzZSBjb2RlIC0gd2Ug
dHJhY2sgYSBwb2ludGVyIHRvIHRoZSBsb2NhdGlvbgotICAgIC8vIG9mIHRoZSBjYWxsICh3aGlj
aCB3ZSBjYW4gdXNlIHRvIGxvb2sgdXAgdGhlIHBhdGNoIGluZm9ybWF0aW9uKSwgYnV0IHNob3Vs
ZCBhIGFycmF5LWxlbmd0aCBvcgotICAgIC8vIHByb3RvdHlwZSBhY2Nlc3MgdHJhbXBvbGluZSBm
YWlsIHdlIHdhbnQgdG8gYmFpbCBvdXQgYmFjayB0byBoZXJlLiAgVG8gZG8gc28gd2UgY2FuIHN1
YnRyYWN0IGJhY2sKLSAgICAvLyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2FsbCB0byB0aGUgaGVh
ZCBvZiB0aGUgc2xvdyBjYXNlLgotICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJh
c2UpOworICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2VWUmVnKTsKICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
ICAgICAKLSAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZFNs
b3dDYXNlKTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWQpOwotICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KHJlZ1QxLCByZWdUMCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3Rl
ZEltbVB0cihpZGVudCkpOwotICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsKLSAg
ICAKLSAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRV9GT1JfUFVUKHNlcXVlbmNlR2V0QnlJ
ZFNsb3dDYXNlLCBkc3QpOwotICAgIAotICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUg
Y2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4KKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKFdpdGhQcm9maWxlLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisKICAg
ICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAt
NjMzLDQzNCArNjE2LDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNPYmpl
YwogICAgIGxvYWQzMihBZGRyZXNzKHJlc3VsdFRhZywgb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVk
T2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcpOwogfQogCi12b2lkIEpJVDo6cGF0
Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBw
YXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfZ2V0X2J5X2lkX2dl
bmVyaWMuCi0gICAgLy8gU2hvdWxkIHByb2JhYmx5IGdvIHRvIEpJVFN0dWJzOjpjdGlfb3BfZ2V0
X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3Rpbmcgcmln
aHQgbm93LgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5B
ZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotICAgIAot
ICAgIC8vIFBhdGNoIHRoZSBvZmZzZXQgaW50byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZy
b20sIHRoZW4gcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZvci4KLSAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlVG9Db21wYXJlKSwgc3RydWN0
dXJlKTsKLSAgICByZXBhdGNoQnVmZmVyLnNldExvYWRJbnN0cnVjdGlvbklzQWN0aXZlKHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uY29udmVydGlibGVMb2FkQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnByb3BlcnR5U3RvcmFnZUxvYWQpLCBpc091dE9mTGluZU9mZnNldChj
YWNoZWRPZmZzZXQpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsMSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFn
ZShjYWNoZWRPZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxv
YWQpKTsgLy8gcGF5bG9hZAotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90
UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQuZGlzcGxhY2VtZW50TGFiZWwyKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9y
YWdlKGNhY2hlZE9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSk7IC8vIHRhZwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSAmbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3Mp
OwotICAgIAotICAgIC8vIHJlZ1QwIGhvbGRzIGEgSlNDZWxsKgotICAgIAotICAgIC8vIENoZWNr
IGZvciBhcnJheQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFuY2hUZXN0MzIo
WmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihJc0FycmF5KSk7Ci0gICAgSnVtcCBmYWlsdXJlQ2Fz
ZXMyID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFw
ZU1hc2spKTsKLSAgICAKLSAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGgg
ZnJvbSB0aGUgc3RvcmFnZQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgCi0gICAgSnVtcCBmYWlsdXJl
Q2FzZXMzID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSU5UX01BWCkpOwot
ICAgIG1vdmUocmVnVDIsIHJlZ1QwKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHJlZ1QxKTsKLSAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwotICAgIAot
ICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNl
cyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdpbik7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxLCBzbG93Q2FzZUJlZ2luKTsKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIHNsb3dDYXNlQmVnaW4pOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMywgc2xvd0Nhc2VCZWdpbik7Ci0gICAgCi0gICAg
Ly8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9p
bnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7Ci0gICAgCi0gICAgLy8g
VHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVk
IGxhdGVyLgotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBh
cnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0
b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgLy8gRmluYWxs
eSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlciht
X2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAg
ICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0
dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICByZXBhdGNoQnVmZmVyLnJl
bGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV9pZF9hcnJheV9mYWlsKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRQcm90byhTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewot
ICAgIC8vIHJlZ1QwIGhvbGRzIGEgSlNDZWxsKgotICAgIAotICAgIC8vIFRoZSBwcm90b3R5cGUg
b2JqZWN0IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxv
Y2sgaXMgcmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcwotICAgIC8vIHJlZmVyZW5jaW5n
IHRoZSBwcm90b3R5cGUgb2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRpdmVseSBsb2FkIGl0J3MgdGFi
bGUgbmljZSBhbmQgZWFybHkhKQotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0
KHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgIAotICAgIEp1
bXAgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpOwotICAg
IAotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3Qg
Y2hhbmdlZC4KLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9u
Q2hlY2socHJvdG9PYmplY3QsIHByb3RvdHlwZVN0cnVjdHVyZSwgc3R1YkluZm8sIHJlZ1QzKTsK
LQotICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOwotICAgIC8vIENoZWNrcyBvdXQgb2th
eSEKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgIG5lZWRzU3R1
YkxpbmsgPSB0cnVlOwotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0
LCByZWdUMiwgcmVnVDEsIGNhY2hlZE9mZnNldCk7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfZ2V0dGVyX3N0dWIpOwotICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1Qw
KTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNh
bGwuY2FsbCgpOwotICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0g
ICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2N1c3RvbV9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihwcm90b09iamVjdCkpOwotICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVy
KCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbVB0cihjb25zdF9jYXN0PElkZW50aWZpZXIqPigmaWRlbnQpKSk7Ci0gICAgICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwg
cmVnVDEsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwotICAgIAotICAgIEp1bXAgc3VjY2VzcyA9IGp1
bXAoKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2Nv
ZGVCbG9jayk7Ci0gICAgCi0gICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5r
IHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5l
LgotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5jb2xkUGF0aEJlZ2luKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIHNs
b3dDYXNlQmVnaW4pOwotICAgIGlmIChmYWlsdXJlQ2FzZXMyLmlzU2V0KCkpCi0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgCi0gICAg
Ly8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9p
bnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7Ci0KLSAgICBpZiAobmVl
ZHNTdHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3Ig
aXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxs
IGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklU
U3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1
ZmZlciwKLSAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxv
Y2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5l
eGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAotICAgICAgICBtX2NvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1YkxpbmspOwotICAgIAotICAg
IC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBw
YXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0
aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25j
ZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwotfQotCi0KLXZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUdldEJ5SWRTZWxmTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLCBpbnQgY3Vy
cmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQot
ewotICAgIC8vIHJlZ1QwIGhvbGRzIGEgSlNDZWxsKgotICAgIEp1bXAgZmFpbHVyZUNhc2UgPSBj
aGVja1N0cnVjdHVyZShyZWdUMCwgc3RydWN0dXJlKTsKLSAgICBib29sIG5lZWRzU3R1Ykxpbmsg
PSBmYWxzZTsKLSAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVHZXR0ZXIoKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAg
Y29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMCwgcmVnVDIsIHJlZ1QxLCBjYWNoZWRPZmZzZXQp
OwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dl
dHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgaWYgKHNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsK
LSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9jdXN0
b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3Rv
bUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkpOwot
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5j
YWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwotICAgICAgICBj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7
Ci0gICAgfQotCi0gICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBpZiAobmVlZHNT
dHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRl
ciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAgICAgIH0KLSAgICB9ICAg
IAotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0
aW5lOjphc0NvZGVQdHIocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAt
IDFdLnN0dWJSb3V0aW5lKSk7Ci0gICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKLSAgICAgICAgbGFz
dFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
LXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKLSAgICAKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlLCBsYXN0UHJvdG9CZWdpbik7Ci0gICAgCi0g
ICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEg
cG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7Ci0KLSAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0g
ICAgICAgIEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAg
ICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHNlbGYgbGlzdCBzdHViIGZvciAlcywgcmV0dXJuIHBv
aW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCks
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpLAotICAgICAgICAqbV92bSwKLSAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLAotICAgICAgICBuZWVkc1N0dWJMaW5rKTsKLQotICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV92bSwgbV9jb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0gICAgCi0g
ICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90
IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9j
YXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwot
fQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5
cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgLy8gcmVnVDAgaG9sZHMgYSBKU0NlbGwqCi0gICAgCi0g
ICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlmIHRoaXMgc3R1
YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVyZSB0aGF0IGlz
Ci0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxh
dGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHBy
b3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZy
YW1lKSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQg
U3RydWN0dXJlLgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKHJlZ1Qw
LCBzdHJ1Y3R1cmUpOwotICAgIAotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3Mg
U3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2socHJvdG9PYmplY3QsIHByb3RvdHlwZVN0cnVjdHVyZSwg
c3R1YkluZm8sIHJlZ1QzKTsKLSAgICAKLSAgICBib29sIG5lZWRzU3R1YkxpbmsgPSBmYWxzZTsK
LSAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0
ZXIoKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgY29tcGlsZUdl
dERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDIsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwot
ICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dldHRl
cl9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgaWYgKHNsb3Qu
aXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAg
ICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9jdXN0b21f
c3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIocHJvdG9P
YmplY3QpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5j
dGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAg
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlm
aWVyKj4oJmlkZW50KSkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1t
UHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwot
ICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaXNEaXJlY3Qg
PSB0cnVlOwotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdU
MSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7Ci0gICAgfQotICAgIAotICAgIEp1bXAgc3VjY2VzcyA9
IGp1bXAoKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBt
X2NvZGVCbG9jayk7Ci0gICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKLSAgICAgICAgZm9yIChWZWN0
b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9jYWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+dG8pCi0gICAg
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhpdGVyLT5mcm9tLCBGdW5jdGlvblB0cihpdGVy
LT50bykpOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRp
b24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNh
c2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90eXBlU3RydWN0dXJl
cy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwotICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwotICAgIGlmIChmYWlsdXJlQ2Fz
ZXMyLmlzU2V0KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgbGFz
dFByb3RvQmVnaW4pOwotICAgIAotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhl
IGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8g
ZGVzdCBmb3IgdXMuCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkpOwotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUg
PSBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJvdG8g
bGlzdCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxB
dE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUu
Z2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV92bSwKLSAg
ICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICBuZWVkc1N0dWJM
aW5rKTsKLQotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQo
Y2FsbEZyYW1lLT52bSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0
aW5lLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOwotICAgIAotICAg
IC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBw
YXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0
aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLX0K
LQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBl
U3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIC8vIHJlZ1QwIGhvbGRzIGEgSlNDZWxsKgotICAg
IEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgSnVtcExpc3QgYnVja2V0c09mRmFpbDsKLSAgICAK
LSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0g
ICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUocmVnVDAsIHN0cnVjdHVyZSkp
OwotICAgIAotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgIEpTT2JqZWN0
KiBwcm90b09iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyAr
K2ksICsraXQpIHsKLSAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUg
PSBpdC0+Z2V0KCk7Ci0gICAgICAgIHRlc3RQcm90b3R5cGUocHJvdG9PYmplY3QsIGJ1Y2tldHNP
ZkZhaWwsIHN0dWJJbmZvKTsKLSAgICB9Ci0gICAgQVNTRVJUKHByb3RvT2JqZWN0KTsKLSAgICAK
LSAgICBib29sIG5lZWRzU3R1YkxpbmsgPSBmYWxzZTsKLSAgICBib29sIGlzRGlyZWN0ID0gZmFs
c2U7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgewotICAgICAgICBuZWVkc1N0
dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVj
dCwgcmVnVDIsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdU
MCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJD
YWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewot
ICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpKTsKLSAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRl
cigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwotICAgICAgICBjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7
Ci0gICAgfQotCi0gICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBpZiAobmVlZHNT
dHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRl
ciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2Vz
IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6
OmFzQ29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0
dWJSb3V0aW5lKSk7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBs
YXN0UHJvdG9CZWdpbik7Ci0gICAgCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
cHV0UmVzdWx0KSk7Ci0gICAgCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICBGSU5BTElaRV9DT0RFKAotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBjaGFp
biBsaXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRv
Q1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAot
ICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1
YkxpbmspOwotICAgIAotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0
aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+dm0oKSwgbV9jb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwot
ICAgIAotICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4g
dGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAg
anVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgLy8gcmVn
VDAgaG9sZHMgYSBKU0NlbGwqCi0gICAgQVNTRVJUKGNvdW50KTsKLSAgICAKLSAgICBKdW1wTGlz
dCBidWNrZXRzT2ZGYWlsOwotICAgIAotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2Yg
dGhlIHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVj
dHVyZShyZWdUMCwgc3RydWN0dXJlKSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0
dXJlID0gc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWlu
LT5oZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBwcm90b09iamVjdCA9
IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsK
LSAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgdGVzdFByb3RvdHlw
ZShwcm90b09iamVjdCwgYnVja2V0c09mRmFpbCwgc3R1YkluZm8pOwotICAgIH0KLSAgICBBU1NF
UlQocHJvdG9PYmplY3QpOwotICAgIAotICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOwot
ICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgbmVlZHNTdHViTGlu
ayA9IHRydWU7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJl
Z1QyLCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX2dldF9ieV9pZF9nZXR0ZXJfc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwot
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5j
YWxsKCk7Ci0gICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAg
ICAgbmVlZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSk7Ci0gICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmllcio+KCZpZGVudCkpKTsKLSAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAg
IH0gZWxzZQotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdU
MSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7Ci0gICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsK
LSAgICBpZiAobmVlZHNTdHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3Jk
Pjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgp
OyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRo
ZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFpbCwgc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29s
ZFBhdGhCZWdpbikpOwotICAgIAotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhl
IGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8g
ZGVzdCBmb3IgdXMuCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkpOwotICAgIAotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBz
byB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpF
X0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiQmFzZWxpbmUg
Z2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAg
ICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAg
ICptX3ZtLAotICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAg
IG5lZWRzU3R1YkxpbmspOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5l
OwotICAgIAotICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1
bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKLSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBv
bmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICByZXBh
dGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25Q
dHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7Ci19Ci0KIHZvaWQgSklUOjpjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCByZXN1bHRUYWcsIFJl
Z2lzdGVySUQgcmVzdWx0UGF5bG9hZCwgUmVnaXN0ZXJJRCBvZmZzZXQsIEZpbmFsT2JqZWN0TW9k
ZSBmaW5hbE9iamVjdE1vZGUpCiB7CiAgICAgQVNTRVJUKHNpemVvZihKU1ZhbHVlKSA9PSA4KTsK
QEAgLTEyNzAsOCArODI1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KElucwogICAgICAgICByZXR1cm47CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0aW9u
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9u
KFdpdGhQcnBmaWxlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0
aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3QqIG9w
ZXJhbmRTbG90LCBpbnQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzNywyMiArNTM3LDI1IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJh
c2UKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgocmVnVDEs
IHJlZ1QyLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICB9CiAKLSAgICBCRUdJTl9VTklOVEVSUlVQ
VEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgpOwotCi0gICAgTGFiZWwgaG90UGF0
aEJlZ2luKHRoaXMpOwotCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAg
ICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CisgICAgUGF0Y2hhYmxlSnVtcCBzdHJ1
Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVU
b0NvbXBhcmUsCisgICAgICAgIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
dW51c2VkUG9pbnRlcikpKTsKKyAgICAKICAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7
Ci0KLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVy
dGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QwKTsKLSAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsID0gbG9hZDY0
V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlk
RGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKLQotICAgIExhYmVsIGRvbmUodGhpcyk7Ci0KLSAgICBF
TkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoKTsKLQotICAg
IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFByb3BlcnR5U3R1YkNvbXBp
bGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJHZXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBob3RQYXRo
QmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssIHByb3BlcnR5U3RvcmFn
ZUxvYWQsIGRpc3BsYWNlbWVudExhYmVsLCBkb25lKSk7CisgICAgCisgICAgQ29udmVydGlibGVM
b2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9CisgICAgICAgIGNvbnZlcnRpYmxlTG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Cisg
ICAgCisgICAgRGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbG9hZDY0V2l0aENvbXBh
Y3RBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAgIEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJ
ZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7
CisgICAgCisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCisgICAg
ICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygKKyAgICAgICAgICAgIFByb3BlcnR5U3R1
YkdldEJ5SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJl
Q2hlY2ssCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBsb2FkV2l0aFBhdGNoLCBk
b25lKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTU2MSwzMiArNTY0LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
SW5zdHJ1Y3QKICAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAKLSAgICBjb21waWxlR2V0
QnlJZFNsb3dDYXNlKHJlc3VsdFZSZWcsIGJhc2VWUmVnLCBpZGVudCwgaXRlcik7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdUNCk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlR2V0QnlJ
ZFNsb3dDYXNlKGludCByZXN1bHRWUmVnLCBpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIC8v
IEFzIGZvciB0aGUgaG90IHBhdGggb2YgZ2V0X2J5X2lkLCBhYm92ZSwgd2UgZW5zdXJlIHRoYXQg
d2UgY2FuIHVzZSBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgb2Zmc2V0Ci0gICAgLy8gc28gdGhh
dCB3ZSBvbmx5IG5lZWQgdHJhY2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNvZGUg
LSB3ZSB0cmFjayBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uCi0gICAgLy8gb2YgdGhlIGNhbGwg
KHdoaWNoIHdlIGNhbiB1c2UgdG8gbG9vayB1cCB0aGUgcGF0Y2ggaW5mb3JtYXRpb24pLCBidXQg
c2hvdWxkIGEgYXJyYXktbGVuZ3RoIG9yCi0gICAgLy8gcHJvdG90eXBlIGFjY2VzcyB0cmFtcG9s
aW5lIGZhaWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBUbyBkbyBzbyB3ZSBj
YW4gc3VidHJhY3QgYmFjawotICAgIC8vIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBjYWxsIHRvIHRo
ZSBoZWFkIG9mIHRoZSBzbG93IGNhc2UuCi0KICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
dGVyLCBiYXNlVlJlZyk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgQkVHSU5fVU5J
TlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSk7Ci0KLSAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9nZXRfYnlfaWQpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGlkZW50KSk7Ci0gICAgQ2FsbCBjYWxs
ID0gc3R1YkNhbGwuY2FsbChyZXN1bHRWUmVnKTsKLQotICAgIEVORF9VTklOVEVSUlVQVEVEX1NF
UVVFTkNFKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKKyAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKFdpdGhQcm9m
aWxlLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIHJlZ1QwLCBpZGVudC0+
aW1wbCgpKTsKIAotICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3
aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4KICAgICBtX3Byb3BlcnR5
QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4Kytd
LnNsb3dDYXNlSW5mbyhjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtNjkzLDQyOCArNjc3
LDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNPYmplYwogICAgIGxvYWQ2
NChBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0KTsKIH0KIAotdm9pZCBKSVQ6OnBhdGNo
R2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBt
b3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMu
Ci0gICAgLy8gU2hvdWxkIHByb2JhYmx5IGdvIHRvIGN0aV9vcF9nZXRfYnlfaWRfZmFpbCwgYnV0
IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCi0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7Ci0KLSAgICAvLyBQYXRjaCB0aGUgb2Zm
c2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVuIHBhdGNoIHRoZSBT
dHJ1Y3R1cmUgdG8gbG9vayBmb3IuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsUHRyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2Vs
aW5lLnUuZ2V0LnN0cnVjdHVyZVRvQ29tcGFyZSksIHN0cnVjdHVyZSk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5zZXRMb2FkSW5zdHJ1Y3Rpb25Jc0FjdGl2ZShzdHViSW5mby0+aG90UGF0aEJlZ2luLmNv
bnZlcnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wcm9w
ZXJ0eVN0b3JhZ2VMb2FkKSwgaXNPdXRPZkxpbmVPZmZzZXQoY2FjaGVkT2Zmc2V0KSk7Ci0gICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1lbnRM
YWJlbCksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShjYWNoZWRPZmZzZXQpKTsKLX0K
LQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gJm1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLQotICAgIC8vIENo
ZWNrIGVheCBpcyBhbiBhcnJheQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihJc0FycmF5KSk7Ci0gICAgSnVtcCBm
YWlsdXJlQ2FzZXMyID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSW5k
ZXhpbmdTaGFwZU1hc2spKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxl
bmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgSnVtcCBmYWlsdXJl
Q2FzZXMzID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMCkpOwotCi0g
ICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwotICAgIEp1bXAg
c3VjY2VzcyA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRo
aXMsIG1fY29kZUJsb2NrKTsKLQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8g
bGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91
dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQuY29sZFBhdGhCZWdpbik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMx
LCBzbG93Q2FzZUJlZ2luKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIHNs
b3dDYXNlQmVnaW4pOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMywgc2xvd0Nh
c2VCZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQp
KTsKLQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdp
bGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNsaW5l
IEpJVCBnZXRfYnlfaWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAi
LAotICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLAotICAgICAgICAg
ICAgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKLQotICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJh
Y2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlv
bkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1v
cmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4K
LSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Ci19Ci0KLXZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlP
ZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQotewotICAgIC8vIFRoZSBwcm90b3R5cGUgb2JqZWN0IGRlZmluaXRl
bHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxvY2sgaXMgcmVmZXJlbmNp
bmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcwotICAgIC8vIHJlZmVyZW5jaW5nIHRoZSBwcm90b3R5cGUg
b2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRpdmVseSBsb2FkIGl0J3MgdGFibGUgbmljZSBhbmQgZWFy
bHkhKQotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+cHJv
dG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9i
amVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGNo
ZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHByb3Rv
dHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAgIEp1bXAgZmFpbHVy
ZUNhc2VzMiA9IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhwcm90b09iamVjdCwgcHJvdG90
eXBlU3RydWN0dXJlLCBzdHViSW5mbywgcmVnVDMpOwotCi0gICAgYm9vbCBuZWVkc1N0dWJMaW5r
ID0gZmFsc2U7Ci0gICAgCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5IQotICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7Ci0gICAg
ICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QxLCBjYWNoZWRPZmZz
ZXQpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lk
X2dldHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAg
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRh
YmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgaWYg
KHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1
ZTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9j
dXN0b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIo
cHJvdG9PYmplY3QpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0
cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7
Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJ
ZGVudGlmaWVyKj4oJmlkZW50KSkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbXBp
bGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwotICAg
IEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3Zt
LCB0aGlzLCBtX2NvZGVCbG9jayk7Ci0KLSAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9u
IHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNl
IHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJhc2Vs
aW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2VzMSwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgaWYgKGZhaWx1cmVDYXNlczIuaXNTZXQoKSkKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBzbG93Q2FzZUJlZ2luKTsKLQot
ICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBh
IHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCi0gICAgcGF0
Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwotCi0gICAgaWYg
KG5lZWRzU3R1YkxpbmspIHsKLSAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+dG8pCi0gICAgICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhpdGVyLT5mcm9tLCBGdW5jdGlvblB0cihpdGVyLT50bykpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdp
bGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVhdGVK
SVRTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAgICAgICAgICAgIHBhdGNo
QnVmZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIHN0dWIg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9j
b2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAot
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAotICAgICAgICBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1YkxpbmspOwotCi0g
ICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90
IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9j
YXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2Ug
LSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihj
dGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFNlbGZMaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMsIGludCBjdXJyZW50
SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCi17Ci0g
ICAgSnVtcCBmYWlsdXJlQ2FzZSA9IGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpOwot
ICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOwotICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxz
ZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgIG5lZWRzU3R1
YkxpbmsgPSB0cnVlOwotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdU
MSwgY2FjaGVkT2Zmc2V0KTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X29wX2dldF9ieV9pZF9nZXR0ZXJfc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0g
ICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgbmVlZHNT
dHViTGluayA9IHRydWU7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChy
ZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoRnVuY3Rp
b25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmll
cio+KCZpZGVudCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0
cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAg
ICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlzRGlyZWN0ID0g
dHJ1ZTsKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMCwgcmVnVDAsIGNhY2hl
ZE9mZnNldCk7Ci0gICAgfQotICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLQotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLQotICAgIGlmIChu
ZWVkc1N0dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRv
ciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVy
ZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJS
b3V0aW5lOjphc0NvZGVQdHIocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lKSk7Ci0gICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKLSAgICAgICAg
bGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKLQotICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2UsIGxhc3RQcm90b0JlZ2luKTsKLQotICAgIC8v
IE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50
IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCi0gICAgcGF0Y2hCdWZm
ZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwotCi0gICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViQ29kZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICBG
SU5BTElaRV9DT0RFKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkJh
c2VsaW5lIEpJVCBnZXRfYnlfaWQgbGlzdCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwK
LSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
LAotICAgICAgICAqbV92bSwKLSAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAotICAgICAgICBuZWVkc1N0dWJMaW5rKTsKLQotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV92bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0KLSAgICAvLyBGaW5hbGx5IHBh
dGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhl
cmUgaW5zdGVhZC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5zdHJ1Y3R1cmVDaGVjayk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29k
ZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJDb2RlLT5jb2RlKCkuY29kZSgpKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBj
dXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0
cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsK
LSAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5IGV4aXN0cyAoaWYgdGhpcyBz
dHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5nIGEgU3RydWN0dXJlIHRoYXQg
aXMKLSAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9iamVjdCAtIGxldCdzIHNwZWN1
bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5ISkKLSAgICBKU09iamVjdCog
cHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxs
RnJhbWUpKTsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0
cnVjdHVyZS4KLSAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBjaGVja1N0cnVjdHVyZShyZWdUMCwg
c3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0
dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBhZGRTdHJ1Y3R1
cmVUcmFuc2l0aW9uQ2hlY2socHJvdG9PYmplY3QsIHByb3RvdHlwZVN0cnVjdHVyZSwgc3R1Yklu
Zm8sIHJlZ1QzKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEKLSAgICBib29sIG5lZWRzU3R1
YkxpbmsgPSBmYWxzZTsKLSAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVHZXR0ZXIoKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAg
ICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIGNhY2hlZE9m
ZnNldCk7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlf
aWRfZ2V0dGVyX3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0g
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0
cnVlOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lk
X2N1c3RvbV9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0
cihwcm90b09iamVjdCkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1t
UHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjb25zdF9jYXN0
PElkZW50aWZpZXIqPigmaWRlbnQpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
c0RpcmVjdCA9IHRydWU7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmpl
Y3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwotICAgIH0KLQotICAgIEp1bXAgc3VjY2VzcyA9IGp1
bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJs
b2NrKTsKLQotICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9yPENh
bGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2Fs
bHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8p
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2Nh
dGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90eXBlU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwotICAgIGlmIChmYWlsdXJlQ2FzZXMy
LmlzU2V0KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgbGFzdFBy
b3RvQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBh
dGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZv
ciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0
KSk7Ci0KLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJDb2RlID0gY3JlYXRlSklUU3R1
YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZl
ciwKLSAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9j
b2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAot
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAotICAgICAgICBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1YkxpbmspOwotICAg
IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fdm0sIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBl
U3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0KLSAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRv
IHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAg
ICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVj
ayk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJD
b2RlLT5jb2RlKCkuY29kZSgpKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVy
dHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBBU1NF
UlQoY291bnQpOwotICAgIEp1bXBMaXN0IGJ1Y2tldHNPZkZhaWw7Ci0KLSAgICAvLyBDaGVjayBl
YXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgSnVtcCBiYXNlT2Jq
ZWN0Q2hlY2sgPSBjaGVja1N0cnVjdHVyZShyZWdUMCwgc3RydWN0dXJlKTsKLSAgICBidWNrZXRz
T2ZGYWlsLmFwcGVuZChiYXNlT2JqZWN0Q2hlY2spOwotCi0gICAgU3RydWN0dXJlKiBjdXJyU3Ry
dWN0dXJlID0gc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNo
YWluLT5oZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBwcm90b09iamVj
dCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUp
KTsKLSAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgdGVzdFByb3Rv
dHlwZShwcm90b09iamVjdCwgYnVja2V0c09mRmFpbCwgc3R1YkluZm8pOwotICAgIH0KLSAgICBB
U1NFUlQocHJvdG9PYmplY3QpOwotICAgIAotICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNl
OwotICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdl
dHRlcigpKSB7Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsKLSAgICAg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9nZXR0ZXJfc3R1
Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlIGlmIChzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIp
OwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0
KSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoRnVuY3Rpb25Q
dHIoc2xvdC5jdXN0b21HZXR0ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmllcio+
KCZpZGVudCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihz
dHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAg
ICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlzRGlyZWN0ID0gdHJ1
ZTsKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNh
Y2hlZE9mZnNldCk7Ci0gICAgfQotICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLQotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICAKLSAg
ICBpZiAobmVlZHNTdHViTGluaykgewotICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6
aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhl
IGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0g
ICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChK
SVRTdHViUm91dGluZTo6YXNDb2RlUHRyKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVu
dEluZGV4IC0gMV0uc3R1YlJvdXRpbmUpKTsKLQotICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0
c09mRmFpbCwgbGFzdFByb3RvQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KSk7Ci0KLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0NPREUoCi0gICAg
ICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9p
ZCBjaGFpbiBsaXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAg
ICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFz
ZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICpt
X3ZtLAotICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5l
ZWRzU3R1YkxpbmspOwotCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNv
IHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT52bSgpLCBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7
Ci0KLSAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRo
ZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1
bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7Ci0gICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIEFTU0VSVChj
b3VudCk7Ci0KLSAgICBKdW1wTGlzdCBidWNrZXRzT2ZGYWlsOwotCi0gICAgLy8gQ2hlY2sgZWF4
IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgotICAgIGJ1Y2tldHNPZkZhaWwu
YXBwZW5kKGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpKTsKLQotICAgIFN0cnVjdHVy
ZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAg
cHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAo
Y2FsbEZyYW1lKSk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAg
IHRlc3RQcm90b3R5cGUocHJvdG9PYmplY3QsIGJ1Y2tldHNPZkZhaWwsIHN0dWJJbmZvKTsKLSAg
ICB9Ci0gICAgQVNTRVJUKHByb3RvT2JqZWN0KTsKLQotICAgIGJvb2wgbmVlZHNTdHViTGluayA9
IGZhbHNlOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgbmVl
ZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9P
YmplY3QsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQocmVnVDEpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7
Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxs
LmNhbGwoKTsKLSAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAg
ICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpKTsKLSAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigp
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkpOwotICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJl
Z1QwLCBjYWNoZWRPZmZzZXQpOwotICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLQotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLQotICAgIGlm
IChuZWVkc1N0dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVy
YXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRl
cikgewotICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFp
bHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBw
YXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRo
QmVnaW4pKTsKLQotICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRj
aCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3Ig
dXMuCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkp
OwotCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2ls
bCBiZSBkZWxldGVkIGxhdGVyLgotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lk
IGNoYWluIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRv
Q1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAot
ICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1
YkxpbmspOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwotCi0gICAg
Ly8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotCi0g
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBn
byB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtD
YWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlf
aWRfcHJvdG9fbGlzdCkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKQEAgLTEyNDMsOCArODA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKElucwogICAgICAgICByZXR1cm47CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudElu
c3RydWN0aW9uKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHJlZ1Q0KTsKKyAgICBjYWxs
T3BlcmF0aW9uKFdpdGhQcm9maWxlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVu
dEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50
cHRyX3QqIG9wZXJhbmRTbG90LCBpbnQgdmFsdWUpCkBAIC0xMzIyLDE0ICs4ODMsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0CiAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMs
IFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKIH0KIAotdm9pZCBKSVQ6OnJlc2V0UGF0
Y2hHZXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLCBjdGlfb3BfZ2V0X2J5X2lkKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChzdHViSW5mby0+
cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlVG9Db21wYXJlKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50TGFiZWwpLCAwKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+
cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spLCBzdHViSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5j
b2xkUGF0aEJlZ2luKSk7Ci19Ci0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBS
ZWdpc3RlcklEIHNjcmF0Y2gsIFJlZ2lzdGVySUQgc2NyYXRjaDIsIFdyaXRlQmFycmllck1vZGUg
bW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTA2ICsxMjMs
NiBAQCB2b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9uCiAjZW5kaWYKIH0K
IAotTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCi17
Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAg
IAotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVj
ayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRv
ZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KLQotICAgIC8vIEZJWE1FOiBDYWNo
ZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXND
ZWxsKCkpIHsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywg
cmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVk0qIHZtID0gJmNhbGxGcmFtZS0+dm0o
KTsKLQotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gY2Fs
bEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIEpJVDo6Y29tcGlsZVBh
dGNoR2V0QXJyYXlMZW5ndGgoY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjb2RlQmxvY2ssIHJl
dHVybkFkZHJlc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChpc0pT
U3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNhbGxGcmFtZS0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkgewotICAgICAgICAvLyBUaGUgdHJhZGVvZmYgb2YgY29tcGlsaW5nIGFu
IHBhdGNoZWQgaW5saW5lIHN0cmluZyBsZW5ndGggYWNjZXNzIHJvdXRpbmUgZG9lcyBub3Qgc2Vl
bQotICAgICAgICAvLyB0byBwYXkgb2ZmLCBzbyB3ZSBjdXJyZW50bHkgb25seSBkbyB0aGlzIGZv
ciBhcnJheXMuCi0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ss
IHJldHVybkFkZHJlc3MsIHZtLT5nZXRDVElTdHViKHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5l
cmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBVbmNhY2hl
YWJsZTogZ2l2ZSB1cC4KLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkgewotICAgICAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYzsKLSAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVu
Y3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotCi0gICAgaWYgKHN0
cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpIHsKLSAgICAgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWM7Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9v
cF9nZXRfYnlfaWRfZ2VuZXJpYykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
Q2FjaGUgaGl0OiBTcGVjaWFsaXplIGluc3RydWN0aW9uIGFuZCByZWYgU3RydWN0dXJlcy4KLQot
ICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgICAgIGlm
ICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgIU1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQ
dHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpKQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV9pZF9zZWxmX2ZhaWwpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKSVQ6OnBhdGNo
R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCByZXR1cm5BZGRyZXNzKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJ
ZFNlbGYoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1
Y3R1cmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYzsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV9pZF9nZW5lcmljKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc2xvdC5z
bG90QmFzZSgpID09IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpIHsK
LSAgICAgICAgSlNPYmplY3QqIHNsb3RCYXNlT2JqZWN0ID0gYXNPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKTsKLSAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNs
b3QoKSkgewotICAgICAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5
X2lkX2dlbmVyaWM7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29k
ZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2dlbmVy
aWMpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Ly8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwgaXQncyBhIGdv
b2QgYmV0IHRoYXQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgZGlj
dGlvbmFyeS4KLSAgICAgICAgaWYgKHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0
aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgIHNsb3RCYXNlT2JqZWN0LT5mbGF0dGVuRGljdGlvbmFy
eU9iamVjdChjYWxsRnJhbWUtPnZtKCkpOwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdEJhc2VP
YmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoY2FsbEZyYW1lLT52bSgpLCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90byhj
YWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwg
c2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSk7Ci0K
LSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKLSAgICAgICAgQVNT
RVJUKCFzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKTsKLSAgICAg
ICAgSklUOjpjb21waWxlR2V0QnlJZFByb3RvKGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY2Fs
bEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5z
dHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQsIHJldHVybkFkZHJlc3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKLSAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVD
aGFpbkZvckNoYWluQWNjZXNzKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCks
IHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlw
ZUNoYWluKSB7Ci0gICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9p
ZF9nZW5lcmljOwotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2Nr
LCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVD
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICBzdHViSW5m
by0+aW5pdEdldEJ5SWRDaGFpbihjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSk7Ci0gICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluKGNhbGxGcmFtZS0+c2Nv
cGUoKS0+dm0oKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZUNoYWluLCBjb3VudCwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQsIHJldHVybkFk
ZHJlc3MpOwotfQotCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogCiBleHRlcm4gIkMiIHsKQEAgLTM2
OCw2ICsyNjgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCB0aHJvd0V4Y2VwCiAj
ZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgcnR5cGUgSklUX1NUVUIgY3Rp
XyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2VuZGlmCiAKKy8vIEZJWE1FOiBUaGlzIGlz
IHN0aWxsIHVzZWQgYnkgZ2V0X2FyZ3VtZW50c19sZW5ndGgsIGJ1dCBvdGhlciB0aGFuIHRoYXQg
aXQncyBkZWFkLgogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9i
eV9pZF9nZW5lcmljKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsK
QEAgLTM4MywyNzAgKzI4NCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVl
LCBvcF8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfaWQpCi17Ci0gICAgU1RVQl9J
TklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
c3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1l
LmFyZ3NbMV0uaWRlbnRpZmllcigpOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGFj
a0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gJmNvZGVCbG9jay0+Z2V0U3R1YkluZm8oU1RVQl9SRVRVUk5fQUREUkVTUyk7Ci0g
ICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFy
Z3NbMF0uanNWYWx1ZSgpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwot
ICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwotCi0gICAgaWYgKCFzdHViSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgc3R1YkluZm8tPnNl
dFNlZW4oKTsKLSAgICBlbHNlCi0gICAgICAgIHRyeUNhY2hlR2V0QnlJRChjYWxsRnJhbWUsIGNv
ZGVCbG9jaywgU1RVQl9SRVRVUk5fQUREUkVTUywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1
YkluZm8pOwotCi0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF9nZXRfYnlfaWRfc2VsZl9mYWlsKQotewotICAgIFNUVUJfSU5JVF9TVEFD
S19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tG
cmFtZS5jYWxsRnJhbWU7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3Nb
MV0uaWRlbnRpZmllcigpOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9ICZjb2RlQmxv
Y2stPmdldFN0dWJJbmZvKFNUVUJfUkVUVVJOX0FERFJFU1MpOwotICAgIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsK
LQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsK
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
YmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNj
ZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLQotICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKLQotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgICYm
IHNsb3QuaXNDYWNoZWFibGUoKQotICAgICAgICAmJiAhYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKQotICAgICAgICAmJiBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0KLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGludCBsaXN0SW5kZXgg
PSAxOwotCi0gICAgICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQp
Ci0gICAgICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmKGNhbGxGcmFtZS0+dm0oKSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKSk7Ci0KLSAgICAgICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfc2VsZikgewotICAgICAgICAgICAgQVNTRVJUKCFzdHViSW5mby0+c3R1YlJvdXRpbmUp
OwotICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIDAsIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCksIHRydWUpOwotICAgICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZkxpc3Qo
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlz
dC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8tPnUuZ2V0
QnlJZFNlbGZMaXN0Lmxpc3RTaXplOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsaXN0SW5kZXgg
PCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKLSAgICAgICAgICAgIHN0dWJJbmZvLT51
LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSsrOwotICAgICAgICAgICAgSklUOjpjb21waWxlR2V0
QnlJZFNlbGZMaXN0KGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY29kZUJsb2NrLCBzdHViSW5m
bywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIGJhc2VWYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCksIGlkZW50LCBzbG90LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLQotICAg
ICAgICAgICAgaWYgKGxpc3RJbmRleCA9PSAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MSkpCi0gICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9j
aywgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9nZW5l
cmljKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYykpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKLX0KLQotc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdCogZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChWTSYgdm0sIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGludCYgbGlz
dEluZGV4KQotewotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBl
U3RydWN0dXJlTGlzdCA9IDA7Ci0gICAgbGlzdEluZGV4ID0gMTsKLQotICAgIHN3aXRjaCAoc3R1
YkluZm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86Ci0g
ICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KHZtLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5n
ZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJ
ZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZS5jbGVhcigpOwotICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90
b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlz
dCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qodm0sIG93bmVyLCBzdHViSW5m
by0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOwot
ICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUuY2xlYXIoKTsKLSAgICAgICAgc3R1YkluZm8t
PmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKLSAgICAgICAg
cHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRQcm90b0xpc3Quc3Ry
dWN0dXJlTGlzdDsKLSAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8tPnUuZ2V0QnlJZFByb3Rv
TGlzdC5saXN0U2l6ZTsKLSAgICAgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSkKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90b0xpc3QubGlz
dFNpemUrKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGxpc3RJbmRleCA8
PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBwcm90b3R5cGVTdHJ1
Y3R1cmVMaXN0OwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3Bf
Z2V0X2J5X2lkX2dldHRlcl9zdHViKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbEdldHRlcihjYWxsRnJhbWUsIHN0YWNrRnJhbWUu
YXJnc1sxXS5qc09iamVjdCgpLCBzdGFja0ZyYW1lLmFyZ3NbMF0uanNPYmplY3QoKSk7Ci0gICAg
aWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVyblRvVGhyb3dUcmFt
cG9saW5lKCZjYWxsRnJhbWUtPnZtKCksIHN0YWNrRnJhbWUuYXJnc1syXS5yZXR1cm5BZGRyZXNz
KCksIFNUVUJfUkVUVVJOX0FERFJFU1MpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0
X2J5X2lkX2N1c3RvbV9zdHViKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0Zy
YW1lKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwot
ICAgIEpTT2JqZWN0KiBzbG90QmFzZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc09iamVjdCgpOwot
ICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHN0YWNrRnJhbWUuYXJnc1sxXS5hc1BvaW50ZXIp
OwotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhY2tGcmFtZS5hcmdzWzJdLmlkZW50
aWZpZXIoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldHRlcihjYWxsRnJhbWUsIHNsb3RCYXNl
LCBpZGVudCk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVyblRvVGhyb3dUcmFtcG9saW5lKCZjYWxsRnJhbWUtPnZtKCksIHN0YWNrRnJhbWUuYXJnc1sz
XS5yZXR1cm5BZGRyZXNzKCksIFNUVUJfUkVUVVJOX0FERFJFU1MpOwotICAgIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wX2dldF9ieV9pZF9wcm90b19saXN0KQotewotICAgIFNUVUJfSU5JVF9T
VEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3Rh
Y2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lID0g
c3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKTsKLQotICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSAmY29kZUJsb2NrLT5nZXRTdHViSW5mbyhTVFVCX1JFVFVSTl9BRERSRVNTKTsKLSAg
ICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJn
c1swXS5qc1ZhbHVlKCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwotCi0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotCi0gICAgaWYgKGFjY2Vzc1R5cGUg
IT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpCi0gICAgICAg
IHx8ICFiYXNlVmFsdWUuaXNDZWxsKCkKLSAgICAgICAgfHwgIXNsb3QuaXNDYWNoZWFibGUoKQot
ICAgICAgICB8fCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnko
KQotICAgICAgICB8fCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygp
LnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpKSB7Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIH0KLQotICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0KLSAgICBKU09iamVjdCog
c2xvdEJhc2VPYmplY3QgPSBhc09iamVjdChzbG90LnNsb3RCYXNlKCkpOwotICAgIAotICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICBpZiAoc2xv
dC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKGNvZGVCbG9jaywgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV9pZF9wcm90b19mYWlsKSk7Ci0gICAgZWxzZSBpZiAoc2xvdC5zbG90QmFzZSgpID09
IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxs
RnJhbWUpKSB7Ci0gICAgICAgIEFTU0VSVCghYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KS0+aXNEaWN0aW9uYXJ5KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90
KCkpIHsKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ss
IFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9f
ZmFpbCkpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90
b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAotICAgICAgICAvLyBzaG91
bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgotICAgICAgICBpZiAoc2xvdEJhc2VP
YmplY3QtPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgc2xvdEJh
c2VPYmplY3QtPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFtZS0+dm0oKSk7Ci0gICAg
ICAgICAgICBvZmZzZXQgPSBzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmdldChjYWxsRnJh
bWUtPnZtKCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbGlzdElu
ZGV4OwotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0
cnVjdHVyZUxpc3QgPSBnZXRQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTbG90KGNhbGxG
cmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8sIGxpc3RJ
bmRleCk7Ci0gICAgICAgIGlmIChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUpIHsKLSAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5SWRQcm90b0xpc3QoY2FsbEZyYW1l
LT5zY29wZSgpLT52bSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHByb3RvdHlw
ZVN0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc3RydWN0dXJlLCBzbG90QmFzZU9iamVjdC0+c3Ry
dWN0dXJlKCksIHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0KTsKLQotICAgICAgICAgICAgaWYg
KGxpc3RJbmRleCA9PSAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCi0gICAgICAg
ICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgU1RVQl9SRVRV
Uk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0X2Z1bGwp
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHNs
b3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgICAgICBpZiAoY291bnQg
PT0gSW52YWxpZFByb3RvdHlwZUNoYWluKSB7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoY29kZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihj
dGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSk7Ci0gICAgICAg
IGludCBsaXN0SW5kZXg7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCog
cHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IGdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dFNsb3QoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
SW5mbywgbGlzdEluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChsaXN0SW5kZXggPCBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBw
cm90b0NoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihjYWxsRnJhbWUpOwotICAgICAg
ICAgICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluTGlzdChjYWxsRnJhbWUtPnNjb3BlKCktPnZt
KCksIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlz
dCwgbGlzdEluZGV4LCBzdHJ1Y3R1cmUsIHByb3RvQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5hbWUs
IHNsb3QsIG9mZnNldCk7Ci0KLSAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPT0gKFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQotICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLURFRklORV9TVFVCX0ZV
TkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKQotewot
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgc2xvdCk7
Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIG9wX2dldF9ieV9pZF9wcm90b19mYWlsKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmpzVmFsdWUoKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tG
cmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgc2xvdCk7Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBU
SU9OX0FUX0VORCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQot
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV9pZF9hcnJheV9m
YWlsKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVl
LmdldChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIo
KSwgc2xvdCk7Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkKLXsKLSAgICBTVFVCX0lOSVRf
U1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoc3RhY2tGcmFtZS5jYWxsRnJh
bWUsIHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCksIHNsb3QpOwotCi0gICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7Ci19Ci0KIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3RlYXJfb2ZmX2FjdGl2YXRp
b24pCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzAsMTYg
KzMzMCw3IEBAIGV4dGVybiAiQyIgdm9pZCBjdGlNYXNtUHJvYmVUcmFtcG9saW5lKCkKIHZvaWQg
cGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb25zKFZNKik7CiAKIGV4dGVybiAiQyIg
ewotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZChTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9n
ZXRfYnlfaWRfYXJyYXlfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
LUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RV
QiBjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9z
dHViKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9p
ZF9wcm90b19saXN0KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2Rl
ZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0X2Z1bGwoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBj
dGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2Zh
aWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRf
U1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2MCw2ICszNjAsOCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5
SUQoRXhlY1N0YXRlKiBlCiAKIHZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAg
ICAKICAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOwogICAgIGlmICghY2FjaGVkKQogICAgICAgICBy
ZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkKTsKQEAgLTU5OSw2ICs2MDEsOCBAQCBzdGF0aWMgYm9vbCB0cnlC
dWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAKIHZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQogeworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5t
X2xvY2spOworICAgIAogICAgIGJvb2wgZG9udENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5SURM
aXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7CiAgICAg
aWYgKCFkb250Q2hhbmdlQ2FsbCkKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZp
c2lvbiAxNTc0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw2NiArMjczLDYgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaAogICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5l
cmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
c3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgSlNJbnRlcmZh
Y2VKSVQgaml0KHZtKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIENoZWNrIGVh
eCBpcyBhIHN0cmluZwotICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVDYXNlczEgPSBq
aXQuZW1pdEp1bXBJZk5vdEpTQ2VsbChKU0ludGVyZmFjZUpJVDo6cmVnVDApOwotICAgIEpTSW50
ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVDYXNlczIgPSBqaXQuYnJhbmNoUHRyKAotICAgICAgICBK
U0ludGVyZmFjZUpJVDo6Tm90RXF1YWwsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKAotICAgICAg
ICAgICAgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwK
LSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodm0tPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZy
b20gdGhlIFVzdHJpbmcuCi0gICAgaml0LmxvYWQzMigKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6
OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgo
KSksCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0KLSAgICBKU0ludGVyZmFjZUpJ
VDo6SnVtcCBmYWlsdXJlQ2FzZXMzID0gaml0LmJyYW5jaDMyKAotICAgICAgICBKU0ludGVyZmFj
ZUpJVDo6TGVzc1RoYW4sIEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OlRy
dXN0ZWRJbW0zMigwKSk7Ci0KLSAgICAvLyByZWdUMCBjb250YWlucyBhIDY0IGJpdCB2YWx1ZSAo
aXMgcG9zaXRpdmUsIGlzIHplcm8gZXh0ZW5kZWQpIHNvIHdlIGRvbid0IG5lZWQgc2lnbiBleHRl
bmQgaGVyZS4KLSAgICBqaXQuZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhKU0ludGVyZmFj
ZUpJVDo6cmVnVDAsIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0gICAgCi0jZWxzZSAvLyBVU0Uo
SlNWQUxVRTY0KQotICAgIC8vIHJlZ1QwIGhvbGRzIHBheWxvYWQsIHJlZ1QxIGhvbGRzIHRhZwot
Ci0gICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZmFpbHVyZUNhc2VzMSA9IGppdC5icmFuY2gzMigK
LSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEs
Ci0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
OwotICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVDYXNlczIgPSBqaXQuYnJhbmNoUHRy
KAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6Tm90RXF1YWwsCi0gICAgICAgIEpTSW50ZXJmYWNl
SklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHZtLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxl
bmd0aCBmcm9tIHRoZSBVc3RyaW5nLgotICAgIGppdC5sb2FkMzIoCi0gICAgICAgIEpTSW50ZXJm
YWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNTdHJpbmc6Om9mZnNldE9m
TGVuZ3RoKCkpLAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwotCi0gICAgSlNJbnRl
cmZhY2VKSVQ6Okp1bXAgZmFpbHVyZUNhc2VzMyA9IGppdC5icmFuY2gzMigKLSAgICAgICAgSlNJ
bnRlcmZhY2VKSVQ6OkFib3ZlLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNlSklU
OjpUcnVzdGVkSW1tMzIoSU5UX01BWCkpOwotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpy
ZWdUMiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJ
VDo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qx
KTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCi0gICAgaml0LnJldCgpOwotICAgIAotICAg
IEpTSW50ZXJmYWNlSklUOjpDYWxsIGZhaWx1cmVDYXNlczFDYWxsID0gaml0Lm1ha2VUYWlsUmVj
dXJzaXZlQ2FsbChmYWlsdXJlQ2FzZXMxKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBmYWls
dXJlQ2FzZXMyQ2FsbCA9IGppdC5tYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoZmFpbHVyZUNhc2VzMik7
Ci0gICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZmFpbHVyZUNhc2VzM0NhbGwgPSBqaXQubWFrZVRh
aWxSZWN1cnNpdmVDYWxsKGZhaWx1cmVDYXNlczMpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIAotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZmFpbHVyZUNhc2VzMUNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRf
c3RyaW5nX2ZhaWwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczJDYWxsLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhmYWlsdXJlQ2FzZXMzQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9z
dHJpbmdfZmFpbCkpOwotICAgIAotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCAoInN0cmluZyBsZW5ndGggdHJhbXBvbGluZSIpKTsKLX0KLQogc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBuYXRpdmVGb3JHZW5lcmF0b3IoVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCiB7CiAgICAgaW50IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uID0gTmF0aXZl
RXhlY3V0YWJsZTo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTU3NDU4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1
cmVDYWxsVGh1CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRv
cihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVy
YXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGlu
ZUdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0
b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3Io
Vk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwKFZNKik7Cg==
</data>
<flag name="review"
          id="236857"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="236861"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214328</attachid>
            <date>2013-10-15 18:45:22 -0700</date>
            <delta_ts>2013-10-15 18:45:22 -0700</delta_ts>
            <desc>patch for ews</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>105816</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NDcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDEzLTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QmFzZWxpbmUgSklUIHNob3VsZCB1c2UgdGhlIERGRyBHZXRCeUlkIElDCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI4NjEKKworICAgICAgICBSZXZp
ZXdlZCBieSBPbGl2ZXIgSHVudC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbW9zdGx5IGp1c3Qg
a2lsbHMgYSB0b24gb2YgY29kZS4KKyAgICAgICAgCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGRv
ZXNuJ3QgeWV0IGRvIGFsbCBvZiB0aGUgc2ltcGxpZmljYXRpb25zIHRoYXQgY2FuIGJlIGRvbmUs
IGJ1dCBpdCBkb2VzCisgICAgICAgIGtpbGwgZGVhZCBjb2RlLiBJJ2xsIGhhdmUgYW5vdGhlciBj
aGFuZ2UgdG8gc2ltcGxpZnkgU3RydWN0dXJlU3R1YkluZm8ncyB1bmlvbnMgYW5kIHN1Y2guCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnJlc2V0U3R1YkludGVybmFsKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOjpjb3B5VG9TdHViSW5mbyk6CisgICAg
ICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVN0dWJDb21waWxhdGlvbklu
Zm86OlByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogaml0L0pJVElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OnJlcGF0Y2hHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6YnVpbGRHZXRCeUlETGlzdCk6Cisg
ICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgICogaml0L1RodW5rR2Vu
ZXJhdG9ycy5oOgorCiAyMDEzLTEwLTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0Bh
cHBsZS5jb20+CiAKICAgICAgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsIHNob3VsZG4ndCBz
dG9yZSBhIEpTQ29udGV4dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBA
CiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUU3R1YnMu
aCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBA
IC0yMzc3LDI5ICsyMzc2LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXNldFN0dWJJbnRlcm5hbChS
ZXBhdGMKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4KICAgICAgICAgZGF0YUxvZygiQ2xl
YXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICIsIHN0YXRpY19jYXN0PGludD4oc3R1YkluZm8u
YWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50ZXIodGhpcyksICIuXG4iKTsKICAgICB9Ci0K
LSAgICBzd2l0Y2ggKGppdFR5cGUoKSkgewotICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6
Ci0gICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAgICAgICBK
SVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHViSW5mbyk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNQdXRCeUlkQWNjZXNzKGFjY2Vz
c1R5cGUpKTsKLSAgICAgICAgICAgIHJlc2V0UHV0QnlJRChyZXBhdGNoQnVmZmVyLCBzdHViSW5m
byk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6
Ci0gICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAgICAgICBy
ZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwotICAgICAgICBlbHNlIGlmIChp
c1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAgICAgICAgICByZXNldFB1dEJ5SUQocmVw
YXRjaEJ1ZmZlciwgc3R1YkluZm8pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzSW5BY2Nlc3MoYWNjZXNzVHlwZSkpOwotICAgICAgICAgICAgcmVzZXRJbihy
ZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
YnJlYWs7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgp
KSk7CisgICAgCisgICAgaWYgKGlzR2V0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSkKKyAgICAgICAg
cmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAgICBlbHNlIGlmIChpc1B1
dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCisgICAgICAgIHJlc2V0UHV0QnlJRChyZXBhdGNoQnVm
ZmVyLCBzdHViSW5mbyk7CisgICAgZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5B
Y2Nlc3MoYWNjZXNzVHlwZSkpOworICAgICAgICByZXNldEluKHJlcGF0Y2hCdWZmZXIsIHN0dWJJ
bmZvKTsKICAgICB9CiAgICAgCiAgICAgc3R1YkluZm8ucmVzZXQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDU1ICs0OTIsNTIgQEAgQUxX
QVlTX0lOTElORSB2b2lkIFByb3BlcnR5U3R1YkNvbXBpbGF0aQogICAgIGluZm8uY29kZU9yaWdp
biA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7CiAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbFJldHVybkxvY2F0aW9uKTsKIAorICAgIGlu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1cmVUb0NvbXBh
cmUpLCBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1
cmVDaGVjaykpOworICAgIAorICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2Ug
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY29sZFBhdGhCZWdpbikpOworICAgIGlu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRp
b25PZihkb25lKSk7CisgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7Cisg
ICAgCisgICAgaW5mby5wYXRjaC5kZmcuYmFzZUdQUiA9IEdQUkluZm86OnJlZ1QwOworCisgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZv
OjpyZWdUMCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KSAvLyBKU1ZBTFVFIGNhc2VzCiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgaG90UGF0aEJlZ2luTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaG90UGF0
aEJlZ2luKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW5Mb2NhdGlv
bjsKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVUb0NvbXBhcmUg
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxv
Y2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlVG9Db21wYXJlKSk7Ci0gICAg
ICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2sgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlQ2hlY2spKTsKLSAgICAgICAgaW5mby5wYXRjaC5i
YXNlbGluZS51LmdldC5wcm9wZXJ0eVN0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHByb3BlcnR5U3RvcmFnZUxvYWQpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGdldERpc3BsYWNlbWVudExhYmVsKSk7Ci0jZWxzZQotICAgICAg
ICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsMSA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKLSAgICAgICAgaW5m
by5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1lbnRMYWJlbDIgPSBNYWNyb0Fzc2VtYmxl
cjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwyKSk7Ci0jZW5kaWYKLSAgICAgICAg
aW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoZG9uZSkpOwotICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQ
YXRoQmVnaW4gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtC
dWZmZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNh
bGxSZXR1cm5Mb2NhdGlvbikpOworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgaW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRp
b25PZihnZXREaXNwbGFjZW1lbnRMYWJlbCkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy52YWx1
ZUdQUiA9IEdQUkluZm86OnJlZ1QwOwogICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBQ
dXRCeUlkOgotICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsID0gTWFj
cm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihsaW5rQnVmZmVyLmxvY2F0aW9u
T2Yoc3RydWN0dXJlVG9Db21wYXJlKSwgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pOwotICAgICAg
ICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVyZUNoZWNrKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbCkpOwotI2Vsc2UKLSAgICAg
ICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbDIpKTsKLSAgICAgICAgaW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxl
cjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YocHV0RGlzcGxhY2VtZW50TGFiZWwxKSk7Ci0jZW5kaWYKLSAgICAg
ICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
aW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7Ci0g
ICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvcGVydHlTdG9yYWdlTG9hZCkpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIGluZm8ucGF0Y2guZGZnLmJhc2VHUFIgPSBHUFJJbmZvOjpyZWdUMDsK
ICAgICAgICAgaW5mby5wYXRjaC5kZmcudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQo
R1BSSW5mbzo6cmVnVDApOwogICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdU
MSk7Ci0gICAgICAgIHVzZWRSZWdpc3RlcnMuY29weUluZm8oaW5mby5wYXRjaC5kZmcudXNlZFJl
Z2lzdGVycyk7Ci0jZWxzZQotICAgICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbHNlIC8vIEpTVkFMVUUgY2FzZXMK
KyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgaW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbDIpKTsKKyAgICAgICAgaW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwxKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZn
LnZhbHVlR1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLnZhbHVl
VGFnR1BSID0gR1BSSW5mbzo6cmVnVDE7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBp
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsMikpOworICAgICAgICBpbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKICAgICAgICAgaW5mby5wYXRj
aC5kZmcudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMjsKICAgICAgICAgaW5mby5wYXRjaC5kZmcu
dmFsdWVUYWdHUFIgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVyczsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDApOwogICAg
ICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgIHVzZWRSZWdp
c3RlcnMuc2V0KEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5jb3B5SW5m
byhpbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKLSNlbmRpZgotICAgICAgICBpbmZvLnBh
dGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQor
I2VuZGlmIC8vIEpTVkFMVUUgY2FzZXMKKyAgICAKKyAgICB1c2VkUmVnaXN0ZXJzLmNvcHlJbmZv
KGluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOworICAgIGluZm8ucGF0Y2guZGZnLnJlZ2lz
dGVyc0ZsdXNoZWQgPSB0cnVlOwogfQogCiBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVD
b21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAKICAgICAgICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAotICAgICAgICAgICAgUHJv
cGVydHlTdHViR2V0QnlJZF9ULCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgaG90UGF0aEJlZ2luLAorICAgICAgICAgICAgUHJvcGVydHlTdHViR2V0QnlJZF9U
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmUsCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjaywKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLApAQCAtMTk2LDcg
KzE5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGRvbmUpCiAgICAgICAgICAgICA6IG1fdHlwZShHZXRCeUlkKQogICAgICAgICAgICAgLCBi
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICAsIGhvdFBhdGhCZWdpbiho
b3RQYXRoQmVnaW4pCiAgICAgICAgICAgICAsIHN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVU
b0NvbXBhcmUpCiAgICAgICAgICAgICAsIHN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQog
ICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFnZUxvYWQpCkBA
IC0zMTEsMzkgKzMxMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0LnByaXZh
dGVDb21waWxlQ2xvc3VyZUNhbGwoY2FsbExpbmtJbmZvLCBjYWxsZWVDb2RlQmxvY2ssIGV4cGVj
dGVkU3RydWN0dXJlLCBleHBlY3RlZEV4ZWN1dGFibGUsIGNvZGVQdHIpOwogICAgICAgICB9CiAK
LSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRQcm90byhWTSogdm0sIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1
cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFBy
b3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Y29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKHN0dWJJ
bmZvLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hlZE9m
ZnNldCwgcmV0dXJuQWRkcmVzcywgY2FsbEZyYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKLSAgICAgICAgewotICAgICAg
ICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2Rl
T2Zmc2V0ID0gc3R1YkluZm8tPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdChzdHViSW5mbywgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVzLCBjdXJyZW50SW5kZXgsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hlZE9m
ZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRQcm90
b0xpc3QoVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hl
ZE9mZnNldCkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90
b0xpc3Qoc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGN1cnJlbnRJbmRleCwgc3Ry
dWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBjYWNoZWRPZmZzZXQsIGNh
bGxGcmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRD
aGFpbkxpc3QoVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zm
c2V0IGNhY2hlZE9mZnNldCkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29k
ZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbkxpc3Qoc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGN1cnJlbnRJ
bmRleCwgc3RydWN0dXJlLCBjaGFpbiwgY291bnQsIGlkZW50LCBzbG90LCBjYWNoZWRPZmZzZXQs
IGNhbGxGcmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0
QnlJZENoYWluKFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNl
dCA9IHN0dWJJbmZvLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oc3R1YkluZm8sIHN0cnVjdHVyZSwgY2hhaW4sIGNv
dW50LCBpZGVudCwgc2xvdCwgY2FjaGVkT2Zmc2V0LCByZXR1cm5BZGRyZXNzLCBjYWxsRnJhbWUp
OwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlW
YWwoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAg
ICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKQEAgLTM3MSwyMSAr
MzM3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVD
b21waWxlQ1RJTmF0aXZlQ2FsbCh2bSwgZnVuYyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgdm9pZCByZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1Yklu
Zm8qKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNl
dCwgUmV0dXJuQWRkcmVzc1B0cik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVBhdGNo
R2V0QXJyYXlMZW5ndGgoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBj
b2RlQmxvY2spOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICAgICAgLy8gRm9yY2UgcHJv
ZmlsaW5nIHRvIGJlIGVuYWJsZWQgZHVyaW5nIHN0dWIgZ2VuZXJhdGlvbi4KLSAgICAgICAgICAg
IGppdC5tX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGppdC5tX2NhbkJlT3B0
aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGppdC5tX3Nob3VsZEVtaXRQcm9m
aWxpbmcgPSB0cnVlOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAgICAgcmV0
dXJuIGppdC5wcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgocmV0dXJuQWRkcmVzcyk7
Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIEpT
RnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayog
Y2FsbGVlQ29kZUJsb2NrLCBDb2RlUHRyLCBDYWxsTGlua0luZm8qLCBWTSosIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOwogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rU2xvd0NhbGwoQ29kZUJsb2Nr
KiBjYWxsZXJDb2RlQmxvY2ssIENhbGxMaW5rSW5mbyopOwogCkBAIC0zOTksMTIgKzM1MCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUNs
b3N1cmVDYWxsKENhbGxMaW5rSW5mbyosIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1
Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7CiAgICAgICAg
IAotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cnVjdHVyZVN0dWJJ
bmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZz
ZXQsIFJldHVybkFkZHJlc3NQdHIsIENhbGxGcmFtZSopOwotICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlR2V0QnlJZFNlbGZMaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiwgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KTsKLSAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qLCBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKLSAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qLCBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKLSAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5B
ZGRyZXNzUHRyLCBDYWxsRnJhbWUqKTsKLSAgICAgICAgCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUp
OwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJu
QWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIApAQCAtNTUzLDcgKzQ5OCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmly
dHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKIAogICAgICAgICB2b2lkIGNvbXBp
bGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7Ci0gICAgICAgIHZvaWQgY29tcGls
ZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0VlJlZywgaW50IGJhc2VWUmVnLCBjb25zdCBJZGVu
dGlmaWVyKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3Vs
dFRhZywgUmVnaXN0ZXJJRCByZXN1bHRQYXlsb2FkLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZz
ZXQpOwogICAgICAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNPYmplY3QqIGJhc2Us
IFJlZ2lzdGVySUQgcmVzdWx0VGFnLCBSZWdpc3RlcklEIHJlc3VsdFBheWxvYWQsIFByb3BlcnR5
T2Zmc2V0IGNhY2hlZE9mZnNldCk7CiAgICAgICAgIHZvaWQgY29tcGlsZUdldERpcmVjdE9mZnNl
dChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0VGFnLCBSZWdpc3RlcklEIHJlc3Vs
dFBheWxvYWQsIFJlZ2lzdGVySUQgb2Zmc2V0LCBGaW5hbE9iamVjdE1vZGUgPSBNYXlCZUZpbmFs
KTsKQEAgLTU2NCwyOCArNTA4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dFN1YjMyQ29uc3RhbnQoaW50IGRzdCwgaW50IG9wLCBpbnQzMl90IGNvbnN0YW50LCBSZXN1bHRU
eXBlIG9wVHlwZSk7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKE9wY29kZUlELCBp
bnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBub3RJbnQz
Mk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMgPSB0cnVl
LCBib29sIG9wMklzSW5SZWdpc3RlcnMgPSB0cnVlKTsKIAotI2lmIENQVShBUk1fVFJBRElUSU9O
QUwpCi0gICAgICAgIC8vIHNlcXVlbmNlT3BDYWxsCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
c2VxdWVuY2VPcENhbGxJbnN0cnVjdGlvblNwYWNlID0gMTI7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgc2VxdWVuY2VPcENhbGxDb25zdGFudFNwYWNlID0gMjsKLSAgICAgICAgLy8gc2VxdWVu
Y2VHZXRCeUlkSG90UGF0aAotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJ
ZEhvdFBhdGhJbnN0cnVjdGlvblNwYWNlID0gMzY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
c2VxdWVuY2VHZXRCeUlkSG90UGF0aENvbnN0YW50U3BhY2UgPSA0OwotICAgICAgICAvLyBzZXF1
ZW5jZUdldEJ5SWRTbG93Q2FzZQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0
QnlJZFNsb3dDYXNlSW5zdHJ1Y3Rpb25TcGFjZSA9IDgwOwotICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlQ29uc3RhbnRTcGFjZSA9IDQ7Ci0jZWxpZiBDUFUo
U0g0KQotICAgICAgICAvLyBzZXF1ZW5jZU9wQ2FsbAotICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHNlcXVlbmNlT3BDYWxsSW5zdHJ1Y3Rpb25TcGFjZSA9IDEyOwotICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHNlcXVlbmNlT3BDYWxsQ29uc3RhbnRTcGFjZSA9IDI7Ci0gICAgICAgIC8vIHNlcXVl
bmNlR2V0QnlJZEhvdFBhdGgKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5
SWRIb3RQYXRoSW5zdHJ1Y3Rpb25TcGFjZSA9IDM2OwotICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhDb25zdGFudFNwYWNlID0gNTsKLSAgICAgICAgLy8gc2Vx
dWVuY2VHZXRCeUlkU2xvd0Nhc2UKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdl
dEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3BhY2UgPSAzODsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUNvbnN0YW50U3BhY2UgPSA0OwotI2VuZGlmCi0K
ICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMg
ZGVwcmVjYXRlZC4gKi8KICAgICAgICAgdm9pZCBlbWl0R2V0SklUU3R1YkFyZyhpbnQgYXJndW1l
bnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KTsKQEAgLTYyOCw3ICs1NTAsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKEluc3RydWN0
aW9uKiwgT3Bjb2RlSUQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBpbnQgZHN0
LCBpbnQgc3JjMSwgaW50IHNyYzIsIE9wZXJhbmRUeXBlcywgYm9vbCBvcDFIYXNJbW1lZGlhdGVJ
bnRGYXN0Q2FzZSwgYm9vbCBvcDJIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSk7CiAKICAgICAgICAg
dm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2VWUmVnLCBjb25zdCBJZGVudGlmaWVy
Kik7Ci0gICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0VlJlZywg
aW50IGJhc2VWUmVnLCBjb25zdCBJZGVudGlmaWVyKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogICAgICAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KTsK
ICAgICAgICAgdm9pZCBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNlLCBSZWdp
c3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KTsKICAgICAgICAgdm9p
ZCBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCByZXN1
bHQsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3RlcklEIHNjcmF0Y2gsIEZpbmFsT2JqZWN0TW9k
ZSA9IE1heUJlRmluYWwpOwpAQCAtODUzLDYgKzc3NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhj
b25zdCBGdW5jdGlvblB0ciYpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHImKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImLCBpbnQpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRyJiwgaW50KTsKKyAgICAgICAgCisgICAg
ICAgIGVudW0gV2l0aFByb2ZpbGVUYWcgeyBXaXRoUHJvZmlsZSB9OworICAgICAgICAKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlv
bl9FTywgR1BSUmVnKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihDX0pJVE9wZXJhdGlvbl9FU3QsIFN0cnVjdHVyZSopOwpAQCAtODY0LDEwICs3ODksMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUFhcEpjcFosIGludCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSos
IGNvbnN0IEpTVmFsdWUqLCBpbnQzMl90KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQywgaW50LCBKU0NlbGwqKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSiwgaW50
LCBHUFJSZWcpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSSwgaW50
LCBHUFJSZWcsIFN0cmluZ0ltcGwqKTsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSSwgaW50
LCBHUFJSZWcsIEdQUlJlZywgU3RyaW5nSW1wbCopOworI2VuZGlmCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJZGMsIGludCwgR1BS
UmVnLCBjb25zdCBJZGVudGlmaWVyKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQUlJlZywgR1BSUmVnKTsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
UCwgaW50LCB2b2lkKik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRVBjLCBpbnQsIEluc3RydWN0aW9uKik7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0
aW9uX0VQYywgaW50LCBJbnN0cnVjdGlvbiopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaLCBpbnQsIGludDMyX3QpOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VKUywg
R1BSUmVnLCBzaXplX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFBfSklUT3BlcmF0aW9uX0VaLCBpbnQzMl90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTc0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSwxOCBA
QCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNh
bGw7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1
bmN0aW9uUHRyJiBmdW5jdGlvbiwgaW50IGRzdCkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdUNCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisjZWxzZQorICAg
IGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlMlJlZ2lzdGVyLCByZXR1cm5WYWx1ZVJlZ2lzdGVy
KTsKKyNlbmRpZgorICAgIHJldHVybiBjYWxsOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlv
bikKIHsKICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwpAQCAtMjY4LDYgKzI4MCwxMiBA
QCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKHJlZ09wMSwgcmVnT3AyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwog
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiB9CisK
K0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpJ
VDo6V2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIGludCBkc3Qs
IEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CisgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUob3BlcmF0aW9u
LCBkc3QpOworfQogI2VuZGlmCiAKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBpbnQgZHN0KQpA
QCAtMzI0LDEwICszNDIsMTAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChvcGVyYXRpb24sIGRzdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQYyBvcGVyYXRpb24sIGlu
dCBkc3QsIEluc3RydWN0aW9uKiBieXRlY29kZVBDKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0
aW9uX0VQYyBvcGVyYXRpb24sIGludCBkc3QsIEluc3RydWN0aW9uKiBieXRlY29kZVBDKQogewog
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGJ5dGVjb2RlUEMp
KTsKLSAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQob3BlcmF0aW9uLCBkc3QpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG9wZXJhdGlvbiwgZHN0KTsKIH0KIAogQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRVogb3BlcmF0aW9uLCBpbnQgZHN0LCBpbnQzMl90IGFyZykKQEAgLTQ4Niw2ICs1
MDQsMTIgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRp
b24sIGRzdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpj
YWxsT3BlcmF0aW9uKEpJVDo6V2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VKSSBvcGVy
YXRpb24sIGludCBkc3QsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIFN0cmlu
Z0ltcGwqIHVpZCkKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJ
VF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFRydXN0ZWRJbW1QdHIodWlkKSk7Cisg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUob3BlcmF0aW9uLCBkc3QpOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSklkYyBvcGVyYXRp
b24sIGludCBkc3QsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIGNvbnN0IElk
ZW50aWZpZXIqIGFyZzIpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklf
MzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKGFyZzIp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY1
LDY2ICs0NjUsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgog
CiB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50aWZpZXIqIGlkZW50
KQogewotICAgIC8vIEFzIGZvciBwdXRfYnlfaWQsIGdldF9ieV9pZCByZXF1aXJlcyB0aGUgb2Zm
c2V0IG9mIHRoZSBTdHJ1Y3R1cmUgYW5kIHRoZSBvZmZzZXQgb2YgdGhlIGFjY2VzcyB0byBiZSBw
YXRjaGVkLgotICAgIC8vIEFkZGl0aW9uYWxseSwgZm9yIGdldF9ieV9pZCB3ZSBuZWVkIHBhdGNo
IHRoZSBvZmZzZXQgb2YgdGhlIGJyYW5jaCB0byB0aGUgc2xvdyBjYXNlICh3ZSBwYXRjaCB0aGlz
IHRvIGp1bXAKLSAgICAvLyB0byBhcnJheS1sZW5ndGggLyBwcm90b3R5cGUgYWNjZXNzIHRyYW5w
b2xpbmVzLCBhbmQgZmluYWxseSB3ZSBhbHNvIHRoZSB0aGUgcHJvcGVydHktbWFwIGFjY2VzcyBv
ZmZzZXQgYXMgYSBsYWJlbAotICAgIC8vIHRvIGp1bXAgYmFjayB0byBpZiBvbmUgb2YgdGhlc2Ug
dHJhbXBvbGllcyBmaW5kcyBhIG1hdGNoLgotICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdU
Mik7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KHJlZ1Qy
LCByZWdUMywgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgfQogCi0gICAgQkVHSU5fVU5JTlRFUlJV
UFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoKTsKLSAgICAKLSAgICBMYWJlbCBo
b3RQYXRoQmVnaW4odGhpcyk7Ci0gICAgCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29t
cGFyZTsKLSAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CisgICAgUGF0Y2hhYmxl
SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAg
ICAgTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
dHJ1Y3R1cmVUb0NvbXBhcmUsCisgICAgICAgIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKKyAgICAKICAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1
cmVDaGVjayk7CiAgICAgCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdl
TG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRM
YWJlbDEgPSBsb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdU
MiwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsgLy8gcGF5bG9hZAotICAgIERh
dGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwyID0gbG9hZFB0cldpdGhDb21wYWN0QWRk
cmVzc09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDIsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQp
LCByZWdUMSk7IC8vIHRhZworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFn
ZUxvYWQgPQorICAgICAgICBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwogICAgIAotICAgIExhYmVsIHB1dFJlc3Vs
dCh0aGlzKTsKKyAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2hUYWcgPSBsb2FkMzJX
aXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKKyAgICAgICAgQWRkcmVzcyhyZWdUMCwgcGF0
Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QxKTsKKyAgICBEYXRhTGFiZWxDb21wYWN0IGxv
YWRXaXRoUGF0Y2hQYXlsb2FkID0gbG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2go
CisgICAgICAgIEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdU
MCk7CiAgICAgCi0gICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlk
SG90UGF0aCk7Ci0KLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQ
cm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oUHJvcGVydHlTdHViR2V0QnlJZCwgbV9ieXRlY29k
ZU9mZnNldCwgaG90UGF0aEJlZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNr
LCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBkaXNwbGFjZW1lbnRMYWJlbDEsIGRpc3BsYWNlbWVudExh
YmVsMiwgcHV0UmVzdWx0KSk7CisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAg
bV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCisgICAgICAgIFByb3BlcnR5
U3R1YkNvbXBpbGF0aW9uSW5mbygKKyAgICAgICAgICAgIFByb3BlcnR5U3R1YkdldEJ5SWQsIG1f
Ynl0ZWNvZGVPZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCisgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBsb2FkV2l0aFBhdGNoUGF5bG9hZCwgbG9hZFdp
dGhQYXRjaFRhZywgZG9uZSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIGludCBpZGVudCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
Ci0gICAgY29tcGlsZUdldEJ5SWRTbG93Q2FzZShkc3QsIGJhc2UsICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoaWRlbnQpKSwgaXRlcik7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdU
NCk7Ci19CisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKIAotdm9pZCBKSVQ6OmNvbXBpbGVH
ZXRCeUlkU2xvd0Nhc2UoaW50IGRzdCwgaW50IGJhc2UsIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIC8vIEFzIGZv
ciB0aGUgaG90IHBhdGggb2YgZ2V0X2J5X2lkLCBhYm92ZSwgd2UgZW5zdXJlIHRoYXQgd2UgY2Fu
IHVzZSBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgb2Zmc2V0Ci0gICAgLy8gc28gdGhhdCB3ZSBv
bmx5IG5lZWQgdHJhY2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNvZGUgLSB3ZSB0
cmFjayBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uCi0gICAgLy8gb2YgdGhlIGNhbGwgKHdoaWNo
IHdlIGNhbiB1c2UgdG8gbG9vayB1cCB0aGUgcGF0Y2ggaW5mb3JtYXRpb24pLCBidXQgc2hvdWxk
IGEgYXJyYXktbGVuZ3RoIG9yCi0gICAgLy8gcHJvdG90eXBlIGFjY2VzcyB0cmFtcG9saW5lIGZh
aWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBUbyBkbyBzbyB3ZSBjYW4gc3Vi
dHJhY3QgYmFjawotICAgIC8vIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBjYWxsIHRvIHRoZSBoZWFk
IG9mIHRoZSBzbG93IGNhc2UuCi0gICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFz
ZSk7CisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZVZSZWcpOwogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
ICAgIAotICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkU2xv
d0Nhc2UpOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZCk7Ci0gICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQocmVnVDEsIHJlZ1QwKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tUHRyKGlkZW50KSk7Ci0gICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3QpOwotICAg
IAotICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFX0ZPUl9QVVQoc2VxdWVuY2VHZXRCeUlk
U2xvd0Nhc2UsIGRzdCk7Ci0gICAgCi0gICAgLy8gVHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBj
YWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGluZm9ybWF0aW9uLgorICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGUsIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKwogICAg
IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uSW5kZXgrK10uc2xvd0Nhc2VJbmZvKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC02
MzMsNDM0ICs2MTQsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVj
CiAgICAgbG9hZDMyKEFkZHJlc3MocmVzdWx0VGFnLCBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRP
ZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZyk7CiB9CiAKLXZvaWQgSklUOjpwYXRj
aEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQs
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBh
dGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9nZXRfYnlfaWRfZ2Vu
ZXJpYy4KLSAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8gSklUU3R1YnM6OmN0aV9vcF9nZXRf
YnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyByaWdo
dCBub3cuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7Ci0gICAgCi0g
ICAgLy8gUGF0Y2ggdGhlIG9mZnNldCBpbnRvIHRoZSBwcm9wb2VydHkgbWFwIHRvIGxvYWQgZnJv
bSwgdGhlbiBwYXRjaCB0aGUgU3RydWN0dXJlIHRvIGxvb2sgZm9yLgotICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVUb0NvbXBhcmUpLCBzdHJ1Y3R1
cmUpOwotICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5jb252ZXJ0aWJsZUxvYWRBdE9mZnNldChzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQucHJvcGVydHlTdG9yYWdlTG9hZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KGNh
Y2hlZE9mZnNldCkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0
aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQuZGlzcGxhY2VtZW50TGFiZWwxKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdl
KGNhY2hlZE9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpOyAvLyBwYXlsb2FkCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5kaXNwbGFjZW1lbnRMYWJlbDIpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2UoY2FjaGVkT2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KTsgLy8gdGFnCi19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5n
dGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9ICZtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
Ci0gICAgCi0gICAgLy8gcmVnVDAgaG9sZHMgYSBKU0NlbGwqCi0gICAgCi0gICAgLy8gQ2hlY2sg
Zm9yIGFycmF5Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKElzQXJyYXkpKTsKLSAgICBKdW1wIGZhaWx1cmVDYXNl
czIgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBl
TWFzaykpOwotICAgIAotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBm
cm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICAKLSAgICBKdW1wIGZhaWx1cmVD
YXNlczMgPSBicmFuY2gzMihBYm92ZSwgcmVnVDIsIFRydXN0ZWRJbW0zMihJTlRfTUFYKSk7Ci0g
ICAgbW92ZShyZWdUMiwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSwgcmVnVDEpOwotICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLSAgICAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7Ci0gICAgCi0g
ICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2Vz
IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIHNsb3dDYXNlQmVnaW4pOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMzLCBzbG93Q2FzZUJlZ2luKTsKLSAgICAKLSAgICAv
LyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2lu
dCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKLSAgICAKLSAgICAvLyBU
cmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQg
bGF0ZXIuCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RV
QigKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGFy
cmF5IGxlbmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgIHRv
Q1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAKLSAgICAvLyBGaW5hbGx5
IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1w
IGhlcmUgaW5zdGVhZC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5zdHJ1Y3R1cmVDaGVjayk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1f
Y29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAg
IAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1
cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X2lkX2FycmF5X2ZhaWwpKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0g
ICAgLy8gcmVnVDAgaG9sZHMgYSBKU0NlbGwqCi0gICAgCi0gICAgLy8gVGhlIHByb3RvdHlwZSBv
YmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlmIHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9j
ayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVyZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcg
dGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJs
ZSBuaWNlIGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qo
c3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgCi0gICAgSnVt
cCBmYWlsdXJlQ2FzZXMxID0gY2hlY2tTdHJ1Y3R1cmUocmVnVDAsIHN0cnVjdHVyZSk7Ci0gICAg
Ci0gICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBj
aGFuZ2VkLgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjayhwcm90b09iamVjdCwgcHJvdG90eXBlU3RydWN0dXJlLCBzdHViSW5mbywgcmVnVDMpOwot
Ci0gICAgYm9vbCBuZWVkc1N0dWJMaW5rID0gZmFsc2U7Ci0gICAgLy8gQ2hlY2tzIG91dCBva2F5
IQotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgbmVlZHNTdHVi
TGluayA9IHRydWU7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3Qs
IHJlZ1QyLCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9nZXR0ZXJfc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDAp
OwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2Fs
bC5jYWxsKCk7Ci0gICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAg
ICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSk7Ci0gICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIo
KSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChU
cnVzdGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmllcio+KCZpZGVudCkpKTsKLSAgICAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwot
ICAgIH0gZWxzZQotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCBy
ZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7Ci0gICAgCi0gICAgSnVtcCBzdWNjZXNzID0ganVt
cCgpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29k
ZUJsb2NrKTsKLSAgICAKLSAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LmNvbGRQYXRoQmVnaW4pOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMSwgc2xv
d0Nhc2VCZWdpbik7Ci0gICAgaWYgKGZhaWx1cmVDYXNlczIuaXNTZXQoKSkKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBzbG93Q2FzZUJlZ2luKTsKLSAgICAKLSAgICAv
LyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2lu
dCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKLQotICAgIGlmIChuZWVk
c1N0dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBp
dGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwg
YmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRT
dHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJvdG8gc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9j
aykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fdm0sCi0gICAgICAgIG1fY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgbmVlZHNTdHViTGluayk7Ci0gICAgCi0gICAg
Ly8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKLSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNl
IC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICByZXBhdGNo
QnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIo
Y3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7Ci19Ci0KLQotdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFNlbGZMaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMsIGludCBjdXJy
ZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCi17
Ci0gICAgLy8gcmVnVDAgaG9sZHMgYSBKU0NlbGwqCi0gICAgSnVtcCBmYWlsdXJlQ2FzZSA9IGNo
ZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpOwotICAgIGJvb2wgbmVlZHNTdHViTGluayA9
IGZhbHNlOwotICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZUdldHRlcigpKSB7Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMiwgcmVnVDEsIGNhY2hlZE9mZnNldCk7
Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfZ2V0
dGVyX3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSBpZiAoc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwot
ICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2N1c3Rv
bV9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9t
R2V0dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoVHJ1c3RlZEltbVB0cihjb25zdF9jYXN0PElkZW50aWZpZXIqPigmaWRlbnQpKSk7Ci0g
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNh
bGwoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpc0RpcmVjdCA9IHRydWU7Ci0gICAgICAgIGNv
bXBpbGVHZXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QxLCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsK
LSAgICB9Ci0KLSAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAgCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwotICAgIGlmIChuZWVkc1N0
dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVy
ID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
aXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKLSAgICAgICAgfQotICAgIH0gICAg
Ci0gICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNh
c2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRp
bmU6OmFzQ29kZVB0cihwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUpKTsKLSAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQotICAgICAgICBsYXN0
UHJvdG9CZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgt
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwotICAgIAotICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2UsIGxhc3RQcm90b0JlZ2luKTsKLSAgICAKLSAg
ICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBw
b2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKLQotICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAg
ICAgICAgRklOQUxJWkVfQ09ERSgKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAg
ICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgc2VsZiBsaXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwg
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRk
cmVzcygpKSksCi0gICAgICAgICptX3ZtLAotICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1YkxpbmspOwotCi0gICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX3ZtLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKLSAgICAKLSAg
ICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3Qg
cGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2Nh
dGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci19
Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlw
ZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKLXsKLSAgICAvLyByZWdUMCBob2xkcyBhIEpTQ2VsbCoKLSAgICAKLSAg
ICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5IGV4aXN0cyAoaWYgdGhpcyBzdHVi
IGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5nIGEgU3RydWN0dXJlIHRoYXQgaXMK
LSAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9iamVjdCAtIGxldCdzIHNwZWN1bGF0
aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5ISkKLSAgICBKU09iamVjdCogcHJv
dG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJh
bWUpKTsKLSAgICAKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBT
dHJ1Y3R1cmUuCi0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gY2hlY2tTdHJ1Y3R1cmUocmVnVDAs
IHN0cnVjdHVyZSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBT
dHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjayhwcm90b09iamVjdCwgcHJvdG90eXBlU3RydWN0dXJlLCBz
dHViSW5mbywgcmVnVDMpOwotICAgIAotICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOwot
ICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRl
cigpKSB7Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBjb21waWxlR2V0
RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMiwgcmVnVDEsIGNhY2hlZE9mZnNldCk7Ci0g
ICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfZ2V0dGVy
X3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSBpZiAoc2xvdC5p
c0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAg
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2N1c3RvbV9z
dHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihwcm90b09i
amVjdCkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKEZ1bmN0
aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjb25zdF9jYXN0PElkZW50aWZp
ZXIqPigmaWRlbnQpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1Q
dHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0g
ICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpc0RpcmVjdCA9
IHRydWU7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1Qx
LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBzdWNjZXNzID0g
anVtcCgpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1f
Y29kZUJsb2NrKTsKLSAgICBpZiAobmVlZHNTdHViTGluaykgewotICAgICAgICBmb3IgKFZlY3Rv
cjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBt
X2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT50bykKLSAgICAg
ICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXIt
PnRvKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlv
biB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2Fz
ZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxv
Y2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhmYWlsdXJlQ2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7Ci0gICAgaWYgKGZhaWx1cmVDYXNl
czIuaXNTZXQoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBsYXN0
UHJvdG9CZWdpbik7Ci0gICAgCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUg
aG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBk
ZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KSk7Ci0gICAgCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9
IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICBGSU5BTElaRV9DT0RFKAotICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBwcm90byBs
aXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0
cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0
T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAotICAg
ICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1Ykxp
bmspOwotCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChj
YWxsRnJhbWUtPnZtKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0gICAgCi0gICAg
Ly8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotfQot
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVT
dHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0
dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgLy8gcmVnVDAgaG9sZHMgYSBKU0NlbGwqCi0gICAg
QVNTRVJUKGNvdW50KTsKLSAgICAKLSAgICBKdW1wTGlzdCBidWNrZXRzT2ZGYWlsOwotICAgIAot
ICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KLSAg
ICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShyZWdUMCwgc3RydWN0dXJlKSk7
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgSlNPYmplY3Qq
IHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSwgKytpdCkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUt
PnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAgY3VyclN0cnVjdHVyZSA9
IGl0LT5nZXQoKTsKLSAgICAgICAgdGVzdFByb3RvdHlwZShwcm90b09iamVjdCwgYnVja2V0c09m
RmFpbCwgc3R1YkluZm8pOwotICAgIH0KLSAgICBBU1NFUlQocHJvdG9PYmplY3QpOwotICAgIAot
ICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOwotICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxz
ZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgIG5lZWRzU3R1
YkxpbmsgPSB0cnVlOwotICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0
LCByZWdUMiwgcmVnVDEsIGNhY2hlZE9mZnNldCk7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfZ2V0dGVyX3N0dWIpOwotICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1Qw
KTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNh
bGwuY2FsbCgpOwotICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0g
ICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2N1c3RvbV9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihwcm90b09iamVjdCkpOwotICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVy
KCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbVB0cihjb25zdF9jYXN0PElkZW50aWZpZXIqPigmaWRlbnQpKSk7Ci0gICAgICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpc0RpcmVjdCA9IHRydWU7Ci0gICAgICAgIGNvbXBpbGVH
ZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QxLCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsK
LSAgICB9Ci0KLSAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAgCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwotICAgIGlmIChuZWVkc1N0
dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVy
ID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
aXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMg
YmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChKSVRTdHViUm91dGluZTo6
YXNDb2RlUHRyKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1
YlJvdXRpbmUpKTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxh
c3RQcm90b0JlZ2luKTsKLSAgICAKLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRo
ZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRv
IGRlc3QgZm9yIHVzLgotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5w
dXRSZXN1bHQpKTsKLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
ID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0NPREUoCi0gICAgICAg
ICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGNoYWlu
IGxpc3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgdG9D
U3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fdm0sCi0g
ICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgbmVlZHNTdHVi
TGluayk7Ci0gICAgCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRo
YXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT52bSgpLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7Ci0g
ICAgCi0gICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0
aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBq
dW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
anVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICAvLyByZWdU
MCBob2xkcyBhIEpTQ2VsbCoKLSAgICBBU1NFUlQoY291bnQpOwotICAgIAotICAgIEp1bXBMaXN0
IGJ1Y2tldHNPZkZhaWw7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0
aGUgcmlnaHQgU3RydWN0dXJlLgotICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGNoZWNrU3RydWN0
dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4t
PmhlYWQoKTsKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgIHByb3RvT2JqZWN0ID0g
YXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwot
ICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB0ZXN0UHJvdG90eXBl
KHByb3RvT2JqZWN0LCBidWNrZXRzT2ZGYWlsLCBzdHViSW5mbyk7Ci0gICAgfQotICAgIEFTU0VS
VChwcm90b09iamVjdCk7Ci0gICAgCi0gICAgYm9vbCBuZWVkc1N0dWJMaW5rID0gZmFsc2U7Ci0g
ICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5r
ID0gdHJ1ZTsKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVn
VDIsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQocmVnVDEpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0g
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNh
bGwoKTsKLSAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAg
ICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0
ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkpOwotICAgICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1Qx
LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKLSAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAg
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwot
ICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7Ci0gICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+
OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7
ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQotICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhl
IGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0g
ICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xk
UGF0aEJlZ2luKSk7Ci0gICAgCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUg
aG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBk
ZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KSk7Ci0gICAgCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNv
IHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVf
Q09ERSgKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBn
ZXRfYnlfaWQgY2hhaW4gc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5i
YXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAg
Km1fdm0sCi0gICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAg
bmVlZHNTdHViTGluayk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7
Ci0gICAgCi0gICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBp
biB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVt
cCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHVi
SW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwotICAgIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9u
Y2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0
cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKLX0KLQogdm9pZCBKSVQ6OmNvbXBpbGVH
ZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdFRhZywgUmVn
aXN0ZXJJRCByZXN1bHRQYXlsb2FkLCBSZWdpc3RlcklEIG9mZnNldCwgRmluYWxPYmplY3RNb2Rl
IGZpbmFsT2JqZWN0TW9kZSkKIHsKICAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDgpOwpA
QCAtMTI3MCw4ICs4MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUo
SW5zCiAgICAgICAgIHJldHVybjsKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24o
V2l0aFByb2ZpbGUsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QsIGludCB2YWx1ZSkKQEAgLTEzNjEsMTUgKzkxMyw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2luaXRfZ2xvYmFsX2NvbnN0KEluc3QKICAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9Q
Q09ERV9MRU5HVEgob3BfaW5pdF9nbG9iYWxfY29uc3QpLCB2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
IH0KIAotdm9pZCBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfZ2V0X2J5X2lkKTsK
LSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFi
ZWxQdHJBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlVG9D
b21wYXJlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBh
Y3RBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50TGFi
ZWwxKSwgMCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5kaXNwbGFjZW1lbnRMYWJlbDIpLCAwKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQuc3RydWN0dXJlQ2hlY2spLCBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKSk7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAxNTc0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM3LDIyICs1MzcsMjUgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZQogICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChyZWdUMSwgcmVnVDIsIG1fYnl0ZWNvZGVPZmZz
ZXQpOwogICAgIH0KIAotICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VH
ZXRCeUlkSG90UGF0aCk7Ci0KLSAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhpcyk7Ci0KICAgICBE
YXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwotICAgIFBhdGNoYWJsZUp1bXAgc3RydWN0
dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIFRy
dXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0
cnVjdHVyZSkpKTsKKyAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwKKyAgICAgICAgVHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSkpOworICAg
IAogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKLQotICAgIENvbnZlcnRpYmxlTG9h
ZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIERhdGFMYWJl
bENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwgPSBsb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZz
ZXRQYXRjaChBZGRyZXNzKHJlZ1QwLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDAp
OwotCi0gICAgTGFiZWwgZG9uZSh0aGlzKTsKLQotICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVF
TkNFKHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgpOwotCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBp
bGF0aW9uSW5mby5hcHBlbmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1
YkdldEJ5SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21w
YXJlLCBzdHJ1Y3R1cmVDaGVjaywgcHJvcGVydHlTdG9yYWdlTG9hZCwgZGlzcGxhY2VtZW50TGFi
ZWwsIGRvbmUpKTsKKyAgICAKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3Jh
Z2VMb2FkID0KKyAgICAgICAgY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAKKyAgICBEYXRhTGFiZWxDb21w
YWN0IGxvYWRXaXRoUGF0Y2ggPSBsb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgK
KyAgICAgICAgQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1Qw
KTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAgICBtX3Byb3BlcnR5
QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZCgKKyAgICAgICAgUHJvcGVydHlTdHViQ29tcGls
YXRpb25JbmZvKAorICAgICAgICAgICAgUHJvcGVydHlTdHViR2V0QnlJZCwgbV9ieXRlY29kZU9m
ZnNldCwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywKKyAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZUxvYWQsIGxvYWRXaXRoUGF0Y2gsIGRvbmUpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNTYxLDMyICs1NjQsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0cnVjdAogICAgIGludCBiYXNl
VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpKTsKIAotICAgIGNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UocmVzdWx0VlJl
ZywgYmFzZVZSZWcsIGlkZW50LCBpdGVyKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHJl
Z1Q0KTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IHJlc3VsdFZS
ZWcsIGludCBiYXNlVlJlZywgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgLy8gQXMgZm9yIHRoZSBob3QgcGF0aCBv
ZiBnZXRfYnlfaWQsIGFib3ZlLCB3ZSBlbnN1cmUgdGhhdCB3ZSBjYW4gdXNlIGFuIGFyY2hpdGVj
dHVyZSBzcGVjaWZpYyBvZmZzZXQKLSAgICAvLyBzbyB0aGF0IHdlIG9ubHkgbmVlZCB0cmFjayBv
bmUgcG9pbnRlciBpbnRvIHRoZSBzbG93IGNhc2UgY29kZSAtIHdlIHRyYWNrIGEgcG9pbnRlciB0
byB0aGUgbG9jYXRpb24KLSAgICAvLyBvZiB0aGUgY2FsbCAod2hpY2ggd2UgY2FuIHVzZSB0byBs
b29rIHVwIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiksIGJ1dCBzaG91bGQgYSBhcnJheS1sZW5ndGgg
b3IKLSAgICAvLyBwcm90b3R5cGUgYWNjZXNzIHRyYW1wb2xpbmUgZmFpbCB3ZSB3YW50IHRvIGJh
aWwgb3V0IGJhY2sgdG8gaGVyZS4gIFRvIGRvIHNvIHdlIGNhbiBzdWJ0cmFjdCBiYWNrCi0gICAg
Ly8gdGhlIGRpc3RhbmNlIGZyb20gdGhlIGNhbGwgdG8gdGhlIGhlYWQgb2YgdGhlIHNsb3cgY2Fz
ZS4KLQogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2VWUmVnKTsKICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiAKLSAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNl
cXVlbmNlR2V0QnlJZFNsb3dDYXNlKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7
Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZCk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoaWRlbnQpKTsKLSAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKHJlc3Vs
dFZSZWcpOwotCi0gICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlk
U2xvd0Nhc2UpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIAorICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGUsIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgcmVnVDAsIGlkZW50LT5pbXBsKCkpOwogCi0gICAgLy8gVHJh
Y2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVy
IHBhdGNoIGluZm9ybWF0aW9uLgogICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9b
bV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgrK10uc2xvd0Nhc2VJbmZvKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQogCkBAIC02OTMsNDI4ICs2NzcsNiBAQCB2b2lkIEpJVDo6Y29tcGls
ZUdldERpcmVjdE9mZnNldChKU09iamVjCiAgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBvZmZz
ZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpLCByZXN1bHQpOwogfQogCi12b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0
dXJlIGdvIHRvIGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYy4KLSAgICAvLyBTaG91bGQgcHJvYmFi
bHkgZ28gdG8gY3RpX29wX2dldF9ieV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFueXRo
aW5nIGludGVyZXN0aW5nIHJpZ2h0IG5vdy4KLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9z
ZWxmX2ZhaWwpKTsKLQotICAgIC8vIFBhdGNoIHRoZSBvZmZzZXQgaW50byB0aGUgcHJvcG9lcnR5
IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZvci4K
LSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFi
ZWxQdHJBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlVG9D
b21wYXJlKSwgc3RydWN0dXJlKTsKLSAgICByZXBhdGNoQnVmZmVyLnNldExvYWRJbnN0cnVjdGlv
bklzQWN0aXZlKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uY29udmVydGlibGVMb2FkQXRPZmZzZXQo
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnByb3BlcnR5U3RvcmFnZUxvYWQpLCBpc091
dE9mTGluZU9mZnNldChjYWNoZWRPZmZzZXQpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsKSwgb2Zmc2V0UmVsYXRpdmVU
b1BhdGNoZWRTdG9yYWdlKGNhY2hlZE9mZnNldCkpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
LXsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSAmbV9jb2RlQmxvY2stPmdldFN0
dWJJbmZvKHJldHVybkFkZHJlc3MpOwotCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIGFycmF5Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVn
VDIpOwotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKElzQXJyYXkpKTsKLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpOwotCi0g
ICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIGZhaWx1cmVDYXNlczMgPSBicmFuY2gzMihMZXNz
VGhhbiwgcmVnVDIsIFRydXN0ZWRJbW0zMigwKSk7Ci0KLSAgICBlbWl0RmFzdEFyaXRoSW50VG9J
bW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwotCi0g
ICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2Vz
IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIHNsb3dDYXNlQmVnaW4pOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMzLCBzbG93Q2FzZUJlZ2luKTsKLQotICAgIC8vIE9u
IHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0
IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCi0gICAgcGF0Y2hCdWZmZXIu
bGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwotCi0gICAgLy8gVHJhY2sgdGhl
IHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgot
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAg
ICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2xpbmUgSklUIGdldF9ieV9pZCBhcnJheSBs
ZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJp
bmcoKm1fY29kZUJsb2NrKS5kYXRhKCksCi0gICAgICAgICAgICBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2Vs
aW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotCi0gICAgLy8gRmlu
YWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8g
anVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
LQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1
cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X2lkX2FycmF5X2ZhaWwpKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0g
ICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlmIHRoaXMgc3R1
YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVyZSB0aGF0IGlz
Ci0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVjdWxh
dGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3QqIHBy
b3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZy
YW1lKSk7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1
Y3R1cmUuCi0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gY2hlY2tTdHJ1Y3R1cmUocmVnVDAsIHN0
cnVjdHVyZSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVy
ZSBoYWQgbm90IGNoYW5nZWQuCi0gICAgSnVtcCBmYWlsdXJlQ2FzZXMyID0gYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKHByb3RvT2JqZWN0LCBwcm90b3R5cGVTdHJ1Y3R1cmUsIHN0dWJJbmZv
LCByZWdUMyk7Ci0KLSAgICBib29sIG5lZWRzU3R1YkxpbmsgPSBmYWxzZTsKLSAgICAKLSAgICAv
LyBDaGVja3Mgb3V0IG9rYXkhCi0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgewot
ICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9m
ZnNldChwcm90b09iamVjdCwgcmVnVDEsIGNhY2hlZE9mZnNldCk7Ci0gICAgICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfZ2V0dGVyX3N0dWIpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihz
dHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAg
ICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpKSB7Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2N1c3RvbV9zdHViKTsKLSAgICAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihwcm90b09iamVjdCkpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3Vz
dG9tR2V0dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbVB0cihjb25zdF9jYXN0PElkZW50aWZpZXIqPigmaWRlbnQpKSk7
Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxs
LmNhbGwoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90
b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7Ci0gICAgSnVtcCBzdWNjZXNzID0ganVtcCgp
OwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsK
LQotICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdp
bik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxLCBzbG93Q2FzZUJlZ2luKTsK
LSAgICBpZiAoZmFpbHVyZUNhc2VzMi5pc1NldCgpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmVDYXNlczIsIHNsb3dDYXNlQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1
cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3Jt
IHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFz
ZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7Ci0KLSAgICBpZiAobmVlZHNTdHViTGluaykgewotICAg
ICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVn
aW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChp
dGVyLT50bykKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGl0ZXItPmZyb20sIEZ1
bmN0aW9uUHRyKGl0ZXItPnRvKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gVHJhY2sgdGhl
IHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgot
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAg
ICBGSU5BTElaRV9DT0RFKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAo
IkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgcHJvdG8gc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKSwKLSAgICAgICAgKm1fdm0sCi0gICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwKLSAgICAgICAgbmVlZHNTdHViTGluayk7Ci0KLSAgICAvLyBGaW5hbGx5IHBhdGNoIHRo
ZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5z
dGVhZC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1
Y3R1cmVDaGVjayk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotCi0gICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlf
b3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1
bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9f
bGlzdCkpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHBvbHltb3JwaGljU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKLXsKLSAgICBKdW1wIGZhaWx1cmVDYXNlID0g
Y2hlY2tTdHJ1Y3R1cmUocmVnVDAsIHN0cnVjdHVyZSk7Ci0gICAgYm9vbCBuZWVkc1N0dWJMaW5r
ID0gZmFsc2U7Ci0gICAgYm9vbCBpc0RpcmVjdCA9IGZhbHNlOwotICAgIGlmIChzbG90LmlzQ2Fj
aGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAg
IGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwotICAg
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9z
dHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAgICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UgaWYgKHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1
Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRl
cigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwotICAgICAgICBjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKLSAgICB9Ci0gICAg
SnVtcCBzdWNjZXNzID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92
bSwgdGhpcywgbV9jb2RlQmxvY2spOwotCi0gICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKLSAgICAg
ICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2lu
KCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRl
ci0+dG8pCi0gICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhpdGVyLT5mcm9tLCBGdW5j
dGlvblB0cihpdGVyLT50bykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVXNlIHRoZSBw
YXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9y
aWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90
b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cihwb2x5
bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUpKTsK
LSAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQotICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJ
bmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwotCi0gICAgcGF0Y2hCdWZmZXIubGluayhmYWls
dXJlQ2FzZSwgbGFzdFByb3RvQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KSk7Ci0KLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJDb2Rl
ID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0NPREUoCi0gICAgICAg
ICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBs
aXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0
cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0
T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX3ZtLAotICAg
ICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIG5lZWRzU3R1Ykxp
bmspOwotCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0
KCptX3ZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1
cmUsIGlzRGlyZWN0KTsKLQotICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBj
YXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVM
b2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUtPmNv
ZGUoKS5jb2RlKCkpKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3Rv
TGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIC8vIFRoZSBwcm90b3R5cGUg
b2JqZWN0IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3RzIHRoZSBDb2RlQmxv
Y2sgaXMgcmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcwotICAgIC8vIHJlZmVyZW5jaW5n
IHRoZSBwcm90b3R5cGUgb2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRpdmVseSBsb2FkIGl0J3MgdGFi
bGUgbmljZSBhbmQgZWFybHkhKQotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IGFzT2JqZWN0
KHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotCi0gICAgLy8gQ2hl
Y2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgotICAgIEp1bXAgZmFp
bHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpOwotCi0gICAgLy8g
Q2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgot
ICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhwcm90
b09iamVjdCwgcHJvdG90eXBlU3RydWN0dXJlLCBzdHViSW5mbywgcmVnVDMpOwotCi0gICAgLy8g
Q2hlY2tzIG91dCBva2F5IQotICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOwotICAgIGJv
b2wgaXNEaXJlY3QgPSBmYWxzZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7
Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwotICAgICAgICBjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsKLSAgICAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV9pZF9nZXR0ZXJfc3R1Yik7Ci0gICAg
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQocmVnVDApOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRy
KHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAg
ICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3Vz
dG9tKCkpIHsKLSAgICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSk7Ci0gICAg
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIoc2xvdC5j
dXN0b21HZXR0ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmllcio+KCZpZGVudCkp
KTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNh
bGwuY2FsbCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKLSAgICAg
ICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNl
dCk7Ci0gICAgfQotCi0gICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwotCi0gICAgaWYgKG5lZWRz
U3R1YkxpbmspIHsKLSAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBpZiAoaXRlci0+dG8pCi0gICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhpdGVyLT5mcm9tLCBGdW5jdGlvblB0cihpdGVyLT50bykpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNh
c2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRp
bmU6OmFzQ29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFd
LnN0dWJSb3V0aW5lKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxLCBsYXN0
UHJvdG9CZWdpbik7Ci0gICAgaWYgKGZhaWx1cmVDYXNlczIuaXNTZXQoKSkKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAgICAvLyBP
biBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBp
dCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKLQotICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YkNvZGUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgRklO
QUxJWkVfQ09ERSgKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJCYXNl
bGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKSwKLSAgICAgICAgKm1fdm0sCi0gICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwKLSAgICAgICAgbmVlZHNTdHViTGluayk7Ci0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV92bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlzRGlyZWN0KTsK
LQotICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhl
IGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVt
cExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUtPmNvZGUoKS5jb2RlKCkpKTsK
LX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90
eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIEFTU0VSVChjb3VudCk7Ci0gICAgSnVtcExp
c3QgYnVja2V0c09mRmFpbDsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhl
IHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBKdW1wIGJhc2VPYmplY3RDaGVjayA9IGNoZWNrU3RydWN0
dXJlKHJlZ1QwLCBzdHJ1Y3R1cmUpOwotICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGJhc2VPYmpl
Y3RDaGVjayk7Ci0KLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0g
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICBKU09i
amVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpLCArK2l0KSB7Ci0gICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVj
dHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICBjdXJyU3RydWN0
dXJlID0gaXQtPmdldCgpOwotICAgICAgICB0ZXN0UHJvdG90eXBlKHByb3RvT2JqZWN0LCBidWNr
ZXRzT2ZGYWlsLCBzdHViSW5mbyk7Ci0gICAgfQotICAgIEFTU0VSVChwcm90b09iamVjdCk7Ci0g
ICAgCi0gICAgYm9vbCBuZWVkc1N0dWJMaW5rID0gZmFsc2U7Ci0gICAgYm9vbCBpc0RpcmVjdCA9
IGZhbHNlOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgbmVl
ZHNTdHViTGluayA9IHRydWU7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9P
YmplY3QsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQocmVnVDEpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7
Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxs
LmNhbGwoKTsKLSAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAg
ICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1Yik7Ci0gICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpKTsKLSAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigp
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkpOwotICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwotICAgICAgICBjb21waWxlR2V0
RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKLSAgICB9Ci0g
ICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwotICAgIAotICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7
Ci0gICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxs
cy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAg
aWYgKGl0ZXItPnRvKQotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRlci0+ZnJv
bSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFVz
ZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRv
IHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBs
YXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQ
dHIocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGlu
ZSkpOwotCi0gICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdp
bik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29k
ZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKLQot
ICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91
dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLAot
ICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIGNoYWluIGxpc3Qgc3R1YiBmb3Ig
JXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVC
bG9jaykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fdm0sCi0gICAgICAgIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgbmVlZHNTdHViTGluayk7Ci0KLSAgICAv
LyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0
ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNl
dChjYWxsRnJhbWUtPnZtKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJv
dXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4sIGlzRGlyZWN0KTsKLQotICAgIC8vIEZpbmFsbHkgcGF0
Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVy
ZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LnN0cnVjdHVyZUNoZWNrKTsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLX0KLQotdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0
eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgQVNTRVJUKGNvdW50KTsKLQotICAgIEp1bXBMaXN0
IGJ1Y2tldHNPZkZhaWw7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSBy
aWdodCBTdHJ1Y3R1cmUuCi0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUo
cmVnVDAsIHN0cnVjdHVyZSkpOwotCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3Ry
dWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7
Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0
KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAg
Y3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgdGVzdFByb3RvdHlwZShwcm90b09i
amVjdCwgYnVja2V0c09mRmFpbCwgc3R1YkluZm8pOwotICAgIH0KLSAgICBBU1NFUlQocHJvdG9P
YmplY3QpOwotCi0gICAgYm9vbCBuZWVkc1N0dWJMaW5rID0gZmFsc2U7Ci0gICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVHZXR0ZXIoKSkgewotICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKLSAg
ICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIGNhY2hlZE9m
ZnNldCk7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlf
aWRfZ2V0dGVyX3N0dWIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0g
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0
cnVlOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X2lk
X2N1c3RvbV9zdHViKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0
cihwcm90b09iamVjdCkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1t
UHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjb25zdF9jYXN0
PElkZW50aWZpZXIqPigmaWRlbnQpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29t
cGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7Ci0g
ICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwotCi0gICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKLSAg
ICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAo
aXRlci0+dG8pCi0gICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhpdGVyLT5mcm9tLCBG
dW5jdGlvblB0cihpdGVyLT50bykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0
c09mRmFpbCwgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHVi
SW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdpbikpOwotCi0gICAgLy8gT24g
c3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQg
d2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7Ci0KLSAgICAvLyBUcmFjayB0aGUg
c3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0g
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0
aW5lKAotICAgICAgICBGSU5BTElaRV9DT0RFKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0g
ICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgY2hhaW4gc3R1YiBmb3IgJXMsIHJl
dHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jayku
ZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fdm0sCi0gICAgICAgIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgbmVlZHNTdHViTGluayk7Ci0gICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0KLSAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBq
dW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVh
ZC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1
cmVDaGVjayk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsK
LSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7Ci19Ci0K
IHZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQpAQCAtMTI0Myw4ICs4
MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zCiAgICAgICAg
IHJldHVybjsKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGUs
IG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfdCogb3BlcmFuZFNsb3QsIGlu
dCB2YWx1ZSkKQEAgLTEzMjIsMTQgKzg4Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luaXRfZ2xv
YmFsX2NvbnN0KEluc3QKICAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmplY3QsIHJl
Z1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFi
bGVBY2Nlc3MpOwogfQogCi12b2lkIEpJVDo6cmVzZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZl
ciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQotewotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGN0aV9vcF9n
ZXRfYnlfaWQpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJl
Z2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5z
dHJ1Y3R1cmVUb0NvbXBhcmUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVy
KSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0
YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNw
bGFjZW1lbnRMYWJlbCksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5z
dHJ1Y3R1cmVDaGVjayksIHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dCgtc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pKTsKLX0KLQog
I2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFJl
Z2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVn
aXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlLCBXcml0ZUJhcnJpZXJVc2VL
aW5kIHVzZUtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gMTU3NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMywxMDYgKzEyMyw2IEBAIHZvaWQgcGVyZm9ybVBsYXRm
b3JtU3BlY2lmaWNKSVRBc3NlcnRpb24KICNlbmRpZgogfQogCi1ORVZFUl9JTkxJTkUgc3RhdGlj
IHZvaWQgdHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKLXsKLSAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFdyaXRl
IGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZvciByZWN1cnNpb24gaGVyZSBq
dXN0Ci0gICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBjaGVjayBm
b3IgcmVjdXJzaW9uLgotCi0gICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3Ig
aW1tZWRpYXRlcy4KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkgewotICAgICAgICBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlv
blB0cihjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOwotCi0gICAgaWYgKGlzSlNBcnJh
eShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpIHsKLSAgICAgICAgSklUOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChjYWxs
RnJhbWUtPnNjb3BlKCktPnZtKCksIGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBw
cm9wZXJ0eU5hbWUgPT0gY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAg
ICAgIC8vIFRoZSB0cmFkZW9mZiBvZiBjb21waWxpbmcgYW4gcGF0Y2hlZCBpbmxpbmUgc3RyaW5n
IGxlbmd0aCBhY2Nlc3Mgcm91dGluZSBkb2VzIG5vdCBzZWVtCi0gICAgICAgIC8vIHRvIHBheSBv
ZmYsIHNvIHdlIGN1cnJlbnRseSBvbmx5IGRvIHRoaXMgZm9yIGFycmF5cy4KLSAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgdm0tPmdl
dENUSVN0dWIoc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcikuY29kZSgpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVuY2FjaGVhYmxlOiBnaXZlIHVwLgotICAgIGlm
ICghc2xvdC5pc0NhY2hlYWJsZSgpKSB7Ci0gICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
YWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOwotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5
X2lkX2dlbmVyaWMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTQ2VsbCogYmFz
ZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0KLSAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcoKSkgewotICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlf
aWRfZ2VuZXJpYzsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9j
aywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBoaXQ6IFNwZWNpYWxpemUg
aW5zdHJ1Y3Rpb24gYW5kIHJlZiBTdHJ1Y3R1cmVzLgotCi0gICAgaWYgKHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0
KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkp
Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1
cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFkZHJlc3Mp
OwotICAgICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZihjYWxsRnJhbWUtPnZtKCks
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KSB7Ci0gICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9nZW5l
cmljOwotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1
cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gc3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSkgewotICAgICAgICBKU09iamVjdCogc2xv
dEJhc2VPYmplY3QgPSBhc09iamVjdChzbG90LnNsb3RCYXNlKCkpOwotICAgICAgICBzaXplX3Qg
b2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICBpZiAoc3RydWN0dXJlLT50
eXBlSW5mbygpLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpKSB7Ci0gICAgICAgICAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYzsKLSAgICAgICAg
ICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3Ms
IEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYykpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3Np
bmcgYSBwcm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAotICAgICAg
ICAvLyBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgotICAgICAgICBpZiAo
c2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAg
ICAgc2xvdEJhc2VPYmplY3QtPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFtZS0+dm0o
KSk7Ci0gICAgICAgICAgICBvZmZzZXQgPSBzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmdl
dChjYWxsRnJhbWUtPnZtKCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvKGNhbGxGcmFtZS0+dm0oKSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBzbG90QmFzZU9iamVjdC0+c3RydWN0
dXJlKCksIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKTsKLQotICAgICAgICBBU1NFUlQoIXN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwotICAgICAgICBBU1NFUlQoIXNsb3RCYXNlT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpOwotICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlk
UHJvdG8oY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0cnVjdHVyZSwgc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIG9mZnNldCwgcmV0dXJuQWRkcmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAg
IHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoY2Fs
bEZyYW1lLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQp
OwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pIHsKLSAgICAgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWM7Ci0gICAgICAgIGN0
aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYykpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihjYWxsRnJhbWUpOwotICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZENoYWluKGNh
bGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBw
cm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKTsKLSAgICBKSVQ6
OmNvbXBpbGVHZXRCeUlkQ2hhaW4oY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjYWxsRnJhbWUs
IGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCwgcmV0dXJuQWRkcmVzcyk7Ci19Ci0KICNpZiAhZGVm
aW5lZChOREVCVUcpCiAKIGV4dGVybiAiQyIgewpAQCAtMzY4LDYgKzI2OCw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyBUIHRocm93RXhjZXAKICNkZWZpbmUgREVGSU5FX1NUVUJfRlVO
Q1RJT04ocnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlfIyNvcChTVFVCX0FSR1NfREVDTEFS
QVRJT04pCiAjZW5kaWYKIAorLy8gRklYTUU6IFRoaXMgaXMgc3RpbGwgdXNlZCBieSBnZXRfYXJn
dW1lbnRzX2xlbmd0aCwgYnV0IG90aGVyIHRoYW4gdGhhdCBpdCdzIGRlYWQuCiBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X2lkX2dlbmVyaWMpCiB7CiAgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMzgzLDI3MCArMjg0LDYgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wX2dldF9ieV9pZCkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
LSAgICBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCk7
Ci0KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSAmY29kZUJsb2NrLT5n
ZXRTdHViSW5mbyhTVFVCX1JFVFVSTl9BRERSRVNTKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5
cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0KLSAgICBpZiAoIXN0dWJJbmZv
LT5zZWVuT25jZSgpKQotICAgICAgICBzdHViSW5mby0+c2V0U2VlbigpOwotICAgIGVsc2UKLSAg
ICAgICAgdHJ5Q2FjaGVHZXRCeUlEKGNhbGxGcmFtZSwgY29kZUJsb2NrLCBTVFVCX1JFVFVSTl9B
RERSRVNTLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7Ci0KLSAgICBDSEVDS19G
T1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV9p
ZF9zZWxmX2ZhaWwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwot
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBJ
ZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCk7Ci0KLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gJmNvZGVCbG9jay0+Z2V0U3R1YkluZm8oU1RVQl9S
RVRVUk5fQUREUkVTUyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFt
ZSwgaWRlbnQsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwotCi0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotCi0gICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgIAotICAg
IGlmIChiYXNlVmFsdWUuaXNDZWxsKCkKLSAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZSgpCi0g
ICAgICAgICYmICFiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpCi0gICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsK
LQotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdDsKLSAgICAgICAgaW50IGxpc3RJbmRleCA9IDE7Ci0KLSAgICAgICAgaWYgKHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKLSAgICAgICAgICAgIHN0dWJJbmZv
LT5pbml0R2V0QnlJZFNlbGYoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKLQotICAgICAgICBpZiAo
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIXN0dWJJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNh
bGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgMCwgc3R1YkluZm8t
PnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAg
ICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QsIDEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0ID0gc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAg
ICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemU7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FD
SEVfU0laRSkgewotICAgICAgICAgICAgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RT
aXplKys7Ci0gICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoY2FsbEZyYW1l
LT5zY29wZSgpLT52bSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QsIGxpc3RJbmRleCwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaWRlbnQs
IHNsb3QsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotCi0gICAgICAgICAgICBpZiAobGlzdEluZGV4
ID09IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKLSAgICAgICAgICAgICAgICBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERSRVNT
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMpKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZQotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5j
b2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV9pZF9nZW5lcmljKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQot
Ci1zdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnZXRQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3RTbG90KFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgaW50JiBsaXN0SW5kZXgpCi17Ci0gICAgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gMDsKLSAg
ICBsaXN0SW5kZXggPSAxOwotCi0gICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkgewot
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoKLSAgICAgICAgcHJvdG90eXBlU3RydWN0
dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qodm0sIG93bmVyLCBz
dHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0
dXJlLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNsZWFyKCk7
Ci0gICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1
cmVMaXN0LCAyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2No
YWluOgotICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCh2bSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1Yklu
Zm8tPnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51
LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZS5jbGVhcigpOwotICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3Qo
cHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNj
ZXNzX2dldF9ieV9pZF9wcm90b19saXN0OgotICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0
ID0gc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBs
aXN0SW5kZXggPSBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplOwotICAgICAg
ICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQotICAgICAgICAg
ICAgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsrOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLSAgICAKLSAgICBBU1NFUlQobGlzdEluZGV4IDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FD
SEVfU0laRSk7Ci0gICAgcmV0dXJuIHByb3RvdHlwZVN0cnVjdHVyZUxpc3Q7Ci19Ci0KLURFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfaWRfZ2V0dGVyX3N0dWIp
Ci17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBjYWxsR2V0dGVyKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzT2JqZWN0KCksIHN0
YWNrRnJhbWUuYXJnc1swXS5qc09iamVjdCgpKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+dm0o
KSwgc3RhY2tGcmFtZS5hcmdzWzJdLnJldHVybkFkZHJlc3MoKSwgU1RVQl9SRVRVUk5fQUREUkVT
Uyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLURFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfaWRfY3VzdG9tX3N0dWIpCi17
Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNPYmplY3QqIHNsb3RCYXNl
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzT2JqZWN0KCk7Ci0gICAgUHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmMgZ2V0dGVyID0gcmVpbnRlcnByZXRfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oc3RhY2tGcmFtZS5hcmdzWzFdLmFzUG9pbnRlcik7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uaWRlbnRpZmllcigpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gZ2V0dGVyKGNhbGxGcmFtZSwgc2xvdEJhc2UsIGlkZW50KTsKLSAgICBpZiAoY2Fs
bEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUo
JmNhbGxGcmFtZS0+dm0oKSwgc3RhY2tGcmFtZS5hcmdzWzNdLnJldHVybkFkZHJlc3MoKSwgU1RV
Ql9SRVRVUk5fQUREUkVTUyk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5
X2lkX3Byb3RvX2xpc3QpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRl
bnRpZmllcigpOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9ICZjb2RlQmxvY2stPmdl
dFN0dWJJbmZvKFNUVUJfUkVUVVJOX0FERFJFU1MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0KLSAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkKLSAgICAgICAgfHwgIWJhc2VWYWx1ZS5pc0NlbGwo
KQotICAgICAgICB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpCi0gICAgICAgIHx8IGJhc2VWYWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpCi0gICAgICAgIHx8IGJhc2VWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nKCkpIHsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRf
YnlfaWRfcHJvdG9fZmFpbCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7Ci0gICAgfQotCi0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKTsKLQotICAgIEpTT2JqZWN0KiBzbG90QmFzZU9iamVjdCA9IGFzT2Jq
ZWN0KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKQotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCBTVFVC
X1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwp
KTsKLSAgICBlbHNlIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpIHsKLSAgICAgICAgQVNT
RVJUKCFiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS5oYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QoKSkgewotICAgICAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgU1RVQl9SRVRVUk5fQUREUkVTUywg
RnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSBpbiBhIGxvb3AsIGl0J3Mg
YSBnb29kIGJldCB0aGF0IGl0Ci0gICAgICAgIC8vIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBh
IGRpY3Rpb25hcnkuCi0gICAgICAgIGlmIChzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmlz
RGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICBzbG90QmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rp
b25hcnlPYmplY3QoY2FsbEZyYW1lLT52bSgpKTsKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3RC
YXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVydHlOYW1l
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBsaXN0SW5kZXg7Ci0gICAgICAgIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IGdldFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNsb3QoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mbywgbGlzdEluZGV4KTsKLSAgICAgICAgaWYgKGxp
c3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkgewotICAgICAgICAgICAgSklU
Ojpjb21waWxlR2V0QnlJZFByb3RvTGlzdChjYWxsRnJhbWUtPnNjb3BlKCktPnZtKCksIGNhbGxG
cmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgbGlzdElu
ZGV4LCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1l
LCBzbG90LCBvZmZzZXQpOwotCi0gICAgICAgICAgICBpZiAobGlzdEluZGV4ID09IChQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKLSAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0
cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3RfZnVsbCkpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JD
aGFpbkFjY2VzcyhjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBwcm9wZXJ0
eU5hbWUsIG9mZnNldCk7Ci0gICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hh
aW4pIHsKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ss
IFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9f
ZmFpbCkpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKTsKLSAgICAgICAgaW50IGxpc3RJbmRleDsKLSAgICAg
ICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0
ID0gZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChjYWxsRnJhbWUtPnZtKCks
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLCBsaXN0SW5kZXgpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSkgewotICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvQ2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW5MaXN0KGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY2FsbEZyYW1lLCBjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHN0cnVjdHVy
ZSwgcHJvdG9DaGFpbiwgY291bnQsIHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0KTsKLQotICAg
ICAgICAgICAgaWYgKGxpc3RJbmRleCA9PSAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MSkpCi0gICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9j
aywgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90
b19saXN0X2Z1bGwpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wX2dldF9ieV9pZF9wcm90b19saXN0X2Z1bGwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZS
QU1FKHN0YWNrRnJhbWUpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFy
Z3NbMF0uanNWYWx1ZSgpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFj
a0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBzbG90KTsKLQotICAgIENIRUNLX0ZPUl9FWENF
UFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQot
Ci1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X2lkX3Byb3Rv
X2ZhaWwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIFBy
b3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFs
dWUuZ2V0KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmll
cigpLCBzbG90KTsKLQotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpCi17Ci0gICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFj
a0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KHN0YWNrRnJhbWUuY2FsbEZy
YW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBzbG90KTsKLQotICAgIENIRUNL
X0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5
X2lkX3N0cmluZ19mYWlsKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUo
KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFd
LmlkZW50aWZpZXIoKSwgc2xvdCk7Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQogREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZfYWN0aXZhdGlvbikKIHsKICAgICBTVFVCX0lOSVRf
U1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oCShyZXZpc2lvbiAxNTc0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMCwxNiArMzMwLDcgQEAgZXh0ZXJuICJDIiB2
b2lkIGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUoKQogdm9pZCBwZXJmb3JtUGxhdGZvcm1TcGVjaWZp
Y0pJVEFzc2VydGlvbnMoVk0qKTsKIAogZXh0ZXJuICJDIiB7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRf
U1RVQiBjdGlfb3BfZ2V0X2J5X2lkKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
OwotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX1NU
VUIgY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1YihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfZ2Vu
ZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVl
IEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfZ2V0dGVyX3N0dWIoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5
X2lkX3Byb3RvX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlf
b3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3RfZnVsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc2VsZl9m
YWlsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlf
dmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFs
X3N0cmluZyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTU3NDU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYwLDYg
KzM2MCw4IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKIAogdm9p
ZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgIAogICAgIGJvb2wgY2FjaGVkID0g
dHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHVi
SW5mbyk7CiAgICAgaWYgKCFjYWNoZWQpCiAgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwpA
QCAtNTk5LDYgKzYwMSw4IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0
YXQKIAogdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CisgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgCiAgICAgYm9v
bCBkb250Q2hhbmdlQ2FsbCA9IHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKICAgICBpZiAoIWRvbnRDaGFuZ2VDYWxsKQog
ICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE1NzQ1OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjczLDY2ICsyNzMsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVj
dFRoCiAgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0
cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhUcmFtcG9saW5l
R2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwotICAgIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGEgc3RyaW5nCi0gICAgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgZmFpbHVyZUNhc2VzMSA9IGppdC5lbWl0SnVtcElmTm90SlNDZWxs
KEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0gICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZmFpbHVy
ZUNhc2VzMiA9IGppdC5icmFuY2hQdHIoCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpOb3RFcXVh
bCwgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoCi0gICAgICAgICAgICBKU0ludGVyZmFjZUpJVDo6
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICBKU0ludGVyZmFjZUpJ
VDo6VHJ1c3RlZEltbVB0cih2bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Ci0KLSAgICAvLyBD
aGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4KLSAgICBq
aXQubG9hZDMyKAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJ
VDo6cmVnVDAsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwKLSAgICAgICAgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QwKTsKLQotICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVDYXNlczMg
PSBqaXQuYnJhbmNoMzIoCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpMZXNzVGhhbiwgSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDApKTsKLQotICAg
IC8vIHJlZ1QwIGNvbnRhaW5zIGEgNjQgYml0IHZhbHVlIChpcyBwb3NpdGl2ZSwgaXMgemVybyBl
eHRlbmRlZCkgc28gd2UgZG9uJ3QgbmVlZCBzaWduIGV4dGVuZCBoZXJlLgotICAgIGppdC5lbWl0
RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QwKTsKLSAgICAKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gcmVn
VDAgaG9sZHMgcGF5bG9hZCwgcmVnVDEgaG9sZHMgdGFnCi0KLSAgICBKU0ludGVyZmFjZUpJVDo6
SnVtcCBmYWlsdXJlQ2FzZXMxID0gaml0LmJyYW5jaDMyKAotICAgICAgICBKU0ludGVyZmFjZUpJ
VDo6Tm90RXF1YWwsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwKLSAgICAgICAgSlNJbnRlcmZhY2VK
SVQ6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgSlNJbnRlcmZhY2VKSVQ6
Okp1bXAgZmFpbHVyZUNhc2VzMiA9IGppdC5icmFuY2hQdHIoCi0gICAgICAgIEpTSW50ZXJmYWNl
SklUOjpOb3RFcXVhbCwKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotCi0g
ICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcu
Ci0gICAgaml0LmxvYWQzMigKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QwLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksCi0gICAgICAgIEpT
SW50ZXJmYWNlSklUOjpyZWdUMik7Ci0KLSAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBmYWlsdXJl
Q2FzZXMzID0gaml0LmJyYW5jaDMyKAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJvdmUsIEpT
SW50ZXJmYWNlSklUOjpyZWdUMiwgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihJTlRfTUFY
KSk7Ci0gICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBKU0ludGVyZmFjZUpJVDo6
cmVnVDApOwotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpCi0KLSAgICBqaXQucmV0KCk7Ci0gICAgCi0gICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwg
ZmFpbHVyZUNhc2VzMUNhbGwgPSBqaXQubWFrZVRhaWxSZWN1cnNpdmVDYWxsKGZhaWx1cmVDYXNl
czEpOwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGZhaWx1cmVDYXNlczJDYWxsID0gaml0Lm1h
a2VUYWlsUmVjdXJzaXZlQ2FsbChmYWlsdXJlQ2FzZXMyKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6
Q2FsbCBmYWlsdXJlQ2FzZXMzQ2FsbCA9IGppdC5tYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoZmFpbHVy
ZUNhc2VzMyk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdM
T0JBTF9USFVOS19JRCk7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMx
Q2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRf
YnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczND
YWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgic3RyaW5nIGxlbmd0aCB0cmFt
cG9saW5lIikpOwotfQotCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdl
bmVyYXRvcihWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBpbnQg
ZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24gPSBOYXRpdmVFeGVjdXRhYmxlOjpvZmZzZXRPZk5h
dGl2ZUZ1bmN0aW9uRm9yKGtpbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNTc0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw2
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHUKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKFZNKik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGFyaXR5Rml4dXAoVk0qKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>