<?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>168833</bug_id>
          
          <creation_ts>2017-02-24 10:43:28 -0800</creation_ts>
          <short_desc>Move Arg::Type and Arg::Width out into the B3 namespace, since they are general concepts</short_desc>
          <delta_ts>2017-02-24 14:52:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>162349</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1280794</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-24 10:43:28 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280856</commentid>
    <comment_count>1</comment_count>
      <attachid>302685</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-24 13:54:04 -0800</bug_when>
    <thetext>Created attachment 302685
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280864</commentid>
    <comment_count>2</comment_count>
      <attachid>302685</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-24 14:06:39 -0800</bug_when>
    <thetext>Comment on attachment 302685
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:22
&gt; +        I kept both as non-enum classes because I think that we&apos;ve learned that terse compiler
&gt; +        code is a good thing. I don&apos;t want to say Bank::GP when I can say GP. With Width, the
&gt; +        argument is even stronger, since you cannot say Width::8 but you can say Width8.

I don&apos;t always agree with this. But in this situation, after reading this patch, I agree it&apos;s easier to read. I&apos;m not in love with calling it &quot;bank&quot;, but I&apos;m not sure what else to call it, and this is consistent with uses of &quot;bank&quot; elsewhere.
The reason I don&apos;t like it, for example, is the function name &quot;acceptsBank&quot; means nothing to me unless I&apos;ve read the code.

I wonder if we can still by the increased type safety of the enum class without having to prefix with the enum name. Is there a way to use &quot;using&quot; or somthing similar on an enum class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280865</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-24 14:08:17 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 302685 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=302685&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:22
&gt; &gt; +        I kept both as non-enum classes because I think that we&apos;ve learned that terse compiler
&gt; &gt; +        code is a good thing. I don&apos;t want to say Bank::GP when I can say GP. With Width, the
&gt; &gt; +        argument is even stronger, since you cannot say Width::8 but you can say Width8.
&gt; 
&gt; I don&apos;t always agree with this. But in this situation, after reading this
&gt; patch, I agree it&apos;s easier to read. I&apos;m not in love with calling it &quot;bank&quot;,
&gt; but I&apos;m not sure what else to call it, and this is consistent with uses of
&gt; &quot;bank&quot; elsewhere.
&gt; The reason I don&apos;t like it, for example, is the function name &quot;acceptsBank&quot;
&gt; means nothing to me unless I&apos;ve read the code.

Is the problem here the name of Bank or the fact that it&apos;s not an enum class?

&gt; 
&gt; I wonder if we can still by the increased type safety of the enum class
&gt; without having to prefix with the enum name. Is there a way to use &quot;using&quot;
&gt; or somthing similar on an enum class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280868</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-24 14:13:48 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Comment on attachment 302685 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=302685&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:22
&gt; &gt; &gt; +        I kept both as non-enum classes because I think that we&apos;ve learned that terse compiler
&gt; &gt; &gt; +        code is a good thing. I don&apos;t want to say Bank::GP when I can say GP. With Width, the
&gt; &gt; &gt; +        argument is even stronger, since you cannot say Width::8 but you can say Width8.
&gt; &gt; 
&gt; &gt; I don&apos;t always agree with this. But in this situation, after reading this
&gt; &gt; patch, I agree it&apos;s easier to read. I&apos;m not in love with calling it &quot;bank&quot;,
&gt; &gt; but I&apos;m not sure what else to call it, and this is consistent with uses of
&gt; &gt; &quot;bank&quot; elsewhere.
&gt; &gt; The reason I don&apos;t like it, for example, is the function name &quot;acceptsBank&quot;
&gt; &gt; means nothing to me unless I&apos;ve read the code.
&gt; 
&gt; Is the problem here the name of Bank or the fact that it&apos;s not an enum class?
The name of bank. Again, I don&apos;t have a better suggestion ATM.

&gt; &gt; 
&gt; &gt; I wonder if we can still by the increased type safety of the enum class
&gt; &gt; without having to prefix with the enum name. Is there a way to use &quot;using&quot;
&gt; &gt; or somthing similar on an enum class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280871</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-24 14:17:53 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; Comment on attachment 302685 [details]
&gt; &gt; &gt; the patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=302685&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; r=me
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:22
&gt; &gt; &gt; &gt; +        I kept both as non-enum classes because I think that we&apos;ve learned that terse compiler
&gt; &gt; &gt; &gt; +        code is a good thing. I don&apos;t want to say Bank::GP when I can say GP. With Width, the
&gt; &gt; &gt; &gt; +        argument is even stronger, since you cannot say Width::8 but you can say Width8.
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t always agree with this. But in this situation, after reading this
&gt; &gt; &gt; patch, I agree it&apos;s easier to read. I&apos;m not in love with calling it &quot;bank&quot;,
&gt; &gt; &gt; but I&apos;m not sure what else to call it, and this is consistent with uses of
&gt; &gt; &gt; &quot;bank&quot; elsewhere.
&gt; &gt; &gt; The reason I don&apos;t like it, for example, is the function name &quot;acceptsBank&quot;
&gt; &gt; &gt; means nothing to me unless I&apos;ve read the code.
&gt; &gt; 
&gt; &gt; Is the problem here the name of Bank or the fact that it&apos;s not an enum class?
&gt; The name of bank. Again, I don&apos;t have a better suggestion ATM.

OK, we&apos;re on the same page. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280887</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-24 14:52:17 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/212970</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302685</attachid>
            <date>2017-02-24 13:54:04 -0800</date>
            <delta_ts>2017-02-24 14:06:39 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>214761</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEyOTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOSBA
QAorMjAxNy0wMi0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE1vdmUgQXJnOjpUeXBlIGFuZCBBcmc6OldpZHRoIG91dCBpbnRvIHRoZSBCMyBuYW1lc3BhY2Us
IHNpbmNlIHRoZXkgYXJlIGdlbmVyYWwgY29uY2VwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODgzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSSB3YW50IHRvIHVzZSB0aGUgQWlyOjpB
cmc6OlR5cGUgYW5kIEFpcjo6QXJnOjpXaWR0aCBjb25jZXB0cyBpbiBCMy4gV2UgYXJlIGFscmVh
ZHkKKyAgICAgICAgZG9pbmcgdGhpcyBhIGJpdCwgYW5kIGl0J3MgYWt3YXJkIGJlY2F1c2Ugb2Yg
dGhlIG5hbWVzcGFjaW5nLiBUaHJvdWdob3V0IEIzIHdlIHRha2UgdGhlCisgICAgICAgIGFwcHJv
YWNoIHRoYXQgaWYgc29tZXRoaW5nIGlzIG5vdCBzcGVjaWZpYyB0byBBaXIsIHRoZW4gaXQgc2hv
dWxkIGJlIGluIHRoZSBCMworICAgICAgICBuYW1lc3BhY2UuCisgICAgICAgIAorICAgICAgICBU
aGlzIG1vdmVzIEFpcjo6QXJnOjpUeXBlIHRvIEIzOjpCYW5rLiBUaGlzIG1vdmVzIEFpcjo6QXJn
OjpXaWR0aCB0byBCMzo6V2lkdGguCisgICAgICAgIAorICAgICAgICBJIHJlbmFtZWQgQXJnOjpU
eXBlIHRvIEJhbmsgYmVjYXVzZSB0aGVyZSBpcyBhbHJlYWR5IGEgQjM6OlR5cGUgYW5kIGJlY2F1
c2UgQXJnOjpUeXBlCisgICAgICAgIHdhcyBuZXZlciByZWFsbHkgYSB0eXBlLiBJdHMgcHVycG9z
ZSB3YXMgYWx3YXlzIHRvIGlkZW50aWZ5IHJlZ2lzdGVyIGJhbmtzLCBhbmQgd2UgdXNlCisgICAg
ICAgIHRoaXMgZW51bSB3aGVuIHRoZSB0aGluZyB3ZSBjYXJlIGFib3V0IGlzIHdoZXRoZXIgdGhl
IHZhbHVlIGlzIG1vc3QgYXBwcm9wcmlhdGUgZm9yCisgICAgICAgIEdQUnMgb3IgRlBScy4KKyAg
ICAgICAgCisgICAgICAgIEkga2VwdCBib3RoIGFzIG5vbi1lbnVtIGNsYXNzZXMgYmVjYXVzZSBJ
IHRoaW5rIHRoYXQgd2UndmUgbGVhcm5lZCB0aGF0IHRlcnNlIGNvbXBpbGVyCisgICAgICAgIGNv
ZGUgaXMgYSBnb29kIHRoaW5nLiBJIGRvbid0IHdhbnQgdG8gc2F5IEJhbms6OkdQIHdoZW4gSSBj
YW4gc2F5IEdQLiBXaXRoIFdpZHRoLCB0aGUKKyAgICAgICAgYXJndW1lbnQgaXMgZXZlbiBzdHJv
bmdlciwgc2luY2UgeW91IGNhbm5vdCBzYXkgV2lkdGg6OjggYnV0IHlvdSBjYW4gc2F5IFdpZHRo
OC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYjMvQjNCYW5rLmNwcDogQWRk
ZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzQmFuay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmZvckVhY2hCYW5rKToKKyAgICAgICAgKEpTQzo6
QjM6OmJhbmtGb3JUeXBlKToKKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lhbC5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAqIGIzL0Iz
TGVnYWxpemVNZW1vcnlPZmZzZXRzLmNwcDoKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpydW4pOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpzY2FsZUZvclNobCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6
OmVmZmVjdGl2ZUFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphZGRy
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlR2VuZXJpY0NvbXBh
cmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpjcmVhdGVCcmFuY2gpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpjcmVhdGVDb21wYXJlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlU2VsZWN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFs
dWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6OmFjY2Vzc1dpZHRoKToKKyAg
ICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6CisgICAgICAgICogYjMvQjNNb3ZlQ29uc3RhbnRz
LmNwcDoKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKiBiMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmZv
ckVhY2hBcmdJbXBsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlLmg6CisgICAgICAgICogYjMvQjNW
YXJpYWJsZS5oOgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGU6OndpZHRoKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhcmlhYmxlOjpiYW5rKToKKyAgICAgICAgKiBiMy9CM1dhc21BZGRyZXNzVmFs
dWUuaDoKKyAgICAgICAgKiBiMy9CM1dpZHRoLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnBy
aW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzV2lkdGguaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkIzOjpwb2ludGVyV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6d2lkdGhGb3JUeXBlKToK
KyAgICAgICAgKEpTQzo6QjM6OmNvbnNlcnZhdGl2ZVdpZHRoKToKKyAgICAgICAgKEpTQzo6QjM6
Om1pbmltdW1XaWR0aCk6CisgICAgICAgIChKU0M6OkIzOjpieXRlcyk6CisgICAgICAgIChKU0M6
OkIzOjp3aWR0aEZvckJ5dGVzKToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUdyYXBoQ29sb3JpbmcuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNr
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICog
YjMvYWlyL0FpckFyZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Y2FuUmVwcmVz
ZW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0NvbXBhdGlibGVCYW5rKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0NvbXBhdGlibGVUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFz
QmFuayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFuayk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6aXNCYW5rKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JF
YWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlcldpZHRoKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0eXBlRm9yQjNUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp3aWR0aEZvckIzVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Y29uc2VydmF0aXZlV2lkdGgpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om1pbmltdW1XaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6Ynl0ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OndpZHRoRm9yQnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6Omhhc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnR5
cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZ0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnVGhpbmdIZWxwZXI8VG1wPjo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZ1RoaW5nSGVscGVyPEFyZz46OmZvckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmdUaGluZ0hlbHBlcjxSZWc+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpmb3JFYWNoKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAg
KiBiMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OkNvZGUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6Q29kZTo6cGluUmVnaXN0ZXIpOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2Rl
Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpudW1UbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVnc0lu
UHJpb3JpdHlPcmRlckltcGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDdXN0b20uY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpQYXRjaEN1c3RvbTo6aXNWYWxpZEZvcm0pOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybSk6CisgICAgICAgICogYjMv
YWlyL0FpckN1c3RvbS5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQYXRjaEN1c3RvbTo6Zm9y
RWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsQ3VzdG9tOjpmb3JFYWNoQXJn
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29sZENDYWxsQ3VzdG9tOjpmb3JFYWNoQXJnKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZUN1c3RvbTo6Zm9yRWFjaEFyZyk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Oldhc21Cb3VuZHNDaGVja0N1c3RvbTo6Zm9yRWFjaEFyZyk6Cisg
ICAgICAgICogYjMvYWlyL0FpckR1bXBBc0pTLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
ZHVtcEFzSlMpOgorICAgICAgICAqIGIzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OmVsaW1pbmF0ZURlYWRDb2RlKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyRW1pdFNodWZmbGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjplbWl0U2h1ZmZs
ZSk6CisgICAgICAgICogYjMvYWlyL0FpckVtaXRTaHVmZmxlLmg6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlNodWZmbGVQYWlyOjpTaHVmZmxlUGFpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlNodWZmbGVQYWlyOjp3aWR0aCk6CisgICAgICAgICogYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpmaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6
aGFzQXJnRWZmZWN0cyk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2gpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAqIGIz
L2Fpci9BaXJMaXZlbmVzcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBMaXZlbmVzc0Fk
YXB0ZXI6Om51bUluZGljZXMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBMaXZlbmVzc0Fk
YXB0ZXI6OmFjY2VwdHNCYW5rKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wTGl2ZW5lc3NB
ZGFwdGVyOjp2YWx1ZVRvSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBMaXZlbmVz
c0FkYXB0ZXI6OmluZGV4VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xv
dExpdmVuZXNzQWRhcHRlcjo6YWNjZXB0c0JhbmspOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdMaXZlbmVzc0FkYXB0ZXI6OmFjY2VwdHNCYW5rKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcExpdmVuZXNzQWRhcHRlcjo6YWNjZXB0c1R5cGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI6OmFjY2VwdHNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjph
Y2NlcHRzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJl
c3N1cmUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb2dSZWdpc3RlclByZXNzdXJlKToK
KyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6bG93ZXJBZnRlclJlZ0FsbG9jKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93
ZXJNYWNyb3MuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlck1hY3Jvcyk6CisgICAg
ICAgICogYjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OnBhZEludGVyZmVyZW5jZSk6CisgICAgICAgICogYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdp
c3RlcnMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToK
KyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6c3BpbGxFdmVyeXRoaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNvbHV0ZVRtcE1hcHBlcjxBcmc6OkdQPjo6
YWJzb2x1dGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic29sdXRl
VG1wTWFwcGVyPEFyZzo6R1A+OjpsYXN0TWFjaGluZVJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNvbHV0ZVRtcE1hcHBlcjxBcmc6OkdQPjo6dG1wRnJv
bUFic29sdXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNvbHV0
ZVRtcE1hcHBlcjxBcmc6OkZQPjo6YWJzb2x1dGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFic29sdXRlVG1wTWFwcGVyPEFyZzo6RlA+OjpsYXN0TWFjaGluZVJlZ2lz
dGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNvbHV0ZVRtcE1h
cHBlcjxBcmc6OkZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJUbXBXaWR0aC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcFdpZHRo
OjpyZWNvbXB1dGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXBXaWR0aC5oOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBXaWR0aDo6d2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXBXaWR0aDo6cmVxdWlyZWRXaWR0aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcFdpZHRo
OjpkZWZXaWR0aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcFdpZHRoOjp1c2VXaWR0aCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcFdpZHRoOjpXaWR0aHM6OldpZHRocyk6CisgICAg
ICAgICogYjMvYWlyL0FpclVzZUNvdW50cy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VD
b3VudHM6OlVzZUNvdW50cyk6CisgICAgICAgICogYjMvYWlyL0FpclZhbGlkYXRlLmNwcDoKKyAg
ICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjoKKyAgICAgICAgKiBiMy9haXIvdGVz
dGFpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmNvbXBpbGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjppbnZva2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpjb21waWxlQW5kUnVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVz
dFNpbXBsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmxvYWRDb25zdGFudElt
cGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb2FkQ29uc3RhbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb2FkRG91YmxlQ29uc3RhbnQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNpbXBsZVN3YXApOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVMb25nU2hpZnQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZUxvbmdTaGlmdEJhY2t3YXJkcyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2ltcGxlUm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaW1wbGVCcm9h
ZGNhc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZUJyb2Fk
Y2FzdEFsbFJlZ3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZs
ZVRyZWVTaGlmdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxl
VHJlZVNoaWZ0QmFja3dhcmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0
U2h1ZmZsZVRyZWVTaGlmdE90aGVyQmFja3dhcmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjp0ZXN0U2h1ZmZsZU11bHRpcGxlU2hpZnRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6dGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdlSW5XZWlyZE9yZGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVSb3RhdGVXaXRo
TG9uZ0ZyaW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxl
TXVsdGlwbGVSb3RhdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNo
dWZmbGVTaGlmdEFuZFJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRl
c3RTaHVmZmxlU2hpZnRBbGxSZWdzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
dGVzdFNodWZmbGVSb3RhdGVBbGxSZWdzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6dGVzdFNodWZmbGVTaW1wbGVTd2FwNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjp0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0NjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjp0ZXN0U2h1ZmZsZVN3YXBNaXhlZFdpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaGlmdE1peGVkV2lkdGgpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaGlmdE1lbW9yeUxvbmcpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVncyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxS
ZWdzNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpjb21iaW5lSGlMbyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxS
ZWdzTWl4ZWRXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVm
ZmxlUm90YXRlTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNo
dWZmbGVSb3RhdGVNZW1vcnk2NCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRl
c3RTaHVmZmxlUm90YXRlTWVtb3J5TWl4ZWRXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90YXRlTWVtb3J5QWxsUmVnczY0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVSb3RhdGVNZW1vcnlBbGxSZWdzTWl4ZWRX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU3dhcERv
dWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRE
b3VibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0WDg2Vk1VTFNEKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFg4NlZNVUxTRERlc3RSZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0WDg2Vk1VTFNET3AxRGVzdFJleCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RYODZWTVVMU0RPcDJEZXN0UmV4
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFg4NlZNVUxTRE9wc0Rlc3RS
ZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0WDg2Vk1VTFNEQWRkcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RYODZWTVVMU0RBZGRyT3BSZXhB
ZGRyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFg4NlZNVUxTRERlc3RS
ZXhBZGRyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFg4NlZNVUxTRFJl
Z09wRGVzdFJleEFkZHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0WDg2
Vk1VTFNEQWRkck9wRGVzdFJleEFkZHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWly
Ojp0ZXN0WDg2Vk1VTFNEQmFzZU5lZWRzUmV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6dGVzdFg4NlZNVUxTREluZGV4TmVlZHNSZXgpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjp0ZXN0WDg2Vk1VTFNEQmFzZUluZGV4TmVlZFJleCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnJ1bik6IERlbGV0ZWQuCisKIDIwMTctMDItMjQgIFNhYW0gQmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmVtb3ZlIGlu
YWNjdXJhdGUgY29weS1wYXN0ZSBjb21tZW50IGZyb20gcjIxMjkzOS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvYWlyL0FpclZhbGlkYXRlLmNw
cAogCiAgICAgYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAorICAgIGIzL0IzQmFuay5jcHAKICAg
ICBiMy9CM0Jhc2ljQmxvY2suY3BwCiAgICAgYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAKICAg
ICBiMy9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAKQEAgLTE3OCw2ICsxNzksNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL0IzVmFyaWFibGVWYWx1ZS5jcHAKICAgICBiMy9C
M1dhc21BZGRyZXNzVmFsdWUuY3BwCiAgICAgYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAK
KyAgICBiMy9CM1dpZHRoLmNwcAogCiAgICAgYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cAogICAgIGJpbmRpbmdzL1NjcmlwdE9iamVjdC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMTI5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjcwLDYgKzI3MCwxMCBAQAogCQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5MTAgLyogREZHVmFsdWVT
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCAqLzsgfTsKIAkJ
MEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNTAxNTIyOEZGQTAw
Q0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovOyB9OwogCQkwRjJDNjNBQTFFNEZBNDJF
MDBDMTM4MzkgLyogUnVubmluZ1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyogUnVubmluZ1Njb3Bl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QzYzQUYxRTYwQUU0MTAwQzEzODM5IC8qIEIzQmFuay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNC
YW5rLmNwcCAqLzsgfTsKKwkJMEYyQzYzQjAxRTYwQUU0MzAwQzEzODM5IC8qIEIzQmFuay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzYzQUMxRTYw
QUUzQzAwQzEzODM5IC8qIEIzQmFuay5oICovOyB9OworCQkwRjJDNjNCMTFFNjBBRTQ1MDBDMTM4
MzkgLyogQjNXaWR0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJDNjNBRDFFNjBBRTNDMDBDMTM4MzkgLyogQjNXaWR0aC5jcHAgKi87IH07CisJ
CTBGMkM2M0IyMUU2MEFFNDcwMEMxMzgzOSAvKiBCM1dpZHRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNBRTFFNjBBRTNEMDBDMTM4MzkgLyog
QjNXaWR0aC5oICovOyB9OwogCQkwRjJENERERDE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJT
Y29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJENEREQjE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5jcHAgKi87IH07CiAJCTBG
MkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENEREQzE5ODMyRDM0MDA3RDRCMTkg
LyogRGVidWdnZXJTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGMkQ0REU4MTk4MzJEQUMwMDdENEIxOSAvKiBUb1RoaXNTdGF0dXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRDRERTUx
OTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgKi87IH07CkBAIC0xMjYyLDYgKzEy
NjYsNyBAQAogCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUY3Mzgy
QTE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgKi87IH07CiAJCTJBRjcz
ODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUY3MzgyQjE4QkJCRjkyMDA4QTVBMzcg
LyogU3RydWN0dXJlSURUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTJEMzQyRjM2RjcyNDQwOTY4MDRBREIyNCAvKiBTb3VyY2VPcmlnaW4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQyNUJBMTMz
N0U0MzQ0RTFCMjY5QTY3MSAvKiBTb3VyY2VPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzMjFEOUU0Q0ZCNjc0MjNBOTdGMTkxQTcgLyog
TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyMEVDQjE1RUZDNTI0NjI0QkMyRjAyRDUgLyogTW9kdWxlTmFt
ZXNwYWNlQWNjZXNzQ2FzZS5jcHAgKi87IH07CiAJCTM3MUQ4NDJEMTdDOThCNkUwMEVDRjk5NCAv
KiBsaWJ6LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi87IH07CiAJCTQx
Mjk1Mjc3MUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3Jh
cHBlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MTI5NTI3MzFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQxMjk1Mjc4MUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5l
cmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjk1Mjc0MUQyQ0Y2QUMwMEU3OEI4OSAv
KiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY3Myw2
ICsxNjc4LDcgQEAKIAkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJl
YWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovOyB9
OwogCQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUU3Mjk0MEExOTBGMDUxNDAwMUE5
MUI1IC8qIEJ1bmRsZVBhdGguaCAqLzsgfTsKIAkJOUVBNUM3QTExOTBGMDg0MjAwNTA4RUJFIC8q
IEJ1bmRsZVBhdGgubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5tbSAqLzsgfTsKKwkJ
OUY2MzQzNDU3NzI3NEZBRkI5MzM2QzM4IC8qIE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDRTk3OEUzODVB
ODQ5ODE5OTA1MjE1MyAvKiBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmggKi87IH07CiAJCUEx
MjU4NDZFMUI0NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IubHV0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTI1ODQ2
QzFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmx1dC5oICov
OyB9OwogCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExMjU4NDZEMUI0NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1
dC5oICovOyB9OwogCQlBMTJCQkZGMjFCMDQ0QThCMDA2NjRCNjkgLyogSW50bE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEyQkJGRjExQjA0
NEE4QjAwNjY0QjY5IC8qIEludGxPYmplY3QuaCAqLzsgfTsKQEAgLTI0MTMsOCArMjQxOSw2IEBA
CiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0
IC8qIFdhdGNoZG9nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1
MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVG
RDZGQzYxRDVFNzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBC
IC8qIEpTU3RyaW5nSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTMyMUQ5RTRDRkI2NzQyM0E5N0YxOTFBNyAvKiBNb2R1bGVOYW1lc3Bh
Y2VBY2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIwRUNCMTVFRkM1MjQ2MjRCQzJGMDJENSAvKiBNb2R1bGVOYW1lc3BhY2VBY2Nlc3ND
YXNlLmNwcCAqLzsgfTsKLQkJOUY2MzQzNDU3NzI3NEZBRkI5MzM2QzM4IC8qIE1vZHVsZU5hbWVz
cGFjZUFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDRTk3OEUzODVBODQ5ODE5OTA1MjE1MyAvKiBNb2R1bGVOYW1lc3BhY2VBY2Nlc3ND
YXNlLmggKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4g
UEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KQEAgLTI3NTYsNiArMjc2MCwxMCBAQAog
CQkwRjJCREM0RTE1MjI4QkU3MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVTb3VyY2UuY3BwOyBwYXRoID0g
ZGZnL0RGR1ZhbHVlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
QkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBk
ZmcvREZHVmFyaWFibGVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkM2M0E5MUU0RkE0MkMwMEMxMzgzOSAvKiBSdW5uaW5nU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUnVubmluZ1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkM2M0FCMUU2MEFFM0MwMEMxMzgzOSAvKiBCM0JhbmsuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNCYW5rLmNwcDsgcGF0aCA9IGIzL0IzQmFuay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkM2M0FDMUU2MEFFM0MwMEMxMzgz
OSAvKiBCM0JhbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYW5rLmg7
IHBhdGggPSBiMy9CM0JhbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYz
QUQxRTYwQUUzQzAwQzEzODM5IC8qIEIzV2lkdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNXaWR0aC5jcHA7IHBhdGggPSBiMy9CM1dpZHRoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQzYzQUUxRTYwQUUzRDAwQzEzODM5IC8qIEIzV2lk
dGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXaWR0aC5oOyBwYXRoID0g
YjMvQjNXaWR0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJENEREQjE5ODMy
RDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWJ1Z2dlclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyRDREREMxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJTY29wZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjJENERERjE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVByb2ZpbGVy
TG9nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVQcm9maWxlckxvZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjgzLDYgKzM2OTEsNyBAQAogCQkxQzkwNTE0NTBCQTlF
OEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBh
dGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FBOEI0
QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
QUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyMEVDQjE1RUZDNTI0NjI0QkMyRjAyRDUgLyogTW9kdWxlTmFtZXNwYWNlQWNj
ZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2R1bGVO
YW1lc3BhY2VBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYw
MEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9p
bmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MkQ4NUI0MUMwRDY1MEYwMDZBQ0I2MSAv
KiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcDsgcGF0aCA9IGIz
L2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzczNiw2ICszNzQ1LDcgQEAKIAkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3
IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0
aCA9IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBZYXJyLmg7IHBhdGggPSB5YXJyL1lhcnIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDVFMTJEODgwNkE0OUIwRjAwRTlERjg0IC8qIGpzYy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBqc2MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7IH07CisJCTRDRTk3OEUzODVB
ODQ5ODE5OTA1MjE1MyAvKiBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5k
YXRpb24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBGb3VuZGF0aW9uLmZyYW1ld29yazsg
cGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrOyBz
b3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk1MUYwRUMwNzA1Qzg2QzlBMDBFNkRGMUIg
LyogbGlib2JqYy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsg
cGF0aCA9IC91c3IvbGliL2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7
IH07CiAJCTUyNjc4RjhDMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzaWNCbG9ja0xvY2F0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5ODQsOCArNDk5NCw2IEBACiAJ
CUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsg
cGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBU
ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVz
dC5oOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMEVDQjE1RUZDNTI0NjI0QkMyRjAyRDUg
LyogTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmNwcDsgcGF0aCA9IE1vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
Q0U5NzhFMzg1QTg0OTgxOTkwNTIxNTMgLyogTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNl
Lmg7IHBhdGggPSBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2lu
IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTUyODQsNiArNTI5Miw4IEBA
CiAJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKIAkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEYyQzYz
QUIxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFuay5jcHAgKi8sCisJCQkJMEYyQzYzQUMxRTYwQUUz
QzAwQzEzODM5IC8qIEIzQmFuay5oICovLAogCQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0Jhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2suaCAqLywKIAkJCQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrSW5saW5lcy5oICovLApAQCAtNTQ0MCw2ICs1NDUwLDggQEAKIAkJCQk1M0Q0NDREQjFE
QUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi8sCiAJCQkJNTM0MUZDNkYx
REFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovLAogCQkJCTUz
NDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi8sCisJ
CQkJMEYyQzYzQUQxRTYwQUUzQzAwQzEzODM5IC8qIEIzV2lkdGguY3BwICovLAorCQkJCTBGMkM2
M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi8sCiAJCQkJMEZFQzg1QUUxQkRCNUQ1
RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IGIzOwpAQCAtNzkx
NSw2ICs3OTI3LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTBGMkM2M0IyMUU2MEFF
NDcwMEMxMzgzOSAvKiBCM1dpZHRoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZBNTQ5ODE2Qjg4
MzUzMDBCM0E5ODIgLyogQTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkU1MUMx
OTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAx
NjFFMzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC04MzkwLDYgKzg0MDMsNyBAQAogCQkJCTBGMkZDQ0ZGMThBNjAwNzAwMDFBMjdG
OCAvKiBERkdUaHJlYWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTdBMjE0NkIyOEND
MDBDRjI0NDIgLyogREZHVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyODE3RDUx
RjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQzYzQjAxRTYwQUU0MzAwQzEzODM5IC8qIEIzQmFuay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBD
QTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5z
aXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtOTgwNiw2ICs5ODIwLDcgQEAKIAkJCQkwRkIzODc4
RjFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOUNBQkM4MURCNTRBNzgwMDA4RTgzQiAvKiBBaXJQYWRJbnRlcmZlcmVuY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1ODMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBo
YXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQzYzQjExRTYwQUU0NTAwQzEzODM5
IC8qIEIzV2lkdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NTcwM0MxQkU0NUYwQTAwNjJB
NjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYz
MzhERkQxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMTA1MzEsNiArMTA1NDYsNyBAQAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEz
RTdCMiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU0MEM3QTAx
QjgyRTFDMzAwMEY2Qjc5IC8qIFJlZ2lzdGVyQXRPZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjU0MEM3QTExQjgyRTFDMzAwMEY2Qjc5IC8qIFJlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGMkM2M0FGMUU2MEFFNDEwMEMxMzgzOSAvKiBCM0JhbmsuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTUxODE0NkQ3MDAwMDMzMjMyIC8qIFJlZ2lzdGVy
U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDBFNUVDMUU0M0QzNTMwMDA2QUIwOCAvKiBH
Q0NvbmR1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNFRDE4OTFCNTU0MDAzMUM3
RkEgLyogUmVndWxhckV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYW5rLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCYW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM0JhbmsuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkIzOjpCYW5rIGJhbmspCit7CisgICAgc3dp
dGNoIChiYW5rKSB7CisgICAgY2FzZSBKU0M6OkIzOjpHUDoKKyAgICAgICAgb3V0LnByaW50KCJH
UCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkIzOjpGUDoKKyAgICAgICAgb3V0
LnByaW50KCJGUCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFuay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhbmsuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYW5rLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gQmFuayA6
IGludDhfdCB7CisgICAgR1AsCisgICAgRlAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBu
dW1CYW5rcyA9IDI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGZvckVhY2hCYW5r
KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgZnVuYyhHUCk7CisgICAgZnVuYyhGUCk7Cit9CisK
K2lubGluZSBCYW5rIGJhbmtGb3JUeXBlKFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gR1A7CisgICAgY2FzZSBJbnQzMjoKKyAgICBjYXNlIEludDY0OgorICAgICAgICBy
ZXR1cm4gR1A7CisgICAgY2FzZSBGbG9hdDoKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgcmV0
dXJuIEZQOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1A7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xh
c3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
QjM6OkJhbmspOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNw
cAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw5ICsxMTAsOSBAQCB2b2lkIENoZWNr
U3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0CiB7CiAgICAgSW5zdCBoaWRkZW4gPSBoaWRk
ZW5CcmFuY2goaW5zdCk7CiAgICAgaGlkZGVuLmZvckVhY2hBcmcoCi0gICAgICAgIFsmXSAoQXJn
JiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkg
eworICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0
aCB3aWR0aCkgewogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAmYXJnIC0gJmhpZGRlbi5h
cmdzWzBdOwotICAgICAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzWzEgKyBpbmRleF0sIHJvbGUs
IHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxICsgaW5kZXhd
LCByb2xlLCBiYW5rLCB3aWR0aCk7CiAgICAgICAgIH0pOwogCiAgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gZmlyc3RSZWNvdmVyYWJsZUluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuY3BwCShyZXZpc2lvbiAy
MTI5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMZWdhbGl6ZU1lbW9yeU9mZnNl
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gbWVt
b3J5VmFsdWUtPm9mZnNldCgpOwotICAgICAgICAgICAgICAgIEFpcjo6QXJnOjpXaWR0aCB3aWR0
aCA9IEFpcjo6QXJnOjp3aWR0aEZvckJ5dGVzKG1lbW9yeVZhbHVlLT5hY2Nlc3NCeXRlU2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICBXaWR0aCB3aWR0aCA9IG1lbW9yeVZhbHVlLT5hY2Nlc3NXaWR0
aCgpOwogICAgICAgICAgICAgICAgIGlmICghQWlyOjpBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZz
ZXQsIHdpZHRoKSkgewogICAgICAgICAgICAgICAgICAgICBWYWx1ZSogYmFzZSA9IG1lbW9yeVZh
bHVlLT5sYXN0Q2hpbGQoKTsKICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG9mZnNldFZhbHVl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQoaW5kZXgsIG1lbW9yeVZhbHVlLT5v
cmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgb2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAyMTI5NjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcg
Kzk0LDcgQEAgcHVibGljOgogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJl
LnZhbHVlcygpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewogICAg
ICAgICAgICAgY2FzZSBQaGk6IHsKLSAgICAgICAgICAgICAgICBtX3BoaVRvVG1wW3ZhbHVlXSA9
IG1fY29kZS5uZXdUbXAoQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAg
ICAgICAgICAgICBtX3BoaVRvVG1wW3ZhbHVlXSA9IG1fY29kZS5uZXdUbXAodmFsdWUtPnJlc3Vs
dEJhbmsoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlBoaSB0bXAgZm9yICIsICp2YWx1ZSwgIjogIiwgbV9waGlUb1RtcFt2YWx1
ZV0sICJcbiIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgZm9yIChCMzo6U3RhY2tTbG90KiBzdGFjayA6IG1fcHJvY2VkdXJlLnN0
YWNrU2xvdHMoKSkKICAgICAgICAgICAgIG1fc3RhY2tUb1N0YWNrLmFkZChzdGFjaywgbV9jb2Rl
LmFkZFN0YWNrU2xvdChzdGFjaykpOwogICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6
IG1fcHJvY2VkdXJlLnZhcmlhYmxlcygpKQotICAgICAgICAgICAgbV92YXJpYWJsZVRvVG1wLmFk
ZCh2YXJpYWJsZSwgbV9jb2RlLm5ld1RtcChBcmc6OnR5cGVGb3JCM1R5cGUodmFyaWFibGUtPnR5
cGUoKSkpKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVUb1RtcC5hZGQodmFyaWFibGUsIG1fY29k
ZS5uZXdUbXAodmFyaWFibGUtPmJhbmsoKSkpOwogCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hp
Y2ggYmxvY2tzIGFyZSBub3QgcmFyZS4KICAgICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3By
b2NlZHVyZVswXSk7CkBAIC0zNjEsNyArMzYxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
VG1wJiByZWFsVG1wID0gbV92YWx1ZVRvVG1wW3ZhbHVlXTsKICAgICAgICAgICAgIGlmICghcmVh
bFRtcCkgewotICAgICAgICAgICAgICAgIHJlYWxUbXAgPSBtX2NvZGUubmV3VG1wKEFyZzo6dHlw
ZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgICAgICAgICAgcmVhbFRtcCA9IG1f
Y29kZS5uZXdUbXAodmFsdWUtPnJlc3VsdEJhbmsoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1f
cHJvY2VkdXJlLmlzRmFzdENvbnN0YW50KHZhbHVlLT5rZXkoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIG1fY29kZS5hZGRGYXN0VG1wKHJlYWxUbXApOwogICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQpAQCAtNDI3LDcgKzQyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAKLSAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzY2FsZUZvclNobChWYWx1
ZSogc2hsLCBpbnQzMl90IG9mZnNldCwgc3RkOjpvcHRpb25hbDxBcmc6OldpZHRoPiB3aWR0aCA9
IHN0ZDo6bnVsbG9wdCkKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzY2FsZUZvclNobChW
YWx1ZSogc2hsLCBpbnQzMl90IG9mZnNldCwgc3RkOjpvcHRpb25hbDxXaWR0aD4gd2lkdGggPSBz
dGQ6Om51bGxvcHQpCiAgICAgewogICAgICAgICBpZiAoc2hsLT5vcGNvZGUoKSAhPSBTaGwpCiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpAQCAtNDUwLDcgKzQ1MCw3IEBAIHByaXZh
dGU6CiAgICAgfQogCiAgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4gb3BlcmFuZCBpbnRvIGFu
IGFkZHJlc3MuCi0gICAgQXJnIGVmZmVjdGl2ZUFkZHIoVmFsdWUqIGFkZHJlc3MsIGludDMyX3Qg
b2Zmc2V0LCBBcmc6OldpZHRoIHdpZHRoKQorICAgIEFyZyBlZmZlY3RpdmVBZGRyKFZhbHVlKiBh
ZGRyZXNzLCBpbnQzMl90IG9mZnNldCwgV2lkdGggd2lkdGgpCiAgICAgewogICAgICAgICBBU1NF
UlQoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCB3aWR0aCkpOwogCkBAIC01MzgsNyArNTM4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKIAogICAgICAgICBpbnQz
Ml90IG9mZnNldCA9IHZhbHVlLT5vZmZzZXQoKTsKLSAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9
IEFyZzo6d2lkdGhGb3JCeXRlcyh2YWx1ZS0+YWNjZXNzQnl0ZVNpemUoKSk7CisgICAgICAgIFdp
ZHRoIHdpZHRoID0gdmFsdWUtPmFjY2Vzc1dpZHRoKCk7CiAKICAgICAgICAgQXJnIHJlc3VsdCA9
IGVmZmVjdGl2ZUFkZHIodmFsdWUtPmxhc3RDaGlsZCgpLCBvZmZzZXQsIHdpZHRoKTsKICAgICAg
ICAgQVNTRVJUKHJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpOwpAQCAtMTEzNyw4ICsxMTM3LDgg
QEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb21wYXJlRnVuY3RvciwgdHlwZW5h
bWUgVGVzdEZ1bmN0b3IsIHR5cGVuYW1lIENvbXBhcmVEb3VibGVGdW5jdG9yLCB0eXBlbmFtZSBD
b21wYXJlRmxvYXRGdW5jdG9yPgogICAgIEluc3QgY3JlYXRlR2VuZXJpY0NvbXBhcmUoCiAgICAg
ICAgIFZhbHVlKiB2YWx1ZSwKLSAgICAgICAgY29uc3QgQ29tcGFyZUZ1bmN0b3ImIGNvbXBhcmUs
IC8vIFNpZ25hdHVyZTogKEFyZzo6V2lkdGgsIEFyZyByZWxDb25kLCBBcmcsIEFyZykgLT4gSW5z
dAotICAgICAgICBjb25zdCBUZXN0RnVuY3RvciYgdGVzdCwgLy8gU2lnbmF0dXJlOiAoQXJnOjpX
aWR0aCwgQXJnIHJlc0NvbmQsIEFyZywgQXJnKSAtPiBJbnN0CisgICAgICAgIGNvbnN0IENvbXBh
cmVGdW5jdG9yJiBjb21wYXJlLCAvLyBTaWduYXR1cmU6IChXaWR0aCwgQXJnIHJlbENvbmQsIEFy
ZywgQXJnKSAtPiBJbnN0CisgICAgICAgIGNvbnN0IFRlc3RGdW5jdG9yJiB0ZXN0LCAvLyBTaWdu
YXR1cmU6IChXaWR0aCwgQXJnIHJlc0NvbmQsIEFyZywgQXJnKSAtPiBJbnN0CiAgICAgICAgIGNv
bnN0IENvbXBhcmVEb3VibGVGdW5jdG9yJiBjb21wYXJlRG91YmxlLCAvLyBTaWduYXR1cmU6IChB
cmcgZG91YmxlQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKICAgICAgICAgY29uc3QgQ29tcGFyZUZs
b2F0RnVuY3RvciYgY29tcGFyZUZsb2F0LCAvLyBTaWduYXR1cmU6IChBcmcgZG91YmxlQ29uZCwg
QXJnLCBBcmcpIC0+IEluc3QKICAgICAgICAgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQpAQCAtMTMw
MCw3ICsxMzAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBBcmcgcmlnaHRJbW0gPSBp
bW0ocmlnaHQpOwogCiAgICAgICAgICAgICAgICAgYXV0byB0cnlDb21wYXJlID0gWyZdICgKLSAg
ICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgQXJnUHJvbWlzZSYmIGxlZnQsIEFy
Z1Byb21pc2UmJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgICAgIFdpZHRoIHdp
ZHRoLCBBcmdQcm9taXNlJiYgbGVmdCwgQXJnUHJvbWlzZSYmIHJpZ2h0KSAtPiBJbnN0IHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gY29tcGFyZSh3aWR0aCwgcmVsQ29u
ZCwgbGVmdCwgcmlnaHQpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gY29tcGFyZSh3aWR0aCwgcmVs
Q29uZC5mbGlwcGVkKCksIHJpZ2h0LCBsZWZ0KSkKQEAgLTEzMDksNyArMTMwOSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIGF1dG8gdHJ5Q29tcGFy
ZUxvYWRJbW0gPSBbJl0gKAotICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBC
Mzo6T3Bjb2RlIGxvYWRPcGNvZGUsIEFyZzo6U2lnbmVkbmVzcyBzaWduZWRuZXNzKSAtPiBJbnN0
IHsKKyAgICAgICAgICAgICAgICAgICAgV2lkdGggd2lkdGgsIEIzOjpPcGNvZGUgbG9hZE9wY29k
ZSwgQXJnOjpTaWduZWRuZXNzIHNpZ25lZG5lc3MpIC0+IEluc3QgewogICAgICAgICAgICAgICAg
ICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJbW0uaXNSZXByZXNlbnRhYmxlQXMod2lkdGgsIHNp
Z25lZG5lc3MpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0
cnlDb21wYXJlKHdpZHRoLCBsb2FkUHJvbWlzZShsZWZ0LCBsb2FkT3Bjb2RlKSwgcmlnaHRJbW0p
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CkBA
IC0xMzI1LDcgKzEzMjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgpOwogICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICBBcmc6OldpZHRo
IHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgV2lkdGggd2lkdGggPSB2YWx1ZS0+Y2hpbGQoMCktPnJlc3VsdFdpZHRo
KCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGNhbkNvbW1pdEludGVy
bmFsKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0
IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCkBAIC0x
MzM4LDIyICsxMzM4LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vICAgICBC
cmFuY2goQDMpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxD
b25kLmlzU2lnbmVkQ29uZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCBy
ZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhTLCBBcmc6OlNpZ25l
ZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJl
TG9hZEltbShXaWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNVbnNpZ25lZENvbmQo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFy
ZUxvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4WiwgQXJnOjpVbnNpZ25lZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShXaWR0aDgs
IExvYWQ4WiwgQXJnOjpVbnNpZ25lZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAg
IGlmIChyZWxDb25kLmlzU2lnbmVkQ29uZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMs
IEFyZzo6U2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmVMb2FkSW1tKFdpZHRoMTYsIExvYWQxNlMsIEFyZzo6U2lnbmVkKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlz
VW5zaWduZWRDb25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3Vs
dCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WiwgQXJnOjpVbnNpZ25l
ZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJl
TG9hZEltbShXaWR0aDE2LCBMb2FkMTZaLCBBcmc6OlVuc2lnbmVkKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAg
LTE0MDIsMTEgKzE0MDIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBjb21wYXJl
RG91YmxlKGRvdWJsZUNvbmQsIGxlZnRQcm9taXNlLCByaWdodFByb21pc2UpOwogICAgICAgICB9
OwogCi0gICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVl
LT50eXBlKCkpOworICAgICAgICBXaWR0aCB3aWR0aCA9IHZhbHVlLT5yZXN1bHRXaWR0aCgpOwog
ICAgICAgICBBcmcgcmVzQ29uZCA9IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bykuaW52ZXJ0ZWQoaW52ZXJ0ZWQpOwogICAgICAgICAKICAgICAgICAgYXV0byB0cnlUZXN0ID0g
WyZdICgKLSAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIEFyZ1Byb21pc2UmJiBsZWZ0LCBB
cmdQcm9taXNlJiYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgV2lkdGggd2lkdGgsIEFy
Z1Byb21pc2UmJiBsZWZ0LCBBcmdQcm9taXNlJiYgcmlnaHQpIC0+IEluc3QgewogICAgICAgICAg
ICAgaWYgKEluc3QgcmVzdWx0ID0gdGVzdCh3aWR0aCwgcmVzQ29uZCwgbGVmdCwgcmlnaHQpKQog
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0ZXN0KHdpZHRoLCByZXNDb25kLCByaWdodCwgbGVmdCkpCkBAIC0xNDU3LDcgKzE0NTcs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByaWdodEltbTY0ID0gYml0SW1tNjQo
cmlnaHQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBhdXRvIHRyeVRlc3RMb2FkSW1tID0gWyZdIChBcmc6OldpZHRoIHdpZHRoLCBBcmc6OlNp
Z25lZG5lc3Mgc2lnbmVkbmVzcywgQjM6Ok9wY29kZSBsb2FkT3Bjb2RlKSAtPiBJbnN0IHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHRyeVRlc3RMb2FkSW1tID0gWyZdIChXaWR0aCB3aWR0aCwgQXJn
OjpTaWduZWRuZXNzIHNpZ25lZG5lc3MsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkgLT4gSW5zdCB7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzUmlnaHRDb25zdCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpZ25lZCBs
b2FkcyB3aWxsIGNyZWF0ZSBoaWdoIGJpdHMsIHNvIGlmIHRoZSBpbW1lZGlhdGUgaGFzIGhpZ2gg
Yml0cwpAQCAtMTQ5MSwxNiArMTQ5MSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlm
IChjYW5Db21taXRJbnRlcm5hbCkgewogICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBoYW5k
bGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBmZXdlciBiaXRzIHRoYW4gQjMncyB0eXBlIHN5c3RlbSBz
dXBwb3J0cy4KIAotICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0
TG9hZEltbShBcmc6OldpZHRoOCwgQXJnOjpVbnNpZ25lZCwgTG9hZDhaKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oV2lkdGg4LCBBcmc6OlVu
c2lnbmVkLCBMb2FkOFopKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3Vs
dCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBBcmc6OlNpZ25lZCwgTG9hZDhTKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oV2lkdGg4
LCBBcmc6OlNpZ25lZCwgTG9hZDhTKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIEFyZzo6VW5zaWduZWQsIExv
YWQxNlopKQorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9h
ZEltbShXaWR0aDE2LCBBcmc6OlVuc2lnbmVkLCBMb2FkMTZaKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIEFy
Zzo6U2lnbmVkLCBMb2FkMTZTKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0
ID0gdHJ5VGVzdExvYWRJbW0oV2lkdGgxNiwgQXJnOjpTaWduZWQsIExvYWQxNlMpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGFsbG93cyB1cyB0byB1c2UgYSAzMi1iaXQgdGVzdCBmb3IgNjQtYml0IEJpdEFuZCBp
ZiB0aGUgaW1tZWRpYXRlIGlzCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAvLyBhcyBpZiB3ZSB3ZXJlIHBvbmRlcmluZyB1c2luZyBhIDMyLWJpdCB0
ZXN0IGZvcgogICAgICAgICAgICAgICAgICAgICAvLyBCaXRBbmQoU0V4dChMb2FkKHB0cikpLCBj
b25zdCksIGluIHRoZSBzZW5zZSB0aGF0IGluIGJvdGggY2FzZXMgd2UgaGF2ZQogICAgICAgICAg
ICAgICAgICAgICAvLyB0byB3b3JyeSBhYm91dCBoaWdoIGJpdHMuIFNvLCB3ZSB1c2UgdGhlICJT
aWduZWQiIHZlcnNpb24gb2YgdGhpcyBoZWxwZXIuCi0gICAgICAgICAgICAgICAgICAgIGlmIChJ
bnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgzMiwgQXJnOjpTaWduZWQsIExv
YWQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZElt
bShXaWR0aDMyLCBBcmc6OlNpZ25lZCwgTG9hZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyBuZWVkZWQgdG8gaGFuZGxlIDMyLWJpdCB0ZXN0IGZvciBhcmJpdHJhcnkgMzIt
Yml0IGltbWVkaWF0ZXMuCkBAIC0xNTE3LDcgKzE1MTcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhh
dCBpbnZvbHZlIGEgbG9hZC4KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgV2lkdGggd2lkdGggPSB2YWx1ZS0+Y2hp
bGQoMCktPnJlc3VsdFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3Vs
dCA9IHRyeVRlc3Qod2lkdGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKHJpZ2h0KSkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1MzIsMTUgKzE1MzIsMTUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0IGludm9s
dmUgYW4gaW1tZWRpYXRlIGFuZCBhIHRtcC4KIAogICAgICAgICAgICAgICAgIGlmIChoYXNSaWdo
dENvbnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgod2lkdGggPT0gQXJnOjpXaWR0aDMy
ICYmIHJpZ2h0Q29uc3QgPT0gMHhmZmZmZmZmZikKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8
ICh3aWR0aCA9PSBBcmc6OldpZHRoNjQgJiYgcmlnaHRDb25zdCA9PSAtMSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCh3aWR0aCA9PSBXaWR0aDMyICYmIHJpZ2h0Q29uc3QgPT0gMHhmZmZm
ZmZmZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICh3aWR0aCA9PSBXaWR0aDY0ICYmIHJp
Z2h0Q29uc3QgPT0gLTEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlUZXN0KHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKGxlZnQpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlcHJlc2VudGFibGVBczx1aW50
MzJfdD4ocmlnaHRDb25zdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJl
c3VsdCA9IHRyeVRlc3QoQXJnOjpXaWR0aDMyLCB0bXBQcm9taXNlKGxlZnQpLCByaWdodEltbSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KFdpZHRo
MzIsIHRtcFByb21pc2UobGVmdCksIHJpZ2h0SW1tKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVz
dWx0ID0gdHJ5VGVzdChBcmc6OldpZHRoMzIsIHRtcFByb21pc2UobGVmdCksIHJpZ2h0SW1tNjQp
KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdChXaWR0
aDMyLCB0bXBQcm9taXNlKGxlZnQpLCByaWdodEltbTY0KSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qod2lkdGgsIHRtcFByb21pc2UobGVm
dCksIHJpZ2h0SW1tKSkKQEAgLTE1NjgsMjIgKzE1NjgsMjIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGlmIChjYW5Db21taXRJbnRlcm5hbCAmJiB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhpbmdzIGxpa2UgQnJhbmNoKExvYWQ4Wih2YWx1
ZSkpCiAKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KEFyZzo6V2lk
dGg4LCBsb2FkUHJvbWlzZSh2YWx1ZSwgTG9hZDhaKSwgQXJnOjpiaXRJbW0oLTEpKSkgeworICAg
ICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3QoV2lkdGg4LCBsb2FkUHJvbWlz
ZSh2YWx1ZSwgTG9hZDhaKSwgQXJnOjpiaXRJbW0oLTEpKSkgewogICAgICAgICAgICAgICAgICAg
ICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0
ID0gdHJ5VGVzdChBcmc6OldpZHRoOCwgbG9hZFByb21pc2UodmFsdWUsIExvYWQ4UyksIEFyZzo6
Yml0SW1tKC0xKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0
KFdpZHRoOCwgbG9hZFByb21pc2UodmFsdWUsIExvYWQ4UyksIEFyZzo6Yml0SW1tKC0xKSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3QoQXJnOjpXaWR0aDE2LCBsb2FkUHJvbWlzZSh2
YWx1ZSwgTG9hZDE2WiksIEFyZzo6Yml0SW1tKC0xKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0cnlUZXN0KFdpZHRoMTYsIGxvYWRQcm9taXNlKHZhbHVlLCBMb2FkMTZa
KSwgQXJnOjpiaXRJbW0oLTEpKSkgewogICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5h
bCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdChBcmc6
OldpZHRoMTYsIGxvYWRQcm9taXNlKHZhbHVlLCBMb2FkMTZTKSwgQXJnOjpiaXRJbW0oLTEpKSkg
eworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3QoV2lkdGgxNiwgbG9h
ZFByb21pc2UodmFsdWUsIExvYWQxNlMpLCBBcmc6OmJpdEltbSgtMSkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICB9CkBAIC0xNjEyLDI2ICsxNjEyLDI2IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljQ29tcGFyZSgKICAgICAgICAgICAg
IHZhbHVlLAogICAgICAgICAgICAgW3RoaXNdICgKLSAgICAgICAgICAgICAgICBBcmc6OldpZHRo
IHdpZHRoLCBjb25zdCBBcmcmIHJlbENvbmQsCisgICAgICAgICAgICAgICAgV2lkdGggd2lkdGgs
IGNvbnN0IEFyZyYgcmVsQ29uZCwKICAgICAgICAgICAgICAgICBBcmdQcm9taXNlJiBsZWZ0LCBB
cmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0
aCkgewotICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAgICAgICAgICAgICAg
Y2FzZSBXaWR0aDg6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFuY2g4
LCBBcmc6OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQnJhbmNoOCwgbV92YWx1ZSwgcmVsQ29uZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0
KCk7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMTY6CisgICAgICAgICAgICAgICAg
Y2FzZSBXaWR0aDE2OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwotICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgIGNhc2UgV2lkdGgz
MjoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaDMyLCBBcmc6OlJl
bENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQnJhbmNoMzIsIG1fdmFsdWUsIHJlbENvbmQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwotICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAgIGNhc2UgV2lk
dGg2NDoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaDY0LCBBcmc6
OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQnJhbmNoNjQsIG1fdmFsdWUsIHJlbENvbmQsCkBAIC0xNjQyLDI2ICsxNjQyLDI2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgW3RoaXNdICgKLSAgICAgICAgICAgICAgICBBcmc6Oldp
ZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlc0NvbmQsCisgICAgICAgICAgICAgICAgV2lkdGggd2lk
dGgsIGNvbnN0IEFyZyYgcmVzQ29uZCwKICAgICAgICAgICAgICAgICBBcmdQcm9taXNlJiBsZWZ0
LCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh3
aWR0aCkgewotICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAgICAgICAgICAg
ICAgY2FzZSBXaWR0aDg6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFu
Y2hUZXN0OCwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQuaW5zdChyaWdodC5pbnN0KAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaFRlc3Q4LCBtX3ZhbHVlLCByZXNDb25kLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1
bWUoKnRoaXMpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEluc3QoKTsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgxNjoKKyAgICAg
ICAgICAgICAgICBjYXNlIFdpZHRoMTY6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0
KCk7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAg
Y2FzZSBXaWR0aDMyOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNo
VGVzdDMyLCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQnJhbmNoVGVzdDMyLCBtX3ZhbHVlLCByZXNDb25kLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1
bWUoKnRoaXMpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEluc3QoKTsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFdpZHRoNjQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlk
Rm9ybShCcmFuY2hUZXN0NjQsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5z
dCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hUZXN0NjQsIG1fdmFsdWUsIHJl
c0NvbmQsCkBAIC0xNjk1LDIwICsxNjk1LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBj
cmVhdGVHZW5lcmljQ29tcGFyZSgKICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgW3Ro
aXNdICgKLSAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlbENv
bmQsCisgICAgICAgICAgICAgICAgV2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgcmVsQ29uZCwKICAg
ICAgICAgICAgICAgICBBcmdQcm9taXNlJiBsZWZ0LCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5z
dCB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgewotICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpXaWR0aDg6Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMTY6CisgICAg
ICAgICAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICAgICAgY2FzZSBXaWR0aDE2Ogog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwotICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgIGNhc2UgV2lkdGgzMjoKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKENvbXBhcmUzMiwgQXJnOjpSZWxDb25kLCBsZWZ0Lmtp
bmQoKSwgcmlnaHQua2luZCgpLCBBcmc6OlRtcCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb21wYXJlMzIsIG1fdmFsdWUsIHJlbENvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVl
KSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
bnN0KCk7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBXaWR0aDY0OgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQ29t
cGFyZTY0LCBBcmc6OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1w
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQuaW5zdChyaWdodC5pbnN0
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmU2NCwgbV92YWx1ZSwgcmVsQ29u
ZCwKQEAgLTE3MTksMjAgKzE3MTksMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBbdGhpc10gKAot
ICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgcmVzQ29uZCwKKyAg
ICAgICAgICAgICAgICBXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLAogICAgICAgICAg
ICAgICAgIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6
OldpZHRoODoKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgxNjoKKyAgICAgICAgICAg
ICAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRoMTY6CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6Oldp
ZHRoMzI6CisgICAgICAgICAgICAgICAgY2FzZSBXaWR0aDMyOgogICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNWYWxpZEZvcm0oVGVzdDMyLCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdo
dC5raW5kKCksIEFyZzo6VG1wKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxl
ZnQuaW5zdChyaWdodC5pbnN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QzMiwg
bV92YWx1ZSwgcmVzQ29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1
bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKLSAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRo
NjQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShUZXN0NjQsIEFyZzo6UmVz
Q29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVGVzdDY0LCBtX3ZhbHVlLCByZXNDb25kLApAQCAtMTc5MywzNiArMTc5
MywzMiBAQCBwcml2YXRlOgogCiAgICAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljQ29tcGFyZSgK
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLAotICAgICAgICAgICAgWyZdICgKLSAgICAg
ICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlbENvbmQsCi0gICAgICAg
ICAgICAgICAgQXJnUHJvbWlzZSYgbGVmdCwgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3Qgewor
ICAgICAgICAgICAgWyZdIChXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZWxDb25kLCBBcmdQcm9t
aXNlJiBsZWZ0LCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAgICAgICAgICAg
c3dpdGNoICh3aWR0aCkgewotICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAg
ICAgICAgICAgICAgY2FzZSBXaWR0aDg6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBT
dXBwb3J0IHRoZXNlIHRoaW5ncy4KICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTUwNAogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSW5zdCgpOwotICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAgICAg
ICAgICAgICAgIGNhc2UgV2lkdGgxNjoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3Qo
KTsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICBj
YXNlIFdpZHRoMzI6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTZWxlY3RJbnN0
cnVjdGlvbihjb25maWcubW92ZUNvbmRpdGlvbmFsbHkzMiwgcmVsQ29uZCwgbGVmdCwgcmlnaHQp
OwotICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAgIGNh
c2UgV2lkdGg2NDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNlbGVjdEluc3Ry
dWN0aW9uKGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseTY0LCByZWxDb25kLCBsZWZ0LCByaWdodCk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIFsmXSAoCi0gICAgICAgICAgICAgICAgQXJn
OjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLAotICAgICAgICAgICAgICAgIEFyZ1By
b21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgIFsm
XSAoV2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgcmVzQ29uZCwgQXJnUHJvbWlzZSYgbGVmdCwgQXJn
UHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgewogICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgp
IHsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg4OgorICAgICAgICAgICAgICAgIGNh
c2UgV2lkdGg4OgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBtb3JlIHRo
aW5ncy4KICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MTUwNAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwot
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAgICAgICAgICAgICAgIGNhc2Ug
V2lkdGgxNjoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKLSAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRoMzI6CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTZWxlY3RJbnN0cnVjdGlvbihjb25maWcu
bW92ZUNvbmRpdGlvbmFsbHlUZXN0MzIsIHJlc0NvbmQsIGxlZnQsIHJpZ2h0KTsKLSAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRoNjQ6
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTZWxlY3RJbnN0cnVjdGlvbihjb25m
aWcubW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQsIHJlc0NvbmQsIGxlZnQsIHJpZ2h0KTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0y
NTM1LDkgKzI1MzEsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHBhdGNocG9pbnRWYWx1
ZS0+bGF0ZUNsb2JiZXJlZCgpLmNsZWFyKHBhdGNocG9pbnRWYWx1ZS0+cmVzdWx0Q29uc3RyYWlu
dC5yZWcoKSk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhdGNocG9pbnRWYWx1
ZS0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQotICAgICAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQobV9jb2RlLm5ld1RtcChBcmc6OkdQKSk7CisgICAgICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZChtX2NvZGUubmV3VG1wKEdQKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBwYXRjaHBvaW50VmFsdWUtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKLSAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKG1fY29kZS5uZXdUbXAoQXJnOjpGUCkpOworICAg
ICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQobV9jb2RlLm5ld1RtcChGUCkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoV1RGTW92ZShpbnN0KSk7
CiAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmRWZWN0b3IoYWZ0ZXIpOwpAQCAtMjYx
OSw4ICsyNjE1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OlJlc0NvbmQsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFy
Zzo6VG1wLCBBcmc6OlRtcCkpIHsKICAgICAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZCh0bXAo
bGVmdCkpOwogICAgICAgICAgICAgICAgIHNvdXJjZXMuYXBwZW5kKHRtcChyaWdodCkpOwotICAg
ICAgICAgICAgICAgIHNvdXJjZXMuYXBwZW5kKG1fY29kZS5uZXdUbXAoQXJnOjp0eXBlRm9yQjNU
eXBlKG1fdmFsdWUtPnR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZCht
X2NvZGUubmV3VG1wKEFyZzo6dHlwZUZvckIzVHlwZShtX3ZhbHVlLT50eXBlKCkpKSk7CisgICAg
ICAgICAgICAgICAgc291cmNlcy5hcHBlbmQobV9jb2RlLm5ld1RtcChtX3ZhbHVlLT5yZXN1bHRC
YW5rKCkpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZChtX2NvZGUubmV3VG1wKG1f
dmFsdWUtPnJlc3VsdEJhbmsoKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBU
aGVyZSBpcyBhIHJlYWxseSBoaWxhcmlvdXMgY2FzZSB0aGF0IGFyaXNlcyB3aGVuIHdlIGRvIEJy
YW5jaEFkZDMyKCV4LCAleCkuIFdlIHdvbid0IGVtaXQKQEAgLTI2ODIsMTMgKzI2NzgsMTMgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgVmFsdWUqIHB0ciA9IHZhbHVlLT5jaGlsZCgwKTsKIAot
ICAgICAgICAgICAgQXJnIHRlbXAgPSBtX2NvZGUubmV3VG1wKEFyZzo6R1ApOworICAgICAgICAg
ICAgQXJnIHRlbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKICAgICAgICAgICAgIGFwcGVuZChJbnN0
KE1vdmUzMiwgdmFsdWUsIHRtcChwdHIpLCB0ZW1wKSk7CiAgICAgICAgICAgICBpZiAodmFsdWUt
Pm9mZnNldCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGltbSh2YWx1ZS0+b2Zmc2V0KCkpKQog
ICAgICAgICAgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGltbSh2YWx1ZS0+b2Zmc2V0KCkpLCB0
ZW1wKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQXJnIGJp
Z0ltbSA9IG1fY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgICAgIEFyZyBi
aWdJbW0gPSBtX2NvZGUubmV3VG1wKEdQKTsKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKE1v
dmUsIEFyZzo6YmlnSW1tKHZhbHVlLT5vZmZzZXQoKSksIGJpZ0ltbSk7CiAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZChBZGQ2NCwgYmlnSW1tLCB0ZW1wKTsKICAgICAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lv
biAyMTI5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1NSwxMSBAQCBzaXplX3QgTWVtb3J5VmFsdWU6OmFj
Y2Vzc0J5dGVTaXplKCkgY29uCiAgICAgfQogfQogCitXaWR0aCBNZW1vcnlWYWx1ZTo6YWNjZXNz
V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiB3aWR0aEZvckJ5dGVzKGFjY2Vzc0J5dGVTaXpl
KCkpOworfQorCiB2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1h
LCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGlmIChtX29mZnNldCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMjEyOTYwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTgzLDYgKzgzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpICE9IFZvaWQ7IH0KIAogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNv
bnN0OworICAgIFdpZHRoIGFjY2Vzc1dpZHRoKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB2
b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRz
LmNwcAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92
ZUNvbnN0YW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBF
TkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQWlyQXJnLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkIzSW5z
ZXJ0aW9uU2V0SW5saW5lcy5oIgpAQCAtMjA3LDcgKzIwOCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBBaXI6OkFyZzo6aXNWYWxpZEFkZHJGb3JtKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zm
c2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpcjo6QXJnOjp3aWR0
aEZvckJ5dGVzKG1lbW9yeVZhbHVlLT5hY2Nlc3NCeXRlU2l6ZSgpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aEZvckJ5dGVzKG1lbW9yeVZhbHVlLT5hY2Nlc3NC
eXRlU2l6ZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZXN0UG9pbnRlcikg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVj
aWFsLmNwcAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsMTYgKzU2LDE2IEBA
IHZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcm9sZSA9IEFyZzo6RGVmOwogICAgICAgICAKLSAgICAgICAgY2FsbGJhY2so
aW5zdC5hcmdzW2FyZ0luZGV4KytdLCByb2xlLCBpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpLCBpbnN0
Lm9yaWdpbi0+YWlyV2lkdGgoKSk7CisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1thcmdJbmRl
eCsrXSwgcm9sZSwgaW5zdC5vcmlnaW4tPnJlc3VsdEJhbmsoKSwgaW5zdC5vcmlnaW4tPnJlc3Vs
dFdpZHRoKCkpOwogICAgIH0KIAogICAgIGZvckVhY2hBcmdJbXBsKDAsIGFyZ0luZGV4LCBpbnN0
LCBTYW1lQXNSZXAsIHN0ZDo6bnVsbG9wdCwgY2FsbGJhY2spOwogICAgIGFyZ0luZGV4ICs9IGlu
c3Qub3JpZ2luLT5udW1DaGlsZHJlbigpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2hw
b2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQotICAgICAgICBjYWxsYmFjayhpbnN0
LmFyZ3NbYXJnSW5kZXgrK10sIEFyZzo6U2NyYXRjaCwgQXJnOjpHUCwgQXJnOjpjb25zZXJ2YXRp
dmVXaWR0aChBcmc6OkdQKSk7CisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1thcmdJbmRleCsr
XSwgQXJnOjpTY3JhdGNoLCBHUCwgY29uc2VydmF0aXZlV2lkdGgoR1ApKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCi0gICAg
ICAgIGNhbGxiYWNrKGluc3QuYXJnc1thcmdJbmRleCsrXSwgQXJnOjpTY3JhdGNoLCBBcmc6OkZQ
LCBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKEFyZzo6RlApKTsKKyAgICAgICAgY2FsbGJhY2soaW5z
dC5hcmdzW2FyZ0luZGV4KytdLCBBcmc6OlNjcmF0Y2gsIEZQLCBjb25zZXJ2YXRpdmVXaWR0aChG
UCkpOwogfQogCiBib29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJ
KHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBTdGFj
a21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICB9CiAKICAgICAgICAgVHlwZSB0
eXBlID0gY2hpbGQudmFsdWUoKS0+dHlwZSgpOwotICAgICAgICBjYWxsYmFjayhhcmcsIHJvbGUs
IEFyZzo6dHlwZUZvckIzVHlwZSh0eXBlKSwgQXJnOjp3aWR0aEZvckIzVHlwZSh0eXBlKSk7Cisg
ICAgICAgIGNhbGxiYWNrKGFyZywgcm9sZSwgYmFua0ZvclR5cGUodHlwZSksIHdpZHRoRm9yVHlw
ZSh0eXBlKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJ
KHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQog
Ci0jaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQjNCYW5rLmgiCiAjaW5jbHVkZSAiQjNF
ZmZlY3RzLmgiCiAjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKICNpbmNsdWRlICJCM0tp
bmQuaCIKQEAgLTM1LDkgKzM1LDExIEBACiAjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0aW9uLmgi
CiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgorI2luY2x1ZGUg
IkIzV2lkdGguaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvVHJpU3RhdGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTg2
LDggKzg4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0VHlwZShUeXBlIHR5cGUpIHsgbV90eXBl
ID0gdHlwZTsgfQogCiAgICAgLy8gVGhpcyBpcyB1c2VmdWwgd2hlbiBsb3dlcmluZy4gTm90ZSB0
aGF0IHRoaXMgaXMgb25seSB2YWxpZCBmb3Igbm9uLXZvaWQgdmFsdWVzLgotICAgIEFpcjo6QXJn
OjpUeXBlIGFpclR5cGUoKSBjb25zdCB7IHJldHVybiBBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSh0
eXBlKCkpOyB9Ci0gICAgQWlyOjpBcmc6OldpZHRoIGFpcldpZHRoKCkgY29uc3QgeyByZXR1cm4g
QWlyOjpBcmc6OndpZHRoRm9yQjNUeXBlKHR5cGUoKSk7IH0KKyAgICBCYW5rIHJlc3VsdEJhbmso
KSBjb25zdCB7IHJldHVybiBiYW5rRm9yVHlwZSh0eXBlKCkpOyB9CisgICAgV2lkdGggcmVzdWx0
V2lkdGgoKSBjb25zdCB7IHJldHVybiB3aWR0aEZvclR5cGUodHlwZSgpKTsgfQogCiAgICAgQWRq
YWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAogICAgIGNvbnN0
IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5oCShyZXZpc2lvbiAyMTI5NjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI3LDggKzI3LDEwIEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNCYW5r
LmgiCiAjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgi
CisjaW5jbHVkZSAiQjNXaWR0aC5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBA
IC00NSw2ICs0Nyw4IEBAIHB1YmxpYzoKICAgICB+VmFyaWFibGUoKTsKIAogICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFdpZHRoIHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gd2lkdGhGb3JUeXBlKHR5cGUoKSk7IH0KKyAgICBCYW5rIGJhbmsoKSBjb25zdCB7IHJl
dHVybiBiYW5rRm9yVHlwZSh0eXBlKCkpOyB9CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21BZGRyZXNzVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQWRkcmVzc1ZhbHVlLmgJ
KHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21BZGRy
ZXNzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEIzX0pJ
VCkKIAogI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNXaWR0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
V2lkdGguY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dp
ZHRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1dpZHRoLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgSlNDOjpCMzo6V2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0
aCkgeworICAgIGNhc2UgSlNDOjpCMzo6V2lkdGg4OgorICAgICAgICBvdXQucHJpbnQoIjgiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpCMzo6V2lkdGgxNjoKKyAgICAgICAgb3V0
LnByaW50KCIxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkIzOjpXaWR0aDMy
OgorICAgICAgICBvdXQucHJpbnQoIjMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpT
Qzo6QjM6OldpZHRoNjQ6CisgICAgICAgIG91dC5wcmludCgiNjQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzV2lkdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNXaWR0aC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1dpZHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYW5rLmgiCisjaW5jbHVkZSAiQjNU
eXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFdpZHRoIDog
aW50OF90IHsKKyAgICBXaWR0aDgsCisgICAgV2lkdGgxNiwKKyAgICBXaWR0aDMyLAorICAgIFdp
ZHRoNjQKK307CisKK2lubGluZSBXaWR0aCBwb2ludGVyV2lkdGgoKQoreworICAgIGlmIChzaXpl
b2Yodm9pZCopID09IDgpCisgICAgICAgIHJldHVybiBXaWR0aDY0OworICAgIHJldHVybiBXaWR0
aDMyOworfQorCitpbmxpbmUgV2lkdGggd2lkdGhGb3JUeXBlKFR5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gV2lkdGg4OworICAgIGNhc2UgSW50MzI6CisgICAgY2FzZSBG
bG9hdDoKKyAgICAgICAgcmV0dXJuIFdpZHRoMzI7CisgICAgY2FzZSBJbnQ2NDoKKyAgICBjYXNl
IERvdWJsZToKKyAgICAgICAgcmV0dXJuIFdpZHRoNjQ7CisgICAgfQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCitpbmxpbmUgV2lkdGggY29uc2VydmF0aXZlV2lkdGgoQmFuayBiYW5r
KQoreworICAgIHJldHVybiBiYW5rID09IEdQID8gcG9pbnRlcldpZHRoKCkgOiBXaWR0aDY0Owor
fQorCitpbmxpbmUgV2lkdGggbWluaW11bVdpZHRoKEJhbmsgYmFuaykKK3sKKyAgICByZXR1cm4g
YmFuayA9PSBHUCA/IFdpZHRoOCA6IFdpZHRoMzI7Cit9CisKK2lubGluZSB1bnNpZ25lZCBieXRl
cyhXaWR0aCB3aWR0aCkKK3sKKyAgICByZXR1cm4gMSA8PCB3aWR0aDsKK30KKworaW5saW5lIFdp
ZHRoIHdpZHRoRm9yQnl0ZXModW5zaWduZWQgYnl0ZXMpCit7CisgICAgc3dpdGNoIChieXRlcykg
eworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgICAgIHJldHVybiBXaWR0aDg7CisgICAg
Y2FzZSAyOgorICAgICAgICByZXR1cm4gV2lkdGgxNjsKKyAgICBjYXNlIDM6CisgICAgY2FzZSA0
OgorICAgICAgICByZXR1cm4gV2lkdGgzMjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
V2lkdGg2NDsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3Bh
Y2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6QjM6OldpZHRoKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENv
bG9yaW5nLmNwcAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDcgQEAgYm9vbCB0cmFjZURlYnVnID0gZmFsc2U7CiBib29sIHJlcG9y
dFN0YXRzID0gZmFsc2U7CiAKIC8vIFRoZSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIGRlZmlu
ZXMgYWxsIHRoZSBjb2RlIHRoYXQgaXMgaW5kZXBlbmRhbnQKLS8vIGZyb20gdGhlIHR5cGUgb3Ig
cmVnaXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0aW5nIHJlZ2lzdGVycy4KKy8v
IGZyb20gdGhlIGJhbmsgb3IgcmVnaXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0
aW5nIHJlZ2lzdGVycy4KIHRlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1w
TWFwcGVyPgogY2xhc3MgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvciB7CiBwdWJsaWM6CkBAIC0x
Mzc1LDkgKzEzNzUsOSBAQCBwcm90ZWN0ZWQ6CiB9OwogCiAvLyBUaGlzIHBlcmZvcm0gYWxsIHRo
ZSB0YXNrcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIHJlZ2lzdGVyIHR5cGUuCi10ZW1w
bGF0ZTxBcmc6OlR5cGUgdHlwZSwgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBB
bGxvY2F0b3JUeXBlPgotY2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9y
VHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT4+IHsKLSAgICB1c2luZyBUbXBN
YXBwZXIgPSBBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjsKK3RlbXBsYXRlPEJhbmsgYmFuaywgdGVt
cGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBBbGxvY2F0b3JUeXBlPgorY2xhc3MgQ29s
b3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVU
bXBNYXBwZXI8YmFuaz4+IHsKKyAgICB1c2luZyBUbXBNYXBwZXIgPSBBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjsKICAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgVG1wTWFw
cGVyPjsKICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNl
OjptX3NlbGVjdFN0YWNrOwpAQCAtMTQwOSwxMCArMTQwOSwxMCBAQCBjbGFzcyBDb2xvcmluZ0Fs
bG9jYXRvciA6IHB1YmxpYyBBbGxvY2F0CiBwdWJsaWM6CiAKICAgICBDb2xvcmluZ0FsbG9jYXRv
cihDb2RlJiBjb2RlLCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1
c2VDb3VudHMsIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcCkKLSAgICAg
ICAgOiBCYXNlKGNvZGUsIGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSwgVG1wTWFwcGVy
OjpsYXN0TWFjaGluZVJlZ2lzdGVySW5kZXgoKSwgdG1wQXJyYXlTaXplKGNvZGUpLCB1bnNwaWxs
YWJsZVRtcCwgdXNlQ291bnRzKQorICAgICAgICA6IEJhc2UoY29kZSwgY29kZS5yZWdzSW5Qcmlv
cml0eU9yZGVyKGJhbmspLCBUbXBNYXBwZXI6Omxhc3RNYWNoaW5lUmVnaXN0ZXJJbmRleCgpLCB0
bXBBcnJheVNpemUoY29kZSksIHVuc3BpbGxhYmxlVG1wLCB1c2VDb3VudHMpCiAgICAgICAgICwg
bV90bXBXaWR0aCh0bXBXaWR0aCkKICAgICB7Ci0gICAgICAgIGlmICh0eXBlID09IEFyZzo6R1Ap
IHsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApIHsKICAgICAgICAgICAgIG1fZnJhbWVQb2ludGVy
SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoVG1wKE1hY3JvQXNzZW1ibGVyOjpmcmFt
ZVBvaW50ZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgbV9pbnRlcmZlcmVzV2l0aEZyYW1lUG9p
bnRlci5lbnN1cmVTaXplKHRtcEFycmF5U2l6ZShjb2RlKSk7CiAgICAgICAgIH0KQEAgLTE1MTIs
NyArMTUxMiw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCghdG1wLmlzUmVnKCkp
OwogICAgICAgICBBU1NFUlQobV9jb2xvcmVkVG1wLnNpemUoKSk7Ci0gICAgICAgIEFTU0VSVCh0
bXAuaXNHUCgpID09ICh0eXBlID09IEFyZzo6R1ApKTsKKyAgICAgICAgQVNTRVJUKHRtcC5pc0dQ
KCkgPT0gKGJhbmsgPT0gR1ApKTsKIAogICAgICAgICBSZWcgcmVnID0gbV9jb2xvcmVkVG1wW1Rt
cE1hcHBlcjo6YWJzb2x1dGVJbmRleCh0bXApXTsKICAgICAgICAgaWYgKCFyZWcpIHsKQEAgLTE1
MjcsNyArMTUyNyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdW5zaWduZWQg
dG1wQXJyYXlTaXplKENvZGUmIGNvZGUpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBudW1UbXBz
ID0gY29kZS5udW1UbXBzKHR5cGUpOworICAgICAgICB1bnNpZ25lZCBudW1UbXBzID0gY29kZS5u
dW1UbXBzKGJhbmspOwogICAgICAgICByZXR1cm4gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KG51
bVRtcHMpOwogICAgIH0KIApAQCAtMTU1Miw3ICsxNTUyLDcgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBpZiAobGVmdFRtcCA9PSByaWdodFRtcCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBpZiAobGVmdFRtcC5pc0dQKCkgIT0gKHR5cGUgPT0gQXJnOjpHUCkgfHwgcmlnaHRU
bXAuaXNHUCgpICE9ICh0eXBlID09IEFyZzo6R1ApKQorICAgICAgICBpZiAobGVmdFRtcC5pc0dQ
KCkgIT0gKGJhbmsgPT0gR1ApIHx8IHJpZ2h0VG1wLmlzR1AoKSAhPSAoYmFuayA9PSBHUCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdW5zaWduZWQgbGVmdEluZGV4ID0g
VG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KGxlZnRUbXApOwpAQCAtMTU4NSw5ICsxNTg1LDkgQEAg
cHJvdGVjdGVkOgogICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmNsZWFyKCk7CiAgICAg
ICAgIG1fd29ya2xpc3RNb3Zlcy5jbGVhcigpOwogCi0gICAgICAgIFRtcExpdmVuZXNzPHR5cGU+
IGxpdmVuZXNzKG1fY29kZSk7CisgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNzKG1f
Y29kZSk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKLSAgICAg
ICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxp
dmVuZXNzLCBibG9jayk7CisgICAgICAgICAgICB0eXBlbmFtZSBUbXBMaXZlbmVzczxiYW5rPjo6
TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKICAgICAg
ICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CiAgICAgICAgICAg
ICAgICAgSW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpOwpAQCAtMTU5
OSwxNSArMTU5OSwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGJ1aWxkTG93UHJpb3JpdHlNb3Zl
TGlzdCgpOwogICAgIH0KIAotICAgIHZvaWQgYnVpbGQoSW5zdCogcHJldkluc3QsIEluc3QqIG5l
eHRJbnN0LCBjb25zdCB0eXBlbmFtZSBUbXBMaXZlbmVzczx0eXBlPjo6TG9jYWxDYWxjJiBsb2Nh
bENhbGMpCisgICAgdm9pZCBidWlsZChJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNv
bnN0IHR5cGVuYW1lIFRtcExpdmVuZXNzPGJhbms+OjpMb2NhbENhbGMmIGxvY2FsQ2FsYykKICAg
ICB7CiAgICAgICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICAgICAgZGF0YUxvZygiQnVpbGRp
bmcgYmV0d2VlbiAiLCBwb2ludGVyRHVtcChwcmV2SW5zdCksICIgYW5kICIsIHBvaW50ZXJEdW1w
KG5leHRJbnN0KSwgIjpcbiIpOwogCiAgICAgICAgIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFD
bG9iYmVyZWRSZWdzPFRtcD4oCiAgICAgICAgICAgICBwcmV2SW5zdCwgbmV4dEluc3QsCi0gICAg
ICAgICAgICBbJl0gKGNvbnN0IFRtcCYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSBhcmdUeXBl
LCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAg
ICAgICAgICAgIFsmXSAoY29uc3QgVG1wJiBhcmcsIEFyZzo6Um9sZSwgQmFuayBhcmdCYW5rLCBX
aWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChhcmdCYW5rICE9IGJhbmspCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBB
bGwgdGhlIERlZigpcyBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRoIGFsbCB0aGUg
ZXh0cmEgY2xvYmJlcmVkIFRtcHMuCkBAIC0xNjE1LDggKzE2MTUsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgICAgICAgICAgLy8gZG8gbm90IG5lZWQgaW50ZXJmZXJlbmNlIGVkZ2VzIGluIG91ciBp
bXBsZW1lbnRhdGlvbi4KICAgICAgICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmPFRtcD4oCiAg
ICAgICAgICAgICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKLSAgICAgICAgICAgICAgICAg
ICAgWyZdIChUbXAmIG90aGVyQXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6
OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQor
ICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgb3RoZXJBcmcsIEFyZzo6Um9sZSwgQmFuayBh
cmdCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ0JhbmsgIT0g
YmFuaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQpAQCAt
MTYzMSw3ICsxNjMxLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgLy8gY29hbGVzY2UgdGhl
IE1vdmUgZXZlbiBpZiB0aGUgdHdvIFRtcCBuZXZlciBpbnRlcmZlcmUgYW55d2hlcmUuCiAgICAg
ICAgICAgICBUbXAgZGVmVG1wOwogICAgICAgICAgICAgVG1wIHVzZVRtcDsKLSAgICAgICAgICAg
IHByZXZJbnN0LT5mb3JFYWNoVG1wKFsmZGVmVG1wLCAmdXNlVG1wXSAoVG1wJiBhcmdUbXAsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgIHByZXZJ
bnN0LT5mb3JFYWNoVG1wKFsmZGVmVG1wLCAmdXNlVG1wXSAoVG1wJiBhcmdUbXAsIEFyZzo6Um9s
ZSByb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURl
Zihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgZGVmVG1wID0gYXJnVG1wOwogICAgICAgICAg
ICAgICAgIGVsc2UgewpAQCAtMTY5NSwxNyArMTY5NSwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICB2b2lkIGFkZEVkZ2VzKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0
SW5zdCwgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlwZT46OkxvY2FsQ2FsYzo6SXRlcmFibGUgbGl2
ZVRtcHMpCisgICAgdm9pZCBhZGRFZGdlcyhJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3Qs
IHR5cGVuYW1lIFRtcExpdmVuZXNzPGJhbms+OjpMb2NhbENhbGM6Okl0ZXJhYmxlIGxpdmVUbXBz
KQogICAgIHsKICAgICAgICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZXZlcnRo
aW5nIGxpdmUuCiAgICAgICAgIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdz
PFRtcD4oCiAgICAgICAgICAgICBwcmV2SW5zdCwgbmV4dEluc3QsCi0gICAgICAgICAgICBbJl0g
KGNvbnN0IFRtcCYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRo
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgIFsm
XSAoY29uc3QgVG1wJiBhcmcsIEFyZzo6Um9sZSwgQmFuayBhcmdCYW5rLCBXaWR0aCkgeworICAg
ICAgICAgICAgICAgIGlmIChhcmdCYW5rICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRtcCYg
bGl2ZVRtcCA6IGxpdmVUbXBzKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChsaXZlVG1w
LmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChsaXZlVG1wLmlzR1AoKSA9PSAoYmFuayA9PSBHUCkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNlRGVidWcpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgQWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2
ZVRtcCwgIlxuIik7CkBAIC0xNzEzLDcgKzE3MTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAg
ICAgICAgICAgIGFkZEVkZ2UoYXJnLCBsaXZlVG1wKTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmICFhcmcuaXNHUFIoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoYmFuayA9PSBHUCAmJiAhYXJnLmlzR1BSKCkpCiAgICAgICAgICAgICAg
ICAgICAgIG1faW50ZXJmZXJlc1dpdGhGcmFtZVBvaW50ZXIucXVpY2tTZXQoVG1wTWFwcGVyOjph
YnNvbHV0ZUluZGV4KGFyZykpOwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTcyOSw4ICsx
NzI5LDggQEAgcHJvdGVjdGVkOgogICAgIC8vIHRoYXQgTW92ZTMyJ3MgYXJlIG5vdCBjb2FsZXNj
YWJsZS4KICAgICBzdGF0aWMgYm9vbCBtYXlCZUNvYWxlc2NhYmxlSW1wbChjb25zdCBJbnN0JiBp
bnN0LCBUbXBXaWR0aCogdG1wV2lkdGgpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAg
Y2FzZSBHUDoKICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5raW5kLm9wY29kZSkgewogICAgICAg
ICAgICAgY2FzZSBNb3ZlOgogICAgICAgICAgICAgY2FzZSBNb3ZlMzI6CkBAIC0xNzM5LDcgKzE3
MzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAg
ICAgY2FzZSBGUDoKICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5raW5kLm9wY29kZSkgewogICAg
ICAgICAgICAgY2FzZSBNb3ZlRmxvYXQ6CiAgICAgICAgICAgICBjYXNlIE1vdmVEb3VibGU6CkBA
IC0xNzU1LDggKzE3NTUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmICghaW5zdC5hcmdzWzBd
LmlzVG1wKCkgfHwgIWluc3QuYXJnc1sxXS5pc1RtcCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIEFTU0VSVChpbnN0LmFyZ3NbMF0udHlwZSgpID09IHR5cGUpOwotICAg
ICAgICBBU1NFUlQoaW5zdC5hcmdzWzFdLnR5cGUoKSA9PSB0eXBlKTsKKyAgICAgICAgQVNTRVJU
KGluc3QuYXJnc1swXS5iYW5rKCkgPT0gYmFuayk7CisgICAgICAgIEFTU0VSVChpbnN0LmFyZ3Nb
MV0uYmFuaygpID09IGJhbmspOwogCiAgICAgICAgIC8vIFdlIGNhbiBjb2FsZXNjZSBhIE1vdmUz
MiBzbyBsb25nIGFzIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGhvbGRzOgogICAgICAgICAvLyAt
IFRoZSBpbnB1dCBpcyBhbHJlYWR5IHplcm8tZmlsbGVkLgpAQCAtMTc2OSw4ICsxNzY5LDggQEAg
cHJvdGVjdGVkOgogICAgICAgICAgICAgaWYgKCF0bXBXaWR0aCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGlmICh0bXBXaWR0aC0+ZGVmV2lkdGgoaW5zdC5h
cmdzWzBdLnRtcCgpKSA+IEFyZzo6V2lkdGgzMgotICAgICAgICAgICAgICAgICYmIHRtcFdpZHRo
LT51c2VXaWR0aChpbnN0LmFyZ3NbMV0udG1wKCkpID4gQXJnOjpXaWR0aDMyKQorICAgICAgICAg
ICAgaWYgKHRtcFdpZHRoLT5kZWZXaWR0aChpbnN0LmFyZ3NbMF0udG1wKCkpID4gV2lkdGgzMgor
ICAgICAgICAgICAgICAgICYmIHRtcFdpZHRoLT51c2VXaWR0aChpbnN0LmFyZ3NbMV0udG1wKCkp
ID4gV2lkdGgzMikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0xNzkyLDkgKzE3OTIsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBwYWRJ
bnRlcmZlcmVuY2UobV9jb2RlKTsKIAotICAgICAgICBhbGxvY2F0ZU9uVHlwZTxBcmc6OkdQPigp
OworICAgICAgICBhbGxvY2F0ZU9uQmFuazxHUD4oKTsKICAgICAgICAgbV9udW1JdGVyYXRpb25z
ID0gMDsKLSAgICAgICAgYWxsb2NhdGVPblR5cGU8QXJnOjpGUD4oKTsKKyAgICAgICAgYWxsb2Nh
dGVPbkJhbms8RlA+KCk7CiAKICAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKIApA
QCAtMTgwMywxMCArMTgwMywxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHRl
bXBsYXRlPEFyZzo6VHlwZSB0eXBlPgotICAgIHZvaWQgYWxsb2NhdGVPblR5cGUoKQorICAgIHRl
bXBsYXRlPEJhbmsgYmFuaz4KKyAgICB2b2lkIGFsbG9jYXRlT25CYW5rKCkKICAgICB7Ci0gICAg
ICAgIEhhc2hTZXQ8dW5zaWduZWQ+IHVuc3BpbGxhYmxlVG1wcyA9IGNvbXB1dGVVbnNwaWxsYWJs
ZVRtcHM8dHlwZT4oKTsKKyAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGlsbGFibGVUbXBz
ID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJ
ZiBhIFRtcCBpcyB1c2VkIG9ubHkgZnJvbSBhIFNjcmF0Y2ggcm9sZSBhbmQgdGhhdCBhcmd1bWVu
dCBpcyAhYWRtaXRzU3RhY2ssIHRoZW4KICAgICAgICAgLy8gd2Ugc2hvdWxkIGFkZCB0aGUgVG1w
IHRvIHVuc3BpbGxhYmxlVG1wcy4gVGhhdCB3aWxsIGhlbHAgYXZvaWQgcmVsb29waW5nIG9ubHkg
dG8gdHVybiB0aGUKQEAgLTE4MzcsMjMgKzE4MzcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGF1dG8gZG9BbGxvY2F0aW9uID0gWyZdIChhdXRvJiBhbGxvY2F0b3IpIC0+IGJvb2wgewogICAg
ICAgICAgICAgICAgIGFsbG9jYXRvci5hbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAgIGlmICgh
YWxsb2NhdG9yLnJlcXVpcmVzU3BpbGxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
LT5hc3NpZ25SZWdpc3RlcnNUb1RtcDx0eXBlPihhbGxvY2F0b3IpOworICAgICAgICAgICAgICAg
ICAgICB0aGlzLT5hc3NpZ25SZWdpc3RlcnNUb1RtcDxiYW5rPihhbGxvY2F0b3IpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAodHJhY2VEZWJ1ZykKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIlN1Y2Nlc3NmdWxsIGFsbG9jYXRpb24gYXQgaXRlcmF0aW9uICIsIG1fbnVtSXRlcmF0
aW9ucywgIjpcbiIsIG1fY29kZSk7CiAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGhpcy0+YWRkU3BpbGxBbmRG
aWxsPHR5cGU+KGFsbG9jYXRvciwgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICB0
aGlzLT5hZGRTcGlsbEFuZEZpbGw8YmFuaz4oYWxsb2NhdG9yLCB1bnNwaWxsYWJsZVRtcHMpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGJvb2wgZG9uZTsKICAgICAgICAgICAgIGlmICgoaXNBUk02NCgpIHx8
IE9wdGlvbnM6OmFpckZvcmNlQnJpZ2dzQWxsb2NhdG9yKCkpICYmICFPcHRpb25zOjphaXJGb3Jj
ZUlSQ0FsbG9jYXRvcigpKSB7Ci0gICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dHlw
ZSwgQnJpZ2dzPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5z
cGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBC
cmlnZ3M+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxs
YWJsZVRtcHMpOwogICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9y
KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0
b3I8dHlwZSwgSVJDPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywg
dW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5r
LCBJUkM+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxs
YWJsZVRtcHMpOwogICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9y
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChkb25lKQpAQCAtMTg2MSw3ICsxODYx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPEFyZzo6VHlw
ZSB0eXBlPgorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KICAgICBIYXNoU2V0PHVuc2lnbmVkPiBj
b21wdXRlVW5zcGlsbGFibGVUbXBzKCkKICAgICB7CiAKQEAgLTE4NzQsOCArMTg3NCw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBhZG1pdFN0YWNrQ291bnQgeyAwIH07CiAgICAg
ICAgIH07CiAKLSAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IG1fY29kZS5udW1UbXBzKHR5cGUp
OwotICAgICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSBBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleChudW1UbXBzKTsKKyAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IG1fY29k
ZS5udW1UbXBzKGJhbmspOworICAgICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSBBYnNvbHV0ZVRt
cE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleChudW1UbXBzKTsKIAogICAgICAgICBWZWN0b3I8
UmFuZ2UsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiByYW5nZXM7CiAgICAgICAgIHJhbmdlcy5m
aWxsKFJhbmdlKCksIGFycmF5U2l6ZSk7CkBAIC0xODgzLDEzICsxODgzLDEzIEBAIHByaXZhdGU6
CiAgICAgICAgIHVuc2lnbmVkIGdsb2JhbEluZGV4ID0gMDsKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJs
b2NrKSB7Ci0gICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKFsmXSAoQXJnJiBhcmcsIEFy
Zzo6Um9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBCYW5rIGFyZ0Jhbmss
IFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSAmJiBpbnN0LmFk
bWl0c1N0YWNrKGFyZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9
IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnQmFuayAhPSBiYW5rKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgVG1wIHRtcCA9IGFyZy50bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlJiBy
YW5nZSA9IHJhbmdlc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXAp
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlJiByYW5nZSA9IHJhbmdlc1tBYnNvbHV0
ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLmNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5hZG1p
dFN0YWNrQ291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxJbmRleCA8
IHJhbmdlLmZpcnN0KSB7CkBAIC0xOTAyLDEwICsxOTAyLDEwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcEZhc3Qo
WyZdIChUbXAmIHRtcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc0dQKCkg
IT0gKHR5cGUgPT0gQXJnOjpHUCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlz
R1AoKSAhPSAoYmFuayA9PSBHUCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBSYW5nZSYgcmFuZ2UgPSByYW5nZXNbQWJzb2x1
dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV07CisgICAgICAgICAgICAgICAg
ICAgICAgICBSYW5nZSYgcmFuZ2UgPSByYW5nZXNbQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFi
c29sdXRlSW5kZXgodG1wKV07CiAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5jb3VudCsr
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbEluZGV4IDwgcmFuZ2UuZmlyc3Qp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5maXJzdCA9IGdsb2JhbEluZGV4
OwpAQCAtMTkxOSw3ICsxOTE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICsrZ2xvYmFsSW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
QWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46Omxhc3RNYWNoaW5lUmVnaXN0ZXJJbmRleCgpICsgMTsg
aSA8IHJhbmdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBBYnNv
bHV0ZVRtcE1hcHBlcjxiYW5rPjo6bGFzdE1hY2hpbmVSZWdpc3RlckluZGV4KCkgKyAxOyBpIDwg
cmFuZ2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBSYW5nZSYgcmFuZ2UgPSByYW5nZXNb
aV07CiAgICAgICAgICAgICBpZiAocmFuZ2UubGFzdCAtIHJhbmdlLmZpcnN0IDw9IDEgJiYgcmFu
Z2UuY291bnQgPiByYW5nZS5hZG1pdFN0YWNrQ291bnQpCiAgICAgICAgICAgICAgICAgdW5zcGls
bGFibGVUbXBzLmFkZChpKTsKQEAgLTE5MjgsNyArMTkyOCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiB1bnNwaWxsYWJsZVRtcHM7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8QXJnOjpUeXBl
IHR5cGUsIHR5cGVuYW1lIEFsbG9jYXRvclR5cGU+CisgICAgdGVtcGxhdGU8QmFuayBiYW5rLCB0
eXBlbmFtZSBBbGxvY2F0b3JUeXBlPgogICAgIHZvaWQgYXNzaWduUmVnaXN0ZXJzVG9UbXAoY29u
c3QgQWxsb2NhdG9yVHlwZSYgYWxsb2NhdG9yKQogICAgIHsKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewpAQCAtMTk0NCwxNSArMTk0NCwxNSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIC8vIGVxdWl2YWxlbnQgaWYgdGhlIGRlc3RpbmF0aW9uJ3MgaGlnaCBi
aXRzIGFyZSBub3Qgb2JzZXJ2YWJsZSBvciBpZiB0aGUgc291cmNlJ3MgaGlnaAogICAgICAgICAg
ICAgICAgIC8vIGJpdHMgYXJlIGFsbCB6ZXJvLiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUg
b3Bwb3NpdGUgb3B0aW1pemF0aW9uIGZvciBvdGhlcgogICAgICAgICAgICAgICAgIC8vIGFyY2hp
dGVjdHVyZXMsIHdoaWNoIG1heSBwcmVmZXIgTW92ZSBvdmVyIE1vdmUzMiwgYmVjYXVzZSBNb3Zl
IGlzIGNhbm9uaWNhbCBhbHJlYWR5LgotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEFyZzo6
R1AgJiYgaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlCisgICAgICAgICAgICAgICAgaWYgKGJhbmsg
PT0gR1AgJiYgaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlCiAgICAgICAgICAgICAgICAgICAgICYm
IGluc3QuYXJnc1swXS5pc1RtcCgpICYmIGluc3QuYXJnc1sxXS5pc1RtcCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX3RtcFdpZHRoLnVzZVdpZHRoKGluc3QuYXJnc1sxXS50bXAoKSkg
PD0gQXJnOjpXaWR0aDMyCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBtX3RtcFdpZHRoLmRl
ZldpZHRoKGluc3QuYXJnc1swXS50bXAoKSkgPD0gQXJnOjpXaWR0aDMyKQorICAgICAgICAgICAg
ICAgICAgICBpZiAobV90bXBXaWR0aC51c2VXaWR0aChpbnN0LmFyZ3NbMV0udG1wKCkpIDw9IFdp
ZHRoMzIKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fdG1wV2lkdGguZGVmV2lkdGgoaW5z
dC5hcmdzWzBdLnRtcCgpKSA8PSBXaWR0aDMyKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5z
dC5raW5kLm9wY29kZSA9IE1vdmUzMjsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKHR5cGUgIT0gQXJnOjpHUCkp
CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8fCB0bXAuaXNHUCgpID09IChi
YW5rICE9IEdQKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAg
ICAgICAgICAgICBUbXAgYWxpYXNUbXAgPSBhbGxvY2F0b3IuZ2V0QWxpYXModG1wKTsKQEAgLTE5
ODAsMTggKzE5ODAsMTggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRp
YyB1bnNpZ25lZCBzdGFja1Nsb3RNaW5pbXVtV2lkdGgoQXJnOjpXaWR0aCB3aWR0aCkKKyAgICBz
dGF0aWMgdW5zaWduZWQgc3RhY2tTbG90TWluaW11bVdpZHRoKFdpZHRoIHdpZHRoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHdpZHRoIDw9IEFyZzo6V2lkdGgzMiA/IDQgOiA4OworICAgICAgICBy
ZXR1cm4gd2lkdGggPD0gV2lkdGgzMiA/IDQgOiA4OwogICAgIH0KIAotICAgIHRlbXBsYXRlPEFy
Zzo6VHlwZSB0eXBlLCB0eXBlbmFtZSBBbGxvY2F0b3JUeXBlPgorICAgIHRlbXBsYXRlPEJhbmsg
YmFuaywgdHlwZW5hbWUgQWxsb2NhdG9yVHlwZT4KICAgICB2b2lkIGFkZFNwaWxsQW5kRmlsbChj
b25zdCBBbGxvY2F0b3JUeXBlJiBhbGxvY2F0b3IsIEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxs
YWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4gc3RhY2tT
bG90czsKICAgICAgICAgZm9yIChUbXAgdG1wIDogYWxsb2NhdG9yLnNwaWxsZWRUbXBzKCkpIHsK
ICAgICAgICAgICAgIC8vIEFsbCB0aGUgc3BpbGxlZCB2YWx1ZXMgYmVjb21lIHVuc3BpbGxhYmxl
LgotICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBlcjx0eXBl
Pjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQo
QWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CiAKICAgICAgICAg
ICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4KICAgICAg
ICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgKQEAgLTIw
MTUsMTggKzIwMTUsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBNb3ZlIGlzIHRo
ZSBjYW5vbmljYWwgd2F5IHRvIG1vdmUgZGF0YSBiZXR3ZWVuIEdQUnMuCiAgICAgICAgICAgICAg
ICAgYm9vbCBjYW5Vc2VNb3ZlMzJJZkRpZFNwaWxsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
Ym9vbCBkaWRTcGlsbCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEFyZzo6
R1AgJiYgaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICgoaW5zdC5hcmdzWzBdLmlzVG1wKCkgJiYgbV90bXBXaWR0aC53aWR0aChpbnN0LmFyZ3NbMF0u
dG1wKCkpIDw9IEFyZzo6V2lkdGgzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpbnN0
LmFyZ3NbMV0uaXNUbXAoKSAmJiBtX3RtcFdpZHRoLndpZHRoKGluc3QuYXJnc1sxXS50bXAoKSkg
PD0gQXJnOjpXaWR0aDMyKSkKKyAgICAgICAgICAgICAgICBpZiAoYmFuayA9PSBHUCAmJiBpbnN0
LmtpbmQub3Bjb2RlID09IE1vdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChpbnN0LmFy
Z3NbMF0uaXNUbXAoKSAmJiBtX3RtcFdpZHRoLndpZHRoKGluc3QuYXJnc1swXS50bXAoKSkgPD0g
V2lkdGgzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpbnN0LmFyZ3NbMV0uaXNUbXAo
KSAmJiBtX3RtcFdpZHRoLndpZHRoKGluc3QuYXJnc1sxXS50bXAoKSkgPD0gV2lkdGgzMikpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjYW5Vc2VNb3ZlMzJJZkRpZFNwaWxsID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gcmVwbGFjZSB0aGUg
cmVnaXN0ZXIgdXNlIGJ5IG1lbW9yeSB1c2Ugd2hlbiBwb3NzaWJsZS4KICAgICAgICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAg
ICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBhcmdC
YW5rLCBXaWR0aCB3aWR0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNU
bXAoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGFyZ0JhbmsgIT0gYmFuaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjA0NywxNiArMjA0NywxNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEFyZzo6V2lkdGggc3BpbGxXaWR0aCA9IG1fdG1wV2lkdGgucmVxdWlyZWRXaWR0aChhcmcu
dG1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgV2lkdGggc3BpbGxXaWR0aCA9IG1fdG1w
V2lkdGgucmVxdWlyZWRXaWR0aChhcmcudG1wKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkgJiYgd2lkdGggPCBzcGlsbFdpZHRoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChpbnN0LmtpbmQub3Bjb2RlID09IE1vdmUgfHwgIShBcmc6OmlzQW55VXNlKHJvbGUpICYmIHdp
ZHRoID4gc3BpbGxXaWR0aCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3BpbGxXaWR0aCAhPSBBcmc6OldpZHRoMzIpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3BpbGxXaWR0aCAhPSBXaWR0aDMyKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhblVzZU1vdmUzMklmRGlkU3BpbGwgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTbG90RW50cnktPnZh
bHVlLT5lbnN1cmVTaXplKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhblVzZU1vdmUz
MklmRGlkU3BpbGwgPyA0IDogQXJnOjpieXRlcyh3aWR0aCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhblVzZU1vdmUzMklmRGlkU3BpbGwgPyA0IDogYnl0ZXMod2lkdGgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZh
bHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNwaWxsID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CkBAIC0yMDY1LDggKzIwNjUsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBpbnN0LmtpbmQub3Bjb2RlID0gTW92ZTMyOwogCiAgICAgICAgICAgICAgICAg
Ly8gRm9yIGV2ZXJ5IG90aGVyIGNhc2UsIGFkZCBMb2FkL1N0b3JlIGFzIG5lZWRlZC4KLSAgICAg
ICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh0bXAuaXNSZWcoKSB8fCBhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgaW5zdC5m
b3JFYWNoVG1wKFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGFyZ0JhbmssIFdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8fCBhcmdCYW5rICE9
IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBzdGFja1Nsb3RFbnRyeSA9IHN0YWNrU2xvdHMuZmluZCh0bXApOwpAQCAtMjA3
OSwyMiArMjA3OSwyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0
aCBzcGlsbFdpZHRoID0gbV90bXBXaWR0aC5yZXF1aXJlZFdpZHRoKHRtcCk7CisgICAgICAgICAg
ICAgICAgICAgIFdpZHRoIHNwaWxsV2lkdGggPSBtX3RtcFdpZHRoLnJlcXVpcmVkV2lkdGgodG1w
KTsKICAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSBPb3BzOwogICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHN0YWNrU2xvdE1pbmltdW1XaWR0aChzcGlsbFdpZHRoKSkgewogICAg
ICAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlID0g
dHlwZSA9PSBBcmc6OkdQID8gTW92ZTMyIDogTW92ZUZsb2F0OworICAgICAgICAgICAgICAgICAg
ICAgICAgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlMzIgOiBNb3ZlRmxvYXQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OgotICAgICAg
ICAgICAgICAgICAgICAgICAgbW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91
YmxlOworICAgICAgICAgICAgICAgICAgICAgICAgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDog
TW92ZURvdWJsZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdG1wID0gbV9jb2RlLm5ld1RtcCh0
eXBlKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRt
cE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgICAgICAgICAg
dG1wID0gbV9jb2RlLm5ld1RtcChiYW5rKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFi
bGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsK
IAogICAgICAgICAgICAgICAgICAgICBBcmcgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3RFbnRy
eS0+dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSAm
JiByb2xlICE9IEFyZzo6U2NyYXRjaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMjEyOTYwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkK
IAogICAgICAgICAgICAgSW5zdDo6Zm9yRWFjaERlZjxBcmc+KAogICAgICAgICAgICAgICAgIGJs
b2NrLT5nZXQoaW5zdEluZGV4KSwgYmxvY2stPmdldChpbnN0SW5kZXggKyAxKSwKLSAgICAgICAg
ICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkg
eworICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQmFuaywgV2lkdGgp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3Qg
PSBhcmcuc3RhY2tTbG90KCk7CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNr
KENvZGUmIGNvZGUpCiAgICAgICAgICAgICBpZiAoIWluc3QuaGFzTm9uQXJnRWZmZWN0cygpKSB7
CiAgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgICAgICAgICAgaW5zdC5m
b3JFYWNoQXJnKAotICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAo
QXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsraW5zdEluZGV4KSB7CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGlu
c3RJbmRleCk7CiAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAg
WyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0
aCkgeworICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5r
LCBXaWR0aCB3aWR0aCkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrQWRkciA9IFsm
XSAoaW50MzJfdCBvZmZzZXQpIC0+IEFyZyB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQXJnOjpzdGFja0FkZHIob2Zmc2V0LCBjb2RlLmZyYW1lU2l6ZSgpLCB3aWR0aCk7CiAgICAg
ICAgICAgICAgICAgICAgIH07CkBAIC0yNzIsMTMgKzI3MiwxMyBAQCB2b2lkIGFsbG9jYXRlU3Rh
Y2soQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9
IGFyZy5zdGFja1Nsb3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzWkRl
Zihyb2xlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmtpbmQoKSA9PSBT
dGFja1Nsb3RLaW5kOjpTcGlsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3Qt
PmJ5dGVTaXplKCkgPiBBcmc6OmJ5dGVzKHdpZHRoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIHNsb3QtPmJ5dGVTaXplKCkgPiBieXRlcyh3aWR0aCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBoYW5kbGUgdGhpcyBzaW1wbGUg
Y2FzZSBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhhdCBhcmlzZXM6IFpEZWYncyBhcmUgb25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywg
d2hlbiB3ZSBoaXQgdGhlc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NlcnRp
b25zIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhvc2Ugb3RoZXIga2luZHMg
b2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB6ZXJvIGZpbGxzLgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QtPmJ5dGVTaXplKCkgPT0gOCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQod2lkdGggPT0gQXJn
OjpXaWR0aDMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3
aWR0aCA9PSBXaWR0aDMyKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGlzVmFsaWRGb3JtKFN0b3JlWmVybzMyLCBBcmc6OlN0YWNrKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDE1
ICs3MywxNSBAQCBib29sIEFyZzo6dXNlc1RtcChBaXI6OlRtcCB0bXApIGNvbnN0CiAKIGJvb2wg
QXJnOjpjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdAogewotICAgIHJldHVybiBpc1R5
cGUodHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgcmV0dXJuIGlzQmFuayhiYW5r
Rm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CiB9CiAKLWJvb2wgQXJnOjppc0NvbXBhdGlibGVUeXBl
KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0Citib29sIEFyZzo6aXNDb21wYXRpYmxlQmFuayhjb25z
dCBBcmcmIG90aGVyKSBjb25zdAogewotICAgIGlmIChoYXNUeXBlKCkpCi0gICAgICAgIHJldHVy
biBvdGhlci5pc1R5cGUodHlwZSgpKTsKLSAgICBpZiAob3RoZXIuaGFzVHlwZSgpKQotICAgICAg
ICByZXR1cm4gaXNUeXBlKG90aGVyLnR5cGUoKSk7CisgICAgaWYgKGhhc0JhbmsoKSkKKyAgICAg
ICAgcmV0dXJuIG90aGVyLmlzQmFuayhiYW5rKCkpOworICAgIGlmIChvdGhlci5oYXNCYW5rKCkp
CisgICAgICAgIHJldHVybiBpc0Jhbmsob3RoZXIuYmFuaygpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjkzLDQwICsyOTMsNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgQXJnCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6VHlwZSB0eXBlKQotewotICAgIHN3
aXRjaCAodHlwZSkgewotICAgIGNhc2UgQXJnOjpHUDoKLSAgICAgICAgb3V0LnByaW50KCJHUCIp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBBcmc6OkZQOgotICAgICAgICBvdXQucHJpbnQo
IkZQIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJn
OjpXaWR0aCB3aWR0aCkKLXsKLSAgICBzd2l0Y2ggKHdpZHRoKSB7Ci0gICAgY2FzZSBBcmc6Oldp
ZHRoODoKLSAgICAgICAgb3V0LnByaW50KCI4Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEFyZzo6V2lkdGgxNjoKLSAgICAgICAgb3V0LnByaW50KCIxNiIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBBcmc6OldpZHRoMzI6Ci0gICAgICAgIG91dC5wcmludCgiMzIiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgQXJnOjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIjY0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpT
aWduZWRuZXNzIHNpZ25lZG5lc3MpCiB7CiAgICAgc3dpdGNoIChzaWduZWRuZXNzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDIxMjk2MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCw4ICsyOCwxMCBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJUbXAu
aCIKKyNpbmNsdWRlICJCM0JhbmsuaCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUg
IkIzVHlwZS5oIgorI2luY2x1ZGUgIkIzV2lkdGguaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogI2lmIENPTVBJTEVSKEdDQykgJiYgQVNTRVJUX0RJU0FCTEVECkBAIC0xNjIsMzQgKzE2
NCw2IEBAIHB1YmxpYzoKICAgICAgICAgVXNlQWRkcgogICAgIH07CiAKLSAgICBlbnVtIFR5cGUg
OiBpbnQ4X3QgewotICAgICAgICBHUCwKLSAgICAgICAgRlAKLSAgICB9OwotCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Ci0gICAgc3RhdGljIHZvaWQgZm9yRWFjaFR5cGUoY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKLSAgICB7Ci0gICAgICAgIGZ1bmN0b3IoR1ApOwotICAgICAgICBmdW5jdG9yKEZQKTsKLSAg
ICB9Ci0KLSAgICBlbnVtIFdpZHRoIDogaW50OF90IHsKLSAgICAgICAgV2lkdGg4LAotICAgICAg
ICBXaWR0aDE2LAotICAgICAgICBXaWR0aDMyLAotICAgICAgICBXaWR0aDY0Ci0gICAgfTsKLQot
ICAgIHN0YXRpYyBXaWR0aCBwb2ludGVyV2lkdGgoKQotICAgIHsKLSAgICAgICAgaWYgKHNpemVv
Zih2b2lkKikgPT0gOCkKLSAgICAgICAgICAgIHJldHVybiBXaWR0aDY0OwotICAgICAgICByZXR1
cm4gV2lkdGgzMjsKLSAgICB9Ci0KICAgICBlbnVtIFNpZ25lZG5lc3MgOiBpbnQ4X3QgewogICAg
ICAgICBTaWduZWQsCiAgICAgICAgIFVuc2lnbmVkCkBAIC0zODksNzAgKzM2Myw2IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFR5
cGUgdHlwZUZvckIzVHlwZShCMzo6VHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuIEdQOwotICAgICAgICBjYXNlIEludDMyOgotICAgICAg
ICBjYXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIEdQOwotICAgICAgICBjYXNlIEZsb2F0
OgotICAgICAgICBjYXNlIERvdWJsZToKLSAgICAgICAgICAgIHJldHVybiBGUDsKLSAgICAgICAg
fQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIEdQOwotICAg
IH0KLQotICAgIHN0YXRpYyBXaWR0aCB3aWR0aEZvckIzVHlwZShCMzo6VHlwZSB0eXBlKQotICAg
IHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIFdpZHRoODsKLSAg
ICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgY2FzZSBGbG9hdDoKLSAgICAgICAgICAgIHJldHVy
biBXaWR0aDMyOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICBjYXNlIERvdWJsZToKLSAg
ICAgICAgICAgIHJldHVybiBXaWR0aDY0OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBXaWR0aCBjb25zZXJ2YXRpdmVXaWR0aChU
eXBlIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gdHlwZSA9PSBHUCA/IHBvaW50ZXJXaWR0
aCgpIDogV2lkdGg2NDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgV2lkdGggbWluaW11bVdpZHRoKFR5
cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09IEdQID8gV2lkdGg4IDogV2lk
dGgzMjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgYnl0ZXMoV2lkdGggd2lkdGgpCi0g
ICAgewotICAgICAgICByZXR1cm4gMSA8PCB3aWR0aDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgV2lk
dGggd2lkdGhGb3JCeXRlcyh1bnNpZ25lZCBieXRlcykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
Ynl0ZXMpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBy
ZXR1cm4gV2lkdGg4OwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICByZXR1cm4gV2lkdGgx
NjsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICByZXR1cm4g
V2lkdGgzMjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBXaWR0aDY0Owot
ICAgICAgICB9Ci0gICAgfQotCiAgICAgQXJnKCkKICAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkK
ICAgICB7CkBAIC05NzgsNyArODg4LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKLSAgICBib29sIGhhc1R5cGUoKSBjb25zdAorICAgIGJvb2wgaGFz
QmFuaygpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewogICAgICAgICBj
YXNlIEltbToKQEAgLTk5MywxNCArOTAzLDE0IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
Ly8gVGhlIHR5cGUgaXMgYW1iaWd1b3VzIGZvciBzb21lIGFyZyBraW5kcy4gQ2FsbCB3aXRoIGNh
cmUuCi0gICAgVHlwZSB0eXBlKCkgY29uc3QKKyAgICBCYW5rIGJhbmsoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIGlzR1AoKSA/IEdQIDogRlA7CiAgICAgfQogCi0gICAgYm9vbCBpc1R5
cGUoVHlwZSB0eXBlKSBjb25zdAorICAgIGJvb2wgaXNCYW5rKEJhbmsgYmFuaykgY29uc3QKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKGJhbmspIHsKICAg
ICAgICAgY2FzZSBHUDoKICAgICAgICAgICAgIHJldHVybiBpc0dQKCk7CiAgICAgICAgIGNhc2Ug
RlA6CkBAIC0xMDExLDcgKzkyMSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2FuUmVwcmVzZW50
KFZhbHVlKiB2YWx1ZSkgY29uc3Q7CiAKLSAgICBib29sIGlzQ29tcGF0aWJsZVR5cGUoY29uc3Qg
QXJnJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBpc0NvbXBhdGlibGVCYW5rKGNvbnN0IEFyZyYg
b3RoZXIpIGNvbnN0OwogCiAgICAgYm9vbCBpc0dQUigpIGNvbnN0CiAgICAgewpAQCAtMTE4NCw3
ICsxMDk0LDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yRWFjaEZhc3QoY29uc3QgRnVuY3RvciYp
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAg
dm9pZCBmb3JFYWNoKFJvbGUsIFR5cGUsIFdpZHRoLCBjb25zdCBGdW5jdG9yJik7CisgICAgdm9p
ZCBmb3JFYWNoKFJvbGUsIEJhbmssIFdpZHRoLCBjb25zdCBGdW5jdG9yJik7CiAKICAgICAvLyBU
aGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYg
b3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCiAgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRo
ZW0uIEZvciBleGFtcGxlLCB0aGlzOgpAQCAtMTE5MywxMiArMTEwMywxMiBAQCBwdWJsaWM6CiAg
ICAgLy8KICAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBU
eXBlIGFyZ1R5cGUsIFdpZHRoIGFyZ1dpZHRoLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHZvaWQgZm9yRWFjaFRtcChSb2xlIGFyZ1JvbGUsIEJhbmsgYXJnQmFuaywgV2lkdGggYXJnV2lk
dGgsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fa2lu
ZCkgewogICAgICAgICBjYXNlIFRtcDoKICAgICAgICAgICAgIEFTU0VSVChpc0FueVVzZShhcmdS
b2xlKSB8fCBpc0FueURlZihhcmdSb2xlKSk7Ci0gICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwg
YXJnUm9sZSwgYXJnVHlwZSwgYXJnV2lkdGgpOworICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2Us
IGFyZ1JvbGUsIGFyZ0JhbmssIGFyZ1dpZHRoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFkZHI6CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCwgYXJnUm9s
ZSA9PSBVc2VBZGRyID8gYXJnV2lkdGggOiBwb2ludGVyV2lkdGgoKSk7CkBAIC0xMzU5LDggKzEy
NjksNiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OktpbmQpOwogSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpB
cmc6OlJvbGUpOwotSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlR5cGUpOwotSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OldpZHRoKTsKIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6
OkFpcjo6QXJnOjpTaWduZWRuZXNzKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmdJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmdJ
bmxpbmVzLmgJKHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJnVGhpbmdIZWxwZXI8VG1wPiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEFyZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChBcmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEJhbmsgYmFuaywgV2lkdGggd2lkdGgsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ewotICAgICAgICBhcmcuZm9yRWFjaFRtcChyb2xlLCB0eXBlLCB3aWR0aCwgZnVuY3Rvcik7Cisg
ICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIGJhbmssIHdpZHRoLCBmdW5jdG9yKTsKICAgICB9
CiB9OwogCkBAIC03Nyw5ICs3Nyw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ1RoaW5nSGVscGVy
PEFyZz4gewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgc3Rh
dGljIHZvaWQgZm9yRWFjaChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBl
LCBBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHN0YXRpYyB2
b2lkIGZvckVhY2goQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoIHdp
ZHRoLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgZnVuY3Rvcihhcmcs
IHJvbGUsIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgZnVuY3RvcihhcmcsIHJvbGUsIGJhbmssIHdp
ZHRoKTsKICAgICB9CiB9OwogCkBAIC0xMDYsNyArMTA2LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJnVGhpbmdIZWxwZXI8U3RhY2tTbAogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIGZvckVhY2goQXJnJiBhcmcsIEFyZzo6Um9sZSBy
b2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayBiYW5rLCBXaWR0aCB3aWR0aCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAg
ICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExOSw3
ICsxMTksNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmdUaGluZ0hlbHBlcjxTdGFja1NsCiAgICAg
ICAgIC8vIHNlbWFudGljcyBvZiAiQW5vbnltb3VzIi4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTEyOAogICAgICAgICAKLSAgICAgICAgZnVu
Y3RvcihzdGFja1Nsb3QsIHJvbGUsIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgZnVuY3RvcihzdGFj
a1Nsb3QsIHJvbGUsIGJhbmssIHdpZHRoKTsKICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhzdGFj
a1Nsb3QsIGFyZy5vZmZzZXQoKSk7CiAgICAgfQogfTsKQEAgLTE1MCwxNiArMTUwLDE2IEBAIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ1RoaW5nSGVscGVyPFJlZz4gewogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIGZvckVhY2goQXJnJiBh
cmcsIEFyZzo6Um9sZSBhcmdSb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCBhcmdX
aWR0aCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEFy
ZyYgYXJnLCBBcmc6OlJvbGUgYXJnUm9sZSwgQmFuayBhcmdCYW5rLCBXaWR0aCBhcmdXaWR0aCwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIGFyZy5mb3JFYWNoVG1wKAot
ICAgICAgICAgICAgYXJnUm9sZSwgYXJnVHlwZSwgYXJnV2lkdGgsCi0gICAgICAgICAgICBbJl0g
KFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGggd2lk
dGgpIHsKKyAgICAgICAgICAgIGFyZ1JvbGUsIGFyZ0JhbmssIGFyZ1dpZHRoLAorICAgICAgICAg
ICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGggd2lkdGgp
IHsKICAgICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgUmVnIHJlZyA9IHRt
cC5yZWcoKTsKLSAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZywgcm9sZSwgdHlwZSwgd2lkdGgp
OworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVnLCByb2xlLCBiYW5rLCB3aWR0aCk7CiAgICAg
ICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC0x
ODQsOSArMTg0LDkgQEAgdm9pZCBBcmc6OmZvckVhY2hGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bgog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KLXZvaWQgQXJn
Ojpmb3JFYWNoKFJvbGUgcm9sZSwgVHlwZSB0eXBlLCBXaWR0aCB3aWR0aCwgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKK3ZvaWQgQXJnOjpmb3JFYWNoKFJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0
aCB3aWR0aCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBBcmdUaGluZ0hlbHBlcjxU
aGluZz46OmZvckVhY2goKnRoaXMsIHJvbGUsIHR5cGUsIHdpZHRoLCBmdW5jdG9yKTsKKyAgICBB
cmdUaGluZ0hlbHBlcjxUaGluZz46OmZvckVhY2goKnRoaXMsIHJvbGUsIGJhbmssIHdpZHRoLCBm
dW5jdG9yKTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkocmV2
aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNw
ZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDE3ICs0OCwxNyBAQCBDQ2FsbFNwZWNpYWw6On5D
Q2FsbFNwZWNpYWwoKQogdm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwg
Y29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DYWxsZWVBcmdzOyArK2kpCi0gICAgICAg
IGNhbGxiYWNrKGluc3QuYXJnc1tjYWxsZWVBcmdPZmZzZXQgKyBpXSwgQXJnOjpVc2UsIEFyZzo6
R1AsIEFyZzo6cG9pbnRlcldpZHRoKCkpOworICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbY2Fs
bGVlQXJnT2Zmc2V0ICsgaV0sIEFyZzo6VXNlLCBHUCwgcG9pbnRlcldpZHRoKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1SZXR1cm5HUEFyZ3M7ICsraSkKLSAgICAgICAgY2Fs
bGJhY2soaW5zdC5hcmdzW3JldHVybkdQQXJnT2Zmc2V0ICsgaV0sIEFyZzo6RGVmLCBBcmc6OkdQ
LCBBcmc6OnBvaW50ZXJXaWR0aCgpKTsKKyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW3JldHVy
bkdQQXJnT2Zmc2V0ICsgaV0sIEFyZzo6RGVmLCBHUCwgcG9pbnRlcldpZHRoKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1SZXR1cm5GUEFyZ3M7ICsraSkKLSAgICAgICAgY2Fs
bGJhY2soaW5zdC5hcmdzW3JldHVybkZQQXJnT2Zmc2V0ICsgaV0sIEFyZzo6RGVmLCBBcmc6OkZQ
LCBBcmc6OldpZHRoNjQpOworICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbcmV0dXJuRlBBcmdP
ZmZzZXQgKyBpXSwgQXJnOjpEZWYsIEZQLCBXaWR0aDY0KTsKICAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBhcmdBcmdPZmZzZXQ7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUgYXJnJ3MgdHlwZS4gVGhl
IGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisgICAgICAgIC8vIEZvciB0aGUgdHlw
ZSwgd2UgY2FuIGp1c3QgcXVlcnkgdGhlIGFyZydzIGJhbmsuIFRoZSBhcmcgd2lsbCBoYXZlIGEg
YmFuaywgYmVjYXVzZSB3ZQogICAgICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJn
dW1lbnQgcmVnaXN0ZXJzLgotICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IGluc3QuYXJnc1tpXS50
eXBlKCk7Ci0gICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIHR5cGUsIEFy
Zzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOworICAgICAgICBCYW5rIGJhbmsgPSBpbnN0LmFy
Z3NbaV0uYmFuaygpOworICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNlLCBi
YW5rLCBjb25zZXJ2YXRpdmVXaWR0aChiYW5rKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwCShyZXZpc2lvbiAyMTI5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsaW5nQ29udmVudGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsMTAgKzYyLDEwIEBAIEFy
ZyBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsKHVuc2lnbmVkJiAKIEFyZyBtYXJzaGFsbENDYWxs
QXJndW1lbnQoCiAgICAgdW5zaWduZWQmIGdwQXJndW1lbnRDb3VudCwgdW5zaWduZWQmIGZwQXJn
dW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSogY2hpbGQpCiB7Ci0gICAg
c3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpIHsKLSAgICBjYXNlIEFy
Zzo6R1A6CisgICAgc3dpdGNoIChiYW5rRm9yVHlwZShjaGlsZC0+dHlwZSgpKSkgeworICAgIGNh
c2UgR1A6CiAgICAgICAgIHJldHVybiBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsPEdQUkluZm8+
KGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIGNoaWxkKTsKLSAgICBjYXNlIEFyZzo6RlA6
CisgICAgY2FzZSBGUDoKICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8
RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgY2hpbGQpOwogICAgIH0KICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAyMTI5NjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTAgKzQx
LDEwIEBAIENvZGU6OkNvZGUoUHJvY2VkdXJlJiBwcm9jKQogICAgICwgbV9sYXN0UGhhc2VOYW1l
KCJpbml0aWFsIikKIHsKICAgICAvLyBDb21lIHVwIHdpdGggaW5pdGlhbCBvcmRlcmluZ3Mgb2Yg
cmVnaXN0ZXJzLiBUaGUgdXNlciBtYXkgcmVwbGFjZSB0aGlzIHdpdGggc29tZXRoaW5nIGVsc2Uu
Ci0gICAgQXJnOjpmb3JFYWNoVHlwZSgKLSAgICAgICAgWyZdIChBcmc6OlR5cGUgdHlwZSkgewor
ICAgIGZvckVhY2hCYW5rKAorICAgICAgICBbJl0gKEJhbmsgYmFuaykgewogICAgICAgICAgICAg
VmVjdG9yPFJlZz4gcmVzdWx0OwotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gdHlwZSA9
PSBBcmc6OkdQID8gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKSA6IFJlZ2lzdGVyU2V0OjphbGxGUFJz
KCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBiYW5rID09IEdQID8gUmVnaXN0ZXJT
ZXQ6OmFsbEdQUnMoKSA6IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCk7CiAgICAgICAgICAgICBhbGwu
ZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CiAgICAgICAgICAgICBhbGwu
ZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKICAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOwpAQCAtNTgsNyArNTgsNyBAQCBDb2RlOjpDb2RlKFByb2NlZHVyZSYgcHJvYykK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlZyk7CiAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICBzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUsIHJlc3VsdCk7CisgICAgICAg
ICAgICBzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmssIHJlc3VsdCk7CiAgICAgICAgIH0pOwog
fQogCkBAIC02NiwyMCArNjYsMjAgQEAgQ29kZTo6fkNvZGUoKQogewogfQogCi12b2lkIENvZGU6
OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlIHR5cGUsIGNvbnN0IFZlY3RvcjxSZWc+
JiByZWdzKQordm9pZCBDb2RlOjpzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKEJhbmsgYmFuaywgY29u
c3QgVmVjdG9yPFJlZz4mIHJlZ3MpCiB7Ci0gICAgcmVnc0luUHJpb3JpdHlPcmRlckltcGwodHlw
ZSkgPSByZWdzOworICAgIHJlZ3NJblByaW9yaXR5T3JkZXJJbXBsKGJhbmspID0gcmVnczsKICAg
ICBtX211dGFibGVSZWdzID0gUmVnaXN0ZXJTZXQoKTsKLSAgICBBcmc6OmZvckVhY2hUeXBlKAot
ICAgICAgICBbJl0gKEFyZzo6VHlwZSB0eXBlKSB7Ci0gICAgICAgICAgICBmb3IgKFJlZyByZWcg
OiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKQorICAgIGZvckVhY2hCYW5rKAorICAgICAgICBb
Jl0gKEJhbmsgYmFuaykgeworICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3Jp
dHlPcmRlcihiYW5rKSkKICAgICAgICAgICAgICAgICBtX211dGFibGVSZWdzLnNldChyZWcpOwog
ICAgICAgICB9KTsKIH0KIAogdm9pZCBDb2RlOjpwaW5SZWdpc3RlcihSZWcgcmVnKQogewotICAg
IFZlY3RvcjxSZWc+JiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlckltcGwoQXJnKFRtcChyZWcp
KS50eXBlKCkpOworICAgIFZlY3RvcjxSZWc+JiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcklt
cGwoQXJnKFRtcChyZWcpKS5iYW5rKCkpOwogICAgIHJlZ3MucmVtb3ZlRmlyc3QocmVnKTsKICAg
ICBtX211dGFibGVSZWdzLmNsZWFyKHJlZyk7CiAgICAgQVNTRVJUKCFyZWdzLmNvbnRhaW5zKHJl
ZykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9u
IDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjksMTggKzY5LDE4IEBAIHB1YmxpYzoKIAogICAgIFByb2NlZHVyZSYg
cHJvYygpIHsgcmV0dXJuIG1fcHJvYzsgfQogICAgIAotICAgIGNvbnN0IFZlY3RvcjxSZWc+JiBy
ZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSB0eXBlKSBjb25zdAorICAgIGNvbnN0IFZlY3Rv
cjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEJhbmsgYmFuaykgY29uc3QKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgIHN3aXRj
aCAoYmFuaykgeworICAgICAgICBjYXNlIEdQOgogICAgICAgICAgICAgcmV0dXJuIG1fZ3BSZWdz
SW5Qcmlvcml0eU9yZGVyOwotICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgIGNhc2UgRlA6
CiAgICAgICAgICAgICByZXR1cm4gbV9mcFJlZ3NJblByaW9yaXR5T3JkZXI7CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0
UmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUsIGNvbnN0IFZlY3RvcjxSZWc+Jik7CisgICAg
dm9pZCBzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKEJhbmssIGNvbnN0IFZlY3RvcjxSZWc+Jik7CiAg
ICAgCiAgICAgLy8gVGhpcyBpcyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IEFpciBpcyBhbGxv
d2VkIHRvIGVtaXQgY29kZSB0byBtdXRhdGUuIEl0J3MgZGVyaXZlZCBmcm9tCiAgICAgLy8gcmVn
c0luUHJpb3JpdHlPcmRlci4gQW55IHJlZ2lzdGVycyBub3QgaW4gdGhpcyBzZXQgYXJlIHNhaWQg
dG8gYmUgInBpbm5lZCIuCkBAIC0xMDQsMjMgKzEwNCwyMyBAQCBwdWJsaWM6CiAgICAgLy8gVGhp
cyBpcyB0aGUgc3BlY2lhbCB5b3UgbmVlZCB0byBtYWtlIGEgQyBjYWxsIQogICAgIENDYWxsU3Bl
Y2lhbCogY0NhbGxTcGVjaWFsKCk7CiAKLSAgICBUbXAgbmV3VG1wKEFyZzo6VHlwZSB0eXBlKQor
ICAgIFRtcCBuZXdUbXAoQmFuayBiYW5rKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAg
IGNhc2UgR1A6CiAgICAgICAgICAgICByZXR1cm4gVG1wOjpncFRtcEZvckluZGV4KG1fbnVtR1BU
bXBzKyspOwotICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgIGNhc2UgRlA6CiAgICAgICAg
ICAgICByZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOwogICAgICAgICB9
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIG51
bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgdW5zaWduZWQgbnVtVG1wcyhCYW5rIGJhbmspCiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBBcmc6OkdQOgorICAg
ICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBHUDoKICAgICAgICAgICAgIHJldHVy
biBtX251bUdQVG1wczsKLSAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICBjYXNlIEZQOgog
ICAgICAgICAgICAgcmV0dXJuIG1fbnVtRlBUbXBzOwogICAgICAgICB9CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjg2LDEyICsyODYsMTIgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBDb2RlKFByb2NlZHVyZSYpOwogCi0gICAgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3Jk
ZXJJbXBsKEFyZzo6VHlwZSB0eXBlKQorICAgIFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9y
ZGVySW1wbChCYW5rIGJhbmspCiAgICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAg
ICAgY2FzZSBBcmc6OkdQOgorICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAgICAgY2FzZSBH
UDoKICAgICAgICAgICAgIHJldHVybiBtX2dwUmVnc0luUHJpb3JpdHlPcmRlcjsKLSAgICAgICAg
Y2FzZSBBcmc6OkZQOgorICAgICAgICBjYXNlIEZQOgogICAgICAgICAgICAgcmV0dXJuIG1fZnBS
ZWdzSW5Qcmlvcml0eU9yZGVyOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBQYXRjaEN1c3RvbTo6aXNW
YWxpZEZvcm0oSW5zdCYgaW5zdAogICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJlZExhdGUgPSBpbnN0
LmV4dHJhQ2xvYmJlcmVkUmVncygpOwogICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGluc3QuZm9y
RWFjaFRtcCgKLSAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSwgQXJnOjpXaWR0aCkgeworICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
QmFuaywgV2lkdGgpIHsKICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpIHx8IEFy
Zzo6aXNMYXRlVXNlKHJvbGUpKQpAQCAtMTM4LDcgKzEzOCw3IEBAIGJvb2wgU2h1ZmZsZUN1c3Rv
bTo6aXNWYWxpZEZvcm0oSW5zdCYgaW4KICAgICAgICAgICAgIGlmIChhcmcuaXNTb21lSW1tKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmICghYXJnLmlzQ29t
cGF0aWJsZVR5cGUoaW5zdC5hcmdzW2kgKyAxXSkpCisgICAgICAgICAgICBpZiAoIWFyZy5pc0Nv
bXBhdGlibGVCYW5rKGluc3QuYXJnc1tpICsgMV0pKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChtb2RlID09IDEpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCShyZXZpc2lvbiAy
MTI5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB7CiAgICAg
ICAgIC8vIFRoaXMgaXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZm9yIGFuYWx5c2Vz
IHRoYXQgbW9kZWwgU3BlY2lhbCBhcyBhbgogICAgICAgICAvLyBpbW1lZGlhdGUuCi0gICAgICAg
IGZ1bmN0b3IoaW5zdC5hcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpwb2ludGVyV2lk
dGgoKSk7CisgICAgICAgIGZ1bmN0b3IoaW5zdC5hcmdzWzBdLCBBcmc6OlVzZSwgR1AsIHBvaW50
ZXJXaWR0aCgpKTsKICAgICAgICAgCiAgICAgICAgIGluc3QuYXJnc1swXS5zcGVjaWFsKCktPmZv
ckVhY2hBcmcoaW5zdCwgc2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4oZnVuY3Rv
cikpOwogICAgIH0KQEAgLTEyOCwyMSArMTI4LDIxIEBAIHN0cnVjdCBDQ2FsbEN1c3RvbSA6IHB1
YmxpYyBDb21tb25DdXN0b20KIAogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAKLSAgICAg
ICAgZnVuY3RvcihpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6OnBv
aW50ZXJXaWR0aCgpKTsgLy8gY2FsbGVlCisgICAgICAgIGZ1bmN0b3IoaW5zdC5hcmdzW2luZGV4
KytdLCBBcmc6OlVzZSwgR1AsIHBvaW50ZXJXaWR0aCgpKTsgLy8gY2FsbGVlCiAgICAgICAgIAog
ICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSAhPSBWb2lkKSB7CiAgICAgICAgICAgICBmdW5jdG9y
KAogICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpEZWYsCi0gICAgICAg
ICAgICAgICAgQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpLAotICAgICAgICAgICAg
ICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSkpOworICAgICAgICAgICAgICAg
IGJhbmtGb3JUeXBlKHZhbHVlLT50eXBlKCkpLAorICAgICAgICAgICAgICAgIHdpZHRoRm9yVHlw
ZSh2YWx1ZS0+dHlwZSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgdmFsdWUtPm51bUNoaWxkcmVuKCk7ICsraSkgewogICAgICAgICAgICAgVmFsdWUq
IGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOwogICAgICAgICAgICAgZnVuY3RvcigKICAgICAgICAg
ICAgICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLAotICAgICAgICAgICAgICAgIEFy
Zzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSwKLSAgICAgICAgICAgICAgICBBcmc6Ondp
ZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICBiYW5rRm9yVHlw
ZShjaGlsZC0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICB3aWR0aEZvclR5cGUoY2hpbGQtPnR5
cGUoKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xODAsOCArMTgwLDggQEAgc3RydWN0IENv
bGRDQ2FsbEN1c3RvbSA6IENDYWxsQ3VzdG9tIHsKICAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGxp
a2UgYSBjYWxsLCBidXQgdXNlcyBiZWNvbWUgY29sZC4KICAgICAgICAgQ0NhbGxDdXN0b206OmZv
ckVhY2hBcmcoCiAgICAgICAgICAgICBpbnN0LAotICAgICAgICAgICAgWyZdIChBcmcmIGFyZywg
QXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgZnVuY3RvcihhcmcsIEFyZzo6Y29vbGVkKHJvbGUpLCB0eXBlLCB3aWR0aCk7
CisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBX
aWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoYXJnLCBBcmc6OmNvb2xlZChy
b2xlKSwgYmFuaywgd2lkdGgpOwogICAgICAgICAgICAgfSk7CiAgICAgfQogfTsKQEAgLTE5NSwx
MSArMTk1LDExIEBAIHN0cnVjdCBTaHVmZmxlQ3VzdG9tIDogcHVibGljIENvbW1vbkN1c3QKICAg
ICAgICAgICAgIEFyZyYgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKICAgICAgICAgICAgIEFyZyYg
ZHN0ID0gaW5zdC5hcmdzW2kgKyAxXTsKICAgICAgICAgICAgIEFyZyYgd2lkdGhBcmcgPSBpbnN0
LmFyZ3NbaSArIDJdOwotICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndp
ZHRoKCk7Ci0gICAgICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0Lmlz
R1AoKSA/IEFyZzo6R1AgOiBBcmc6OkZQOwotICAgICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6
VXNlLCB0eXBlLCB3aWR0aCk7Ci0gICAgICAgICAgICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIHR5
cGUsIHdpZHRoKTsKLSAgICAgICAgICAgIGZ1bmN0b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBBcmc6
OkdQLCBBcmc6OldpZHRoOCk7CisgICAgICAgICAgICBXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndp
ZHRoKCk7CisgICAgICAgICAgICBCYW5rIGJhbmsgPSBzcmMuaXNHUCgpICYmIGRzdC5pc0dQKCkg
PyBHUCA6IEZQOworICAgICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6VXNlLCBiYW5rLCB3aWR0
aCk7CisgICAgICAgICAgICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIGJhbmssIHdpZHRoKTsKKyAg
ICAgICAgICAgIGZ1bmN0b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBHUCwgV2lkdGg4KTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMjgwLDggKzI4MCw4IEBAIHN0cnVjdCBXYXNtQm91bmRzQ2hlY2tD
dXN0b20gOiBwdWJsaWMgQ28KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHN0YXRp
YyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuYyYgZnVuY3RvcikKICAgICB7
Ci0gICAgICAgIGZ1bmN0b3IoaW5zdC5hcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpX
aWR0aDY0KTsKLSAgICAgICAgZnVuY3RvcihpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBBcmc6OkdQ
LCBBcmc6OldpZHRoNjQpOworICAgICAgICBmdW5jdG9yKGluc3QuYXJnc1swXSwgQXJnOjpVc2Us
IEdQLCBXaWR0aDY0KTsKKyAgICAgICAgZnVuY3RvcihpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBH
UCwgV2lkdGg2NCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEdW1wQXNKUy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEdW1wQXNKUy5jcHAJ
KHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVt
cEFzSlMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDE2ICs2MCwxNiBAQCBDU3RyaW5nIHZhck5hbWUo
UmVnIHJlZykKICAgICByZXR1cm4gdG9DU3RyaW5nKCJSZWcuIiwgcmVnLmRlYnVnTmFtZSgpKTsK
IH0KIAotQ1N0cmluZyB2YXJOYW1lRm9yVG1wV2l0aFR5cGVBbmRJbmRleChBcmc6OlR5cGUgdHlw
ZSwgdW5zaWduZWQgaW5kZXgpCitDU3RyaW5nIHZhck5hbWVGb3JUbXBXaXRoQmFua0FuZEluZGV4
KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh0eXBl
ID09IEFyZzo6RlAgPyAiZiIgOiAiIiwgInRtcCIsIGluZGV4KTsKKyAgICByZXR1cm4gdG9DU3Ry
aW5nKGJhbmsgPT0gRlAgPyAiZiIgOiAiIiwgInRtcCIsIGluZGV4KTsKIH0KIAogQ1N0cmluZyB2
YXJOYW1lKFRtcCB0bXApCiB7CiAgICAgaWYgKHRtcC5pc1JlZygpKQogICAgICAgICByZXR1cm4g
dmFyTmFtZSh0bXAucmVnKCkpOwotICAgIHJldHVybiB2YXJOYW1lRm9yVG1wV2l0aFR5cGVBbmRJ
bmRleChBcmcodG1wKS50eXBlKCksIHRtcC50bXBJbmRleCgpKTsKKyAgICByZXR1cm4gdmFyTmFt
ZUZvclRtcFdpdGhCYW5rQW5kSW5kZXgoQXJnKHRtcCkuYmFuaygpLCB0bXAudG1wSW5kZXgoKSk7
CiB9CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpAQCAtOTYsMTEgKzk2LDExIEBAIHZvaWQg
ZHVtcEFzSlMoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0mIG8KICAgICAgICAgICAgIG91dC5wcmlu
dGxuKCJjb2RlLmFkZFN0YWNrU2xvdCgxLCBTcGlsbCk7Iik7CiAgICAgfQogICAgIAotICAgIEFy
Zzo6Zm9yRWFjaFR5cGUoCi0gICAgICAgIFsmXSAoQXJnOjpUeXBlIHR5cGUpIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGUubnVtVG1wcyh0eXBlKTsgaS0tOykgeworICAgIGZv
ckVhY2hCYW5rKAorICAgICAgICBbJl0gKEJhbmsgYmFuaykgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gY29kZS5udW1UbXBzKGJhbmspOyBpLS07KSB7CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICJsZXQgIiwgdmFyTmFtZUZvclRtcFdp
dGhUeXBlQW5kSW5kZXgodHlwZSwgaSksICIgPSBjb2RlLm5ld1RtcCgiLCB0eXBlLCAiKTsiKTsK
KyAgICAgICAgICAgICAgICAgICAgImxldCAiLCB2YXJOYW1lRm9yVG1wV2l0aEJhbmtBbmRJbmRl
eChiYW5rLCBpKSwgIiA9IGNvZGUubmV3VG1wKCIsIGJhbmssICIpOyIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9KTsKICAgICAKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIGR1bXBBc0pTKENv
ZGUmIGNvZGUsIFByaW50U3RyZWFtJiBvCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdCA9
IG5ldyBJbnN0KCIsIGluc3Qua2luZC5vcGNvZGUsICIpOyIpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywg
QXJnOjpSb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBbJl0g
KEFyZyYgYXJnLCBBcmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoYXJnLmtpbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6SW52
YWxpZDoKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0yMTYsOSArMjE2LDkgQEAgdm9pZCBkdW1wQXNKUyhDb2RlJiBjb2RlLCBQcmludFN0
cmVhbSYgbwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJp
bnN0LnBhdGNoQXJnRGF0YSA9IFtdOyIpOwogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFy
ZygKLSAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgWyZdIChB
cmcmLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Imluc3QucGF0Y2hBcmdEYXRhLnB1c2goe3JvbGU6IEFyZy4iLCByb2xlLCAiLCB0eXBlOiAiLCB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0LnBhdGNoQXJnRGF0YS5wdXNo
KHtyb2xlOiBBcmcuIiwgcm9sZSwgIiwgdHlwZTogIiwgYmFuaywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiLCB3aWR0aDogIiwgd2lkdGgsICJ9KTsiKTsKICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkocmV2aXNpb24gMjEyOTYwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgZWxpbWluYXRlRGVhZENvZGUo
Q29kZSYgY29kZSkKICAgICAgICAgLy8gVGhpcyBpbnN0cnVjdGlvbiBzaG91bGQgYmUgcHJlc3Vt
ZWQgZGVhZCwgaWYgaXRzIEFyZ3MgYXJlIGFsbCBkZWFkLgogICAgICAgICBib29sIHN0b3Jlc1Rv
TGl2ZSA9IGZhbHNlOwogICAgICAgICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICBbJl0g
KEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAg
ICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNw
cAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJF
bWl0U2h1ZmZsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsOCArNDAsOCBAQCBuYW1lc3BhY2Ugewog
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1UbXAg
ZmluZFBvc3NpYmxlU2NyYXRjaChDb2RlJiBjb2RlLCBBcmc6OlR5cGUgdHlwZSwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgewotICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVnc0luUHJpb3JpdHlP
cmRlcih0eXBlKSkgeworVG1wIGZpbmRQb3NzaWJsZVNjcmF0Y2goQ29kZSYgY29kZSwgQmFuayBi
YW5rLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSB7CisgICAgZm9yIChSZWcgcmVnIDogY29kZS5y
ZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7CiAgICAgICAgIFRtcCB0bXAocmVnKTsKICAgICAg
ICAgaWYgKGZ1bmN0b3IodG1wKSkKICAgICAgICAgICAgIHJldHVybiB0bXA7CkBAIC00OSw5ICs0
OSw5IEBAIFRtcCBmaW5kUG9zc2libGVTY3JhdGNoKENvZGUmIGNvZGUsIEFyZzoKICAgICByZXR1
cm4gVG1wKCk7CiB9CiAKLVRtcCBmaW5kUG9zc2libGVTY3JhdGNoKENvZGUmIGNvZGUsIEFyZzo6
VHlwZSB0eXBlLCBjb25zdCBBcmcmIGFyZzEsIGNvbnN0IEFyZyYgYXJnMikgeworVG1wIGZpbmRQ
b3NzaWJsZVNjcmF0Y2goQ29kZSYgY29kZSwgQmFuayBiYW5rLCBjb25zdCBBcmcmIGFyZzEsIGNv
bnN0IEFyZyYgYXJnMikgewogICAgIHJldHVybiBmaW5kUG9zc2libGVTY3JhdGNoKAotICAgICAg
ICBjb2RlLCB0eXBlLAorICAgICAgICBjb2RlLCBiYW5rLAogICAgICAgICBbJl0gKFRtcCB0bXAp
IC0+IGJvb2wgewogICAgICAgICAgICAgcmV0dXJuICFhcmcxLnVzZXNUbXAodG1wKSAmJiAhYXJn
Mi51c2VzVG1wKHRtcCk7CiAgICAgICAgIH0pOwpAQCAtNzksNyArNzksNyBAQCBJbnN0IGNyZWF0
ZVNodWZmbGUoVmFsdWUqIG9yaWdpbiwgY29uc3QgCiB9CiAKIFZlY3RvcjxJbnN0PiBlbWl0U2h1
ZmZsZSgKLSAgICBDb2RlJiBjb2RlLCBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzLCBzdGQ6OmFy
cmF5PEFyZywgMj4gc2NyYXRjaGVzLCBBcmc6OlR5cGUgdHlwZSwKKyAgICBDb2RlJiBjb2RlLCBW
ZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzLCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaGVzLCBC
YW5rIGJhbmssCiAgICAgVmFsdWUqIG9yaWdpbikKIHsKICAgICBpZiAodmVyYm9zZSkgewpAQCAt
OTYsOCArOTYsOCBAQCBWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCiAgICAgLy8gRmlyc3QgdmFs
aWRhdGUgdGhhdCB0aGlzIGlzIHRoZSBraW5kIG9mIHNodWZmbGUgdGhhdCB3ZSBrbm93IGhvdyB0
byBkZWFsIHdpdGguCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGZvciAoY29uc3QgU2h1ZmZs
ZVBhaXImIHBhaXIgOiBwYWlycykgewotICAgICAgICBBU1NFUlQocGFpci5zcmMoKS5pc1R5cGUo
dHlwZSkpOwotICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1R5cGUodHlwZSkpOworICAgICAg
ICBBU1NFUlQocGFpci5zcmMoKS5pc0JhbmsoYmFuaykpOworICAgICAgICBBU1NFUlQocGFpci5k
c3QoKS5pc0JhbmsoYmFuaykpOwogICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1RtcCgpIHx8
IHBhaXIuZHN0KCkuaXNNZW1vcnkoKSk7CiAgICAgfQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKQEAgLTI2MCwxOCArMjYwLDE4IEBAIFZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKICAgICAv
LyBMdWNreSBmb3IgdXMsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGhhdmUgZXh0cmEgc2NyYXRjaCBy
ZWdpc3RlcnMgYW55dGltZSB3ZSBoYXZlIGEgU2hpZnQgdGhhdAogICAgIC8vIGVuZHMgd2l0aCBh
IHJlZ2lzdGVyLiBXZSBzZWFyY2ggZm9yIHN1Y2ggYSByZWdpc3RlciByaWdodCBub3cuCiAKLSAg
ICBhdXRvIG1vdmVGb3JXaWR0aCA9IFsmXSAoQXJnOjpXaWR0aCB3aWR0aCkgLT4gT3Bjb2RlIHsK
KyAgICBhdXRvIG1vdmVGb3JXaWR0aCA9IFsmXSAoV2lkdGggd2lkdGgpIC0+IE9wY29kZSB7CiAg
ICAgICAgIHN3aXRjaCAod2lkdGgpIHsKLSAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6Ci0gICAg
ICAgICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZTMyIDogTW92ZUZsb2F0OwotICAg
ICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKLSAgICAgICAgICAgIHJldHVybiB0eXBlID09IEFyZzo6
R1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKyAgICAgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAg
ICAgcmV0dXJuIGJhbmsgPT0gR1AgPyBNb3ZlMzIgOiBNb3ZlRmxvYXQ7CisgICAgICAgIGNhc2Ug
V2lkdGg2NDoKKyAgICAgICAgICAgIHJldHVybiBiYW5rID09IEdQID8gTW92ZSA6IE1vdmVEb3Vi
bGU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIE9wY29kZSBjb25zZXJ2YXRpdmVNb3Zl
ID0gbW92ZUZvcldpZHRoKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOworICAgIE9wY29k
ZSBjb25zZXJ2YXRpdmVNb3ZlID0gbW92ZUZvcldpZHRoKGNvbnNlcnZhdGl2ZVdpZHRoKGJhbmsp
KTsKIAogICAgIC8vIFdlIHdpbGwgZW1pdCB0aGluZ3MgaW4gcmV2ZXJzZS4gV2UgbWFpbnRhaW4g
YSBsaXN0IG9mIHBhY2tzIG9mIGluc3RydWN0aW9ucywgYW5kIHRoZW4gd2UgZW1pdAogICAgIC8v
IGFwcGVuZCB0aGVtIHRvZ2V0aGVyIGluIHJldmVyc2UgKGZvciBleGFtcGxlIHRoZSB0aGluZyBh
dCB0aGUgZW5kIG9mIHJlc3VsdFBhY2tzIGlzIHBsYWNlZApAQCAtMzA0LDcgKzMwNCw3IEBAIFZl
Y3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKICAgICAgICAgCiAgICAgICAgIGlmICghaXNWYWxpZEZv
cm0obW92ZSwgcGFpci5zcmMoKS5raW5kKCksIHBhaXIuZHN0KCkua2luZCgpKSkgewogICAgICAg
ICAgICAgVG1wIHNjcmF0Y2ggPQotICAgICAgICAgICAgICAgIGdldFNjcmF0Y2goc2NyYXRjaElu
ZGV4LCBmaW5kUG9zc2libGVTY3JhdGNoKGNvZGUsIHR5cGUsIHBhaXIuc3JjKCksIHBhaXIuZHN0
KCkpKTsKKyAgICAgICAgICAgICAgICBnZXRTY3JhdGNoKHNjcmF0Y2hJbmRleCwgZmluZFBvc3Np
YmxlU2NyYXRjaChjb2RlLCBiYW5rLCBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShtb3ZlLCBwYWlyLnNyYygpLmtpbmQoKSwgQXJnOjpUbXApKQogICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBwYWly
LnNyYygpLCBzY3JhdGNoKSk7CkBAIC0zNzMsMjQgKzM3MywyNCBAQCBWZWN0b3I8SW5zdD4gZW1p
dFNodWZmbGUoCiAgICAgICAgIAogICAgICAgICBib29sIGNhblN3YXAgPSBmYWxzZTsKICAgICAg
ICAgT3Bjb2RlIHN3YXAgPSBPb3BzOwotICAgICAgICBBcmc6OldpZHRoIHN3YXBXaWR0aCA9IEFy
Zzo6V2lkdGg4OyAvLyBib2d1cyB2YWx1ZQorICAgICAgICBXaWR0aCBzd2FwV2lkdGggPSBXaWR0
aDg7IC8vIGJvZ3VzIHZhbHVlCiAKICAgICAgICAgLy8gQ3VycmVudGx5LCB0aGUgc3dhcCBpbnN0
cnVjdGlvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBmbG9hdGluZyBwb2ludCBvbiBhbnkgYXJjaGl0
ZWN0dXJlIHdlCiAgICAgICAgIC8vIHN1cHBvcnQuCi0gICAgICAgIGlmICh0eXBlID09IEFyZzo6
R1ApIHsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApIHsKICAgICAgICAgICAgIC8vIEZpZ3VyZSBv
dXQgd2hldGhlciB3ZSB3aWxsIGJlIGRvaW5nIDY0LWJpdCBzd2FwcyBvciAzMi1iaXQgc3dhcHMu
IElmIHdlIGhhdmUgYSBtaXggb2YKICAgICAgICAgICAgIC8vIHdpZHRocyB3ZSBoYW5kbGUgdGhh
dCBieSBmaXhpbmcgdXAgdGhlIHJlbGV2YW50IHJlZ2lzdGVyIHdpdGggemVyby1leHRlbmRzLgog
ICAgICAgICAgICAgc3dhcCA9IFN3YXAzMjsKLSAgICAgICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6
V2lkdGgzMjsKKyAgICAgICAgICAgIHN3YXBXaWR0aCA9IFdpZHRoMzI7CiAgICAgICAgICAgICBi
b29sIGhhc01lbW9yeSA9IGZhbHNlOwogICAgICAgICAgICAgYm9vbCBoYXNJbmRleCA9IGZhbHNl
OwogICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZS5sb29wKSB7CiAg
ICAgICAgICAgICAgICAgc3dpdGNoIChwYWlyLndpZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRoMzI6CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0Ogor
ICAgICAgICAgICAgICAgIGNhc2UgV2lkdGg2NDoKICAgICAgICAgICAgICAgICAgICAgc3dhcCA9
IFN3YXA2NDsKLSAgICAgICAgICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDY0Owor
ICAgICAgICAgICAgICAgICAgICBzd2FwV2lkdGggPSBXaWR0aDY0OwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDM2LDcgKzQzNiw3IEBAIFZlY3Rv
cjxJbnN0PiBlbWl0U2h1ZmZsZSgKICAgICAgICAgICAgICAgICAgICAgLy8gTW92aW5nIGRhdGEg
YmV0d2VlbiB0d28gc3BpbGxzIGlzIHJhcmUuIFRvIGdldCBoZXJlIGEgbG90IG9mIHJhcmUgc3R1
ZmYgaGFzIHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBoYXBwZW4gYXQgb25jZS4KICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFRtcCBzY3JhdGNoID0gZ2V0
U2NyYXRjaCgwLCBmaW5kUG9zc2libGVTY3JhdGNoKGNvZGUsIHR5cGUsIGxlZnQsIHJpZ2h0KSk7
CisgICAgICAgICAgICAgICAgICAgIFRtcCBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBmaW5kUG9z
c2libGVTY3JhdGNoKGNvZGUsIGJhbmssIGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgbGVmdCwgc2NyYXRj
aCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2lu
LCBzY3JhdGNoLCByaWdodCkpOwpAQCAtNDU1LDggKzQ1NSw4IEBAIFZlY3RvcjxJbnN0PiBlbWl0
U2h1ZmZsZSgKICAgICAgICAgICAgICAgICBpZiAocGFpci53aWR0aCgpID09IHN3YXBXaWR0aCkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChwYWlyLndpZHRoKCkgPT0gQXJnOjpXaWR0aDMyKTsKLSAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzd2FwV2lkdGggPT0gQXJnOjpXaWR0aDY0KTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChwYWlyLndpZHRoKCkgPT0gV2lkdGgzMik7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3dhcFdpZHRoID09IFdpZHRoNjQpOwogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHBhaXIuZHN0KCkuaXNUbXAoKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBOZWVkIHRvIGRvIGFuIGV4dHJhIHplcm8gZXh0ZW5zaW9uLgpAQCAtNDcwLDcgKzQ3MCw3IEBA
IFZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKICAgICAgICAgICAgIC8vIGF2YWlsYWJsZSByZWdp
c3RlciBmaWxlLgogCiAgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGZpbmRQb3NzaWJsZVNjcmF0
Y2goCi0gICAgICAgICAgICAgICAgY29kZSwgdHlwZSwKKyAgICAgICAgICAgICAgICBjb2RlLCBi
YW5rLAogICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZS5sb29wKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGFpci5zcmMoKS51c2VzVG1wKHRtcCkpCkBAIC01MjAsNyAr
NTIwLDcgQEAgVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAogICAgIFZlY3RvcjxTaHVmZmxlUGFp
cj4gZ3BQYWlyczsKICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGZwUGFpcnM7CiAgICAgZm9yIChj
b25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKSB7Ci0gICAgICAgIGlmIChwYWlyLnNyYygp
LmlzTWVtb3J5KCkgJiYgcGFpci5kc3QoKS5pc01lbW9yeSgpICYmIHBhaXIud2lkdGgoKSA+IEFy
Zzo6cG9pbnRlcldpZHRoKCkpIHsKKyAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNNZW1vcnkoKSAm
JiBwYWlyLmRzdCgpLmlzTWVtb3J5KCkgJiYgcGFpci53aWR0aCgpID4gcG9pbnRlcldpZHRoKCkp
IHsKICAgICAgICAgICAgIC8vIDgtYnl0ZSBtZW1vcnktdG8tbWVtb3J5IG1vdmVzIG9uIGEgMzIt
Yml0IHBsYXRmb3JtIGFyZSBiZXN0IGhhbmRsZWQgYXMgZmxvYXQgbW92ZXMuCiAgICAgICAgICAg
ICBmcFBhaXJzLmFwcGVuZChwYWlyKTsKICAgICAgICAgfSBlbHNlIGlmIChwYWlyLnNyYygpLmlz
R1AoKSAmJiBwYWlyLmRzdCgpLmlzR1AoKSkgewpAQCAtNTMyLDggKzUzMiw4IEBAIFZlY3RvcjxJ
bnN0PiBlbWl0U2h1ZmZsZSgKICAgICB9CiAKICAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OwotICAg
IHJlc3VsdC5hcHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoY29kZSwgZ3BQYWlycywgZ3BTY3JhdGNo
LCBBcmc6OkdQLCBvcmlnaW4pKTsKLSAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxl
KGNvZGUsIGZwUGFpcnMsIGZwU2NyYXRjaCwgQXJnOjpGUCwgb3JpZ2luKSk7CisgICAgcmVzdWx0
LmFwcGVuZFZlY3RvcihlbWl0U2h1ZmZsZShjb2RlLCBncFBhaXJzLCBncFNjcmF0Y2gsIEdQLCBv
cmlnaW4pKTsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxlKGNvZGUsIGZwUGFp
cnMsIGZwU2NyYXRjaCwgRlAsIG9yaWdpbikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHJl
dmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNo
dWZmbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIFNodWZmbGVQYWlyKGNvbnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRzdCwg
QXJnOjpXaWR0aCB3aWR0aCkKKyAgICBTaHVmZmxlUGFpcihjb25zdCBBcmcmIHNyYywgY29uc3Qg
QXJnJiBkc3QsIFdpZHRoIHdpZHRoKQogICAgICAgICA6IG1fc3JjKHNyYykKICAgICAgICAgLCBt
X2RzdChkc3QpCiAgICAgICAgICwgbV93aWR0aCh3aWR0aCkKQEAgLTU3LDE0ICs1NywxNCBAQCBw
dWJsaWM6CiAKICAgICAvLyBUaGUgd2lkdGggZGV0ZXJtaW5lcyB0aGUga2luZCBvZiBtb3ZlIHdl
IGRvLiBZb3UgY2FuIG9ubHkgY2hvb3NlIFdpZHRoMzIgb3IgV2lkdGg2NCByaWdodCBub3cuCiAg
ICAgLy8gRm9yIEdQLCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmUzMiBhbmQgTW92ZS4gRm9yIEZQLCBp
dCBwaWNrcyBiZXR3ZWVuIE1vdmVGbG9hdCBhbmQgTW92ZURvdWJsZS4KLSAgICBBcmc6OldpZHRo
IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIFdpZHRoIHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aDsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CiAgICAgCiBwcml2YXRlOgogICAgIEFyZyBtX3NyYzsKICAgICBBcmcgbV9kc3Q7Ci0gICAg
QXJnOjpXaWR0aCBtX3dpZHRoIHsgQXJnOjpXaWR0aDggfTsKKyAgICBXaWR0aCBtX3dpZHRoIHsg
V2lkdGg4IH07CiB9OwogCiAvLyBDcmVhdGUgYSBTaHVmZmxlIGluc3RydWN0aW9uLgpAQCAtMTAy
LDcgKzEwMiw3IEBAIEluc3QgY3JlYXRlU2h1ZmZsZShWYWx1ZSogb3JpZ2luLCBjb25zdCAKIC8v
IE5PVEU6IFVzZSB0aGlzIG1ldGhvZCAoYW5kIGl0cyBmcmllbmQgYmVsb3cpIHRvIGVtaXQgc2h1
ZmZsZXMgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gQmVmb3JlCiAvLyByZWdpc3RlciBhbGxv
Y2F0aW9uIGl0IGlzIG11Y2ggYmV0dGVyIHRvIHNpbXBseSB1c2UgdGhlIFNodWZmbGUgaW5zdHJ1
Y3Rpb24uCiBWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCi0gICAgQ29kZSYgY29kZSwgVmVjdG9y
PFNodWZmbGVQYWlyPiwgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2gsIEFyZzo6VHlwZSwgVmFs
dWUqIG9yaWdpbik7CisgICAgQ29kZSYgY29kZSwgVmVjdG9yPFNodWZmbGVQYWlyPiwgc3RkOjph
cnJheTxBcmcsIDI+IHNjcmF0Y2gsIEJhbmssIFZhbHVlKiBvcmlnaW4pOwogCiAvLyBQZXJmb3Jt
IGEgc2h1ZmZsZSB0aGF0IGludm9sdmVzIGFueSBudW1iZXIgb2YgdHlwZXMuIFBhc3Mgc2NyYXRj
aCByZWdpc3RlcnMgb3IgbWVtb3J5IGxvY2F0aW9ucwogLy8gZm9yIGVhY2ggdHlwZSBhY2NvcmRp
bmcgdG8gdGhlIHJ1bGVzIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCShyZXZpc2lvbiAyMTI5NjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIEluc3Q6OmZv
ckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPEFyZz4oCiAgICAgICAgICAgICAmaW5zdCwg
Jmluc3QsCi0gICAgICAgICAgICBbJl0gKGNvbnN0IEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6
VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgWyZdIChjb25zdCBBcmcmIGFyZywgQXJn
OjpSb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIENsb2JiZXJpbmcgIiwgYXJnLCAiXG4i
KTsKICAgICAgICAgICAgICAgICBtX3N0YXRlLmNsb2JiZXIoYXJnKTsKQEAgLTIzNyw3ICsyMzcs
NyBAQCBwcml2YXRlOgogICAgICAgICAvLyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsaXZlbmVzcyBh
bmFseXNpcy4gV2UgYWxzbyBjYW4ndCBoYW5kbGUgbGF0ZSB1c2VzLCBiZWNhdXNlIHdlIGRvbid0
CiAgICAgICAgIC8vIGxvb2sgYXQgbGF0ZSBjbG9iYmVycyB3aGVuIGRvaW5nIHRoaXMuCiAgICAg
ICAgIGJvb2wgZGlkVGhpbmdzID0gZmFsc2U7Ci0gICAgICAgIGF1dG8gaGFuZGxlQXJnID0gWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkg
eworICAgICAgICBhdXRvIGhhbmRsZUFyZyA9IFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xl
LCBCYW5rLCBXaWR0aCB3aWR0aCkgewogICAgICAgICAgICAgaWYgKCFpc1NwaWxsU2xvdChhcmcp
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGlmICghQXJnOjppc0Vhcmx5
VXNlKHJvbGUpKQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBU
cnkgdG8gZ2V0IGEgcmVnaXN0ZXIgaWYgYXQgYWxsIHBvc3NpYmxlLgogICAgICAgICAgICAgaWYg
KGNvbnN0IFJlZ1Nsb3QqIGFsaWFzID0gbV9zdGF0ZS5nZXRSZWdTbG90KGFyZy5zdGFja1Nsb3Qo
KSkpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWR0aDY0OgogICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxpYXMtPm1vZGUgIT0gUmVnU2xvdDo6QWxsQml0cykKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCkBAIC0yNTYsNyArMjU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYXJn
ID0gVG1wKGFsaWFzLT5yZWcpOwogICAgICAgICAgICAgICAgICAgICBkaWRUaGluZ3MgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6
OldpZHRoMzI6CisgICAgICAgICAgICAgICAgY2FzZSBXaWR0aDMyOgogICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBS
ZXBsYWNpbmcgIiwgYXJnLCAiIHdpdGggIiwgYWxpYXMtPnJlZywgIiAoc3Vid2lkdGggY2FzZSlc
biIpOwogICAgICAgICAgICAgICAgICAgICBhcmcgPSBUbXAoYWxpYXMtPnJlZyk7CkBAIC0yODgs
OSArMjg4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgaW5zdCA9IGluc3RDb3B5OwogICAgICAgICBB
U1NFUlQoaW5zdC5pc1ZhbGlkRm9ybSgpKTsKICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAg
ICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBB
cmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQmFuayBiYW5rLCBXaWR0aCB3aWR0aCkgewogICAgICAgICAgICAgICAgIEFyZyBhcmdD
b3B5ID0gYXJnOwotICAgICAgICAgICAgICAgIGhhbmRsZUFyZyhhcmcsIHJvbGUsIHR5cGUsIHdp
ZHRoKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVBcmcoYXJnLCByb2xlLCBiYW5rLCB3aWR0aCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFpbnN0LmlzVmFsaWRGb3JtKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGFyZyA9IGFyZ0NvcHk7CiAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3Rl
clN0YWxscy5jcHAJKHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEyMCw3ICsxMjAsNyBAQCB2b2lkIHVwZGF0ZURpc3RhbmNlcyhJbnN0JiBpbnN0LCBGUERlZkRp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAm
IHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgIGluc3Qu
Zm9yRWFjaFRtcChbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsK
ICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh0bXAuaXNSZWcoKSwgIlRoaXMgcGhhc2UgbXVz
dCBiZSBydW4gYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbi4iKTsKIAogICAgICAgICBpZiAodG1w
LmlzRlBSKCkgJiYgQXJnOjppc0FueURlZihyb2xlKSkKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lk
IGZpeFBhcnRpYWxSZWdpc3RlclN0YWxscyhDb2RlJiBjb2RlCiAgICAgICAgICAgICBpZiAoaGFz
UGFydGlhbFhtbVJlZ1VwZGF0ZShpbnN0KSkgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGRlZnM7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlczsKLSAgICAgICAgICAgICAg
ICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcChbJl0gKFRt
cCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRtcC5pc0ZQUigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZzLnNldCh0bXAu
ZnByKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShy
ZXZpc2lvbiAyMTI5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBib29sIEluc3Q6Omhhc0FyZ0Vm
ZmVjdHMoKQogewogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgZm9yRWFjaEFyZygKLSAg
ICAgICAgWyZdIChBcmcmLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7
CisgICAgICAgIFsmXSAoQXJnJiwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAg
ICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICByZXN1bHQg
PSB0cnVlOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdC5oCShyZXZpc2lvbiAyMTI5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBhcmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CiAgICAgfQogCi0gICAgdHlw
ZWRlZiB2b2lkIEVhY2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJn
OjpXaWR0aCk7CisgICAgdHlwZWRlZiB2b2lkIEVhY2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJv
bGUsIEJhbmssIFdpZHRoKTsKICAgICAKICAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChh
cmcsIHJvbGUsIHR5cGUsIHdpZHRoKS4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBi
eQogICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCkBAIC0xMTcsOCArMTE3LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZm9yRWFjaFRtcChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAg
ICAgICAgZm9yRWFjaEFyZygKLSAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSBy
b2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgewotICAgICAgICAgICAgICAg
IGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIHdpZHRoLCBmdW5jdG9yKTsKKyAgICAgICAgICAg
IFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoIHdpZHRoKSB7
CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgYmFuaywgd2lkdGgsIGZ1bmN0
b3IpOwogICAgICAgICAgICAgfSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAyMTI5NjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zOSw4ICszOSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5j
dG8KIHZvaWQgSW5zdDo6Zm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIGZv
ckVhY2hBcmcoCi0gICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5
cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgewotICAgICAgICAgICAgYXJnLmZvckVhY2g8VGhp
bmc+KHJvbGUsIHR5cGUsIHdpZHRoLCBmdW5jdG9yKTsKKyAgICAgICAgWyZdIChBcmcmIGFyZywg
QXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgIGFy
Zy5mb3JFYWNoPFRoaW5nPihyb2xlLCBiYW5rLCB3aWR0aCwgZnVuY3Rvcik7CiAgICAgICAgIH0p
OwogfQogCkBAIC02MSwxNyArNjEsMTcgQEAgaW5saW5lIHZvaWQgSW5zdDo6Zm9yRWFjaERlZihJ
bnN0KiBwcmV2SQogewogICAgIGlmIChwcmV2SW5zdCkgewogICAgICAgICBwcmV2SW5zdC0+Zm9y
RWFjaDxUaGluZz4oCi0gICAgICAgICAgICBbJl0gKFRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIGFyZ1dpZHRoKSB7CisgICAgICAgICAg
ICBbJl0gKFRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYXJnQmFuaywgV2lkdGgg
YXJnV2lkdGgpIHsKICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkpCi0g
ICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodGhpbmcsIHJvbGUsIGFyZ1R5cGUsIGFyZ1dpZHRo
KTsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0aGluZywgcm9sZSwgYXJnQmFuaywgYXJn
V2lkdGgpOwogICAgICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKG5leHRJbnN0KSB7CiAg
ICAgICAgIG5leHRJbnN0LT5mb3JFYWNoPFRoaW5nPigKLSAgICAgICAgICAgIFsmXSAoVGhpbmcm
IHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggYXJn
V2lkdGgpIHsKKyAgICAgICAgICAgIFsmXSAoVGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayBhcmdCYW5rLCBXaWR0aCBhcmdXaWR0aCkgewogICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRWFybHlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodGhpbmcsIHJv
bGUsIGFyZ1R5cGUsIGFyZ1dpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0aGlu
Zywgcm9sZSwgYXJnQmFuaywgYXJnV2lkdGgpOwogICAgICAgICAgICAgfSk7CiAgICAgfQogfQpA
QCAtODUsOCArODUsOCBAQCBpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xv
CiAgICAgQXJnOjpSb2xlIHJlZ0RlZlJvbGU7CiAgICAgCiAgICAgYXV0byByZXBvcnRSZWcgPSBb
Jl0gKFJlZyByZWcpIHsKLSAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSByZWcuaXNHUFIoKSA/IEFy
Zzo6R1AgOiBBcmc6OkZQOwotICAgICAgICBmdW5jdG9yKFRoaW5nKHJlZyksIHJlZ0RlZlJvbGUs
IHR5cGUsIEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOworICAgICAgICBCYW5rIGJhbmsg
PSByZWcuaXNHUFIoKSA/IEdQIDogRlA7CisgICAgICAgIGZ1bmN0b3IoVGhpbmcocmVnKSwgcmVn
RGVmUm9sZSwgYmFuaywgY29uc2VydmF0aXZlV2lkdGgoYmFuaykpOwogICAgIH07CiAKICAgICBp
ZiAocHJldkluc3QgJiYgcHJldkluc3QtPmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTI5
NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKIAotdGVtcGxhdGU8QXJnOjpUeXBlIGFkYXB0ZXJUeXBlPgor
dGVtcGxhdGU8QmFuayBhZGFwdGVyQmFuaz4KIHN0cnVjdCBUbXBMaXZlbmVzc0FkYXB0ZXIgewog
ICAgIHR5cGVkZWYgVG1wIFRoaW5nOwogICAgIHR5cGVkZWYgSGFzaFNldDx1bnNpZ25lZD4gSW5k
ZXhTZXQ7CkBAIC00OCwxMiArNDgsMTIgQEAgc3RydWN0IFRtcExpdmVuZXNzQWRhcHRlciB7CiAK
ICAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2RlJiBjb2RlKQogICAgIHsKLSAgICAg
ICAgdW5zaWduZWQgbnVtVG1wcyA9IGNvZGUubnVtVG1wcyhhZGFwdGVyVHlwZSk7Ci0gICAgICAg
IHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxhZGFwdGVyVHlwZT46OmFic29sdXRlSW5kZXgobnVt
VG1wcyk7CisgICAgICAgIHVuc2lnbmVkIG51bVRtcHMgPSBjb2RlLm51bVRtcHMoYWRhcHRlckJh
bmspOworICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8YWRhcHRlckJhbms+OjphYnNv
bHV0ZUluZGV4KG51bVRtcHMpOwogICAgIH0KLSAgICBzdGF0aWMgYm9vbCBhY2NlcHRzVHlwZShB
cmc6OlR5cGUgdHlwZSkgeyByZXR1cm4gdHlwZSA9PSBhZGFwdGVyVHlwZTsgfQotICAgIHN0YXRp
YyB1bnNpZ25lZCB2YWx1ZVRvSW5kZXgoVG1wIHRtcCkgeyByZXR1cm4gQWJzb2x1dGVUbXBNYXBw
ZXI8YWRhcHRlclR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCk7IH0KLSAgICBzdGF0aWMgVG1wIGlu
ZGV4VG9WYWx1ZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8YWRh
cHRlclR5cGU+Ojp0bXBGcm9tQWJzb2x1dGVJbmRleChpbmRleCk7IH0KKyAgICBzdGF0aWMgYm9v
bCBhY2NlcHRzQmFuayhCYW5rIGJhbmspIHsgcmV0dXJuIGJhbmsgPT0gYWRhcHRlckJhbms7IH0K
KyAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWVUb0luZGV4KFRtcCB0bXApIHsgcmV0dXJuIEFic29s
dXRlVG1wTWFwcGVyPGFkYXB0ZXJCYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApOyB9CisgICAgc3Rh
dGljIFRtcCBpbmRleFRvVmFsdWUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIEFic29sdXRlVG1w
TWFwcGVyPGFkYXB0ZXJCYW5rPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgpOyB9CiB9Owog
CiBzdHJ1Y3QgU3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyIHsKQEAgLTY5LDcgKzY5LDcgQEAgc3Ry
dWN0IFN0YWNrU2xvdExpdmVuZXNzQWRhcHRlciB7CiAgICAgewogICAgICAgICByZXR1cm4gY29k
ZS5zdGFja1Nsb3RzKCkuc2l6ZSgpOwogICAgIH0KLSAgICBzdGF0aWMgYm9vbCBhY2NlcHRzVHlw
ZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7IH0KKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzQmFu
ayhCYW5rKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIHVuc2lnbmVkIHZhbHVlVG9JbmRl
eChTdGFja1Nsb3QqIHN0YWNrU2xvdCkgeyByZXR1cm4gc3RhY2tTbG90LT5pbmRleCgpOyB9CiAg
ICAgU3RhY2tTbG90KiBpbmRleFRvVmFsdWUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fY29k
ZS5zdGFja1Nsb3RzKClbaW5kZXhdOyB9CiAKQEAgLTg4LDcgKzg4LDcgQEAgc3RydWN0IFJlZ0xp
dmVuZXNzQWRhcHRlciB7CiAgICAgICAgIHJldHVybiBSZWc6Om1heEluZGV4KCkgKyAxOwogICAg
IH0KIAotICAgIHN0YXRpYyBib29sIGFjY2VwdHNUeXBlKEFyZzo6VHlwZSkgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHN0YXRpYyBib29sIGFjY2VwdHNCYW5rKEJhbmspIHsgcmV0dXJuIHRydWU7IH0K
ICAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWVUb0luZGV4KFJlZyByZWcpIHsgcmV0dXJuIHJlZy5p
bmRleCgpOyB9CiAgICAgUmVnIGluZGV4VG9WYWx1ZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
UmVnOjpmcm9tSW5kZXgoaW5kZXgpOyB9CiB9OwpAQCAtMTEwLDggKzExMCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0JiBsaXZlQXRUYWlsID0gbV9s
aXZlQXRUYWlsW2Jsb2NrXTsKIAogICAgICAgICAgICAgYmxvY2stPmxhc3QoKS5mb3JFYWNoPHR5
cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKLSAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFk
YXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6
OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKSAm
JiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgICAgICBbJl0gKHR5cGVu
YW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lk
dGgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIEFk
YXB0ZXI6OmFjY2VwdHNCYW5rKGJhbmspKQogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0
VGFpbC5hZGQoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CiAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KQEAgLTEzOSw4ICsxMzksOCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgdGhlIGVhcmx5IGRlZidzIG9mIHRoZSBmaXJzdCBpbnN0cnVjdGlvbi4K
ICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCkuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpU
aGluZz4oCi0gICAgICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcm
IHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRl
cjo6YWNjZXB0c1R5cGUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUg
QWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSAmJiBB
ZGFwdGVyOjphY2NlcHRzQmFuayhiYW5rKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3dvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKIApAQCAtMjU0LDIzICsyNTQsMjMgQEAgcHVibGljOgogICAgICAgICAg
ICAgaWYgKGluc3RJbmRleCArIDEgPCBtX2Jsb2NrLT5zaXplKCkpIHsKICAgICAgICAgICAgICAg
ICBJbnN0JiBuZXh0SW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCArIDEpOwogICAgICAgICAg
ICAgICAgIG5leHRJbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAotICAgICAg
ICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBl
KHR5cGUpKQorICAgICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5n
JiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0
c0JhbmsoYmFuaykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5yZW1vdmUo
QWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGVuIGhhbmRsZSBk
ZWYncy4KICAgICAgICAgICAgIGluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4o
Ci0gICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUo
dHlwZSkpCisgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhp
bmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzQmFuayhiYW5r
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVl
VG9JbmRleCh0aGluZykpOwogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAvLyBU
aGVuIGhhbmRsZSB1c2Uncy4KICAgICAgICAgICAgIGluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFw
dGVyOjpUaGluZz4oCi0gICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGlu
ZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5VXNlKHJvbGUpICYmIEFkYXB0ZXI6
OmFjY2VwdHNUeXBlKHR5cGUpKQorICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRl
cjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5VXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFj
Y2VwdHNCYW5rKGJhbmspKQogICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5hZGQoQWRh
cHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAKQEAgLTI3
OCw4ICsyNzgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoaW5zdEluZGV4KSB7CiAgICAg
ICAgICAgICAgICAgSW5zdCYgcHJldkluc3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXggLSAxKTsK
ICAgICAgICAgICAgICAgICBwcmV2SW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5n
PigKLSAgICAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhp
bmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFj
Y2VwdHNUeXBlKHR5cGUpKQorICAgICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0
ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKSAmJiBBZGFwdGVy
OjphY2NlcHRzQmFuayhiYW5rKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0
LmFkZChBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKICAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9CkBAIC0zNzksMTEgKzM3OSwxMSBAQCBwcml2YXRlOgogICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0PiBtX2xpdmVBdFRh
aWw7CiB9OwogCi10ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KLXVzaW5nIFRtcExpdmVuZXNzID0g
QWJzdHJhY3RMaXZlbmVzczxUbXBMaXZlbmVzc0FkYXB0ZXI8dHlwZT4+OwordGVtcGxhdGU8QmFu
ayBiYW5rPgordXNpbmcgVG1wTGl2ZW5lc3MgPSBBYnN0cmFjdExpdmVuZXNzPFRtcExpdmVuZXNz
QWRhcHRlcjxiYW5rPj47CiAKLXR5cGVkZWYgQWJzdHJhY3RMaXZlbmVzczxUbXBMaXZlbmVzc0Fk
YXB0ZXI8QXJnOjpHUD4+IEdQTGl2ZW5lc3M7Ci10eXBlZGVmIEFic3RyYWN0TGl2ZW5lc3M8VG1w
TGl2ZW5lc3NBZGFwdGVyPEFyZzo6RlA+PiBGUExpdmVuZXNzOwordHlwZWRlZiBBYnN0cmFjdExp
dmVuZXNzPFRtcExpdmVuZXNzQWRhcHRlcjxHUD4+IEdQTGl2ZW5lc3M7Cit0eXBlZGVmIEFic3Ry
YWN0TGl2ZW5lc3M8VG1wTGl2ZW5lc3NBZGFwdGVyPEZQPj4gRlBMaXZlbmVzczsKIHR5cGVkZWYg
QWJzdHJhY3RMaXZlbmVzczxTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI+IFN0YWNrU2xvdExpdmVu
ZXNzOwogdHlwZWRlZiBBYnN0cmFjdExpdmVuZXNzPFJlZ0xpdmVuZXNzQWRhcHRlcj4gUmVnTGl2
ZW5lc3M7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0
ZXJQcmVzc3VyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgbG9nUmVnaXN0ZXJQcmVzc3VyZShDb2RlJiBjb2Rl
KQogICAgICAgICAgICAgc2V0LnNldEFsbChsb2NhbENhbGMubGl2ZSgpKTsKICAgICAgICAgICAg
IEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPFJlZz4oCiAgICAgICAgICAg
ICAgICAgcHJldkluc3QsICZpbnN0LAotICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZywgQXJn
OjpSb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBbJl0gKFJl
ZyByZWcsIEFyZzo6Um9sZSwgQmFuaywgV2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0
LnNldChyZWcpOwogICAgICAgICAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCShyZXZp
c2lvbiAyMTI5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0
ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsMTEgKzgxLDExIEBAIHZvaWQgbG93ZXJB
ZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvIGdl
dFNjcmF0Y2hlcyA9IFsmXSAoUmVnaXN0ZXJTZXQgc2V0LCBBcmc6OlR5cGUgdHlwZSkgLT4gc3Rk
OjphcnJheTxBcmcsIDI+IHsKKyAgICBhdXRvIGdldFNjcmF0Y2hlcyA9IFsmXSAoUmVnaXN0ZXJT
ZXQgc2V0LCBCYW5rIGJhbmspIC0+IHN0ZDo6YXJyYXk8QXJnLCAyPiB7CiAgICAgICAgIHN0ZDo6
YXJyYXk8QXJnLCAyPiByZXN1bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
OyArK2kpIHsKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZv
ciAoUmVnIHJlZyA6IGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAg
ICAgZm9yIChSZWcgcmVnIDogY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFzZXQuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0W2ldID0gVG1wKHJlZyk7CiAgICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKQEAg
LTk2LDcgKzk2LDcgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAgICAg
ICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBBcmc6OnN0
YWNrKAogICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZzo6Ynl0ZXMoQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBlKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICBieXRlcyhjb25zZXJ2YXRpdmVXaWR0aChiYW5rKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpTcGlsbCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxs
b2MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5zdC5hcmdzLnNpemUoKTsgaSArPSAzKSB7CiAgICAgICAgICAgICAgICAgICAgIEFyZyBzcmMg
PSBpbnN0LmFyZ3NbaSArIDBdOwogICAgICAgICAgICAgICAgICAgICBBcmcgZHN0ID0gaW5zdC5h
cmdzW2kgKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IGluc3Qu
YXJnc1tpICsgMl0ud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgV2lkdGggd2lkdGggPSBp
bnN0LmFyZ3NbaSArIDJdLndpZHRoKCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVz
ZWQgcmVnaXN0ZXIgc2V0IGNvbnRhaW5zIHRoaW5ncyBsaXZlIGFmdGVyIHRoZSBzaHVmZmxlLiBC
dXQKICAgICAgICAgICAgICAgICAgICAgLy8gZW1pdFNodWZmbGUoKSB3YW50cyBhIHNjcmF0Y2gg
cmVnaXN0ZXIgdGhhdCBpcyBub3QganVzdCBkZWFkIGJ1dCBhbHNvIGRvZXMgbm90CkBAIC0xMzAs
OCArMTMwLDggQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFp
cihzcmMsIGRzdCwgd2lkdGgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
c3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhzZXQsIEFyZzo6R1Ap
OwotICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3Jh
dGNoZXMoc2V0LCBBcmc6OkZQKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4g
Z3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgR1ApOworICAgICAgICAgICAgICAgIHN0ZDo6
YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMoc2V0LCBGUCk7CiAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAogICAgICAgICAgICAgICAgICAgICBp
bnN0SW5kZXgsIGVtaXRTaHVmZmxlKGNvZGUsIHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwg
aW5zdC5vcmlnaW4pKTsKICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOwpAQCAtMTU4LDcg
KzE1OCw3IEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKICAgICAgICAgICAgICAg
ICAgICAgQXJnIHNyYyA9IGluc3QuYXJnc1tyZXN1bHQgPyAoaSA+PSAxID8gaSArIDEgOiBpKSA6
IGkgXTsKICAgICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9IGRlc3RpbmF0aW9uc1tpXTsKLSAg
ICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUo
Y2hpbGQtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIFdpZHRoIHdpZHRoID0gd2lkdGhG
b3JUeXBlKGNoaWxkLT50eXBlKCkpOwogICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQo
U2h1ZmZsZVBhaXIoc3JjLCBkc3QsIHdpZHRoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgYXV0
byBleGNsdWRlUmVnaXN0ZXJzID0gWyZdIChUbXAgdG1wKSB7CkBAIC0xNjksOCArMTY5LDggQEAg
dm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAg
ZHN0LmZvckVhY2hUbXBGYXN0KGV4Y2x1ZGVSZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBncFNjcmF0Y2ggPSBnZXRTY3Jh
dGNoZXMocHJlVXNlZCwgQXJnOjpHUCk7Ci0gICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcs
IDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhwcmVVc2VkLCBBcmc6OkZQKTsKKyAgICAgICAg
ICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHByZVVz
ZWQsIEdQKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZnBTY3JhdGNoID0g
Z2V0U2NyYXRjaGVzKHByZVVzZWQsIEZQKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBBbHNvIG5lZWQgdG8gc2F2ZSBhbGwgbGl2ZSByZWdpc3RlcnMuIERvbid0IG5lZWQg
dG8gd29ycnkgYWJvdXQgdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyLgpA
QCAtMTgxLDkgKzE4MSw5IEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgVG1wIHRtcChyZWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0
aXZlV2lkdGgoYXJnLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBXaWR0aCB3aWR0
aCA9IGNvbnNlcnZhdGl2ZVdpZHRoKGFyZy5iYW5rKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGUuYWRkU3RhY2tTbG90KEFyZzo6Ynl0ZXMod2lkdGgpLCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoYnl0ZXMod2lk
dGgpLCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYWly
cy5hcHBlbmQoU2h1ZmZsZVBhaXIoYXJnLCBBcmc6OnN0YWNrKHN0YWNrU2xvdCksIHdpZHRoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1Nsb3RzLmFwcGVuZChzdGFja1Nsb3QpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTIwNSwxMiArMjA1LDEyIEBAIHZvaWQgbG93ZXJB
ZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJl
ZykgewogICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcChyZWcpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnIGFyZyh0bXApOwotICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpX
aWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoYXJnLnR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBXaWR0aCB3aWR0aCA9IGNvbnNlcnZhdGl2ZVdpZHRoKGFyZy5iYW5r
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBzdGFj
a1Nsb3RzW3N0YWNrU2xvdEluZGV4KytdOwogICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMu
YXBwZW5kKFNodWZmbGVQYWlyKEFyZzo6c3RhY2soc3RhY2tTbG90KSwgYXJnLCB3aWR0aCkpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyIHBhaXIocmVzdWx0LCBvcmlnaW5hbFJlc3Vs
dCwgQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIFNodWZmbGVQYWlyIHBhaXIocmVzdWx0LCBvcmlnaW5hbFJlc3VsdCwgd2lkdGhGb3JUeXBl
KHZhbHVlLT50eXBlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKHBhaXIp
OwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjE5LDggKzIxOSw4IEBAIHZvaWQgbG93ZXJBZnRl
clJlZ0FsbG9jKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsUmVzdWx0
LmlzUmVnKCkpCiAgICAgICAgICAgICAgICAgICAgIGxpdmVSZWdzLnNldChvcmlnaW5hbFJlc3Vs
dC5yZWcoKSk7CiAKLSAgICAgICAgICAgICAgICBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMobGl2
ZVJlZ3MsIEFyZzo6R1ApOwotICAgICAgICAgICAgICAgIGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hl
cyhsaXZlUmVncywgQXJnOjpGUCk7CisgICAgICAgICAgICAgICAgZ3BTY3JhdGNoID0gZ2V0U2Ny
YXRjaGVzKGxpdmVSZWdzLCBHUCk7CisgICAgICAgICAgICAgICAgZnBTY3JhdGNoID0gZ2V0U2Ny
YXRjaGVzKGxpdmVSZWdzLCBGUCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAogICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgg
KyAxLCBlbWl0U2h1ZmZsZShjb2RlLCBwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qu
b3JpZ2luKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFj
cm9zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxv
d2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyArNjAsNyBAQCB2
b2lkIGxvd2VyTWFjcm9zKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBj
aGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFyZ3Vt
ZW50cy5hcmdzLmFwcGVuZChpbnN0LmFyZ3Nbb2Zmc2V0ICsgaV0pOwogICAgICAgICAgICAgICAg
ICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKGRlc3RpbmF0aW9uc1tpXSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoQXJnOjp3aWR0aEFy
ZyhBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKSk7CisgICAgICAgICAgICAgICAg
ICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoQXJnOjp3aWR0aEFyZyh3aWR0aEZvclR5
cGUoY2hpbGQtPnR5cGUoKSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydEluc3QoaW5zdEluZGV4LCBXVEZNb3ZlKHNodWZmbGVBcmd1bWVu
dHMpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZl
cmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UGFkSW50ZXJmZXJlbmNlLmNwcAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDcg
KzQ1LDcgQEAgdm9pZCBwYWRJbnRlcmZlcmVuY2UoQ29kZSYgY29kZSkKICAgICAgICAgICAgIGJv
b2wgaGFzRWFybHlEZWYgPSBmYWxzZTsKICAgICAgICAgICAgIGJvb2wgaGFzTGF0ZSA9IGZhbHNl
OwogICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJn
JiwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAg
ICAgIFsmXSAoQXJnJiwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
RWFybHlEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFYXJseURlZiA9IHRydWU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0
VXNlZFJlZ2lzdGVycy5jcHAJKHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01Myw3ICs1Myw3IEBAIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhDb2RlJiBjb2RlKQogICAg
ICAgICAgICAgaWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVjdHMoKSkgewogICAgICAgICAgICAgICAg
IGJvb2wgY2FuRGVsZXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmco
Ci0gICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6
OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywg
QXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FuRGVsZXRlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAs
NyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgLy8gY29k
ZSBpcyBzdWJvcHRpbWFsLgogICAgICAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNs
b2JiZXJlZFJlZ3M8VG1wPigKICAgICAgICAgICAgICAgICBibG9jay0+Z2V0KGluZGV4IC0gMSks
IGJsb2NrLT5nZXQoaW5kZXgpLAotICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgVG1wJiB0bXAs
IEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgWyZd
IChjb25zdCBUbXAmIHRtcCwgQXJnOjpSb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rl
clNldC5zZXQodG1wLnJlZygpKTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTg1LDEyICs4NSwx
MiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgIH0KIAogICAgIC8vIEFs
bG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAuCi0gICAgVmVjdG9yPFN0YWNrU2xvdCo+
IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBlc107Ci0gICAgZm9yICh1bnNpZ25lZCB0eXBlSW5k
ZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJbmRleCkgewotICAgICAg
ICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFja1Nsb3RzW3R5cGVJbmRl
eF07Ci0gICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJnOjpUeXBlPih0eXBl
SW5kZXgpOwotICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRtcHModHlwZSkpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBzKHR5cGUpOyB0bXBJ
bmRleC0tOykKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90c1tudW1CYW5rc107
CisgICAgZm9yICh1bnNpZ25lZCBiYW5rSW5kZXggPSAwOyBiYW5rSW5kZXggPCBudW1CYW5rczsg
KytiYW5rSW5kZXgpIHsKKyAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0g
YWxsU3RhY2tTbG90c1tiYW5rSW5kZXhdOworICAgICAgICBCYW5rIGJhbmsgPSBzdGF0aWNfY2Fz
dDxCYW5rPihiYW5rSW5kZXgpOworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRt
cHMoYmFuaykpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBz
KGJhbmspOyB0bXBJbmRleC0tOykKICAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0g
Y29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOwogICAgIH0KIApAQCAt
MTEwLDcgKzExMCw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoaW5z
dC5hZG1pdHNTdGFjayhpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBz
dGFja1Nsb3QgPSBhbGxTdGFja1Nsb3RzW2FyZy50eXBlKCldW2FyZy50bXBJbmRleCgpXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxsU3RhY2tTbG90
c1thcmcuYmFuaygpXVthcmcudG1wSW5kZXgoKV07CiAgICAgICAgICAgICAgICAgICAgICAgICBh
cmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTE5LDExICsxMTksMTEgQEAgdm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgICAgICAgICAgLy8gTm93IGZhbGwgYmFj
ayBvbiBzcGlsbGluZyB1c2luZyBzZXBhcmF0ZSBNb3ZlJ3MgdG8gbG9hZC9zdG9yZSB0aGUgdG1w
LgogICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAotICAgICAgICAgICAgICAgIFsmXSAoVG1w
JiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgeworICAg
ICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdp
ZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxsU3RhY2tTbG90c1t0eXBlXVt0bXAudG1w
SW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxs
U3RhY2tTbG90c1tiYW5rXVt0bXAudG1wSW5kZXgoKV07CiAgICAgICAgICAgICAgICAgICAgIEFy
ZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8g
TmVlZCB0byBmaWd1cmUgb3V0IGEgcmVnaXN0ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBkZXBl
bmRzIG9uIHRoZSByb2xlLgpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5n
KENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6Q29sZFVzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUu
cmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChSZWcgcmVnIDogY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9p
ZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RGVmOgogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6WkRlZjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJl
ZyA6IGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChSZWcgcmVnIDogY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRBZnRlci5nZXQocmVnKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOwpAQCAtMTU1LDcgKzE1NSw3
IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpMYXRlQ29sZFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNj
cmF0Y2g6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcih0
eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogY29kZS5yZWdz
SW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFzZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CkBAIC0xNzMsNyArMTczLDcgQEAg
dm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgICAgICAgICAgICAgICAgICB0
bXAgPSBUbXAoY2hvc2VuUmVnKTsKIAotICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9
IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAgICAgICAgICAgICAgICAg
ICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKIAogICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6U2Ny
YXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdElu
ZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDIxMjk2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM5LDExICszOSwxMSBAQCBpbmxpbmUgVG1wOjpUbXAoY29uc3QgQXJnJiBhcmcpCiAKIC8vIFdo
ZW4gYSBIYXNoIHN0cnVjdHVyZSBpcyB0b28gc2xvdyBvciB3aGVuIFNldHMgY29udGFpbnMgbW9z
dCB2YWx1ZXMsIHlvdSBjYW4KIC8vIHVzZSBkaXJlY3QgYXJyYXkgYWRkcmVzc2luZyB3aXRoIFRt
cHMuCi10ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KK3RlbXBsYXRlPEJhbmsgYmFuaz4KIHN0cnVj
dCBBYnNvbHV0ZVRtcE1hcHBlcjsKIAogdGVtcGxhdGU8Pgotc3RydWN0IEFic29sdXRlVG1wTWFw
cGVyPEFyZzo6R1A+IHsKK3N0cnVjdCBBYnNvbHV0ZVRtcE1hcHBlcjxHUD4gewogICAgIHN0YXRp
YyB1bnNpZ25lZCBhYnNvbHV0ZUluZGV4KGNvbnN0IFRtcCYgdG1wKQogICAgIHsKICAgICAgICAg
QVNTRVJUKHRtcC5pc0dQKCkpOwpAQCAtNjgsNyArNjgsNyBAQCBzdHJ1Y3QgQWJzb2x1dGVUbXBN
YXBwZXI8QXJnOjpHUD4gewogfTsKIAogdGVtcGxhdGU8Pgotc3RydWN0IEFic29sdXRlVG1wTWFw
cGVyPEFyZzo6RlA+IHsKK3N0cnVjdCBBYnNvbHV0ZVRtcE1hcHBlcjxGUD4gewogICAgIHN0YXRp
YyB1bnNpZ25lZCBhYnNvbHV0ZUluZGV4KGNvbnN0IFRtcCYgdG1wKQogICAgIHsKICAgICAgICAg
QVNTRVJUKHRtcC5pc0ZQKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXBXaWR0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXBXaWR0aC5jcHAJKHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wV2lkdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsOSArNjMs
OSBAQCB2b2lkIFRtcFdpZHRoOjpyZWNvbXB1dGUoQ29kZSYgY29kZSkKICAgICAKICAgICBhdXRv
IGFzc3VtZVRoZVdvcnN0ID0gWyZdIChUbXAgdG1wKSB7CiAgICAgICAgIFdpZHRocyYgd2lkdGhz
ID0gbV93aWR0aC5hZGQodG1wLCBXaWR0aHMoKSkuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBB
cmc6OlR5cGUgdHlwZSA9IEFyZyh0bXApLnR5cGUoKTsKLSAgICAgICAgd2lkdGhzLnVzZSA9IEFy
Zzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSk7Ci0gICAgICAgIHdpZHRocy5kZWYgPSBBcmc6OmNv
bnNlcnZhdGl2ZVdpZHRoKHR5cGUpOworICAgICAgICBCYW5rIGJhbmsgPSBBcmcodG1wKS5iYW5r
KCk7CisgICAgICAgIHdpZHRocy51c2UgPSBjb25zZXJ2YXRpdmVXaWR0aChiYW5rKTsKKyAgICAg
ICAgd2lkdGhzLmRlZiA9IGNvbnNlcnZhdGl2ZVdpZHRoKGJhbmspOwogICAgIH07CiAgICAgCiAg
ICAgLy8gQXNzdW1lIHRoZSB3b3JzdCBmb3IgcmVnaXN0ZXJzLgpAQCAtOTIsOCArOTIsOCBAQCB2
b2lkIFRtcFdpZHRoOjpyZWNvbXB1dGUoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICBpZiAo
aW5zdC5hcmdzWzBdLmlzVG1wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgTW92ZSBoYXZlIGEgd2lkdGggYWxyZWFkeSBpbml0aWFs
aXplZC4gVGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIGZpeHBvaW50IGJlbG93IGFzc3VtZXMg
dGhhdCBpdCBuZXZlciBoYXMgdG8gYWRkIHRoaW5ncyB0byB0aGUgSGFzaE1hcC4KLSAgICAgICAg
ICAgICAgICAgICAgbV93aWR0aC5hZGQoaW5zdC5hcmdzWzBdLnRtcCgpLCBXaWR0aHMoQXJnOjpH
UCkpOwotICAgICAgICAgICAgICAgICAgICBtX3dpZHRoLmFkZChpbnN0LmFyZ3NbMV0udG1wKCks
IFdpZHRocyhBcmc6OkdQKSk7CisgICAgICAgICAgICAgICAgICAgIG1fd2lkdGguYWRkKGluc3Qu
YXJnc1swXS50bXAoKSwgV2lkdGhzKEdQKSk7CisgICAgICAgICAgICAgICAgICAgIG1fd2lkdGgu
YWRkKGluc3QuYXJnc1sxXS50bXAoKSwgV2lkdGhzKEdQKSk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBtb3Zlcy5hcHBlbmQoJmluc3QpOwogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTEwMSwyMyArMTAxLDIzIEBAIHZvaWQgVG1wV2lkdGg6OnJl
Y29tcHV0ZShDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIGlmIChpbnN0LmFyZ3NbMF0uaXNJ
bW0oKQogICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMF0udmFsdWUoKSA+PSAwKSB7
CiAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBpbnN0LmFyZ3NbMV0udG1wKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIFdpZHRocyYgd2lkdGhzID0gbV93aWR0aC5hZGQodG1wLCBXaWR0aHMo
QXJnOjpHUCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgV2lkdGhzJiB3
aWR0aHMgPSBtX3dpZHRoLmFkZCh0bXAsIFdpZHRocyhHUCkpLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0LmFyZ3NbMF0u
dmFsdWUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDhfdD46Om1heCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGhzLmRlZiA9IHN0ZDo6bWF4KHdpZHRocy5kZWYsIEFyZzo6V2lk
dGg4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocy5kZWYgPSBzdGQ6Om1heCh3aWR0
aHMuZGVmLCBXaWR0aDgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0LmFyZ3Nb
MF0udmFsdWUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDE2X3Q+OjptYXgoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdpZHRocy5kZWYgPSBzdGQ6Om1heCh3aWR0aHMuZGVmLCBBcmc6
OldpZHRoMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzLmRlZiA9IHN0ZDo6bWF4
KHdpZHRocy5kZWYsIFdpZHRoMTYpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0
LmFyZ3NbMF0udmFsdWUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocy5kZWYgPSBzdGQ6Om1heCh3aWR0aHMuZGVm
LCBBcmc6OldpZHRoMzIpOworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzLmRlZiA9IHN0
ZDo6bWF4KHdpZHRocy5kZWYsIFdpZHRoMzIpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHMuZGVmID0gc3RkOjptYXgod2lkdGhzLmRlZiwg
QXJnOjpXaWR0aDY0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocy5kZWYgPSBzdGQ6
Om1heCh3aWR0aHMuZGVmLCBXaWR0aDY0KTsKIAogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnN0LmZv
ckVhY2hUbXAoCi0gICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFdpZHRocyYgd2lkdGhzID0gbV93aWR0aC5hZGQodG1wLCBXaWR0aHModHlwZSkpLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayBiYW5rLCBXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgICAgICBXaWR0aHMmIHdp
ZHRocyA9IG1fd2lkdGguYWRkKHRtcCwgV2lkdGhzKGJhbmspKS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVz
ZShyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocy51c2UgPSBzdGQ6Om1heCh3
aWR0aHMudXNlLCB3aWR0aCk7CkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBUbXBXaWR0aDo6cmVj
b21wdXRlKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzWkRlZihy
b2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocy5kZWYgPSBzdGQ6Om1heCh3aWR0
aHMuZGVmLCB3aWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFyZzo6aXNBbnlE
ZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHMuZGVmID0gQXJnOjpjb25z
ZXJ2YXRpdmVXaWR0aCh0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocy5kZWYg
PSBjb25zZXJ2YXRpdmVXaWR0aChiYW5rKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wV2lkdGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcFdpZHRo
LmgJKHJldmlzaW9uIDIxMjk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wV2lkdGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDIwICs1MCwyMCBAQCBwdWJsaWM6CiAg
ICAgLy8KICAgICAvLyBUaGlzIGRvZXNuJ3QgdGVsbCB5b3Ugd2hpY2ggb2YgdGhvc2UgcHJvcGVy
dGllcyBob2xkcywgYnV0IHlvdSBjYW4gcXVlcnkgdGhhdCB1c2luZyB0aGUgb3RoZXIKICAgICAv
LyBtZXRob2RzLgotICAgIEFyZzo6V2lkdGggd2lkdGgoVG1wIHRtcCkgY29uc3QKKyAgICBXaWR0
aCB3aWR0aChUbXAgdG1wKSBjb25zdAogICAgIHsKICAgICAgICAgYXV0byBpdGVyID0gbV93aWR0
aC5maW5kKHRtcCk7CiAgICAgICAgIGlmIChpdGVyID09IG1fd2lkdGguZW5kKCkpCi0gICAgICAg
ICAgICByZXR1cm4gQXJnOjptaW5pbXVtV2lkdGgoQXJnKHRtcCkudHlwZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtaW5pbXVtV2lkdGgoQXJnKHRtcCkuYmFuaygpKTsKICAgICAgICAgcmV0dXJu
IHN0ZDo6bWluKGl0ZXItPnZhbHVlLnVzZSwgaXRlci0+dmFsdWUuZGVmKTsKICAgICB9CiAKICAg
ICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gcmVxdWlyZWQgd2lkdGggZm9yIGFsbCBkZWZzL3VzZXMg
b2YgdGhpcyBUbXAuCi0gICAgQXJnOjpXaWR0aCByZXF1aXJlZFdpZHRoKFRtcCB0bXApCisgICAg
V2lkdGggcmVxdWlyZWRXaWR0aChUbXAgdG1wKQogICAgIHsKICAgICAgICAgYXV0byBpdGVyID0g
bV93aWR0aC5maW5kKHRtcCk7CiAgICAgICAgIGlmIChpdGVyID09IG1fd2lkdGguZW5kKCkpCi0g
ICAgICAgICAgICByZXR1cm4gQXJnOjptaW5pbXVtV2lkdGgoQXJnKHRtcCkudHlwZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtaW5pbXVtV2lkdGgoQXJnKHRtcCkuYmFuaygpKTsKICAgICAgICAg
cmV0dXJuIHN0ZDo6bWF4KGl0ZXItPnZhbHVlLnVzZSwgaXRlci0+dmFsdWUuZGVmKTsKICAgICB9
CiAKQEAgLTczLDIwICs3MywyMCBAQCBwdWJsaWM6CiAgICAgLy8gICAgIFRvdGFsQml0cyAtIGRl
ZldpZHRoKHRtcCkKICAgICAvLwogICAgIC8vIFdoZXJlIFRvdGFsQml0cyBhcmUgdGhlIHRvdGFs
IG51bWJlciBvZiBiaXRzIGluIHRoZSByZWdpc3Rlciwgc28gNjQgb24gYSA2NC1iaXQgc3lzdGVt
LgotICAgIEFyZzo6V2lkdGggZGVmV2lkdGgoVG1wIHRtcCkgY29uc3QKKyAgICBXaWR0aCBkZWZX
aWR0aChUbXAgdG1wKSBjb25zdAogICAgIHsKICAgICAgICAgYXV0byBpdGVyID0gbV93aWR0aC5m
aW5kKHRtcCk7CiAgICAgICAgIGlmIChpdGVyID09IG1fd2lkdGguZW5kKCkpCi0gICAgICAgICAg
ICByZXR1cm4gQXJnOjptaW5pbXVtV2lkdGgoQXJnKHRtcCkudHlwZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBtaW5pbXVtV2lkdGgoQXJnKHRtcCkuYmFuaygpKTsKICAgICAgICAgcmV0dXJuIGl0
ZXItPnZhbHVlLmRlZjsKICAgICB9CiAKICAgICAvLyBUaGlzIHRlbGxzIHlvdSBob3cgbXVjaCBv
ZiBUbXAgaXMgZ29pbmcgdG8gYmUgcmVhZC4KLSAgICBBcmc6OldpZHRoIHVzZVdpZHRoKFRtcCB0
bXApIGNvbnN0CisgICAgV2lkdGggdXNlV2lkdGgoVG1wIHRtcCkgY29uc3QKICAgICB7CiAgICAg
ICAgIGF1dG8gaXRlciA9IG1fd2lkdGguZmluZCh0bXApOwogICAgICAgICBpZiAoaXRlciA9PSBt
X3dpZHRoLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIEFyZzo6bWluaW11bVdpZHRoKEFyZyh0
bXApLnR5cGUoKSk7CisgICAgICAgICAgICByZXR1cm4gbWluaW11bVdpZHRoKEFyZyh0bXApLmJh
bmsoKSk7CiAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZS51c2U7CiAgICAgfQogICAgIApAQCAt
OTQsMTYgKzk0LDE2IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFdpZHRocyB7CiAgICAgICAgIFdp
ZHRocygpIHsgfQogCi0gICAgICAgIFdpZHRocyhBcmc6OlR5cGUgdHlwZSkKKyAgICAgICAgV2lk
dGhzKEJhbmsgYmFuaykKICAgICAgICAgewotICAgICAgICAgICAgdXNlID0gQXJnOjptaW5pbXVt
V2lkdGgodHlwZSk7Ci0gICAgICAgICAgICBkZWYgPSBBcmc6Om1pbmltdW1XaWR0aCh0eXBlKTsK
KyAgICAgICAgICAgIHVzZSA9IG1pbmltdW1XaWR0aChiYW5rKTsKKyAgICAgICAgICAgIGRlZiA9
IG1pbmltdW1XaWR0aChiYW5rKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIEFyZzo6V2lkdGggdXNlOwot
ICAgICAgICBBcmc6OldpZHRoIGRlZjsKKyAgICAgICAgV2lkdGggdXNlOworICAgICAgICBXaWR0
aCBkZWY7CiAgICAgfTsKICAgICAKICAgICBIYXNoTWFwPFRtcCwgV2lkdGhzPiBtX3dpZHRoOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCShyZXZp
c2lvbiAyMTI5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgZnJlcXVlbmN5ICo9IE9wdGlvbnM6OnJhcmVCbG9ja1BlbmFsdHkoKTsKICAgICAgICAg
ICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewogICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaDxUaGluZz4oCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVGhpbmcmIGFyZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICBb
Jl0gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgQ291bnRzJiBjb3VudHMgPSBtX2NvdW50cy5hZGQoYXJnLCBDb3VudHMo
KSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c1dhcm1Vc2Uocm9sZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjEyOTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw3IEBA
IHB1YmxpYzoKIAogICAgICAgICAgICAgICAgIC8vIGZvckVhY2hBcmcgbXVzdCByZXR1cm4gQXJn
JidzIHRoYXQgcG9pbnQgaW50byB0aGUgYXJncyBhcnJheS4KICAgICAgICAgICAgICAgICBpbnN0
LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9s
ZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAoQXJn
JiBhcmcsIEFyZzo6Um9sZSwgQmFuaywgV2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKCZhcmcgPj0gJmluc3QuYXJnc1swXSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5z
dCwgIiBpbiAiLCAqYmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCZh
cmcgPD0gJmluc3QuYXJncy5sYXN0KCksICgiQXQgIiwgYXJnLCAiIGluICIsIGluc3QsICIgaW4g
IiwgKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMjEy
OTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJi
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcnVieQogCi0j
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxOSArNDQsMTkgQEAgY2xhc3Mg
T3Bjb2RlCiBlbmQKIAogY2xhc3MgQXJnCi0gICAgYXR0cl9yZWFkZXIgOnJvbGUsIDp0eXBlLCA6
d2lkdGgKKyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOmJhbmssIDp3aWR0aAogCi0gICAgZGVmIGlu
aXRpYWxpemUocm9sZSwgdHlwZSwgd2lkdGgpCisgICAgZGVmIGluaXRpYWxpemUocm9sZSwgYmFu
aywgd2lkdGgpCiAgICAgICAgIEByb2xlID0gcm9sZQotICAgICAgICBAdHlwZSA9IHR5cGUKKyAg
ICAgICAgQGJhbmsgPSBiYW5rCiAgICAgICAgIEB3aWR0aCA9IHdpZHRoCiAgICAgZW5kCiAKICAg
ICBkZWYgd2lkdGhDb2RlCiAgICAgICAgIGlmIHdpZHRoID09ICJQdHIiCi0gICAgICAgICAgICAi
QXJnOjpwb2ludGVyV2lkdGgoKSIKKyAgICAgICAgICAgICJwb2ludGVyV2lkdGgoKSIKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgIkFyZzo6V2lkdGgje3dpZHRofSIKKyAgICAgICAgICAgICJX
aWR0aCN7d2lkdGh9IgogICAgICAgICBlbmQKICAgICBlbmQKIGVuZApAQCAtMjU1LDkgKzI1NSw5
IEBAIGNsYXNzIFBhcnNlcgogICAgICAgICByZXN1bHQKICAgICBlbmQKIAotICAgIGRlZiBjb25z
dW1lVHlwZQorICAgIGRlZiBjb25zdW1lQmFuawogICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKLSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgdHlwZSAoRyBvciBGKSIpIHVubGVzcyBp
c0dGKHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgYmFuayAoRyBvciBGKSIp
IHVubGVzcyBpc0dGKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQogICAgICAgICByZXN1bHQKICAg
ICBlbmQKQEAgLTM2OSwxMSArMzY5LDExIEBAIGNsYXNzIFBhcnNlcgogICAgICAgICAgICAgICAg
ICAgICBsb29wIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSBjb25zdW1lUm9sZQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiOiIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gY29uc3VtZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhbmsgPSBj
b25zdW1lQmFuawogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiOiIpCiAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCA9IGNvbnN1bWVXaWR0aAogICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgPDwgQXJnLm5ldyhyb2xl
LCB0eXBlLCB3aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcu
bmV3KHJvbGUsIGJhbmssIHdpZHRoKQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdW1lKCIsIikKQEAgLTQzMCw3ICs0MzAsNyBAQCBjbGFzcyBQYXJzZXIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5yb2xl
ICE9ICJVIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigi
Rm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLmJhbmsgIT0gIkciCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUg
Zm9yIGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZApAQCAtNjU1
LDcgKzY1NSw3IEBAIHdyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CiAgICAgICAgICAgICAgICAgICAg
IHJhaXNlCiAgICAgICAgICAgICAgICAgZW5kCiAKLSAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50eXBlfVAs
ICN7YXJnLndpZHRoQ29kZX0pOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3Io
YXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgI3thcmcuYmFua31QLCAje2FyZy53aWR0aENv
ZGV9KTsiCiAgICAgICAgICAgICB9CiAgICAgICAgIGVuZAogICAgIH0KQEAgLTc5Myw3ICs3OTMs
NyBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAjIFNvbWUg
a2luZHMgb2YgQXJncyByZXFpcmUgYWRkaXRpb25hbCB2YWxpZGF0aW9uLgogICAgICAgICAgICAg
ICAgIGNhc2Uga2luZC5uYW1lCiAgICAgICAgICAgICAgICAgd2hlbiAiVG1wIgotICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1sje2luZGV4fV0udG1wKCkuaXMje2FyZy50
eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5k
ZXh9XS50bXAoKS5pcyN7YXJnLmJhbmt9UCgpKSIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKICAgICAgICAgICAgICAgICB3aGVuICJJbW0iCiAg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbW1Gb3JtKGFy
Z3NbI3tpbmRleH1dLnZhbHVlKCkpKSIKQEAgLTEwODYsNyArMTA4Niw3IEBAIHdyaXRlSCgiT3Bj
b2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgIGNh
c2Uga2luZC5uYW1lCiAgICAgICAgICAgICAgICAgd2hlbiAiVG1wIgotICAgICAgICAgICAgICAg
ICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAg
ICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0uYmFuayA9PSAiRyIKICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgogICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5mcHIoKSIKQEAgLTExNjgsNyArMTE2OCw3IEBAIEZpbGUub3Blbigi
SlNBaXJfb3Bjb2RlLmpzIiwgInciKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQog
ICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiaW5zdC52aXNpdEFyZygje2luZGV4fSwgZnVuYywgQXJnLiN7
cm9sZX0sICN7YXJnLnR5cGV9UCwgI3thcmcud2lkdGh9KTsiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaW5zdC52aXNpdEFyZygje2luZGV4fSwgZnVuYywgQXJnLiN7cm9sZX0sICN7
YXJnLmJhbmt9UCwgI3thcmcud2lkdGh9KTsiCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lvbiAyMTI5NjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYg
KzU5LDE0IEBAIHN0YXRpYyB2b2lkIHVzYWdlKCkKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyOwogCit1c2luZyBKU0M6OkIzOjpGUDsKK3VzaW5nIEpT
Qzo6QjM6OkdQOwordXNpbmcgSlNDOjpCMzo6V2lkdGg7Cit1c2luZyBKU0M6OkIzOjpXaWR0aDg7
Cit1c2luZyBKU0M6OkIzOjpXaWR0aDE2OwordXNpbmcgSlNDOjpCMzo6V2lkdGgzMjsKK3VzaW5n
IEpTQzo6QjM6OldpZHRoNjQ7CisKIG5hbWVzcGFjZSB7CiAKIFN0YXRpY0xvY2sgY3Jhc2hMb2Nr
OwpAQCAtMTUxLDExICsxNTksMTEgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVN3YXAoKQogICAg
IGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKICAgICByb290LT5h
cHBlbmQoCiAgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCi0gICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
LSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMy
KSk7CiAKICAgICBpbnQzMl90IHRoaW5nc1s0XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoR1ApOwogICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6
OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwpAQCAtMTg2LDExICsxOTQsMTEgQEAg
dm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0KCkKICAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwg
VG1wKEdQUkluZm86OnJlZ1QzKSk7CiAgICAgcm9vdC0+YXBwZW5kKAogICAgICAgICBTaHVmZmxl
LCBudWxscHRyLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVn
VDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6
d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJ
bmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMikpOwogCiAgICAgaW50MzJfdCB0aGlu
Z3NbNV07Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBUbXAgYmFz
ZSA9IGNvZGUubmV3VG1wKEdQKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRk
cihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2Yo
aW50MzJfdCkpKTsKQEAgLTIyNywxNiArMjM1LDE2IEBAIHZvaWQgdGVzdFNodWZmbGVMb25nU2hp
ZnQoKQogICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKICAg
ICByb290LT5hcHBlbmQoCiAgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCi0gICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0g
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdU
NyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhB
cmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpy
ZWdUMyksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmco
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdU
NiksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiks
IFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMikpOwogCiAgICAgaW50
MzJfdCB0aGluZ3NbOF07Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAg
ICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEdQKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2Up
OwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCks
IEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEg
KiBzaXplb2YoaW50MzJfdCkpKTsKQEAgLTI3OSwxNiArMjg3LDE2IEBAIHZvaWQgdGVzdFNodWZm
bGVMb25nU2hpZnRCYWNrd2FyZHMoKQogICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BS
SW5mbzo6cmVnVDcpKTsKICAgICByb290LT5hcHBlbmQoCiAgICAgICAgIFNodWZmbGUsIG51bGxw
dHIsCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwg
VG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZv
OjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCks
IFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhB
cmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpy
ZWdUNiksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
NCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmco
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdU
MyksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSks
IFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoV2lk
dGgzMikpOwogCiAgICAgaW50MzJfdCB0aGluZ3NbOF07Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5l
d1RtcChBcmc6OkdQKTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEdQKTsKICAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90
PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7
CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKQEAgLTMyNywxMiArMzM1LDEy
IEBAIHZvaWQgdGVzdFNodWZmbGVTaW1wbGVSb3RhdGUoKQogICAgIGxvYWRDb25zdGFudChyb290
LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKICAgICByb290LT5hcHBlbmQoCiAgICAgICAgIFNo
dWZmbGUsIG51bGxwdHIsCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZv
OjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKFdp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpKTsKIAogICAgIGludDMyX3QgdGhpbmdzWzRdOwotICAg
IFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5l
d1RtcChHUCk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKICAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7
CkBAIC0zNjMsMTIgKzM3MSwxMiBAQCB2b2lkIHRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KCkK
ICAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CiAgICAgcm9v
dC0+YXBwZW5kKAogICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwg
VG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFy
ZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSk7CiAKICAgICBp
bnQzMl90IHRoaW5nc1s0XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwor
ICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoR1ApOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFz
ZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwg
MSAqIHNpemVvZihpbnQzMl90KSkpOwpAQCAtMzkyLDcgKzQwMCw3IEBAIHZvaWQgdGVzdFNodWZm
bGVCcm9hZGNhc3RBbGxSZWdzKCkKICAgICBCMzo6UHJvY2VkdXJlIHByb2M7CiAgICAgQ29kZSYg
Y29kZSA9IHByb2MuY29kZSgpOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSBjb2Rl
LnJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJl
Z3MgPSBjb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoR1ApOwogCiAgICAgQmFzaWNCbG9jayogcm9v
dCA9IGNvZGUuYWRkQmxvY2soKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oMzUpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKQEAgLTQwNCw3ICs0MTIsNyBAQCB2b2lk
IHRlc3RTaHVmZmxlQnJvYWRjYXN0QWxsUmVncygpCiAgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3Qt
PmFwcGVuZChTaHVmZmxlLCBudWxscHRyKTsKICAgICBmb3IgKFJlZyByZWcgOiByZWdzKSB7CiAg
ICAgICAgIGlmIChyZWcgIT0gUmVnKEdQUkluZm86OnJlZ1QwKSkKLSAgICAgICAgICAgIHNodWZm
bGUuYXBwZW5kKFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChyZWcpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMikpOworICAgICAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKEdQUkluZm86OnJl
Z1QwKSwgVG1wKHJlZyksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMikpOwogICAgIH0KIAogICAgIFN0
YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Mu
c2l6ZSgpLCBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOwpAQCAtNDEyLDcgKzQyMCw3IEBAIHZvaWQg
dGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdzKCkKICAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50
MzJfdCkpKTsKIAogICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7
Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBUbXAgYmFzZSA9IGNv
ZGUubmV3VG1wKEdQKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJ
bW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIGJhc2UpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90
KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOwpAQCAtNDQ0LDE2ICs0NTIsMTYgQEAgdm9pZCB0ZXN0
U2h1ZmZsZVRyZWVTaGlmdCgpCiAgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZv
OjpyZWdUNykpOwogICAgIHJvb3QtPmFwcGVuZCgKICAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwK
LSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJl
Z1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
Ci0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1w
KEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwg
VG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwg
QXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1w
KEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMy
KSk7CiAKICAgICBpbnQzMl90IHRoaW5nc1s4XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoR1ApOwogICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6
OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwpAQCAtNDk2LDE2ICs1MDQsMTYgQEAg
dm9pZCB0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJkKCkKICAgICBsb2FkQ29uc3RhbnQocm9v
dCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3KSk7CiAgICAgcm9vdC0+YXBwZW5kKAogICAgICAgICBT
aHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5m
bzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUklu
Zm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMikpOworICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDcp
LCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBU
bXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKFdpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6
OndpZHRoQXJnKFdpZHRoMzIpKTsKIAogICAgIGludDMyX3QgdGhpbmdzWzhdOwotICAgIFRtcCBi
YXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChH
UCk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVv
ZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CkBAIC01
NTEsMTYgKzU1OSwxNiBAQCB2b2lkIHRlc3RTaHVmZmxlVHJlZVNoaWZ0T3RoZXJCYWNrd2FyZCgp
CiAgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpyZWdUNykpOwogICAgIHJv
b3QtPmFwcGVuZCgKICAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSks
IFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUNyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q3KSwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0
KSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q1
KSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwg
VG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q3KSwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q3KSwgVG1w
KEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSk7CiAKICAgICBpbnQzMl90
IHRoaW5nc1s4XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIFRt
cCBiYXNlID0gY29kZS5uZXdUbXAoR1ApOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
OjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNp
emVvZihpbnQzMl90KSkpOwpAQCAtNjAxLDEzICs2MDksMTMgQEAgdm9pZCB0ZXN0U2h1ZmZsZU11
bHRpcGxlU2hpZnRzKCkKICAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJl
Z1Q1KSk7CiAgICAgcm9vdC0+YXBwZW5kKAogICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJ
bmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDUp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJn
KFdpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVn
VDQpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpKTsKIAogICAgIGlu
dDMyX3QgdGhpbmdzWzZdOwotICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Cisg
ICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChHUCk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNl
KTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAx
ICogc2l6ZW9mKGludDMyX3QpKSk7CkBAIC02NDQsMTUgKzY1MiwxNSBAQCB2b2lkIHRlc3RTaHVm
ZmxlUm90YXRlV2l0aEZyaW5nZSgpCiAgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJ
bmZvOjpyZWdUNSkpOwogICAgIHJvb3QtPmFwcGVuZCgKICAgICAgICAgU2h1ZmZsZSwgbnVsbHB0
ciwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCks
IFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoV2lk
dGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCks
IEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRt
cChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoV2lkdGgz
MiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFy
Zzo6d2lkdGhBcmcoV2lkdGgzMikpOwogCiAgICAgaW50MzJfdCB0aGluZ3NbNl07Ci0gICAgVG1w
IGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEdQKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lz
ZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6
ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKQEAg
LTY4OSwxNSArNjk3LDE1IEBAIHZvaWQgdGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdlSW5XZWly
ZE8KICAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CiAgICAg
cm9vdC0+YXBwZW5kKAogICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJ
bmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpKTsKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1Qz
KSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwg
VG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwg
QXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1w
KEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMy
KSk7CiAKICAgICBpbnQzMl90IHRoaW5nc1s2XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoR1ApOwogICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6
OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwpAQCAtNzM0LDE1ICs3NDIsMTUgQEAg
dm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZVdpdGhMb25nRnJpbmdlKCkKICAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CiAgICAgcm9vdC0+YXBwZW5kKAogICAgICAg
ICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0g
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMy
KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
Ojp3aWR0aEFyZyhXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSk7CiAKICAgICBpbnQzMl90IHRo
aW5nc1s2XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIFRtcCBi
YXNlID0gY29kZS5uZXdUbXAoR1ApOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjph
ZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVv
ZihpbnQzMl90KSkpOwpAQCAtNzc5LDE1ICs3ODcsMTUgQEAgdm9pZCB0ZXN0U2h1ZmZsZU11bHRp
cGxlUm90YXRlcygpCiAgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdU
NSkpOwogICAgIHJvb3QtPmFwcGVuZCgKICAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQp
LCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSk7CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lk
dGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZv
OjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhB
cmcoV2lkdGgzMikpOwogCiAgICAgaW50MzJfdCB0aGluZ3NbNl07Ci0gICAgVG1wIGJhc2UgPSBj
b2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEdQKTsKICAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMy
X3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKQEAgLTgyNCwxNCAr
ODMyLDE0IEBAIHZvaWQgdGVzdFNodWZmbGVTaGlmdEFuZFJvdGF0ZSgpCiAgICAgbG9hZENvbnN0
YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOwogICAgIHJvb3QtPmFwcGVuZCgKICAg
ICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1w
KEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpy
ZWdUMCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKFdpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBB
cmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAo
R1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIp
KTsKIAogICAgIGludDMyX3QgdGhpbmdzWzZdOwotICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAo
QXJnOjpHUCk7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChHUCk7CiAgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRo
aW5ncykpLCBiYXNlKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwogICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CkBAIC04NTksMjEgKzg2NywyMSBAQCB2
b2lkIHRlc3RTaHVmZmxlU2hpZnRBbGxSZWdzKCkKICAgICBCMzo6UHJvY2VkdXJlIHByb2M7CiAg
ICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZz4mIHJl
Z3MgPSBjb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisgICAgY29uc3QgVmVjdG9y
PFJlZz4mIHJlZ3MgPSBjb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoR1ApOwogCiAgICAgQmFzaWNC
bG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVncy5zaXplKCk7ICsraSkKICAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIDM1ICsgaSwg
VG1wKHJlZ3NbaV0pKTsKICAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKFNodWZmbGUs
IG51bGxwdHIpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUoKTsgKytp
KQotICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRt
cChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSk7CiAK
ICAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJfdCkg
KiByZWdzLnNpemUoKSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKICAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50
MzJfdCkpKTsKIAogICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7
Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBUbXAgYmFzZSA9IGNv
ZGUubmV3VG1wKEdQKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJ
bW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIGJhc2UpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90
KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOwpAQCAtODk1LDIyICs5MDMsMjIgQEAgdm9pZCB0ZXN0
U2h1ZmZsZVJvdGF0ZUFsbFJlZ3MoKQogICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKICAgICBDb2Rl
JiBjb2RlID0gcHJvYy5jb2RlKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8UmVnPiYgcmVncyA9IGNv
ZGUucmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKyAgICBjb25zdCBWZWN0b3I8UmVnPiYg
cmVncyA9IGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcihHUCk7CiAKICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gY29kZS5hZGRCbG9jaygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdz
LnNpemUoKTsgKytpKQogICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgMzUgKyBpLCBUbXAocmVn
c1tpXSkpOwogICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoU2h1ZmZsZSwgbnVsbHB0
cik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKLSAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVncy5sYXN0
KCkpLCBUbXAocmVnc1swXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisgICAgICAg
IHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0
aEFyZyhXaWR0aDMyKSk7CisgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3MubGFzdCgpKSwgVG1w
KHJlZ3NbMF0pLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpKTsKIAogICAgIFN0YWNrU2xvdCogc2xv
dCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgpLCBTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNp
emUoKTsgKytpKQogICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAocmVn
c1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSkpOwogCiAgICAgVmVj
dG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKLSAgICBUbXAgYmFzZSA9IGNv
ZGUubmV3VG1wKEFyZzo6R1ApOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoR1ApOwogICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgYmFzZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJl
Z1QwKSk7CkBAIC05MzksMTEgKzk0NywxMSBAQCB2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU3dhcDY0
KCkKICAgICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUklu
Zm86OnJlZ1QzKSk7CiAgICAgcm9vdC0+YXBwZW5kKAogICAgICAgICBTaHVmZmxlLCBudWxscHRy
LAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRt
cChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmco
V2lkdGg2NCksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdU
MiksIEFyZzo6d2lkdGhBcmcoV2lkdGg2NCkpOwogCiAgICAgaW50NjRfdCB0aGluZ3NbNF07Ci0g
ICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBUbXAgYmFzZSA9IGNvZGUu
bmV3VG1wKEdQKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0o
Yml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQ2NF90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOwpA
QCAtOTc1LDExICs5ODMsMTEgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0NjQoKQogICAg
IGxvYWRDb25zdGFudChyb290LCA1MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVn
VDQpKTsKICAgICByb290LT5hcHBlbmQoCiAgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCi0gICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDY0KSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUklu
Zm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDY0
KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
Ojp3aWR0aEFyZyhXaWR0aDY0KSk7CiAKICAgICBpbnQ2NF90IHRoaW5nc1s1XTsKLSAgICBUbXAg
YmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAo
R1ApOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9m
KGludDY0X3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CkBAIC0xMDEy
LDExICsxMDIwLDExIEBAIHZvaWQgdGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCgpCiAgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMykp
OwogICAgIHJvb3QtPmFwcGVuZCgKICAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAor
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6Ondp
ZHRoQXJnKFdpZHRoNjQpKTsKIAogICAgIGludDY0X3QgdGhpbmdzWzRdOwotICAgIFRtcCBiYXNl
ID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChHUCk7
CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50
NjRfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKQEAgLTEwNDgsMTEg
KzEwNTYsMTEgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWl4ZWRXaWR0aCgpCiAgICAgbG9hZENv
bnN0YW50KHJvb3QsIDUwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUNCkpOwog
ICAgIHJvb3QtPmFwcGVuZCgKICAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoNjQpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVn
VDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKFdpZHRoNjQpLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRo
QXJnKFdpZHRoMzIpKTsKIAogICAgIGludDY0X3QgdGhpbmdzWzVdOwotICAgIFRtcCBiYXNlID0g
Y29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChHUCk7CiAg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRf
dCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKQEAgLTEwODgsMTIgKzEw
OTYsMTIgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5KCkKICAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMikp
OwogICAgIHJvb3QtPmFwcGVuZCgKICAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAogICAgICAgICBBcmc6OmFkZHIoVG1wKEdQ
UkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQzMl90KSksCi0gICAgICAgIEFyZzo6YWRkcihU
bXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDMyX3QpKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpKTsKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEg
KiBzaXplb2YoaW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIpKTsKIAogICAgIGludDMy
X3QgdGhpbmdzWzJdOwotICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAg
VG1wIGJhc2UgPSBjb2RlLm5ld1RtcChHUCk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsK
ICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBB
cmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICog
c2l6ZW9mKGludDMyX3QpKSk7CkBAIC0xMTI3LDE5ICsxMTM1LDE5IEBAIHZvaWQgdGVzdFNodWZm
bGVTaGlmdE1lbW9yeUxvbmcoKQogICAgIHJvb3QtPmFwcGVuZCgKICAgICAgICAgU2h1ZmZsZSwg
bnVsbHB0ciwKICAgICAgICAgCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMy
KSwKICAgICAgICAgCiAgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihUbXAo
R1BSSW5mbzo6cmVnVDMpLCAwICogc2l6ZW9mKGludDMyX3QpKSwKLSAgICAgICAgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAogICAg
ICAgICAKICAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDAgKiBzaXplb2Yo
aW50MzJfdCkpLAotICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwgMSAqIHNp
emVvZihpbnQzMl90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBBcmc6Ondp
ZHRoQXJnKFdpZHRoMzIpLAogCiAgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMp
LCAxICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwKLSAgICAgICAgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhXaWR0aDMy
KSk7CiAKICAgICBpbnQzMl90IHRoaW5nc1szXTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoR1ApOwogICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6
OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwpAQCAtMTE2Nyw3ICsxMTc1LDcgQEAg
dm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVncygpCiAgICAgbWVtb3J5WzBdID0gMzU7
CiAgICAgbWVtb3J5WzFdID0gMzY7CiAKLSAgICBWZWN0b3I8UmVnPiByZWdzID0gY29kZS5yZWdz
SW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSBjb2RlLnJl
Z3NJblByaW9yaXR5T3JkZXIoR1ApOwogICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQUkluZm86
OnJlZ1QwKSk7CiAKICAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwpAQCAt
MTE3OCwxNiArMTE4NiwxNiBAQCB2b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzKCkK
ICAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKICAgICAgICAgCiAgICAgICAgIFRtcChyZWdzWzBd
KSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50MzJfdCkpLAot
ICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIEFyZzo6d2lkdGhB
cmcoV2lkdGgzMiksCiAgICAgICAgIAogICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJl
Z1QwKSwgMCAqIHNpemVvZihpbnQzMl90KSksCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5m
bzo6cmVnVDApLCAxICogc2l6ZW9mKGludDMyX3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihp
bnQzMl90KSksIEFyZzo6d2lkdGhBcmcoV2lkdGgzMiksCiAKICAgICAgICAgQXJnOjphZGRyKFRt
cChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBUbXAocmVnc1sxXSksCi0g
ICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisgICAgICAgIEFyZzo6d2lkdGhB
cmcoV2lkdGgzMikpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgp
OyArK2kpCi0gICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdz
W2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICAgICAgc2h1ZmZsZS5hcHBl
bmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKFdpZHRoMzIp
KTsKIAogICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CiAgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oJnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKQEAgLTEyMTcsNyArMTIy
NSw3IEBAIHZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3M2NCgpCiAgICAgbWVtb3J5
WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKICAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxs
OwogCi0gICAgVmVjdG9yPFJlZz4gcmVncyA9IGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcihBcmc6
OkdQKTsKKyAgICBWZWN0b3I8UmVnPiByZWdzID0gY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKEdQ
KTsKICAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOwogCiAgICAgQmFz
aWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKQEAgLTEyMjgsMTYgKzEyMzYsMTYgQEAg
dm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnczY0KCkKICAgICAgICAgU2h1ZmZsZSwg
bnVsbHB0ciwKICAgICAgICAgCiAgICAgICAgIFRtcChyZWdzWzBdKSwgQXJnOjphZGRyKFRtcChH
UFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAotICAgICAgICBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoV2lkdGg2NCksCiAgICAg
ICAgIAogICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihp
bnQ2NF90KSksCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6
ZW9mKGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICBBcmc6
OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFyZzo6d2lk
dGhBcmcoV2lkdGg2NCksCiAKICAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCks
IDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAocmVnc1sxXSksCi0gICAgICAgIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDY0KSk7CisgICAgICAgIEFyZzo6d2lkdGhBcmcoV2lkdGg2NCkpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIHNo
dWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoNjQpKTsKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFd
KSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKFdpZHRoNjQpKTsKIAogICAgIFZlY3Rvcjxp
bnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkp
LCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKQEAgLTEyNzgsNyArMTI4Niw3IEBAIHZvaWQgdGVzdFNo
dWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3NNaXhlZFcKICAgICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAw
MDAwMGxsOwogICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7CiAKLSAgICBWZWN0b3I8
UmVnPiByZWdzID0gY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIFZlY3Rv
cjxSZWc+IHJlZ3MgPSBjb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoR1ApOwogICAgIHJlZ3MucmVt
b3ZlRmlyc3QoUmVnKEdQUkluZm86OnJlZ1QwKSk7CiAKICAgICBCYXNpY0Jsb2NrKiByb290ID0g
Y29kZS5hZGRCbG9jaygpOwpAQCAtMTI4OSwxOCArMTI5NywxOCBAQCB2b2lkIHRlc3RTaHVmZmxl
U2hpZnRNZW1vcnlBbGxSZWdzTWl4ZWRXCiAgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCiAgICAg
ICAgIAogICAgICAgICBUbXAocmVnc1swXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDAp
LCAwICogc2l6ZW9mKGludDY0X3QpKSwKLSAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAogICAgICAgICAKICAgICAgICAg
QXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAotICAg
ICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKFdpZHRoNjQp
LAogCiAgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGlu
dDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAotICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOworICAgICAgICBBcmc6OndpZHRoQXJnKFdpZHRoMzIpKTsKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHNodWZmbGUuYXBwZW5k
KAogICAgICAgICAgICAgVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLAotICAgICAgICAg
ICAgKGkgJiAxKSA/IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSA6IEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDY0KSk7CisgICAgICAgICAgICAoaSAmIDEpID8gQXJnOjp3aWR0aEFyZyhXaWR0
aDMyKSA6IEFyZzo6d2lkdGhBcmcoV2lkdGg2NCkpOwogICAgIH0KIAogICAgIFZlY3RvcjxpbnQ2
NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CkBAIC0xMzQwLDE5ICsxMzQ4LDE5IEBAIHZv
aWQgdGVzdFNodWZmbGVSb3RhdGVNZW1vcnkoKQogICAgIHJvb3QtPmFwcGVuZCgKICAgICAgICAg
U2h1ZmZsZSwgbnVsbHB0ciwKICAgICAgICAgCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCks
IFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFy
ZyhXaWR0aDMyKSwKIAogICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoVG1w
KEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQzMl90KSksCi0gICAgICAgIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKICAg
ICAgICAgCiAgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9m
KGludDMyX3QpKSwKLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBz
aXplb2YoaW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIEFy
Zzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDMyX3QpKSwgQXJnOjp3
aWR0aEFyZyhXaWR0aDMyKSwKIAogICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1Qy
KSwgMSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMCksCi0gICAgICAgIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisgICAgICAgIEFyZzo6d2lkdGhBcmcoV2lkdGgz
MikpOwogCiAgICAgaW50MzJfdCB0aGluZ3NbMl07Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1Rt
cChBcmc6OkdQKTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEdQKTsKICAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90Pigm
dGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CiAg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
OjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKQEAgLTEzODUsMTkgKzEzOTMsMTkg
QEAgdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeTY0KCkKICAgICByb290LT5hcHBlbmQoCiAg
ICAgICAgIFNodWZmbGUsIG51bGxwdHIsCiAgICAgICAgIAotICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
d2lkdGhBcmcoV2lkdGg2NCksCiAKICAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjph
ZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50NjRfdCkpLAotICAgICAgICBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoV2lkdGg2
NCksCiAgICAgICAgIAogICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAq
IHNpemVvZihpbnQ2NF90KSksCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIp
LCAxICogc2l6ZW9mKGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAg
ICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQ2NF90KSks
IEFyZzo6d2lkdGhBcmcoV2lkdGg2NCksCiAKICAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZv
OjpyZWdUMiksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApLAotICAg
ICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworICAgICAgICBBcmc6OndpZHRoQXJn
KFdpZHRoNjQpKTsKIAogICAgIGludDY0X3QgdGhpbmdzWzJdOwotICAgIFRtcCBiYXNlID0gY29k
ZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChHUCk7CiAgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkp
KTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKQEAgLTE0MzAsMTkgKzE0Mzgs
MTkgQEAgdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeU1peGVkV2lkdGgoKQogICAgIHJvb3Qt
PmFwcGVuZCgKICAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKICAgICAgICAgCi0gICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKIAogICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2NF90KSks
Ci0gICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgQXJnOjp3aWR0
aEFyZyhXaWR0aDY0KSwKICAgICAgICAgCiAgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6
cmVnVDIpLCAwICogc2l6ZW9mKGludDY0X3QpKSwKLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9m
KGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKIAogICAgICAgICBBcmc6OmFkZHIo
VG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChHUFJJbmZvOjpy
ZWdUMCksCi0gICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisgICAgICAgIEFy
Zzo6d2lkdGhBcmcoV2lkdGg2NCkpOwogCiAgICAgaW50NjRfdCB0aGluZ3NbMl07Ci0gICAgVG1w
IGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEdQKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lz
ZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVv
ZihpbnQ2NF90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOwpAQCAtMTQ2
OCw3ICsxNDc2LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFsbFJlZ3M2NCgpCiAg
ICAgbWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKICAgICBtZW1vcnlbMV0gPSAzNjAwMDAw
MDAwMDAwMGxsOwogCi0gICAgVmVjdG9yPFJlZz4gcmVncyA9IGNvZGUucmVnc0luUHJpb3JpdHlP
cmRlcihBcmc6OkdQKTsKKyAgICBWZWN0b3I8UmVnPiByZWdzID0gY29kZS5yZWdzSW5Qcmlvcml0
eU9yZGVyKEdQKTsKICAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOwog
CiAgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKQEAgLTE0NzksMTggKzE0
ODcsMTggQEAgdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFsbFJlZ3M2NCgpCiAgICAgICAg
IFNodWZmbGUsIG51bGxwdHIsCiAgICAgICAgIAogICAgICAgICBUbXAocmVnc1swXSksIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKLSAgICAgICAg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICBBcmc6OndpZHRoQXJnKFdpZHRo
NjQpLAogICAgICAgICAKICAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAg
KiBzaXplb2YoaW50NjRfdCkpLAotICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1Qw
KSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAg
ICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkp
LCBBcmc6OndpZHRoQXJnKFdpZHRoNjQpLAogCiAgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5m
bzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAotICAgICAgICBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoV2lkdGg2
NCksCiAKLSAgICAgICAgcmVncy5sYXN0KCksIHJlZ3NbMF0sIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDY0KSk7CisgICAgICAgIHJlZ3MubGFzdCgpLCByZWdzWzBdLCBBcmc6OndpZHRoQXJnKFdp
ZHRoNjQpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytp
KQotICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRt
cChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhXaWR0aDY0KSk7CiAK
ICAgICBWZWN0b3I8aW50NjRfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOwogICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CkBAIC0xNTIwLDcgKzE1MjgsNyBA
QCB2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5QWxsUmVnc01peGVkCiAgICAgbWVtb3J5WzBd
ID0gMzUwMDAwMDAwMDAwMDBsbDsKICAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxsOwog
Ci0gICAgVmVjdG9yPFJlZz4gcmVncyA9IGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQ
KTsKKyAgICBWZWN0b3I8UmVnPiByZWdzID0gY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKEdQKTsK
ICAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOwogCiAgICAgQmFzaWNC
bG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKQEAgLTE1MzEsMTggKzE1MzksMTggQEAgdm9p
ZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFsbFJlZ3NNaXhlZAogICAgICAgICBTaHVmZmxlLCBu
dWxscHRyLAogICAgICAgICAKICAgICAgICAgVG1wKHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQ
UkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCi0gICAgICAgIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSwKICAgICAg
ICAgCiAgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGlu
dDY0X3QpKSwKLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXpl
b2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgQXJnOjp3aWR0
aEFyZyhXaWR0aDY0KSwKIAogICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwg
MSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChyZWdzWzFdKSwKLSAgICAgICAgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBBcmc6OndpZHRoQXJnKFdpZHRoMzIpLAogCi0gICAg
ICAgIHJlZ3MubGFzdCgpLCByZWdzWzBdLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOwor
ICAgICAgICByZWdzLmxhc3QoKSwgcmVnc1swXSwgQXJnOjp3aWR0aEFyZyhXaWR0aDMyKSk7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKLSAgICAgICAg
c2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGg2NCkpOworICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVnc1tpIC0g
MV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoV2lkdGg2NCkpOwogCiAgICAgVmVjdG9y
PGludDY0X3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKICAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBd
KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOwpAQCAtMTU3NSwxMSArMTU4MywxMSBAQCB2b2lkIHRl
c3RTaHVmZmxlU3dhcERvdWJsZSgpCiAgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDQsIFRt
cChGUFJJbmZvOjpmcFJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CiAgICAgcm9vdC0+YXBw
ZW5kKAogICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoRlBSSW5mbzo6ZnBS
ZWdUMiksIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQp
LAotICAgICAgICBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKyAgICAgICAgVG1wKEZQUkluZm86OmZwUmVn
VDIpLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIEFyZzo6d2lkdGhBcmcoV2lkdGg2NCksCisgICAg
ICAgIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBBcmc6Ondp
ZHRoQXJnKFdpZHRoNjQpKTsKIAogICAgIGRvdWJsZSB0aGluZ3NbNF07Ci0gICAgVG1wIGJhc2Ug
PSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEdQKTsK
ICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91Ymxl
LCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6
ZW9mKGRvdWJsZSkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1w
KEZQUkluZm86OmZwUmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihkb3VibGUpKSk7
CkBAIC0xNjEwLDEwICsxNjE4LDEwIEBAIHZvaWQgdGVzdFNodWZmbGVTaGlmdERvdWJsZSgpCiAg
ICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDQsIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CiAgICAgcm9vdC0+YXBwZW5kKAogICAgICAgICBTaHVmZmxlLCBu
dWxscHRyLAotICAgICAgICBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIFRtcChGUFJJbmZvOjpmcFJl
Z1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKyAgICAgICAgVG1wKEZQUkluZm86
OmZwUmVnVDIpLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIEFyZzo6d2lkdGhBcmcoV2lkdGg2NCkp
OwogCiAgICAgZG91YmxlIHRoaW5nc1s0XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFy
Zzo6R1ApOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoR1ApOwogICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGlu
Z3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChG
UFJJbmZvOjpmcFJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoZG91YmxlKSkpOwog
ICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdU
MSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGRvdWJsZSkpKTsK
</data>
<flag name="review"
          id="324397"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>