<?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>231211</bug_id>
          
          <creation_ts>2021-10-04 22:45:30 -0700</creation_ts>
          <short_desc>Add support for Wasm exceptions in the Air generator</short_desc>
          <delta_ts>2022-01-07 19:43:16 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>234909</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1800388</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-04 22:45:30 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802988</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-11 22:46:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/84132861&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828078</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-04 13:32:46 -0800</bug_when>
    <thetext>I think ima do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828446</commentid>
    <comment_count>3</comment_count>
      <attachid>448449</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-05 16:14:46 -0800</bug_when>
    <thetext>Created attachment 448449
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828456</commentid>
    <comment_count>4</comment_count>
      <attachid>448453</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-05 16:39:28 -0800</bug_when>
    <thetext>Created attachment 448453
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828485</commentid>
    <comment_count>5</comment_count>
      <attachid>448461</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-05 18:18:14 -0800</bug_when>
    <thetext>Created attachment 448461
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828493</commentid>
    <comment_count>6</comment_count>
      <attachid>448462</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-05 19:03:45 -0800</bug_when>
    <thetext>Created attachment 448462
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828688</commentid>
    <comment_count>7</comment_count>
      <attachid>448516</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-06 11:44:45 -0800</bug_when>
    <thetext>Created attachment 448516
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828704</commentid>
    <comment_count>8</comment_count>
      <attachid>448522</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-06 12:08:41 -0800</bug_when>
    <thetext>Created attachment 448522
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828721</commentid>
    <comment_count>9</comment_count>
      <attachid>448528</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-06 12:48:53 -0800</bug_when>
    <thetext>Created attachment 448528
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828758</commentid>
    <comment_count>10</comment_count>
      <attachid>448538</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-06 14:46:00 -0800</bug_when>
    <thetext>Created attachment 448538
WIP

At least one test runs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828779</commentid>
    <comment_count>11</comment_count>
      <attachid>448545</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-06 16:40:11 -0800</bug_when>
    <thetext>Created attachment 448545
WIP

Patch is ready, just gotta clean some stuff up. But first, gotta fix https://bugs.webkit.org/show_bug.cgi?id=234909</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828823</commentid>
    <comment_count>12</comment_count>
      <attachid>448562</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-06 22:30:32 -0800</bug_when>
    <thetext>Created attachment 448562
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828973</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-07 10:41:34 -0800</bug_when>
    <thetext>JSC failure might be x86_64 specific. Looking into it. Doesn&apos;t reproduce on my M1 Mac for an arm64 binary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829037</commentid>
    <comment_count>14</comment_count>
      <attachid>448621</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-07 12:52:28 -0800</bug_when>
    <thetext>Created attachment 448621
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829038</commentid>
    <comment_count>15</comment_count>
      <attachid>448622</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-07 12:56:27 -0800</bug_when>
    <thetext>Created attachment 448622
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829163</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-07 17:58:14 -0800</bug_when>
    <thetext>Committed r287801 (245854@main): &lt;https://commits.webkit.org/245854@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 448622.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829190</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-07 19:43:16 -0800</bug_when>
    <thetext>fix debug assert in:
https://trac.webkit.org/changeset/287806/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448449</attachid>
            <date>2022-01-05 16:14:46 -0800</date>
            <delta_ts>2022-01-05 16:39:28 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>20729</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MiwxNCArMTQyLDI1
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOwogICAgICAgICB9
CiAKKyAgICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJl
IHJlc3VsdCwgUmVzdWx0TGlzdCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9j
ayogY29udGludWF0aW9uLCB1bnNpZ25lZCB0cnlTdGFydCwgdW5zaWduZWQgdHJ5RGVwdGgpCisg
ICAgICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKKyAgICAgICAgICAgICwgY29udGlu
dWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgICwgc3BlY2lhbChudWxscHRyKQorICAg
ICAgICAgICAgLCByZXN1bHRzKHJlc3VsdFRtcHMpCisgICAgICAgICAgICAsIHJldHVyblR5cGUo
c2lnbmF0dXJlKQorICAgICAgICAgICAgLCBtX3RyeVN0YXJ0KHRyeVN0YXJ0KQorICAgICAgICAg
ICAgLCBtX3RyeUNhdGNoRGVwdGgodHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgfQorCiAg
ICAgICAgIENvbnRyb2xEYXRhKCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJv
bC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlz
VHJ5KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlw
ZSgpID09IEJsb2NrVHlwZTo6VHJ5OyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29u
c3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0
IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJs
b2NrVHlwZTo6Q2F0Y2g7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250
cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gaXNBbnlDYXRjaChjb250cm9sKSAmJiBjb250cm9s
LmNhdGNoS2luZCgpID09IENhdGNoS2luZDo6Q2F0Y2g7IH0KICAgICAgICAgc3RhdGljIGJvb2wg
aXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5i
bG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9CiAgICAgICAgIHN0YXRpYyBib29s
IGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9j
ayhjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUo
KSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9CkBAIC0yMjEsNiArMjMyLDU0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9CiAK
KyAgICAgICAgdm9pZCBjb252ZXJ0VHJ5VG9DYXRjaCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUlu
ZGV4LCBUeXBlZFRtcCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChi
bG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tU
eXBlID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hL
aW5kOjpDYXRjaDsKKyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsK
KyAgICAgICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBjb252ZXJ0VHJ5VG9DYXRjaEFsbCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUluZGV4
LCBUeXBlZFRtcCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tUeXBl
ID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5k
OjpDYXRjaEFsbDsKKyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsK
KyAgICAgICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBl
ID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5U3RhcnQ7Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsK
KyAgICAgICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2ln
bmVkIHRyeURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRy
b2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9j
a1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeUNhdGNoRGVwdGg7CisgICAg
ICAgIH0KKworICAgICAgICBDYXRjaEtpbmQgY2F0Y2hLaW5kKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7
CisgICAgICAgICAgICByZXR1cm4gbV9jYXRjaEtpbmQ7CisgICAgICAgIH0KKworICAgICAgICBU
eXBlZFRtcCBleGNlcHRpb24oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
Y29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVy
biBtX2V4Y2VwdGlvbjsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIEFpcklSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUgY29udHJvbEJsb2NrVHlw
ZTsKQEAgLTIyOCw2ICsyODcsMTEgQEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBzcGVj
aWFsOwogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJl
IHJldHVyblR5cGU7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5U3RhcnQ7CisgICAgICAgIHVuc2ln
bmVkIG1fdHJ5RW5kOworICAgICAgICB1bnNpZ25lZCBtX3RyeUNhdGNoRGVwdGg7CisgICAgICAg
IENhdGNoS2luZCBtX2NhdGNoS2luZDsKKyAgICAgICAgVHlwZWRUbXAgbV9leGNlcHRpb247CiAg
ICAgfTsKIAogICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CkBAIC0zNjEsNiAr
NDI1LDkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQog
ICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KIAorICAgIFRtcCBlbWl0Q2F0Y2hJ
bXBsKENhdGNoS2luZCwgQ29udHJvbFR5cGUmLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCA9IDAp
OworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNl
cHRpb25zKEJhc2ljQmxvY2sqLCBQYXRjaHBvaW50VmFsdWUqKTsKKwogICAgIGNvbnN0IEJhZzxC
Mzo6UGF0Y2hwb2ludFZhbHVlKj4mIHBhdGNocG9pbnRzKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3BhdGNocG9pbnRzOwpAQCAtNDE3LDE2ICs0ODQsNiBAQCBwcml2YXRlOgogCiAg
ICAgVG1wIG5ld1RtcChCMzo6QmFuayBiYW5rKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChiYW5r
KSB7Ci0gICAgICAgIGNhc2UgQjM6OkdQOgotICAgICAgICAgICAgaWYgKG1fZnJlZUdQcy5zaXpl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZnJlZUdQcy50YWtlTGFzdCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQjM6OkZQOgotICAgICAgICAgICAgaWYgKG1fZnJl
ZUZQcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZnJlZUZQcy50YWtlTGFzdCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fY29kZS5u
ZXdUbXAoYmFuayk7CiAgICAgfQogCkBAIC00OTcsNyArNTU0LDcgQEAgcHJpdmF0ZToKICAgICB9
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VG1wVHlwZSwgc2l6ZV90IGlubGluZVNp
emU+Ci0gICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiAg
cmVzdWx0cywgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCisgICAg
dm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiByZXN1bHRzLCBW
ZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKICAgICB7CiAgICAgICAg
IGlmICghbV9wYXRjaHBvaW50U3BlY2lhbCkKICAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNp
YWwgPSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lh
bChtYWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOwpAQCAtNjg5LDYgKzc0Niwy
MyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBlbWl0TG9hZChPcGNv
ZGUgb3AsIEIzOjpUeXBlIHR5cGUsIFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBUbXAgcmVzdWx0
KQorICAgIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6Ondp
ZHRoRm9yVHlwZSh0eXBlKSkpCisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcihiYXNl
LCBvZmZzZXQpLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gdGVt
cDIgPSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQp
LCB0ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCBiYXNlLCB0ZW1wMik7
CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcih0ZW1wMiksIHJlc3VsdCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0
LCBUeXBlZFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBlbWl0TG9hZChtb3ZlT3BGb3JWYWx1
ZVR5cGUocmVzdWx0LnR5cGUoKSksIHRvQjNUeXBlKHJlc3VsdC50eXBlKCkpLCBiYXNlLCBvZmZz
ZXQsIHJlc3VsdC50bXAoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0VGhyb3dFeGNlcHRpb24o
Q0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKICAgICB2b2lkIGVtaXRFbnRyeVRpZXJV
cENoZWNrKCk7CkBAIC03NTUsOSArODI5LDYgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV93YXNt
Q29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIGJvb2wgbV9tYWtlc0Nh
bGxzIHsgZmFsc2UgfTsKIAotICAgIFZlY3RvcjxUbXAsIDg+IG1fZnJlZUdQczsKLSAgICBWZWN0
b3I8VG1wLCA4PiBtX2ZyZWVGUHM7Ci0KICAgICBIYXNoTWFwPEJsb2NrU2lnbmF0dXJlLCBCMzo6
VHlwZT4gbV90dXBsZU1hcDsKICAgICAvLyBUaGlzIGlzIG9ubHkgZmlsbGVkIGlmIHdlIGFyZSBk
dW1waW5nIElSLgogICAgIEJhZzxCMzo6UGF0Y2hwb2ludFZhbHVlKj4gbV9wYXRjaHBvaW50czsK
QEAgLTc3NCw2ICs4NDUsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1
bmN0aW9uczsKIAogICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCogbV9wYXRjaHBvaW50U3BlY2lh
bCB7IG51bGxwdHIgfTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fdHJ5Q2F0Y2hEZXB0aCB7
IDAgfTsgLy8gT09QUzogaW5jcmVtZW50IGV2ZXJ5d2hlcmUKKyAgICBDaGVja2VkPHVuc2lnbmVk
PiBtX2NhbGxTaXRlSW5kZXggeyAwIH07IC8vIE9PUFM6IGluY3JlbWVudCBldmVyeXdoZXJlCisg
ICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9Owog
CiAvLyBNZW1vcnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQg
b2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgpA
QCAtMTQyOCw2ICsxNTAzLDggQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQz
Ml90IAogICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXpl
b2YoUmVnaXN0ZXIpKTsKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5kaW5nTW9kZSkgewogICAgIGNh
c2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpFbWJlZGRlZEluSW5zdGFu
Y2U6CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy8gZW1pdExvYWQobW92ZU9wRm9yVmFsdWVU
eXBlKHR5cGUpLCB0b0IzVHlwZSh0eXBlKSwgdGVtcCwgb2Zmc2V0LCByZXN1bHQpOwogICAgICAg
ICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHRvQjNU
eXBlKHR5cGUpKSkpCiAgICAgICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUp
LCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgZWxzZSB7CkBAIC0x
NDM5LDYgKzE1MTYsOCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3Qg
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRp
bmdNb2RlOjpQb3J0YWJsZToKICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdh
c206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKKyAgICAgICAgLy8g
T09QUworICAgICAgICAvLyBlbWl0TG9hZChNb3ZlLCBCMzo6SW50NjQsIHRlbXAsIG9mZnNldCwg
dGVtcCk7CiAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjpXaWR0
aDY0KSkKICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwg
dGVtcCk7CiAgICAgICAgIGVsc2UgewpAQCAtMzAxMiw1NyArMzA5MSwyMTQgQEAgYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibAogICAgIHJldHVybiB7IH07CiB9CiAKLS8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRpb25zIGluIHRoZSBBaXIgZ2VuZXJh
dG9yCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjExCi1h
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiwgQ29udHJv
bFR5cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29u
dHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Cisg
ICAgKyttX3RyeUNhdGNoRGVwdGg7CisKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3Rh
Y2ssIG5ld1N0YWNrKTsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0
dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6VHJ5LCBjb250aW51
YXRpb24sICsrbV9jYWxsU2l0ZUluZGV4LCBtX3RyeUNhdGNoRGVwdGgpOwogICAgIHJldHVybiB7
IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkLCBjb25zdCBT
aWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29u
dHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdHMpOworICAgIGFw
cGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRp
bnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRl
eCwgc2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9s
VHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbChTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSkgLT4g
UGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEu
cmVzdWx0cyk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNj
ZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4gYWRkQ2F0Y2hBbGxUb1VucmVh
Y2hhYmxlKGRhdGEpOwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFj
ayYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIFRtcCBidWZmZXIgPSBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2gsIGRhdGEsIGV4
Y2VwdGlvbkluZGV4KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1
bWVudChpKTsKKyAgICAgICAgVHlwZWRUbXAgdG1wID0gdG1wRm9yVHlwZSh0eXBlKTsKKyAgICAg
ICAgZW1pdExvYWQoYnVmZmVyLCBpICogc2l6ZW9mKHVpbnQ2NF90KSwgdG1wKTsKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQodG1wKTsKKyAgICB9CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJikgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hh
YmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2hB
bGwsIGRhdGEpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0CitU
bXAgQWlySVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kIGtpbmQsIENvbnRyb2xU
eXBlJiBkYXRhLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAgbV9jdXJyZW50QmxvY2sgPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICBtX3Jvb3RCbG9ja3MuYXBwZW5kKG1fY3VycmVudEJsb2Nr
KTsKKworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkpIHsKKyAgICAgICAgaWYgKGtp
bmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCkKKyAgICAgICAgICAgIGRhdGEuY29udmVydFRyeVRvQ2F0
Y2goKyttX2NhbGxTaXRlSW5kZXgsIGc2NCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgZzY0KCkpOworICAg
IH0KKyAgICAvLyBXZSBjb252ZXJ0IGZyb20gInRyeSIgdG8gImNhdGNoIiBDb250cm9sVHlwZSBh
Ym92ZS4gVGhpcyBkb2Vzbid0CisgICAgLy8gaGFwcGVuIGlmIENvbnRyb2xUeXBlIGlzIGFscmVh
ZHkgYSAiY2F0Y2giLiBUaGlzIGNhbiBoYXBwZW4gd2hlbgorICAgIC8vIHdlIGhhdmUgbXVsdGlw
bGUgY2F0Y2hlcyBsaWtlICJ0cnkge30gY2F0Y2goQSl7fSBjYXRjaChCKXt9Li4uQ2F0Y2hBbGwo
RSl7fSIuCisgICAgLy8gV2UganVzdCBjb252ZXJ0IHRoZSBmaXJzdCBDb250cm9sVHlwZSB0byBh
IGNhdGNoLCB0aGVuIHRoZSBvdGhlcnMgd2lsbAorICAgIC8vIHVzZSBpdHMgZmllbGRzLgorICAg
IEFTU0VSVChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSk7CisKKyAgICBIYW5kbGVyVHlw
ZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpD
YXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFw
cGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1f
dHJ5Q2F0Y2hEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7CisKKyAgICByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5
LCBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsKKworICAgIHVuc2lnbmVkIGluZGV4
SW5CdWZmZXIgPSAwOworICAgIGF1dG8gbG9hZEZyb21TY3JhdGNoQnVmZmVyID0gWyZdIChUeXBl
ZFRtcCByZXN1bHQpIHsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZih1aW50NjRfdCkg
KiBpbmRleEluQnVmZmVyOworICAgICAgICArK2luZGV4SW5CdWZmZXI7CisgICAgICAgIFRtcCBi
dWZmZXJQdHIgPSBUbXAoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgZW1pdExvYWQo
YnVmZmVyUHRyLCBvZmZzZXQsIHJlc3VsdCk7CisgICAgfTsKKworICAgIGZvciAoYXV0byYgbG9j
YWwgOiBtX2xvY2FscykKKyAgICAgICAgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGxvY2FsKTsKKwor
ICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJz
ZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0
byYgY29udHJvbERhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5j
b250cm9sRGF0YTsKKyAgICAgICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgICAgIFR5cGVkVG1wIHRtcCA9IGV4cHJlc3Npb25TdGFja1tpXS52YWx1ZSgp
OworICAgICAgICAgICAgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHRtcCk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gV2Ugc2V0IG91ciBjdXJyZW50IENvbnRyb2xFbnRyeSdzIGV4Y2VwdGlvbiBiZWxv
dyBhZnRlciB0aGUgcGF0Y2hwb2ludC4KKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNh
dGNoKGNvbnRyb2xEYXRhKSAmJiAmZGF0YSAhPSAmY29udHJvbERhdGEpCisgICAgICAgICAgICBs
b2FkRnJvbVNjcmF0Y2hCdWZmZXIoY29udHJvbERhdGEuZXhjZXB0aW9uKCkpOworICAgIH0KKwor
ICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gYWRkUGF0Y2hwb2ludChtX3Byb2MuYWRk
VHVwbGUoeyBCMzo6cG9pbnRlclR5cGUoKSwgQjM6OnBvaW50ZXJUeXBlKCkgfSkpOworICAgIHBh
dGNoLT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgIHBhdGNoLT5jbG9iYmVyKFJl
Z2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgUmVnaXN0ZXJTZXQgY2xv
YmJlckxhdGUgPSBSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKTsKKyAg
ICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBwYXRjaC0+Y2xv
YmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHBhdGNoLT5yZXN1bHRDb25zdHJhaW50cy5hcHBl
bmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHBhdGNoLT5y
ZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIpKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0
Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpKTsK
KyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBUbXAgZXhjZXB0aW9uID0gVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKyAgICBUbXAgYnVmZmVyID0gVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSMik7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBWZWN0
b3I8VG1wPiB7IGV4Y2VwdGlvbiwgYnVmZmVyIH0sIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgMT4g
eyBpbnN0YW5jZVZhbHVlKCkgfSk7CisgICAgYXBwZW5kKE1vdmUsIGV4Y2VwdGlvbiwgZGF0YS5l
eGNlcHRpb24oKSk7CisKKyAgICByZXR1cm4gYnVmZmVyOwogfQogCi1hdXRvIEFpcklSR2VuZXJh
dG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRy
b2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gYWRkRGVsZWdhdGVU
b1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYg
ZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuc2lnbmVkIHRhcmdldERlcHRoID0gMDsK
KyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5KHRhcmdldCkpCisgICAgICAgIHRhcmdldERlcHRo
ID0gdGFyZ2V0LnRyeURlcHRoKCk7CisKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7
IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgZGF0YS50cnlTdGFydCgpLCArK21fY2FsbFNpdGVJbmRl
eCwgMCwgbV90cnlDYXRjaERlcHRoLCB0YXJnZXREZXB0aCB9KTsKICAgICByZXR1cm4geyB9Owog
fQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRl
eCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aCA9IG1fcHJvYy5hZGQ8UGF0Y2hwb2ludFZhbHVlPihCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAg
IHBhdGNoLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBwYXRjaC0+YXBwZW5kKGluc3Rh
bmNlVmFsdWUoKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBw
YXRjaC0+YXBwZW5kKGZyYW1lUG9pbnRlcigpLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytp
KQorICAgICAgICBwYXRjaC0+YXBwZW5kKGdldChhcmdzW2ldKSwgVmFsdWVSZXA6OnN0YWNrQXJn
dW1lbnQoaSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICBwYXRjaC0+Y2xvYmJlcihS
ZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMo
bV9jdXJyZW50QmxvY2ssIHBhdGNoKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBl
eGNlcHRpb25JbmRleCwgaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOworICAgICAgICBoYW5kbGUu
Z2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEluc3RhbmNlOjpvZmZzZXRP
Zk93bmVyKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwcmVjaXNl
QWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8s
IHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpo
YWxmQWxpZ25tZW50KSk7CisgICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6
Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2Ny
YXRjaCk7CisgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOworCisgICAg
ICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlv
bjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxs
b2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7CisKKyAgICAgICAgICAgIGxvYWRlZENh
c2UubGluaygmaml0KTsKKyAgICAgICAgfQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3JhdGNoKTsKKworICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4Y2VwdGlvbkluZGV4KSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5m
YXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsK
KyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uV2FzbVRocm93KSk7CisgICAgICAgIH0pOworICAgIH0pOworICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmQocGF0Y2gpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmKSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVk
LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2ggPSBtX3Byb2MuYWRkPFBhdGNocG9pbnRWYWx1ZT4oQjM6OlZvaWQsIG9yaWdp
bigpKTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNG
b3JKU0NhbGwoKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworICAgIHBh
dGNoLT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpOworICAgIHBhdGNoLT5hcHBlbmQoZnJhbWVQb2ludGVyKCksIFZhbHVlUmVwOjpy
ZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgcGF0Y2gtPmFwcGVuZChnZXQoZGF0YS5l
eGNlcHRpb24oKSksIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIyKSk7CisgICAg
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4
Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNoKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9y
KFt0aGlzLCBoYW5kbGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKKyAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSW5zdGFuY2U6Om9m
ZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHBy
ZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRp
b246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBNYXJrZWRC
bG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkp
LCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisK
KyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFByZWNpc2VBbGxv
Y2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNp
c2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAgICAgICAgICAgbG9h
ZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOworCisgICAgICAgIGhh
bmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CisgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKQEAg
LTMyMDksNyArMzQ0NSw4IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFi
bGUKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7CiAgICAgICAg
IGFwcGVuZChkYXRhLnNwZWNpYWwsIEp1bXApOwogICAgICAgICBkYXRhLnNwZWNpYWwtPnNldFN1
Y2Nlc3NvcnMobV9jdXJyZW50QmxvY2spOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKGRhdGEuYmxv
Y2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnkgfHwgZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OkNhdGNoKQorICAgICAgICAtLW1fdHJ5Q2F0Y2hEZXB0aDsKIAogICAgIGlmIChkYXRhLmJs
b2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkgewogICAgICAgICBtX291dGVyTG9vcHMucmVt
b3ZlTGFzdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjU3LDYg
KzI2NTcsMTAgQEAgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwoQ2F0YwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoQWxsKCsrbV9jYWxs
U2l0ZUluZGV4LCBtX3Byb2MuYWRkVmFyaWFibGUocG9pbnRlclR5cGUoKSkpOwogICAgIH0KKyAg
ICAvLyBXZSBjb252ZXJ0IGZyb20gInRyeSIgdG8gImNhdGNoIiBDb250cm9sVHlwZSBhYm92ZS4g
VGhpcyBkb2Vzbid0CisgICAgLy8gaGFwcGVuIGlmIENvbnRyb2xUeXBlIGlzIGFscmVhZHkgYSAi
Y2F0Y2giLiBUaGlzIGNhbiBoYXBwZW4gd2hlbgorICAgIC8vIHdlIGhhdmUgbXVsdGlwbGUgY2F0
Y2hlcyBsaWtlICJ0cnkge30gY2F0Y2goQSl7fSBjYXRjaChCKXt9Li4uQ2F0Y2hBbGwoRSl7fSIK
KyAgICBBU1NFUlQoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpOwogCiAgICAgSGFuZGxl
clR5cGUgaGFuZGxlclR5cGUgPSBraW5kID09IENhdGNoS2luZDo6Q2F0Y2ggPyBIYW5kbGVyVHlw
ZTo6Q2F0Y2ggOiBIYW5kbGVyVHlwZTo6Q2F0Y2hBbGw7CiAgICAgbV9leGNlcHRpb25IYW5kbGVy
cy5hcHBlbmQoeyBoYW5kbGVyVHlwZSwgZGF0YS50cnlTdGFydCgpLCBkYXRhLnRyeUVuZCgpLCAw
LCBtX3RyeUNhdGNoRGVwdGgsIGV4Y2VwdGlvbkluZGV4IH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448453</attachid>
            <date>2022-01-05 16:39:28 -0800</date>
            <delta_ts>2022-01-05 18:18:14 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>21046</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MiwxNCArMTQyLDI1
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOwogICAgICAgICB9
CiAKKyAgICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJl
IHJlc3VsdCwgUmVzdWx0TGlzdCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9j
ayogY29udGludWF0aW9uLCB1bnNpZ25lZCB0cnlTdGFydCwgdW5zaWduZWQgdHJ5RGVwdGgpCisg
ICAgICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKKyAgICAgICAgICAgICwgY29udGlu
dWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgICwgc3BlY2lhbChudWxscHRyKQorICAg
ICAgICAgICAgLCByZXN1bHRzKHJlc3VsdFRtcHMpCisgICAgICAgICAgICAsIHJldHVyblR5cGUo
c2lnbmF0dXJlKQorICAgICAgICAgICAgLCBtX3RyeVN0YXJ0KHRyeVN0YXJ0KQorICAgICAgICAg
ICAgLCBtX3RyeUNhdGNoRGVwdGgodHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgfQorCiAg
ICAgICAgIENvbnRyb2xEYXRhKCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJv
bC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlz
VHJ5KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlw
ZSgpID09IEJsb2NrVHlwZTo6VHJ5OyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29u
c3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0
IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJs
b2NrVHlwZTo6Q2F0Y2g7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250
cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gaXNBbnlDYXRjaChjb250cm9sKSAmJiBjb250cm9s
LmNhdGNoS2luZCgpID09IENhdGNoS2luZDo6Q2F0Y2g7IH0KICAgICAgICAgc3RhdGljIGJvb2wg
aXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5i
bG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9CiAgICAgICAgIHN0YXRpYyBib29s
IGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9j
ayhjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUo
KSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9CkBAIC0yMjEsNiArMjMyLDU0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9CiAK
KyAgICAgICAgdm9pZCBjb252ZXJ0VHJ5VG9DYXRjaCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUlu
ZGV4LCBUeXBlZFRtcCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChi
bG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tU
eXBlID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hL
aW5kOjpDYXRjaDsKKyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsK
KyAgICAgICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBjb252ZXJ0VHJ5VG9DYXRjaEFsbCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUluZGV4
LCBUeXBlZFRtcCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tUeXBl
ID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5k
OjpDYXRjaEFsbDsKKyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsK
KyAgICAgICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBl
ID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5U3RhcnQ7Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsK
KyAgICAgICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2ln
bmVkIHRyeURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRy
b2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9j
a1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeUNhdGNoRGVwdGg7CisgICAg
ICAgIH0KKworICAgICAgICBDYXRjaEtpbmQgY2F0Y2hLaW5kKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7
CisgICAgICAgICAgICByZXR1cm4gbV9jYXRjaEtpbmQ7CisgICAgICAgIH0KKworICAgICAgICBU
eXBlZFRtcCBleGNlcHRpb24oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
Y29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVy
biBtX2V4Y2VwdGlvbjsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIEFpcklSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUgY29udHJvbEJsb2NrVHlw
ZTsKQEAgLTIyOCw2ICsyODcsMTEgQEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBzcGVj
aWFsOwogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJl
IHJldHVyblR5cGU7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5U3RhcnQ7CisgICAgICAgIHVuc2ln
bmVkIG1fdHJ5RW5kOworICAgICAgICB1bnNpZ25lZCBtX3RyeUNhdGNoRGVwdGg7CisgICAgICAg
IENhdGNoS2luZCBtX2NhdGNoS2luZDsKKyAgICAgICAgVHlwZWRUbXAgbV9leGNlcHRpb247CiAg
ICAgfTsKIAogICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CkBAIC0zNjEsNiAr
NDI1LDkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQog
ICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KIAorICAgIFRtcCBlbWl0Q2F0Y2hJ
bXBsKENhdGNoS2luZCwgQ29udHJvbFR5cGUmLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCA9IDAp
OworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNl
cHRpb25zKEJhc2ljQmxvY2sqLCBQYXRjaHBvaW50VmFsdWUqKTsKKwogICAgIGNvbnN0IEJhZzxC
Mzo6UGF0Y2hwb2ludFZhbHVlKj4mIHBhdGNocG9pbnRzKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3BhdGNocG9pbnRzOwpAQCAtNDE3LDE2ICs0ODQsNiBAQCBwcml2YXRlOgogCiAg
ICAgVG1wIG5ld1RtcChCMzo6QmFuayBiYW5rKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChiYW5r
KSB7Ci0gICAgICAgIGNhc2UgQjM6OkdQOgotICAgICAgICAgICAgaWYgKG1fZnJlZUdQcy5zaXpl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZnJlZUdQcy50YWtlTGFzdCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQjM6OkZQOgotICAgICAgICAgICAgaWYgKG1fZnJl
ZUZQcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZnJlZUZQcy50YWtlTGFzdCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fY29kZS5u
ZXdUbXAoYmFuayk7CiAgICAgfQogCkBAIC00OTcsNyArNTU0LDcgQEAgcHJpdmF0ZToKICAgICB9
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VG1wVHlwZSwgc2l6ZV90IGlubGluZVNp
emU+Ci0gICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiAg
cmVzdWx0cywgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCisgICAg
dm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiByZXN1bHRzLCBW
ZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKICAgICB7CiAgICAgICAg
IGlmICghbV9wYXRjaHBvaW50U3BlY2lhbCkKICAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNp
YWwgPSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lh
bChtYWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOwpAQCAtNjg5LDYgKzc0Niwy
MyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBlbWl0TG9hZChPcGNv
ZGUgb3AsIEIzOjpUeXBlIHR5cGUsIFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBUbXAgcmVzdWx0
KQorICAgIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6Ondp
ZHRoRm9yVHlwZSh0eXBlKSkpCisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcihiYXNl
LCBvZmZzZXQpLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gdGVt
cDIgPSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQp
LCB0ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCBiYXNlLCB0ZW1wMik7
CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcih0ZW1wMiksIHJlc3VsdCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0
LCBUeXBlZFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBlbWl0TG9hZChtb3ZlT3BGb3JWYWx1
ZVR5cGUocmVzdWx0LnR5cGUoKSksIHRvQjNUeXBlKHJlc3VsdC50eXBlKCkpLCBiYXNlLCBvZmZz
ZXQsIHJlc3VsdC50bXAoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0VGhyb3dFeGNlcHRpb24o
Q0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKICAgICB2b2lkIGVtaXRFbnRyeVRpZXJV
cENoZWNrKCk7CkBAIC03NTUsOSArODI5LDYgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV93YXNt
Q29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIGJvb2wgbV9tYWtlc0Nh
bGxzIHsgZmFsc2UgfTsKIAotICAgIFZlY3RvcjxUbXAsIDg+IG1fZnJlZUdQczsKLSAgICBWZWN0
b3I8VG1wLCA4PiBtX2ZyZWVGUHM7Ci0KICAgICBIYXNoTWFwPEJsb2NrU2lnbmF0dXJlLCBCMzo6
VHlwZT4gbV90dXBsZU1hcDsKICAgICAvLyBUaGlzIGlzIG9ubHkgZmlsbGVkIGlmIHdlIGFyZSBk
dW1waW5nIElSLgogICAgIEJhZzxCMzo6UGF0Y2hwb2ludFZhbHVlKj4gbV9wYXRjaHBvaW50czsK
QEAgLTc3NCw2ICs4NDUsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1
bmN0aW9uczsKIAogICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCogbV9wYXRjaHBvaW50U3BlY2lh
bCB7IG51bGxwdHIgfTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fdHJ5Q2F0Y2hEZXB0aCB7
IDAgfTsgLy8gT09QUzogaW5jcmVtZW50IGV2ZXJ5d2hlcmUKKyAgICBDaGVja2VkPHVuc2lnbmVk
PiBtX2NhbGxTaXRlSW5kZXggeyAwIH07IC8vIE9PUFM6IGluY3JlbWVudCBldmVyeXdoZXJlCisg
ICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9Owog
CiAvLyBNZW1vcnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQg
b2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgpA
QCAtMTQyOCw2ICsxNTAzLDggQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQz
Ml90IAogICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXpl
b2YoUmVnaXN0ZXIpKTsKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5kaW5nTW9kZSkgewogICAgIGNh
c2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpFbWJlZGRlZEluSW5zdGFu
Y2U6CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy8gZW1pdExvYWQobW92ZU9wRm9yVmFsdWVU
eXBlKHR5cGUpLCB0b0IzVHlwZSh0eXBlKSwgdGVtcCwgb2Zmc2V0LCByZXN1bHQpOwogICAgICAg
ICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHRvQjNU
eXBlKHR5cGUpKSkpCiAgICAgICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUp
LCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgZWxzZSB7CkBAIC0x
NDM5LDYgKzE1MTYsOCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3Qg
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRp
bmdNb2RlOjpQb3J0YWJsZToKICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdh
c206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKKyAgICAgICAgLy8g
T09QUworICAgICAgICAvLyBlbWl0TG9hZChNb3ZlLCBCMzo6SW50NjQsIHRlbXAsIG9mZnNldCwg
dGVtcCk7CiAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjpXaWR0
aDY0KSkKICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwg
dGVtcCk7CiAgICAgICAgIGVsc2UgewpAQCAtMzAxMiw1NyArMzA5MSwyMjMgQEAgYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibAogICAgIHJldHVybiB7IH07CiB9CiAKLS8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRpb25zIGluIHRoZSBBaXIgZ2VuZXJh
dG9yCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjExCi1h
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiwgQ29udHJv
bFR5cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29u
dHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Cisg
ICAgKyttX3RyeUNhdGNoRGVwdGg7CisKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3Rh
Y2ssIG5ld1N0YWNrKTsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0
dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6VHJ5LCBjb250aW51
YXRpb24sICsrbV9jYWxsU2l0ZUluZGV4LCBtX3RyeUNhdGNoRGVwdGgpOwogICAgIHJldHVybiB7
IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkLCBjb25zdCBT
aWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29u
dHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdHMpOworICAgIGFw
cGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRp
bnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRl
eCwgc2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9s
VHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbChTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSkgLT4g
UGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEu
cmVzdWx0cyk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNj
ZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4gYWRkQ2F0Y2hBbGxUb1VucmVh
Y2hhYmxlKGRhdGEpOwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFj
ayYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIFRtcCBidWZmZXIgPSBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2gsIGRhdGEsIGV4
Y2VwdGlvbkluZGV4KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1
bWVudChpKTsKKyAgICAgICAgVHlwZWRUbXAgdG1wID0gdG1wRm9yVHlwZSh0eXBlKTsKKyAgICAg
ICAgZW1pdExvYWQoYnVmZmVyLCBpICogc2l6ZW9mKHVpbnQ2NF90KSwgdG1wKTsKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQodG1wKTsKKyAgICB9CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJikgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hh
YmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2hB
bGwsIGRhdGEpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0CitU
bXAgQWlySVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kIGtpbmQsIENvbnRyb2xU
eXBlJiBkYXRhLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAgbV9jdXJyZW50QmxvY2sgPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICBtX3Jvb3RCbG9ja3MuYXBwZW5kKG1fY3VycmVudEJsb2Nr
KTsKKworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkpIHsKKyAgICAgICAgaWYgKGtp
bmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCkKKyAgICAgICAgICAgIGRhdGEuY29udmVydFRyeVRvQ2F0
Y2goKyttX2NhbGxTaXRlSW5kZXgsIGc2NCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgZzY0KCkpOworICAg
IH0KKyAgICAvLyBXZSBjb252ZXJ0IGZyb20gInRyeSIgdG8gImNhdGNoIiBDb250cm9sVHlwZSBh
Ym92ZS4gVGhpcyBkb2Vzbid0CisgICAgLy8gaGFwcGVuIGlmIENvbnRyb2xUeXBlIGlzIGFscmVh
ZHkgYSAiY2F0Y2giLiBUaGlzIGNhbiBoYXBwZW4gd2hlbgorICAgIC8vIHdlIGhhdmUgbXVsdGlw
bGUgY2F0Y2hlcyBsaWtlICJ0cnkge30gY2F0Y2goQSl7fSBjYXRjaChCKXt9Li4uQ2F0Y2hBbGwo
RSl7fSIuCisgICAgLy8gV2UganVzdCBjb252ZXJ0IHRoZSBmaXJzdCBDb250cm9sVHlwZSB0byBh
IGNhdGNoLCB0aGVuIHRoZSBvdGhlcnMgd2lsbAorICAgIC8vIHVzZSBpdHMgZmllbGRzLgorICAg
IEFTU0VSVChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSk7CisKKyAgICBIYW5kbGVyVHlw
ZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpD
YXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFw
cGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1f
dHJ5Q2F0Y2hEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7CisKKyAgICByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5
LCBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsKKworICAgIHVuc2lnbmVkIGluZGV4
SW5CdWZmZXIgPSAwOworICAgIGF1dG8gbG9hZEZyb21TY3JhdGNoQnVmZmVyID0gWyZdIChUeXBl
ZFRtcCByZXN1bHQpIHsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZih1aW50NjRfdCkg
KiBpbmRleEluQnVmZmVyOworICAgICAgICArK2luZGV4SW5CdWZmZXI7CisgICAgICAgIFRtcCBi
dWZmZXJQdHIgPSBUbXAoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgZW1pdExvYWQo
YnVmZmVyUHRyLCBvZmZzZXQsIHJlc3VsdCk7CisgICAgfTsKKworICAgIGZvciAoYXV0byYgbG9j
YWwgOiBtX2xvY2FscykKKyAgICAgICAgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGxvY2FsKTsKKwor
ICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJz
ZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0
byYgY29udHJvbERhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5j
b250cm9sRGF0YTsKKyAgICAgICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgICAgIFR5cGVkVG1wIHRtcCA9IGV4cHJlc3Npb25TdGFja1tpXS52YWx1ZSgp
OworICAgICAgICAgICAgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHRtcCk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gV2Ugc2V0IG91ciBjdXJyZW50IENvbnRyb2xFbnRyeSdzIGV4Y2VwdGlvbiBiZWxv
dyBhZnRlciB0aGUgcGF0Y2hwb2ludC4KKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNh
dGNoKGNvbnRyb2xEYXRhKSAmJiAmZGF0YSAhPSAmY29udHJvbERhdGEpCisgICAgICAgICAgICBs
b2FkRnJvbVNjcmF0Y2hCdWZmZXIoY29udHJvbERhdGEuZXhjZXB0aW9uKCkpOworICAgIH0KKwor
ICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gYWRkUGF0Y2hwb2ludChtX3Byb2MuYWRk
VHVwbGUoeyBCMzo6cG9pbnRlclR5cGUoKSwgQjM6OnBvaW50ZXJUeXBlKCkgfSkpOworICAgIHBh
dGNoLT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgIHBhdGNoLT5jbG9iYmVyKFJl
Z2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgUmVnaXN0ZXJTZXQgY2xv
YmJlckxhdGUgPSBSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKTsKKyAg
ICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBwYXRjaC0+Y2xv
YmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHBhdGNoLT5yZXN1bHRDb25zdHJhaW50cy5hcHBl
bmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHBhdGNoLT5y
ZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIpKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0
Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpKTsK
KyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBUbXAgZXhjZXB0aW9uID0gVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKyAgICBUbXAgYnVmZmVyID0gVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSMik7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBWZWN0
b3I8VG1wPiB7IGV4Y2VwdGlvbiwgYnVmZmVyIH0sIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgMT4g
eyBpbnN0YW5jZVZhbHVlKCkgfSk7CisgICAgYXBwZW5kKE1vdmUsIGV4Y2VwdGlvbiwgZGF0YS5l
eGNlcHRpb24oKSk7CisKKyAgICByZXR1cm4gYnVmZmVyOwogfQogCi1hdXRvIEFpcklSR2VuZXJh
dG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRy
b2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gYWRkRGVsZWdhdGVU
b1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYg
ZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuc2lnbmVkIHRhcmdldERlcHRoID0gMDsK
KyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5KHRhcmdldCkpCisgICAgICAgIHRhcmdldERlcHRo
ID0gdGFyZ2V0LnRyeURlcHRoKCk7CisKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7
IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgZGF0YS50cnlTdGFydCgpLCArK21fY2FsbFNpdGVJbmRl
eCwgMCwgbV90cnlDYXRjaERlcHRoLCB0YXJnZXREZXB0aCB9KTsKICAgICByZXR1cm4geyB9Owog
fQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRl
eCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSog
cGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJt
aW5hbCA9IHRydWU7CisKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAg
ICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChD
b25zdHJhaW5lZFRtcChUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBWYWx1ZVJlcDo6
cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5l
ZFRtcChhcmdzW2ldLCBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkpKTsKKworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJl
Z2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRs
ZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0Y2gp
OworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGV4Y2VwdGlvbkluZGV4LCBoYW5kbGVd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgIC8vIE9PUFM6IHNoYXJlIGNvZGUgd2l0aCBCMyBJUiBnZW5lcmF0
b3IgaGVyZS4KKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZl
ZE5vbkFyZ3VtZW50R1BSMDsKKyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0
aGlzKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJy
YW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAg
ICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6
OmJsb2NrTWFzayksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtl
ZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0
byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRp
b25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsg
V2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSks
IHNjcmF0Y2gpOworCisgICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAg
IH0KKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoc2NyYXRjaCk7CisKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihleGNlcHRpb25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIzKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21U
aHJvdykpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3Vy
cmVudEJsb2NrLCBwYXRjaCwgVG1wKCksIFdURk1vdmUocGF0Y2hBcmdzKSk7CisKICAgICByZXR1
cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBD
b250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJl
dGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Cisg
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsK
KyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0Nh
bGwoKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworCisgICAgVmVjdG9y
PENvbnN0cmFpbmVkVG1wLCAzPiBwYXRjaEFyZ3M7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25z
dHJhaW5lZFRtcChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoVG1wKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEpKSk7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcChkYXRhLmV4Y2VwdGlv
bigpLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMikpKTsKKworICAgIFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRp
b25zKG1fY3VycmVudEJsb2NrLCBwYXRjaCk7CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhp
cywgaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjA7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEluc3RhbmNlOjpvZmZzZXRP
Zk93bmVyKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwcmVjaXNl
QWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8s
IHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpo
YWxmQWxpZ25tZW50KSk7CisgICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6
Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2Ny
YXRjaCk7CisgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOworCisgICAg
ICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlv
bjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxs
b2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7CisKKyAgICAgICAgICAgIGxvYWRlZENh
c2UubGluaygmaml0KTsKKyAgICAgICAgfQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3JhdGNoKTsKKworICAgICAgICBoYW5kbGUu
Z2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
Y2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uV2FzbVJldGhyb3cpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBlbWl0
UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFRtcCgpLCBXVEZNb3ZlKHBhdGNoQXJn
cykpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMzIwOSw3ICszNDU0LDggQEAgYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZQogICAgIGlmIChkYXRhLmJsb2NrVHlw
ZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKICAgICAgICAgYXBwZW5kKGRhdGEuc3BlY2lhbCwgSnVt
cCk7CiAgICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29ycyhtX2N1cnJlbnRCbG9jayk7
Ci0gICAgfQorICAgIH0gZWxzZSBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRy
eSB8fCBkYXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2gpCisgICAgICAgIC0tbV90
cnlDYXRjaERlcHRoOwogCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpM
b29wKSB7CiAgICAgICAgIG1fb3V0ZXJMb29wcy5yZW1vdmVMYXN0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NTcsNiArMjY1NywxMCBAQCBWYWx1ZSogQjNJUkdl
bmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRh
dGEuY29udmVydFRyeVRvQ2F0Y2hBbGwoKyttX2NhbGxTaXRlSW5kZXgsIG1fcHJvYy5hZGRWYXJp
YWJsZShwb2ludGVyVHlwZSgpKSk7CiAgICAgfQorICAgIC8vIFdlIGNvbnZlcnQgZnJvbSAidHJ5
IiB0byAiY2F0Y2giIENvbnRyb2xUeXBlIGFib3ZlLiBUaGlzIGRvZXNuJ3QKKyAgICAvLyBoYXBw
ZW4gaWYgQ29udHJvbFR5cGUgaXMgYWxyZWFkeSBhICJjYXRjaCIuIFRoaXMgY2FuIGhhcHBlbiB3
aGVuCisgICAgLy8gd2UgaGF2ZSBtdWx0aXBsZSBjYXRjaGVzIGxpa2UgInRyeSB7fSBjYXRjaChB
KXt9IGNhdGNoKEIpe30uLi5DYXRjaEFsbChFKXt9IgorICAgIEFTU0VSVChDb250cm9sVHlwZTo6
aXNBbnlDYXRjaChkYXRhKSk7CiAKICAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9IGtpbmQg
PT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpD
YXRjaEFsbDsKICAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJUeXBlLCBk
YXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5Q2F0Y2hEZXB0aCwgZXhjZXB0
aW9uSW5kZXggfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448461</attachid>
            <date>2022-01-05 18:18:14 -0800</date>
            <delta_ts>2022-01-05 19:03:45 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>32166</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNiw2ICsxMjYsMTUg
QEAgcHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIH07CiAKK3N0cnVjdCBQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlIHsKKyAgICB2b2lkIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCBBaXJJUkdlbmVyYXRvciopIGNvbnN0OworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2ludmFsaWRDYWxsU2l0ZUluZGV4ID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworCisgICAgdW5zaWduZWQgbV9jYWxs
U2l0ZUluZGV4IHsgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCB9OworICAgIHVuc2lnbmVkIG1fb2Zm
c2V0OworfTsKKwogY2xhc3MgQWlySVJHZW5lcmF0b3IgewogcHVibGljOgogICAgIHVzaW5nIEV4
cHJlc3Npb25UeXBlID0gVHlwZWRUbXA7CkBAIC0xNDIsMTQgKzE1MSwyNSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKICAgICAgICAgfQogCisgICAgICAgIENv
bnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBCbG9ja1NpZ25hdHVyZSByZXN1bHQsIFJlc3Vs
dExpc3QgcmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
biwgdW5zaWduZWQgdHJ5U3RhcnQsIHVuc2lnbmVkIHRyeURlcHRoKQorICAgICAgICAgICAgOiBj
b250cm9sQmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51
YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwobnVsbHB0cikKKyAgICAgICAgICAgICwgcmVz
dWx0cyhyZXN1bHRUbXBzKQorICAgICAgICAgICAgLCByZXR1cm5UeXBlKHNpZ25hdHVyZSkKKyAg
ICAgICAgICAgICwgbV90cnlTdGFydCh0cnlTdGFydCkKKyAgICAgICAgICAgICwgbV90cnlDYXRj
aERlcHRoKHRyeURlcHRoKQorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAgICBDb250cm9s
RGF0YSgpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYo
Y29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkg
PT0gQmxvY2tUeXBlOjpJZjsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250
cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OlRyeTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRh
JiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0
Y2g7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYg
Y29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNo
OyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRy
b2wpIHsgcmV0dXJuIGlzQW55Q2F0Y2goY29udHJvbCkgJiYgY29udHJvbC5jYXRjaEtpbmQoKSA9
PSBDYXRjaEtpbmQ6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29u
c3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpUb3BMZXZlbDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3Qg
Q29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpMb29wOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29udHJv
bERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpCbG9jazsgfQpAQCAtMjIxLDYgKzI0MSw1NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gcmV0dXJuVHlwZS0+cmV0dXJuVHlwZShpKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQg
Y29udmVydFRyeVRvQ2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAg
ZXhjZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlw
ZTo6Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7Cisg
ICAgICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBt
X2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVy
dFRyeVRvQ2F0Y2hBbGwodW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhj
ZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6
Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2hBbGw7Cisg
ICAgICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBt
X2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRy
eVN0YXJ0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9j
a1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6
OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeVN0YXJ0OworICAgICAgICB9CisKKyAg
ICAgICAgdW5zaWduZWQgdHJ5RW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICBy
ZXR1cm4gbV90cnlFbmQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlEZXB0aCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09
IEJsb2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7
CisgICAgICAgICAgICByZXR1cm4gbV90cnlDYXRjaERlcHRoOworICAgICAgICB9CisKKyAgICAg
ICAgQ2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAg
cmV0dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAgICAgVHlwZWRUbXAgZXhjZXB0
aW9uKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5
cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGNlcHRpb247
CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdl
bmVyYXRvcjsKICAgICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CkBAIC0yMjgsNiAr
Mjk2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKICAgICAgICAg
UmVzdWx0TGlzdCByZXN1bHRzOwogICAgICAgICBCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlOwor
ICAgICAgICB1bnNpZ25lZCBtX3RyeVN0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX3RyeUVuZDsK
KyAgICAgICAgdW5zaWduZWQgbV90cnlDYXRjaERlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9j
YXRjaEtpbmQ7CisgICAgICAgIFR5cGVkVG1wIG1fZXhjZXB0aW9uOwogICAgIH07CiAKICAgICB1
c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwpAQCAtMzQ5LDcgKzQyMiw3IEBAIHB1Ymxp
YzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJl
c3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hh
YmxlKCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0
Q2FsbChUeXBlZFRtcCBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwg
Y29uc3QgU2lnbmF0dXJlJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVz
dWx0TGlzdCYpOwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVSTiBl
bWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJl
c3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxD
b25zdHJhaW5lZFRtcD4mJiBleHRyYUFyZ3MgPSB7IH0pOworICAgIHN0ZDo6cGFpcjxCMzo6UGF0
Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gV0FSTl9VTlVTRURfUkVU
VVJOIGVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgY29uc3QgU2lnbmF0dXJlJiwgY29u
c3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVj
dG9yPENvbnN0cmFpbmVkVG1wPiBleHRyYUFyZ3MgPSB7IH0pOwogCiAgICAgUGFydGlhbFJlc3Vs
dCBhZGRTaGlmdChUeXBlLCBCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBF
eHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlh
bFJlc3VsdCBhZGRJbnRlZ2VyU3ViKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGhz
LCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpAQCAtMzYxLDYg
KzQzNCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMoKSB7IH0K
ICAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyB9CiAKKyAgICBUbXAgZW1pdENhdGNo
SW1wbChDYXRjaEtpbmQsIENvbnRyb2xUeXBlJiwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXggPSAw
KTsKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhj
ZXB0aW9ucyhQYXRjaHBvaW50VmFsdWUqLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiBhcmdzKTsK
KwogICAgIGNvbnN0IEJhZzxCMzo6UGF0Y2hwb2ludFZhbHVlKj4mIHBhdGNocG9pbnRzKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3BhdGNocG9pbnRzOwpAQCAtNDE3LDE2ICs0OTMs
NiBAQCBwcml2YXRlOgogCiAgICAgVG1wIG5ld1RtcChCMzo6QmFuayBiYW5rKQogICAgIHsKLSAg
ICAgICAgc3dpdGNoIChiYW5rKSB7Ci0gICAgICAgIGNhc2UgQjM6OkdQOgotICAgICAgICAgICAg
aWYgKG1fZnJlZUdQcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZnJlZUdQcy50
YWtlTGFzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQjM6OkZQOgotICAg
ICAgICAgICAgaWYgKG1fZnJlZUZQcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1f
ZnJlZUZQcy50YWtlTGFzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG1fY29kZS5uZXdUbXAoYmFuayk7CiAgICAgfQogCkBAIC00OTcsNyArNTYzLDcg
QEAgcHJpdmF0ZToKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VG1wVHlw
ZSwgc2l6ZV90IGlubGluZVNpemU+Ci0gICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2Nr
KiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJl
c3VsdFRtcFR5cGUsIDg+JiAgcmVzdWx0cywgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVT
aXplPiYmIGFyZ3MpCisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Js
b2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5
cGUsIDg+JiByZXN1bHRzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJn
cykKICAgICB7CiAgICAgICAgIGlmICghbV9wYXRjaHBvaW50U3BlY2lhbCkKICAgICAgICAgICAg
IG1fcGF0Y2hwb2ludFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwq
PihtX2NvZGUuYWRkU3BlY2lhbChtYWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkp
OwpAQCAtNjg5LDYgKzc1NSwyMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisgICAg
dm9pZCBlbWl0TG9hZChPcGNvZGUgb3AsIEIzOjpUeXBlIHR5cGUsIFRtcCBiYXNlLCBzaXplX3Qg
b2Zmc2V0LCBUbXAgcmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJG
b3JtKG9mZnNldCwgQjM6OndpZHRoRm9yVHlwZSh0eXBlKSkpCisgICAgICAgICAgICBhcHBlbmQo
b3AsIEFyZzo6YWRkcihiYXNlLCBvZmZzZXQpLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGF1dG8gdGVtcDIgPSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmJpZ0ltbShvZmZzZXQpLCB0ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIHRl
bXAyLCBiYXNlLCB0ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcih0ZW1w
MiksIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKFRtcCBi
YXNlLCBzaXplX3Qgb2Zmc2V0LCBUeXBlZFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBlbWl0
TG9hZChtb3ZlT3BGb3JWYWx1ZVR5cGUocmVzdWx0LnR5cGUoKSksIHRvQjNUeXBlKHJlc3VsdC50
eXBlKCkpLCBiYXNlLCBvZmZzZXQsIHJlc3VsdC50bXAoKSk7CisgICAgfQorCiAgICAgdm9pZCBl
bWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKICAgICB2
b2lkIGVtaXRFbnRyeVRpZXJVcENoZWNrKCk7CkBAIC03NTUsOSArODM4LDYgQEAgcHJpdmF0ZToK
ICAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9Owog
ICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2UgfTsKIAotICAgIFZlY3RvcjxUbXAsIDg+IG1f
ZnJlZUdQczsKLSAgICBWZWN0b3I8VG1wLCA4PiBtX2ZyZWVGUHM7Ci0KICAgICBIYXNoTWFwPEJs
b2NrU2lnbmF0dXJlLCBCMzo6VHlwZT4gbV90dXBsZU1hcDsKICAgICAvLyBUaGlzIGlzIG9ubHkg
ZmlsbGVkIGlmIHdlIGFyZSBkdW1waW5nIElSLgogICAgIEJhZzxCMzo6UGF0Y2hwb2ludFZhbHVl
Kj4gbV9wYXRjaHBvaW50czsKQEAgLTc3NCw2ICs4NTQsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIAogICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCog
bV9wYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQ+
IG1fdHJ5Q2F0Y2hEZXB0aCB7IDAgfTsgLy8gT09QUzogaW5jcmVtZW50IGV2ZXJ5d2hlcmUKKyAg
ICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAwIH07IC8vIE9PUFM6IGluY3Jl
bWVudCBldmVyeXdoZXJlCisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0
aW9uSGFuZGxlcnM7CiB9OwogCiAvLyBNZW1vcnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2
ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJp
dCBvZmZzZXRzIGluIEIzLgpAQCAtMTQyOCw2ICsxNTEyLDggQEAgYXV0byBBaXJJUkdlbmVyYXRv
cjo6Z2V0R2xvYmFsKHVpbnQzMl90IAogICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50
MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5k
aW5nTW9kZSkgewogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2Rl
OjpFbWJlZGRlZEluSW5zdGFuY2U6CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy8gZW1pdExv
YWQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCB0b0IzVHlwZSh0eXBlKSwgdGVtcCwgb2Zmc2V0
LCByZXN1bHQpOwogICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6
d2lkdGhGb3JUeXBlKHRvQjNUeXBlKHR5cGUpKSkpCiAgICAgICAgICAgICBhcHBlbmQobW92ZU9w
Rm9yVmFsdWVUeXBlKHR5cGUpLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgcmVzdWx0KTsKICAg
ICAgICAgZWxzZSB7CkBAIC0xNDM5LDYgKzE1MjUsOCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjpn
ZXRHbG9iYWwodWludDMyX3QgCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFs
SW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZToKICAgICAgICAgQVNTRVJUKGdsb2Jh
bC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRh
YmxlKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvLyBlbWl0TG9hZChNb3ZlLCBCMzo6SW50
NjQsIHRlbXAsIG9mZnNldCwgdGVtcCk7CiAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9y
bShvZmZzZXQsIEIzOjpXaWR0aDY0KSkKICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFk
ZHIodGVtcCwgb2Zmc2V0KSwgdGVtcCk7CiAgICAgICAgIGVsc2UgewpAQCAtMzAxMiw1NyArMzEw
MCwyMjQgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibAogICAgIHJl
dHVybiB7IH07CiB9CiAKLS8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRpb25z
IGluIHRoZSBBaXIgZ2VuZXJhdG9yCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMxMjExCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1
cmUsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBl
bmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CisgICAgKyttX3RyeUNhdGNoRGVwdGg7CisKKyAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25h
dHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0
YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVyZSksIEJsb2Nr
VHlwZTo6VHJ5LCBjb250aW51YXRpb24sICsrbV9jYWxsU2l0ZUluZGV4LCBtX3RyeUNhdGNoRGVw
dGgpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNo
KHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0
TGlzdCYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVu
c2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2sm
IGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiB7IH07CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRh
LnJlc3VsdHMpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3Vj
Y2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNoVG9VbnJlYWNo
YWJsZShleGNlcHRpb25JbmRleCwgc2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKIH0KIAotYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkLCBjb25zdCBT
aWduYXR1cmUmLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFjayYgY3VycmVudFN0YWNrLCBDb250
cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhj
dXJyZW50U3RhY2ssIGRhdGEucmVzdWx0cyk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4g
YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRhdGEpOwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJl
c3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIFRtcCBidWZmZXIgPSBlbWl0Q2F0Y2hJbXBsKENhdGNoS2lu
ZDo6Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlw
ZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgVHlwZWRUbXAgdG1wID0gdG1wRm9y
VHlwZSh0eXBlKTsKKyAgICAgICAgZW1pdExvYWQoYnVmZmVyLCBpICogc2l6ZW9mKHVpbnQ2NF90
KSwgdG1wKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQodG1wKTsKKyAgICB9CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxl
KENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBlbWl0Q2F0Y2hJbXBs
KENhdGNoS2luZDo6Q2F0Y2hBbGwsIGRhdGEpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAt
PiBQYXJ0aWFsUmVzdWx0CitUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwoQ2F0Y2hL
aW5kIGtpbmQsIENvbnRyb2xUeXBlJiBkYXRhLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAg
bV9jdXJyZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBtX3Jvb3RCbG9ja3MuYXBw
ZW5kKG1fY3VycmVudEJsb2NrKTsKKworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkp
IHsKKyAgICAgICAgaWYgKGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCkKKyAgICAgICAgICAgIGRh
dGEuY29udmVydFRyeVRvQ2F0Y2goKyttX2NhbGxTaXRlSW5kZXgsIGc2NCgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJ
bmRleCwgZzY0KCkpOworICAgIH0KKyAgICAvLyBXZSBjb252ZXJ0IGZyb20gInRyeSIgdG8gImNh
dGNoIiBDb250cm9sVHlwZSBhYm92ZS4gVGhpcyBkb2Vzbid0CisgICAgLy8gaGFwcGVuIGlmIENv
bnRyb2xUeXBlIGlzIGFscmVhZHkgYSAiY2F0Y2giLiBUaGlzIGNhbiBoYXBwZW4gd2hlbgorICAg
IC8vIHdlIGhhdmUgbXVsdGlwbGUgY2F0Y2hlcyBsaWtlICJ0cnkge30gY2F0Y2goQSl7fSBjYXRj
aChCKXt9Li4uQ2F0Y2hBbGwoRSl7fSIuCisgICAgLy8gV2UganVzdCBjb252ZXJ0IHRoZSBmaXJz
dCBDb250cm9sVHlwZSB0byBhIGNhdGNoLCB0aGVuIHRoZSBvdGhlcnMgd2lsbAorICAgIC8vIHVz
ZSBpdHMgZmllbGRzLgorICAgIEFTU0VSVChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSk7
CisKKyAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRj
aCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsKKyAgICBtX2V4
Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRh
dGEudHJ5RW5kKCksIDAsIG1fdHJ5Q2F0Y2hEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7CisKKyAg
ICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6
WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsKKwor
ICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOworICAgIGF1dG8gbG9hZEZyb21TY3JhdGNo
QnVmZmVyID0gWyZdIChUeXBlZFRtcCByZXN1bHQpIHsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9
IHNpemVvZih1aW50NjRfdCkgKiBpbmRleEluQnVmZmVyOworICAgICAgICArK2luZGV4SW5CdWZm
ZXI7CisgICAgICAgIFRtcCBidWZmZXJQdHIgPSBUbXAoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgZW1pdExvYWQoYnVmZmVyUHRyLCBvZmZzZXQsIHJlc3VsdCk7CisgICAgfTsKKwor
ICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKKyAgICAgICAgbG9hZEZyb21TY3JhdGNo
QnVmZmVyKGxvY2FsKTsKKworICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29u
dHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5k
ZXgpIHsKKyAgICAgICAgYXV0byYgY29udHJvbERhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNr
KClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAgYXV0byYgZXhwcmVzc2lvblN0
YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNzaW9u
U3RhY2suc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFR5cGVkVG1wIHRtcCA9IGV4cHJlc3Np
b25TdGFja1tpXS52YWx1ZSgpOworICAgICAgICAgICAgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHRt
cCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2Ugc2V0IG91ciBjdXJyZW50IENvbnRyb2xFbnRy
eSdzIGV4Y2VwdGlvbiBiZWxvdyBhZnRlciB0aGUgcGF0Y2hwb2ludC4KKyAgICAgICAgaWYgKENv
bnRyb2xUeXBlOjppc0FueUNhdGNoKGNvbnRyb2xEYXRhKSAmJiAmZGF0YSAhPSAmY29udHJvbERh
dGEpCisgICAgICAgICAgICBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIoY29udHJvbERhdGEuZXhjZXB0
aW9uKCkpOworICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gYWRkUGF0
Y2hwb2ludChtX3Byb2MuYWRkVHVwbGUoeyBCMzo6cG9pbnRlclR5cGUoKSwgQjM6OnBvaW50ZXJU
eXBlKCkgfSkpOworICAgIHBhdGNoLT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAg
IHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Cisg
ICAgUmVnaXN0ZXJTZXQgY2xvYmJlckxhdGUgPSBSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3Rl
cnNGb3JKU0NhbGwoKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHBhdGNoLT5yZXN1
bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworICAgIHBhdGNoLT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJh
dGlvblB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0
aW9uSWZDYXRjaGFibGUpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBUbXAgZXhjZXB0
aW9uID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBUbXAgYnVmZmVyID0gVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50
QmxvY2ssIHBhdGNoLCBWZWN0b3I8VG1wPiB7IGV4Y2VwdGlvbiwgYnVmZmVyIH0sIFZlY3RvcjxD
b25zdHJhaW5lZFRtcCwgMT4geyBpbnN0YW5jZVZhbHVlKCkgfSk7CisgICAgYXBwZW5kKE1vdmUs
IGV4Y2VwdGlvbiwgZGF0YS5leGNlcHRpb24oKSk7CisKKyAgICByZXR1cm4gYnVmZmVyOwogfQog
Ci1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5
cGUmLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgdGFy
Z2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuc2lnbmVk
IHRhcmdldERlcHRoID0gMDsKKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5KHRhcmdldCkpCisg
ICAgICAgIHRhcmdldERlcHRoID0gdGFyZ2V0LnRyeURlcHRoKCk7CisKKyAgICBtX2V4Y2VwdGlv
bkhhbmRsZXJzLmFwcGVuZCh7IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgZGF0YS50cnlTdGFydCgp
LCArK21fY2FsbFNpdGVJbmRleCwgMCwgbV90cnlDYXRjaERlcHRoLCB0YXJnZXREZXB0aCB9KTsK
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNp
Z25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQgZXhj
ZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNrJikgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICBw
YXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0
ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworCisgICAgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRt
cChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkp
OworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoVG1wKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHBh
dGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoYXJnc1tpXSwgVmFsdWVSZXA6OnN0YWNrQXJn
dW1lbnQoaSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSk7CisKKyAgICBQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRj
aCwgcGF0Y2hBcmdzKTsKKworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGV4Y2VwdGlv
bkluZGV4LCBoYW5kbGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIC8vIE9PUFM6IHNoYXJlIGNvZGUgd2l0
aCBCMyBJUiBnZW5lcmF0b3IgaGVyZS4KKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKKyAgICAgICAgaGFuZGxlLmdlbmVyYXRl
KGppdCwgcGFyYW1zLCB0aGlzKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigp
KSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRp
b25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNo
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdu
bWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRP
ZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAg
cHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNl
dE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246
OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmso
JmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGNlcHRpb25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMik7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbldhc21UaHJvdykpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGVtaXRQ
YXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVG1wKCksIFdURk1vdmUocGF0Y2hBcmdz
KSk7CisKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXRo
cm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBv
aW50KEIzOjpWb2lkKTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVS
ZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVl
OworCisgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCAzPiBwYXRjaEFyZ3M7CisgICAgcGF0Y2hB
cmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWlu
ZWRUbXAoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgVmFsdWVSZXA6OnJlZyhHUFJJ
bmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRt
cChkYXRhLmV4Y2VwdGlvbigpLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMikp
KTsKKworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNo
cG9pbnRGb3JFeGNlcHRpb25zKHBhdGNoLCBwYXRjaEFyZ3MpOworICAgIHBhdGNoLT5zZXRHZW5l
cmF0b3IoW3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOworICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBJbnN0YW5j
ZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJz
OjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxs
b2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1h
cmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9m
Vk0oKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAo
KTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lz
ZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0g
UHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAgICAgICAg
ICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisKKyAgICAg
ICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQu
ZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7
CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRocm93KSk7CisgICAgICAgIH0pOworICAgIH0pOwor
CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBUbXAoKSwgV1RGTW92
ZShwYXRjaEFyZ3MpKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTMyMDksNyArMzQ2NCw4
IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUKICAgICBpZiAoZGF0
YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7CiAgICAgICAgIGFwcGVuZChkYXRhLnNw
ZWNpYWwsIEp1bXApOwogICAgICAgICBkYXRhLnNwZWNpYWwtPnNldFN1Y2Nlc3NvcnMobV9jdXJy
ZW50QmxvY2spOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUcnkgfHwgZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoKQorICAg
ICAgICAtLW1fdHJ5Q2F0Y2hEZXB0aDsKIAogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJs
b2NrVHlwZTo6TG9vcCkgewogICAgICAgICBtX291dGVyTG9vcHMucmVtb3ZlTGFzdCgpOwpAQCAt
MzIzMyw3ICszNDg5LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJs
ZQogICAgIHJldHVybiB7IH07CiB9CiAKLUIzOjpQYXRjaHBvaW50VmFsdWUqIEFpcklSR2VuZXJh
dG9yOjplbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlw
ZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgcGF0Y2hBcmdzKQorc3RkOjpw
YWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBBaXJJ
UkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVj
dG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3MpCiB7
CiAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQodG9CM1Jlc3VsdFR5cGUoJnNp
Z25hdHVyZSkpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsK
QEAgLTMyNTgsOCArMzUxNCw5IEBAIEIzOjpQYXRjaHBvaW50VmFsdWUqIEFpcklSR2VuZXJhdG9y
OjplbWkKICAgICAgICAgICAgIHJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6VmFsdWVSZXAo
dmFsdWVMb2NhdGlvbikpOwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9
IFdURk1vdmUocmVzdWx0Q29uc3RyYWludHMpOwogICAgIH0KKyAgICBQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlIGV4Y2VwdGlvbkhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9u
cyhwYXRjaHBvaW50LCBwYXRjaEFyZ3MpOwogICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRj
aHBvaW50LCByZXN1bHRzLCBXVEZNb3ZlKHBhdGNoQXJncykpOwotICAgIHJldHVybiBwYXRjaHBv
aW50OworICAgIHJldHVybiB7IHBhdGNocG9pbnQsIGV4Y2VwdGlvbkhhbmRsZSB9OwogfQogCiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1
bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CkBAIC0zMjk1LDE0ICszNTUyLDE3IEBA
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnUKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNXYXNtQmxvY2ssIGlzRW1iZWRkZXJCbG9jayk7CiAK
ICAgICAgICAgewotICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hw
b2ludChpc1dhc21CbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzKTsKKyAgICAgICAgICAg
IGF1dG8gcGFpciA9IGVtaXRDYWxsUGF0Y2hwb2ludChpc1dhc21CbG9jaywgc2lnbmF0dXJlLCBy
ZXN1bHRzLCBhcmdzKTsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWlyLmZpcnN0
OworICAgICAgICAgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29uZDsKICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3Rl
cnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCiAgICAgICAgICAgICAv
LyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRo
aW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7
CiAKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsK
ICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAg
ICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRl
eCB9KTsKQEAgLTMzMjEsMTMgKzM1ODEsMTcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2Fs
bCh1aW50MzJfdCBmdQogCiAgICAgICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGp1bXBB
cmdzOwogICAgICAgICAgICAganVtcEFyZ3MuYXBwZW5kKHsganVtcERlc3RpbmF0aW9uLCBCMzo6
VmFsdWVSZXA6OlNvbWVSZWdpc3RlciB9KTsKLSAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBlbWl0Q2FsbFBhdGNocG9pbnQoaXNFbWJlZGRlckJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMs
IGFyZ3MsIFdURk1vdmUoanVtcEFyZ3MpKTsKKyAgICAgICAgICAgIGF1dG8gcGFpciA9IGVtaXRD
YWxsUGF0Y2hwb2ludChpc0VtYmVkZGVyQmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncywg
V1RGTW92ZShqdW1wQXJncykpOworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IHBhaXIu
Zmlyc3Q7CisgICAgICAgICAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIuc2Vjb25kOwor
CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQg
cmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgogICAgICAg
ICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRv
IHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0
ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZykpOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAg
ICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS5nZW5lcmF0ZShqaXQsIHBh
cmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9j
KCkucmVzdWx0Q291bnQocGFyYW1zLnZhbHVlKCktPnR5cGUoKSldLmdwcigpLCBXYXNtRW50cnlQ
dHJUYWcpOwogICAgICAgICAgICAgfSk7CiAKQEAgLTMzMzksMTIgKzM2MDMsMTUgQEAgYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdQogICAgICAgICAvLyBUaGUgY2FsbCBj
b3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3Ig
Y291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgogICAgICAgICByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5
LCBjdXJyZW50SW5zdGFuY2UsIGNvbnRpbnVhdGlvbik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
YXV0byogcGF0Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2ln
bmF0dXJlLCByZXN1bHRzLCBhcmdzKTsKKyAgICAgICAgYXV0byBwYWlyID0gZW1pdENhbGxQYXRj
aHBvaW50KG1fY3VycmVudEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MpOworICAgICAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gcGFpci5maXJzdDsKKyAgICAgICAgYXV0byBleGNlcHRpb25I
YW5kbGUgPSBwYWlyLnNlY29uZDsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIHRoZSBz
aXplIHJlZ2lzdGVyIHNpbmNlIHRoZSBMTEludCBhbHdheXMgYm91bmRzIGNoZWNrcwogICAgICAg
ICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCBtX2luZm8ubWVtb3J5Lmlz
U2hhcmVkKCkpCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNl
dCB7IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIg
fSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBw
YXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
dGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJU
YWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMzUyMyw3ICszNzkwLDkgQEAgYXV0byBB
aXJJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChUeQogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQogICAgICAgICByZXN1bHRzLmFw
cGVuZCh0bXBGb3JUeXBlKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKSk7CiAKLSAgICBhdXRvKiBw
YXRjaHBvaW50ID0gZW1pdENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBzaWduYXR1cmUs
IHJlc3VsdHMsIGFyZ3MsIFdURk1vdmUoZXh0cmFBcmdzKSk7CisgICAgYXV0byBwYWlyID0gZW1p
dENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3Ms
IFdURk1vdmUoZXh0cmFBcmdzKSk7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IHBhaXIuZmlyc3Q7
CisgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29uZDsKIAogICAgIC8vIFdlIG5l
ZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWln
aHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCiAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFz
c3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tp
bmcgc28KQEAgLTM1MzUsNiArMzgwNCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmVtaXRJbmRp
cmVjdENhbGwoVHkKIAogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OworICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwog
ICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1bHRDb3VudChwYXJhbXMu
dmFsdWUoKS0+dHlwZSgpKV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgfSk7CiAKQEAg
LTUxNzgsNiArNTQ0OCw0OCBAQCB0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wCiAgICAgcmV0dXJuIHsgfTsKIH0KIAorUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBCM0lS
R2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYgYXJncykKK3sKKyAgICArK21fY2FsbFNp
dGVJbmRleDsKKyAgICBpZiAoIW1fdHJ5Q2F0Y2hEZXB0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIFZlY3RvcjxUbXA+IGxpdmVWYWx1ZXM7CisgICAgZm9yIChjb25zdCBhdXRvJiBsb2Nh
bCA6IG1fbG9jYWxzKQorICAgICAgICBsaXZlVmFsdWVzLmFwcGVuZChsb2NhbCk7CisgICAgZm9y
ICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29u
dHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgeworICAgICAgICBDb250cm9sRGF0
YSYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xE
YXRhOworICAgICAgICBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xT
dGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgdG1wIDogZXhwcmVzc2lvblN0YWNrKQorICAgICAgICAgICAgbGl2ZVZh
bHVlcy5hcHBlbmQodG1wKTsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRh
dGEpKQorICAgICAgICAgICAgbGl2ZVZhbHVlcy5hcHBlbmQoZGF0YS5leGNlcHRpb24oKSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gY2hlY2tlZFN1bTx1bnNpZ25lZD4oYXJncy5z
aXplKCksIHBhdGNoLT5yZXN1bHRDb25zdHJhaW50cy5zaXplKCkpOworICAgIGZvciAoVG1wIHRt
cCA6IGxpdmVWYWx1ZXMpCisgICAgICAgIGFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHRtcCwg
VmFsdWVSZXA6OkxhdGVDb2xkQW55KSk7CisKKyAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1NpZGV3
YXlzID0gdHJ1ZTsKKworICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHsgbV9j
YWxsU2l0ZUluZGV4LCBvZmZzZXQgfTsKK30KKwordm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlOjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zLCBBaXJJUkdlbmVyYXRvciogZ2VuZXJhdG9yKSBjb25zdAorewor
ICAgIGlmIChtX2NhbGxTaXRlSW5kZXggPT0gc19pbnZhbGlkQ2FsbFNpdGVJbmRleCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgU3RhY2tNYXAgdmFsdWVzOworICAgIGlmIChwYXJhbXMudmFsdWUo
KS0+bnVtQ2hpbGRyZW4oKSA+PSBtX29mZnNldCkgeworICAgICAgICB2YWx1ZXMgPSBTdGFja01h
cChwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4oKSAtIG1fb2Zmc2V0KTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9vZmZzZXQ7IGkgPCBwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4o
KTsgKytpKQorICAgICAgICAgICAgdmFsdWVzW2kgLSBtX29mZnNldF0gPSBPU1JFbnRyeVZhbHVl
KHBhcmFtc1tpXSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGkpLT50eXBlKCkpOworICAgIH0KKyAg
ICBnZW5lcmF0b3ItPmFkZFN0YWNrTWFwKG1fY2FsbFNpdGVJbmRleCwgV1RGTW92ZSh2YWx1ZXMp
KTsKKyAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX2NhbGxTaXRl
SW5kZXgpLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIGNsYXNzIEIzSVJHZW5lcmF0b3I7CiBzdHJ1Y3Qg
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CiAgICAgdm9pZCBnZW5lcmF0ZShDQ2FsbEhlbHBl
cnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgQjNJUkdlbmVyYXRvciop
IGNvbnN0OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2ludmFsaWRDYWxsU2l0
ZUluZGV4ID0gIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52YWxpZENhbGxTaXRlSW5kZXggPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAKICAgICB1bnNpZ25lZCBtX2NhbGxTaXRlSW5k
ZXggeyBzX2ludmFsaWRDYWxsU2l0ZUluZGV4IH07CiAgICAgdW5zaWduZWQgbV9vZmZzZXQ7CkBA
IC0yNjEwLDggKzI2MTAsMTggQEAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBCM0lSR2VuZXJh
dG9yOgogICAgIH0KIAogICAgIHVuc2lnbmVkIG9mZnNldCA9IHBhdGNoLT5udW1DaGlsZHJlbigp
OwotICAgIGlmIChwYXRjaC0+dHlwZSgpICE9IFZvaWQpCi0gICAgICAgIG9mZnNldCsrOworICAg
IC8vIE9PUFM6IGFkZCB0ZXN0CisgICAgc3dpdGNoIChwYXRjaC0+dHlwZSgpLmtpbmQoKSkgewor
ICAgIGNhc2UgQjM6OlZvaWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQjM6OlR1cGxlOiB7
CisgICAgICAgIG9mZnNldCArPSBtX3Byb2MudHVwbGVGb3JUeXBlKHBhdGNoLT50eXBlKCkpLnNp
emUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgICsrb2Zm
c2V0OworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1Np
ZGV3YXlzID0gdHJ1ZTsKICAgICBwYXRjaC0+YXBwZW5kVmVjdG9yV2l0aFJlcChsaXZlVmFsdWVz
LCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOwpAQCAtMjY1Nyw2ICsyNjY3LDEwIEBAIFZhbHVlKiBC
M0lSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENhdGMKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFk
ZFZhcmlhYmxlKHBvaW50ZXJUeXBlKCkpKTsKICAgICB9CisgICAgLy8gV2UgY29udmVydCBmcm9t
ICJ0cnkiIHRvICJjYXRjaCIgQ29udHJvbFR5cGUgYWJvdmUuIFRoaXMgZG9lc24ndAorICAgIC8v
IGhhcHBlbiBpZiBDb250cm9sVHlwZSBpcyBhbHJlYWR5IGEgImNhdGNoIi4gVGhpcyBjYW4gaGFw
cGVuIHdoZW4KKyAgICAvLyB3ZSBoYXZlIG11bHRpcGxlIGNhdGNoZXMgbGlrZSAidHJ5IHt9IGNh
dGNoKEEpe30gY2F0Y2goQil7fS4uLkNhdGNoQWxsKEUpe30iCisgICAgQVNTRVJUKENvbnRyb2xU
eXBlOjppc0FueUNhdGNoKGRhdGEpKTsKIAogICAgIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlID0g
a2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoID8gSGFuZGxlclR5cGU6OkNhdGNoIDogSGFuZGxlclR5
cGU6OkNhdGNoQWxsOwogICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlclR5
cGUsIGRhdGEudHJ5U3RhcnQoKSwgZGF0YS50cnlFbmQoKSwgMCwgbV90cnlDYXRjaERlcHRoLCBl
eGNlcHRpb25JbmRleCB9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448462</attachid>
            <date>2022-01-05 19:03:45 -0800</date>
            <delta_ts>2022-01-06 11:44:45 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>40006</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNiw2ICsxMjYsMTUg
QEAgcHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIH07CiAKK3N0cnVjdCBQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlIHsKKyAgICB2b2lkIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCBBaXJJUkdlbmVyYXRvciopIGNvbnN0OworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2ludmFsaWRDYWxsU2l0ZUluZGV4ID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworCisgICAgdW5zaWduZWQgbV9jYWxs
U2l0ZUluZGV4IHsgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCB9OworICAgIHVuc2lnbmVkIG1fb2Zm
c2V0OworfTsKKwogY2xhc3MgQWlySVJHZW5lcmF0b3IgewogcHVibGljOgogICAgIHVzaW5nIEV4
cHJlc3Npb25UeXBlID0gVHlwZWRUbXA7CkBAIC0xNDIsMTQgKzE1MSwyNSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKICAgICAgICAgfQogCisgICAgICAgIENv
bnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBCbG9ja1NpZ25hdHVyZSByZXN1bHQsIFJlc3Vs
dExpc3QgcmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
biwgdW5zaWduZWQgdHJ5U3RhcnQsIHVuc2lnbmVkIHRyeURlcHRoKQorICAgICAgICAgICAgOiBj
b250cm9sQmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51
YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwobnVsbHB0cikKKyAgICAgICAgICAgICwgcmVz
dWx0cyhyZXN1bHRUbXBzKQorICAgICAgICAgICAgLCByZXR1cm5UeXBlKHNpZ25hdHVyZSkKKyAg
ICAgICAgICAgICwgbV90cnlTdGFydCh0cnlTdGFydCkKKyAgICAgICAgICAgICwgbV90cnlDYXRj
aERlcHRoKHRyeURlcHRoKQorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAgICBDb250cm9s
RGF0YSgpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYo
Y29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkg
PT0gQmxvY2tUeXBlOjpJZjsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250
cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OlRyeTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRh
JiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0
Y2g7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYg
Y29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNo
OyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRy
b2wpIHsgcmV0dXJuIGlzQW55Q2F0Y2goY29udHJvbCkgJiYgY29udHJvbC5jYXRjaEtpbmQoKSA9
PSBDYXRjaEtpbmQ6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29u
c3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpUb3BMZXZlbDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3Qg
Q29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpMb29wOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29udHJv
bERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpCbG9jazsgfQpAQCAtMjIxLDYgKzI0MSw1NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gcmV0dXJuVHlwZS0+cmV0dXJuVHlwZShpKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQg
Y29udmVydFRyeVRvQ2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAg
ZXhjZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlw
ZTo6Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7Cisg
ICAgICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBt
X2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVy
dFRyeVRvQ2F0Y2hBbGwodW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhj
ZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6
Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2hBbGw7Cisg
ICAgICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBt
X2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRy
eVN0YXJ0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9j
a1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6
OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeVN0YXJ0OworICAgICAgICB9CisKKyAg
ICAgICAgdW5zaWduZWQgdHJ5RW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICBy
ZXR1cm4gbV90cnlFbmQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlEZXB0aCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09
IEJsb2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7
CisgICAgICAgICAgICByZXR1cm4gbV90cnlDYXRjaERlcHRoOworICAgICAgICB9CisKKyAgICAg
ICAgQ2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAg
cmV0dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAgICAgVHlwZWRUbXAgZXhjZXB0
aW9uKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5
cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGNlcHRpb247
CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdl
bmVyYXRvcjsKICAgICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CkBAIC0yMjgsNiAr
Mjk2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKICAgICAgICAg
UmVzdWx0TGlzdCByZXN1bHRzOwogICAgICAgICBCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlOwor
ICAgICAgICB1bnNpZ25lZCBtX3RyeVN0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX3RyeUVuZDsK
KyAgICAgICAgdW5zaWduZWQgbV90cnlDYXRjaERlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9j
YXRjaEtpbmQ7CisgICAgICAgIFR5cGVkVG1wIG1fZXhjZXB0aW9uOwogICAgIH07CiAKICAgICB1
c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwpAQCAtMjYwLDYgKzMzMyw4IEBAIHB1Ymxp
YzoKIAogICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlBy
b2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIGNv
bnN0IFNpZ25hdHVyZSYpOwogCisgICAgdm9pZCBmaW5hbGl6ZUVudHJ5cG9pbnRzKCk7CisKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVp
bnQ2NF90KTsKQEAgLTM0OSw3ICs0MjQsNyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVHlwZWRUbXAgY2FsbGVlSW5z
dGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKLSAgICBCMzo6UGF0
Y2hwb2ludFZhbHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJhc2lj
QmxvY2sqLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25z
dCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgZXh0cmFB
cmdzID0geyB9KTsKKyAgICBzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9pbnQo
QmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMs
IGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gZXh0
cmFBcmdzID0geyB9KTsKIAogICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoVHlwZSwgQjM6OkFp
cjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihC
Mzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKQEAgLTM2MSw2ICs0MzYsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CiAgICAgdm9pZCBkaWRQb3BWYWx1ZUZy
b21TdGFjaygpIHsgfQogCisgICAgVG1wIGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kLCBDb250cm9s
VHlwZSYsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4ID0gMCk7CisgICAgUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoUGF0Y2hwb2ludFZhbHVl
KiwgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYgYXJncyk7CisKICAgICBjb25zdCBCYWc8QjM6OlBh
dGNocG9pbnRWYWx1ZSo+JiBwYXRjaHBvaW50cygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gbV9wYXRjaHBvaW50czsKQEAgLTQxNywxNiArNDk1LDYgQEAgcHJpdmF0ZToKIAogICAgIFRt
cCBuZXdUbXAoQjM6OkJhbmsgYmFuaykKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoYmFuaykgewot
ICAgICAgICBjYXNlIEIzOjpHUDoKLSAgICAgICAgICAgIGlmIChtX2ZyZWVHUHMuc2l6ZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBtX2ZyZWVHUHMudGFrZUxhc3QoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEIzOjpGUDoKLSAgICAgICAgICAgIGlmIChtX2ZyZWVGUHMu
c2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2ZyZWVGUHMudGFrZUxhc3QoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX2NvZGUubmV3VG1w
KGJhbmspOwogICAgIH0KIApAQCAtNDk3LDcgKzU2NSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFRtcFR5cGUsIHNpemVfdCBpbmxpbmVTaXplPgot
ICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1bHRUbXBUeXBlLCA4PiYgIHJlc3Vs
dHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBhcmdzKQorICAgIHZvaWQg
ZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1
ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1bHRUbXBUeXBlLCA4PiYgcmVzdWx0cywgVmVjdG9y
PENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCiAgICAgewogICAgICAgICBpZiAo
IW1fcGF0Y2hwb2ludFNwZWNpYWwpCiAgICAgICAgICAgICBtX3BhdGNocG9pbnRTcGVjaWFsID0g
c3RhdGljX2Nhc3Q8QjM6OlBhdGNocG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNwZWNpYWwobWFr
ZVVuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNpYWw+KCkpKTsKQEAgLTY4OSw2ICs3NTcsMjMgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgZW1pdExvYWQoT3Bjb2RlIG9w
LCBCMzo6VHlwZSB0eXBlLCBUbXAgYmFzZSwgc2l6ZV90IG9mZnNldCwgVG1wIHJlc3VsdCkKKyAg
ICB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZv
clR5cGUodHlwZSkpKQorICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OmFkZHIoYmFzZSwgb2Zm
c2V0KSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHRlbXAyID0g
ZzY0KCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVt
cDIpOworICAgICAgICAgICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwgYmFzZSwgdGVtcDIpOworICAg
ICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OmFkZHIodGVtcDIpLCByZXN1bHQpOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBlbWl0TG9hZChUbXAgYmFzZSwgc2l6ZV90IG9mZnNldCwgVHlw
ZWRUbXAgcmVzdWx0KQorICAgIHsKKyAgICAgICAgZW1pdExvYWQobW92ZU9wRm9yVmFsdWVUeXBl
KHJlc3VsdC50eXBlKCkpLCB0b0IzVHlwZShyZXN1bHQudHlwZSgpKSwgYmFzZSwgb2Zmc2V0LCBy
ZXN1bHQudG1wKCkpOworICAgIH0KKwogICAgIHZvaWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxs
SGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOwogCiAgICAgdm9pZCBlbWl0RW50cnlUaWVyVXBDaGVj
aygpOwpAQCAtNzUzLDExICs4MzgsOSBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX21lbW9yeUJh
c2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fYm91bmRzQ2hlY2tpbmdTaXpl
R1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VH
UFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQ
UiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBib29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CiAK
LSAgICBWZWN0b3I8VG1wLCA4PiBtX2ZyZWVHUHM7Ci0gICAgVmVjdG9yPFRtcCwgOD4gbV9mcmVl
RlBzOwotCiAgICAgSGFzaE1hcDxCbG9ja1NpZ25hdHVyZSwgQjM6OlR5cGU+IG1fdHVwbGVNYXA7
CiAgICAgLy8gVGhpcyBpcyBvbmx5IGZpbGxlZCBpZiB3ZSBhcmUgZHVtcGluZyBJUi4KICAgICBC
YWc8QjM6OlBhdGNocG9pbnRWYWx1ZSo+IG1fcGF0Y2hwb2ludHM7CkBAIC03NzQsNiArODU3LDE0
IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnM7CiAKICAgICBC
Mzo6UGF0Y2hwb2ludFNwZWNpYWwqIG1fcGF0Y2hwb2ludFNwZWNpYWwgeyBudWxscHRyIH07CisK
KyAgICBSZWZQdHI8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IG1fcHJvbG9ndWVHZW5lcmF0
b3I7CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fY2F0Y2hFbnRyeXBvaW50czsKKworICAg
IENoZWNrZWQ8dW5zaWduZWQ+IG1fdHJ5Q2F0Y2hEZXB0aCB7IDAgfTsgLy8gT09QUzogaW5jcmVt
ZW50IGV2ZXJ5d2hlcmUKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAw
IH07IC8vIE9PUFM6IGluY3JlbWVudCBldmVyeXdoZXJlCisgICAgVmVjdG9yPFVubGlua2VkSGFu
ZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9OwogCiAvLyBNZW1vcnkgYWNjZXNzZXMg
aW4gV2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5
IGhhdmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgpAQCAtODQ3LDExICs5MzgsOSBAQCBB
aXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAgICAgIG1fY29kZS5w
aW5SZWdpc3RlcihtX2JvdW5kc0NoZWNraW5nU2l6ZUdQUik7CiAgICAgfQogCi0gICAgbV9jb2Rl
LnNldE51bUVudHJ5cG9pbnRzKDEpOwotCi0gICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9IENv
bnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xvZ3VlU2Ny
YXRjaEdQUnNbMV0gOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisgICAgbV9wcm9sb2d1ZVdh
c21Db250ZXh0R1BSID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1sxXSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsK
IAotICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gcHJvbG9ndWVHZW5lcmF0b3Ig
PSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICBtX3Byb2xv
Z3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRv
ckZ1bmN0aW9uPihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7
CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKICAgICAgICAgY29kZS5lbWl0RGVmYXVsdFByb2xvZ3VlKGppdCk7CiAKQEAgLTg5MSwzMSAr
OTgwLDMzIEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xv
Z3VlU2NyYXRjaEdQUnNbMF07CiAKICAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFz
dFRMUygpKQotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
Y29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUik7CiAKICAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShu
ZWVkVW5kZXJmbG93Q2hlY2spKQogICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQo
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJh
bmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkp
KTsKKyAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6OkJlbG93LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9wcm9sb2d1ZVdh
c21Db250ZXh0R1BSLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKSk7CiAg
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5z
dHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5j
ZVZhbHVlICYmIENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICAgICAgICAgIC8vIE5v
IG92ZXJmbG93IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwg
bmVlZHMgdG8gYmUgY29ycmVjdC4KLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21D
b250ZXh0SW5zdGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0pOwogCi0gICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2lu
dCgwLCBXVEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7Ci0KICAgICBpZiAoQ29udGV4dDo6dXNl
RmFzdFRMUygpKSB7CiAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGc2NCgpOwogICAgICAgICAv
LyBGSVhNRTogV291bGQgYmUgbmljZSB0byBvbmx5IGRvIHRoaXMgaWYgd2UgdXNlIGluc3RhbmNl
IHZhbHVlLgotICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKGNvbnRleHRJbnN0YW5jZSksIG1faW5z
dGFuY2VWYWx1ZSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAobV9wcm9sb2d1ZVdhc21Db250
ZXh0R1BSKSwgbV9pbnN0YW5jZVZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9pbnN0YW5j
ZVZhbHVlID0geyBUbXAoY29udGV4dEluc3RhbmNlKSwgVHlwZXM6Okk2NCB9OworICAgICAgICBt
X2luc3RhbmNlVmFsdWUgPSB7IFRtcChtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpLCBUeXBlczo6
STY0IH07CisKKyAgICBhcHBlbmQoRW50cnlTd2l0Y2gpOworICAgIG1fbWFpbkVudHJ5cG9pbnRT
dGFydCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIG1fY3VycmVudEJsb2NrID0gbV9tYWluRW50
cnlwb2ludFN0YXJ0OwogCiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwogICAgIG1fbG9j
YWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CkBAIC05NTQsNiArMTA0NSw2NSBA
QCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAgZW1pdEVudHJ5
VGllclVwQ2hlY2soKTsKIH0KIAordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZmluYWxpemVFbnRyeXBv
aW50cygpCit7CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSAxICsgbV9jYXRjaEVudHJ5
cG9pbnRzLnNpemUoKTsKKyAgICBtX3Byb2Muc2V0TnVtRW50cnlwb2ludHMobnVtRW50cnlwb2lu
dHMpOworICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoMCwgUmVmPEIzOjpBaXI6
OlByb2xvZ3VlR2VuZXJhdG9yPigqbV9wcm9sb2d1ZUdlbmVyYXRvcikpOworCisgICAgaWYgKG1f
Y2F0Y2hFbnRyeXBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgUmVmPEIzOjpBaXI6OlByb2xvZ3Vl
R2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6
QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIz
OjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgaml0LmVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGluZyBwcmVj
aXNlIGFsbG9jYXRpb25zIGluIFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVudHJ5cG9pbnRzIG1p
Z2h0IGJlIHVubmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMworICAgICAgICAgICAgICAgIGF1dG8gcHJlY2lz
ZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJv
LCBHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9j
YXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxv
Y2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
ICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgICAgICAgICBwcmVj
aXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFByZWNpc2VBbGxvY2F0aW9u
OjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNpc2VBbGxv
Y2F0aW9uOjpoZWFkZXJTaXplKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAg
ICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqaXQu
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUklu
Zm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMyk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZvcldhc21DYXRj
aE9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkpKTsKKyAgICAg
ICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDMsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSk7CisKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKKworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mSW5zdGFuY2UoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVdh
c21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6cmVnVDMpOworCisgICAgICAgICAgICBqaXQucHJv
YmUodGFnQ0Z1bmN0aW9uPEpJVFByb2JlUHRyVGFnPihidWlsZEVudHJ5QnVmZmVyRm9yQ2F0Y2gp
LCBudWxscHRyKTsKKworICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgaWYgKENv
bnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIFNoYXJlZCBwcm9sb2d1
ZSBleHBlY3RzIHRoaXMgaW4gdGhpcyByZWdpc3RlciB3aGVuIGVudGVyaW5nIHRoZSBmdW5jdGlv
biB1c2luZyBmYXN0IFRMUy4KKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5z
dGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2F0Y2hFbnRyeXBvaW50
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9p
bnQoMSArIGksIGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpKTsKKyAgICB9CisKKyAg
ICBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0IHN1Y2Nlc3NvcnM7CisgICAgc3VjY2Vzc29ycy5h
cHBlbmQobV9tYWluRW50cnlwb2ludFN0YXJ0KTsKKyAgICBzdWNjZXNzb3JzLmFwcGVuZFZlY3Rv
cihtX2NhdGNoRW50cnlwb2ludHMpOworCisgICAgUkVMRUFTRV9BU1NFUlQobnVtRW50cnlwb2lu
dHMgPT0gc3VjY2Vzc29ycy5zaXplKCkpOworICAgIG1fcm9vdEJsb2NrLT5zdWNjZXNzb3JzKCkg
PSBzdWNjZXNzb3JzOworfQorCiBCMzo6VHlwZSBBaXJJUkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5
cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZSkKIHsKICAgICBpZiAocmV0dXJuVHlwZS0+cmV0
dXJuc1ZvaWQoKSkKQEAgLTE0MjgsNiArMTU3OCw4IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6Omdl
dEdsb2JhbCh1aW50MzJfdCAKICAgICBpbnQzMl90IG9mZnNldCA9IHNhZmVDYXN0PGludDMyX3Q+
KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgc3dpdGNoIChnbG9iYWwuYmluZGluZ01v
ZGUpIHsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6RW1i
ZWRkZWRJbkluc3RhbmNlOgorICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vIGVtaXRMb2FkKG1v
dmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdG9CM1R5cGUodHlwZSksIHRlbXAsIG9mZnNldCwgcmVz
dWx0KTsKICAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6OndpZHRo
Rm9yVHlwZSh0b0IzVHlwZSh0eXBlKSkpKQogICAgICAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZh
bHVlVHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3VsdCk7CiAgICAgICAg
IGVsc2UgewpAQCAtMTQzOSw2ICsxNTkxLDggQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0R2xv
YmFsKHVpbnQzMl90IAogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9y
bWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6CiAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0
YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7
CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy8gZW1pdExvYWQoTW92ZSwgQjM6OkludDY0LCB0
ZW1wLCBvZmZzZXQsIHRlbXApOwogICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zm
c2V0LCBCMzo6V2lkdGg2NCkpCiAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKHRl
bXAsIG9mZnNldCksIHRlbXApOwogICAgICAgICBlbHNlIHsKQEAgLTMwMTIsNTcgKzMxNjYsMjI0
IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmwKICAgICByZXR1cm4g
eyB9OwogfQogCi0vLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIFdhc20gZXhjZXB0aW9ucyBpbiB0
aGUgQWlyIGdlbmVyYXRvcgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTIxMQotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBT
dGFjayYsIENvbnRyb2xUeXBlJiwgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9z
aW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjaykgLT4gUGFydGlh
bFJlc3VsdAogeworICAgICsrbV90cnlDYXRjaERlcHRoOworCisgICAgQmFzaWNCbG9jayogY29u
dGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUs
IGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CisgICAgcmVzdWx0ID0gQ29udHJvbERhdGEob3Jp
Z2luKCksIHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6
OlRyeSwgY29udGludWF0aW9uLCArK21fY2FsbFNpdGVJbmRleCwgbV90cnlDYXRjaERlcHRoKTsK
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNp
Z25lZCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3Qm
KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25l
ZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFN0YWNrJiBjdXJy
ZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4geyB9OworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YS5yZXN1
bHRzKTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3Nv
cnMoZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRjaFRvVW5yZWFjaGFibGUo
ZXhjZXB0aW9uSW5kZXgsIHNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7CiB9CiAKLWF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCwgY29uc3QgU2lnbmF0
dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0JikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5
cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVu
dFN0YWNrLCBkYXRhLnJlc3VsdHMpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRC
bG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENh
dGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRl
eCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRM
aXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBUbXAgYnVmZmVyID0gZW1pdENhdGNoSW1wbChDYXRjaEtpbmQ6OkNh
dGNoLCBkYXRhLCBleGNlcHRpb25JbmRleCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBz
aWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgIFR5cGVkVG1wIHRtcCA9IHRtcEZvclR5cGUo
dHlwZSk7CisgICAgICAgIGVtaXRMb2FkKGJ1ZmZlciwgaSAqIHNpemVvZih1aW50NjRfdCksIHRt
cCk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHRtcCk7CisgICAgfQogICAgIHJldHVybiB7IH07
CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250
cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNo
QWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZW1pdENhdGNoSW1wbChDYXRj
aEtpbmQ6OkNhdGNoQWxsLCBkYXRhKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklS
R2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJikgLT4gUGFy
dGlhbFJlc3VsdAorVG1wIEFpcklSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENhdGNoS2luZCBr
aW5kLCBDb250cm9sVHlwZSYgZGF0YSwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgpCiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OworICAgIG1fY3Vy
cmVudEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgbV9jYXRjaEVudHJ5cG9pbnRzLmFw
cGVuZChtX2N1cnJlbnRCbG9jayk7CisKKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5KGRhdGEp
KSB7CisgICAgICAgIGlmIChraW5kID09IENhdGNoS2luZDo6Q2F0Y2gpCisgICAgICAgICAgICBk
YXRhLmNvbnZlcnRUcnlUb0NhdGNoKCsrbV9jYWxsU2l0ZUluZGV4LCBnNjQoKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGRhdGEuY29udmVydFRyeVRvQ2F0Y2hBbGwoKyttX2NhbGxTaXRl
SW5kZXgsIGc2NCgpKTsKKyAgICB9CisgICAgLy8gV2UgY29udmVydCBmcm9tICJ0cnkiIHRvICJj
YXRjaCIgQ29udHJvbFR5cGUgYWJvdmUuIFRoaXMgZG9lc24ndAorICAgIC8vIGhhcHBlbiBpZiBD
b250cm9sVHlwZSBpcyBhbHJlYWR5IGEgImNhdGNoIi4gVGhpcyBjYW4gaGFwcGVuIHdoZW4KKyAg
ICAvLyB3ZSBoYXZlIG11bHRpcGxlIGNhdGNoZXMgbGlrZSAidHJ5IHt9IGNhdGNoKEEpe30gY2F0
Y2goQil7fS4uLkNhdGNoQWxsKEUpe30iLgorICAgIC8vIFdlIGp1c3QgY29udmVydCB0aGUgZmly
c3QgQ29udHJvbFR5cGUgdG8gYSBjYXRjaCwgdGhlbiB0aGUgb3RoZXJzIHdpbGwKKyAgICAvLyB1
c2UgaXRzIGZpZWxkcy4KKyAgICBBU1NFUlQoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkp
OworCisgICAgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUgPSBraW5kID09IENhdGNoS2luZDo6Q2F0
Y2ggPyBIYW5kbGVyVHlwZTo6Q2F0Y2ggOiBIYW5kbGVyVHlwZTo6Q2F0Y2hBbGw7CisgICAgbV9l
eGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyVHlwZSwgZGF0YS50cnlTdGFydCgpLCBk
YXRhLnRyeUVuZCgpLCAwLCBtX3RyeUNhdGNoRGVwdGgsIGV4Y2VwdGlvbkluZGV4IH0pOworCisg
ICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6
OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jayk7CisK
KyAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKKyAgICBhdXRvIGxvYWRGcm9tU2NyYXRj
aEJ1ZmZlciA9IFsmXSAoVHlwZWRUbXAgcmVzdWx0KSB7CisgICAgICAgIHNpemVfdCBvZmZzZXQg
PSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcjsKKyAgICAgICAgKytpbmRleEluQnVm
ZmVyOworICAgICAgICBUbXAgYnVmZmVyUHRyID0gVG1wKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgICAgIGVtaXRMb2FkKGJ1ZmZlclB0ciwgb2Zmc2V0LCByZXN1bHQpOworICAgIH07CisK
KyAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgIGxvYWRGcm9tU2NyYXRj
aEJ1ZmZlcihsb2NhbCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNv
bnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbElu
ZGV4KSB7CisgICAgICAgIGF1dG8mIGNvbnRyb2xEYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFj
aygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgIGF1dG8mIGV4cHJlc3Npb25T
dGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lv
blN0YWNrLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBUeXBlZFRtcCB0bXAgPSBleHByZXNz
aW9uU3RhY2tbaV0udmFsdWUoKTsKKyAgICAgICAgICAgIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih0
bXApOworICAgICAgICB9CisgICAgICAgIC8vIFdlIHNldCBvdXIgY3VycmVudCBDb250cm9sRW50
cnkncyBleGNlcHRpb24gYmVsb3cgYWZ0ZXIgdGhlIHBhdGNocG9pbnQuCisgICAgICAgIGlmIChD
b250cm9sVHlwZTo6aXNBbnlDYXRjaChjb250cm9sRGF0YSkgJiYgJmRhdGEgIT0gJmNvbnRyb2xE
YXRhKQorICAgICAgICAgICAgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGNvbnRyb2xEYXRhLmV4Y2Vw
dGlvbigpKTsKKyAgICB9CisKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IGFkZFBh
dGNocG9pbnQobV9wcm9jLmFkZFR1cGxlKHsgQjM6OnBvaW50ZXJUeXBlKCksIEIzOjpwb2ludGVy
VHlwZSgpIH0pKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAg
ICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJMYXRlID0gUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0
ZXJzRm9ySlNDYWxsKCk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgcGF0Y2gtPmNsb2JiZXJMYXRlKGNsb2JiZXJMYXRlKTsKKyAgICBwYXRjaC0+cmVz
dWx0Q29uc3RyYWludHMuYXBwZW5kKFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKyAgICBwYXRjaC0+cmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKFZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgIGppdC5tb3ZlKHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2Vw
dGlvbklmQ2F0Y2hhYmxlKSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgVG1wIGV4Y2Vw
dGlvbiA9IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgVG1wIGJ1ZmZlciA9IFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcD4geyBleGNlcHRpb24sIGJ1ZmZlciB9LCBWZWN0b3I8
Q29uc3RyYWluZWRUbXAsIDE+IHsgaW5zdGFuY2VWYWx1ZSgpIH0pOworICAgIGFwcGVuZChNb3Zl
LCBleGNlcHRpb24sIGRhdGEuZXhjZXB0aW9uKCkpOworCisgICAgcmV0dXJuIGJ1ZmZlcjsKIH0K
IAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xU
eXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4g
UGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSh0YXJnZXQsIGRhdGEpOworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIHRh
cmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bnNpZ25l
ZCB0YXJnZXREZXB0aCA9IDA7CisgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpKQor
ICAgICAgICB0YXJnZXREZXB0aCA9IHRhcmdldC50cnlEZXB0aCgpOworCisgICAgbV9leGNlcHRp
b25IYW5kbGVycy5hcHBlbmQoeyBIYW5kbGVyVHlwZTo6RGVsZWdhdGUsIGRhdGEudHJ5U3RhcnQo
KSwgKyttX2NhbGxTaXRlSW5kZXgsIDAsIG1fdHJ5Q2F0Y2hEZXB0aCwgdGFyZ2V0RGVwdGggfSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5z
aWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mLCBTdGFjayYpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhjZXB0aW9uSW5kZXgpOworICAgIEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAg
cGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lz
dGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKworICAgIFZlY3RvcjxDb25z
dHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRU
bXAoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
KTsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKFRtcChHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciksIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQorICAgICAgICBw
YXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGFyZ3NbaV0sIFZhbHVlUmVwOjpzdGFja0Fy
Z3VtZW50KGkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSkpOworCisgICAgUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0
Y2gsIHBhdGNoQXJncyk7CisKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBleGNlcHRp
b25JbmRleCwgaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAvLyBPT1BTOiBzaGFyZSBjb2RlIHdp
dGggQjMgSVIgZ2VuZXJhdG9yIGhlcmUuCisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjA7CisgICAgICAgIGhhbmRsZS5nZW5lcmF0
ZShqaXQsIHBhcmFtcywgdGhpcyk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIo
KSksIHNjcmF0Y2gpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0
aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRj
aCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGln
bm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBNYXJrZWRCbG9jazo6b2Zmc2V0
T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgICAg
IHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFByZWNpc2VBbGxvY2F0aW9uOjpvZmZz
ZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNpc2VBbGxvY2F0aW9u
OjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5r
KCZqaXQpOworICAgICAgICB9CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOworCisgICAgICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZXhjZXB0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOworICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25XYXNtVGhyb3cpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBlbWl0
UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFRtcCgpLCBXVEZNb3ZlKHBhdGNoQXJn
cykpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0
aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFy
dGlhbFJlc3VsdAogeworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gYWRkUGF0Y2hw
b2ludChCMzo6Vm9pZCk7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxl
UmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworICAgIHBhdGNoLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1
ZTsKKworICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgMz4gcGF0Y2hBcmdzOworICAgIHBhdGNo
QXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6cmVn
KEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFp
bmVkVG1wKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIFZhbHVlUmVwOjpyZWcoR1BS
SW5mbzo6YXJndW1lbnRHUFIxKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRU
bXAoZGF0YS5leGNlcHRpb24oKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjIp
KSk7CisKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRj
aHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaCwgcGF0Y2hBcmdzKTsKKyAgICBwYXRjaC0+c2V0R2Vu
ZXJhdG9yKFt0aGlzLCBoYW5kbGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSW5zdGFu
Y2U6Om9mZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVy
czo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFs
bG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBN
YXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRP
ZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1w
KCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFByZWNp
c2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAt
IFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAgICAgICAg
ICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOworCisgICAg
ICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CisgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0
LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgICAgICB9KTsKKyAgICB9KTsK
KworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVG1wKCksIFdURk1v
dmUocGF0Y2hBcmdzKSk7CisKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0zMjA5LDcgKzM1MzAs
OCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlCiAgICAgaWYgKGRh
dGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewogICAgICAgICBhcHBlbmQoZGF0YS5z
cGVjaWFsLCBKdW1wKTsKICAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNzb3JzKG1fY3Vy
cmVudEJsb2NrKTsKLSAgICB9CisgICAgfSBlbHNlIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJs
b2NrVHlwZTo6VHJ5IHx8IGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaCkKKyAg
ICAgICAgLS1tX3RyeUNhdGNoRGVwdGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6Okxvb3ApIHsKICAgICAgICAgbV9vdXRlckxvb3BzLnJlbW92ZUxhc3QoKTsKQEAg
LTMyMzMsNyArMzU1NSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFi
bGUKICAgICByZXR1cm4geyB9OwogfQogCi1CMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVy
YXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5
cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYmIHBhdGNoQXJncykKK3N0ZDo6
cGFpcjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gQWly
SVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0IFZl
Y3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzKQog
ewogICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNSZXN1bHRUeXBlKCZz
aWduYXR1cmUpKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7
CkBAIC0zMjU4LDggKzM1ODAsOSBAQCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVyYXRv
cjo6ZW1pCiAgICAgICAgICAgICByZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6OlZhbHVlUmVw
KHZhbHVlTG9jYXRpb24pKTsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludHMg
PSBXVEZNb3ZlKHJlc3VsdENvbnN0cmFpbnRzKTsKICAgICB9CisgICAgUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZSBleGNlcHRpb25IYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlv
bnMocGF0Y2hwb2ludCwgcGF0Y2hBcmdzKTsKICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0
Y2hwb2ludCwgcmVzdWx0cywgV1RGTW92ZShwYXRjaEFyZ3MpKTsKLSAgICByZXR1cm4gcGF0Y2hw
b2ludDsKKyAgICByZXR1cm4geyBwYXRjaHBvaW50LCBleGNlcHRpb25IYW5kbGUgfTsKIH0KIAog
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVz
dWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdApAQCAtMzI5NSwxNCArMzYxOCwxNyBA
QCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1CiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVyQmxvY2spOwog
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNo
cG9pbnQoaXNXYXNtQmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAgICAg
ICBhdXRvIHBhaXIgPSBlbWl0Q2FsbFBhdGNocG9pbnQoaXNXYXNtQmxvY2ssIHNpZ25hdHVyZSwg
cmVzdWx0cywgYXJncyk7CisgICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gcGFpci5maXJz
dDsKKyAgICAgICAgICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlID0gcGFpci5zZWNvbmQ7CiAgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0
ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgogICAgICAgICAgICAg
Ly8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0
aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykp
OwogCi0gICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7
CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAg
ICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5k
ZXggfSk7CkBAIC0zMzIxLDEzICszNjQ3LDE3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnUKIAogICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBqdW1w
QXJnczsKICAgICAgICAgICAgIGp1bXBBcmdzLmFwcGVuZCh7IGp1bXBEZXN0aW5hdGlvbiwgQjM6
OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIgfSk7Ci0gICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50
ID0gZW1pdENhbGxQYXRjaHBvaW50KGlzRW1iZWRkZXJCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRz
LCBhcmdzLCBXVEZNb3ZlKGp1bXBBcmdzKSk7CisgICAgICAgICAgICBhdXRvIHBhaXIgPSBlbWl0
Q2FsbFBhdGNocG9pbnQoaXNFbWJlZGRlckJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3Ms
IFdURk1vdmUoanVtcEFyZ3MpKTsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWly
LmZpcnN0OworICAgICAgICAgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29uZDsK
KwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVk
IHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KICAgICAg
ICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0
byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxh
dGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmcpKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBw
YXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXJhbXMucHJv
YygpLnJlc3VsdENvdW50KHBhcmFtcy52YWx1ZSgpLT50eXBlKCkpXS5ncHIoKSwgV2FzbUVudHJ5
UHRyVGFnKTsKICAgICAgICAgICAgIH0pOwogCkBAIC0zMzM5LDEyICszNjY5LDE1IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnUKICAgICAgICAgLy8gVGhlIGNhbGwg
Y291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9y
IGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KICAgICAgICAgcmVzdG9yZVdlYkFzc2Vt
Ymx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9y
eSwgY3VycmVudEluc3RhbmNlLCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNp
Z25hdHVyZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAgIGF1dG8gcGFpciA9IGVtaXRDYWxsUGF0
Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzKTsKKyAgICAg
ICAgYXV0byogcGF0Y2hwb2ludCA9IHBhaXIuZmlyc3Q7CisgICAgICAgIGF1dG8gZXhjZXB0aW9u
SGFuZGxlID0gcGFpci5zZWNvbmQ7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciB0aGUg
c2l6ZSByZWdpc3RlciBzaW5jZSB0aGUgTExJbnQgYWx3YXlzIGJvdW5kcyBjaGVja3MKICAgICAg
ICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcgfHwgbV9pbmZvLm1lbW9yeS5p
c1NoYXJlZCgpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJT
ZXQgeyBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVy
IH0pOwotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLmdlbmVyYXRlKGppdCwg
cGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0
LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRy
VGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKQEAgLTM1MjMsNyArMzg1Niw5IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVHkKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKICAgICAgICAgcmVzdWx0cy5h
cHBlbmQodG1wRm9yVHlwZShzaWduYXR1cmUucmV0dXJuVHlwZShpKSkpOwogCi0gICAgYXV0byog
cGF0Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2lnbmF0dXJl
LCByZXN1bHRzLCBhcmdzLCBXVEZNb3ZlKGV4dHJhQXJncykpOworICAgIGF1dG8gcGFpciA9IGVt
aXRDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdz
LCBXVEZNb3ZlKGV4dHJhQXJncykpOworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWlyLmZpcnN0
OworICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlID0gcGFpci5zZWNvbmQ7CiAKICAgICAvLyBXZSBu
ZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1p
Z2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgogICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBh
c3N1bWUgd2UncmUgYWx3YXlzIGNhbGxpbmcgc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNr
aW5nIHNvCkBAIC0zNTM1LDYgKzM4NzAsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjplbWl0SW5k
aXJlY3RDYWxsKFR5CiAKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsK
ICAgICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9jKCkucmVzdWx0Q291bnQocGFyYW1z
LnZhbHVlKCktPnR5cGUoKSldLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgIH0pOwogCkBA
IC0zNjE1LDYgKzM5NTEsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvCiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRv
ciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUs
IGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwog
CisgICAgaXJHZW5lcmF0b3IuZmluYWxpemVFbnRyeXBvaW50cygpOwogCiAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpCkBAIC01MTc4LDYgKzU1MTUsNDggQEAgdGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcAogICAgIHJldHVybiB7IH07CiB9CiAK
K1BhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgQjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFZlY3RvcjxDb25zdHJhaW5l
ZFRtcD4mIGFyZ3MpCit7CisgICAgKyttX2NhbGxTaXRlSW5kZXg7CisgICAgaWYgKCFtX3RyeUNh
dGNoRGVwdGgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8VG1wPiBsaXZlVmFs
dWVzOworICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWwgOiBtX2xvY2FscykKKyAgICAgICAgbGl2
ZVZhbHVlcy5hcHBlbmQobG9jYWwpOworICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0g
MDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250
cm9sSW5kZXgpIHsKKyAgICAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBtX3BhcnNlci0+Y29udHJv
bFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAgU3RhY2smIGV4cHJl
c3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xv
c2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRtcCA6IGV4cHJl
c3Npb25TdGFjaykKKyAgICAgICAgICAgIGxpdmVWYWx1ZXMuYXBwZW5kKHRtcCk7CisgICAgICAg
IGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSkKKyAgICAgICAgICAgIGxpdmVWYWx1
ZXMuYXBwZW5kKGRhdGEuZXhjZXB0aW9uKCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGNoZWNrZWRTdW08dW5zaWduZWQ+KGFyZ3Muc2l6ZSgpLCBwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludHMuc2l6ZSgpKTsKKyAgICBmb3IgKFRtcCB0bXAgOiBsaXZlVmFsdWVzKQorICAgICAgICBh
cmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh0bXAsIFZhbHVlUmVwOjpMYXRlQ29sZEFueSkpOwor
CisgICAgcGF0Y2gtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisKKyAgICByZXR1cm4g
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7IG1fY2FsbFNpdGVJbmRleCwgb2Zmc2V0IH07Cit9
CisKK3ZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgQWlySVJH
ZW5lcmF0b3IqIGdlbmVyYXRvcikgY29uc3QKK3sKKyAgICBpZiAobV9jYWxsU2l0ZUluZGV4ID09
IHNfaW52YWxpZENhbGxTaXRlSW5kZXgpCisgICAgICAgIHJldHVybjsKKworICAgIFN0YWNrTWFw
IHZhbHVlczsKKyAgICBpZiAocGFyYW1zLnZhbHVlKCktPm51bUNoaWxkcmVuKCkgPj0gbV9vZmZz
ZXQpIHsKKyAgICAgICAgdmFsdWVzID0gU3RhY2tNYXAocGFyYW1zLnZhbHVlKCktPm51bUNoaWxk
cmVuKCkgLSBtX29mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2Zmc2V0OyBp
IDwgcGFyYW1zLnZhbHVlKCktPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVl
c1tpIC0gbV9vZmZzZXRdID0gT1NSRW50cnlWYWx1ZShwYXJhbXNbaV0sIHBhcmFtcy52YWx1ZSgp
LT5jaGlsZChpKS0+dHlwZSgpKTsKKyAgICB9CisgICAgZ2VuZXJhdG9yLT5hZGRTdGFja01hcCht
X2NhbGxTaXRlSW5kZXgsIFdURk1vdmUodmFsdWVzKSk7CisgICAgaml0LnN0b3JlMzIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9jYWxsU2l0ZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9C
M0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDI4NzU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBA
QCBjbGFzcyBCM0lSR2VuZXJhdG9yOwogc3RydWN0IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUg
ewogICAgIHZvaWQgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYsIEIzSVJHZW5lcmF0b3IqKSBjb25zdDsKIAotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCA9ICBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2lu
dmFsaWRDYWxsU2l0ZUluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwogCiAgICAgdW5zaWduZWQgbV9jYWxsU2l0ZUluZGV4IHsgc19pbnZhbGlkQ2FsbFNpdGVJbmRl
eCB9OwogICAgIHVuc2lnbmVkIG1fb2Zmc2V0OwpAQCAtMjYxMCw4ICsyNjEwLDE4IEBAIFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUgQjNJUkdlbmVyYXRvcjoKICAgICB9CiAKICAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBwYXRjaC0+bnVtQ2hpbGRyZW4oKTsKLSAgICBpZiAocGF0Y2gtPnR5cGUoKSAh
PSBWb2lkKQotICAgICAgICBvZmZzZXQrKzsKKyAgICAvLyBPT1BTOiBhZGQgdGVzdAorICAgIHN3
aXRjaCAocGF0Y2gtPnR5cGUoKS5raW5kKCkpIHsKKyAgICBjYXNlIEIzOjpWb2lkOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEIzOjpUdXBsZTogeworICAgICAgICBvZmZzZXQgKz0gbV9wcm9j
LnR1cGxlRm9yVHlwZShwYXRjaC0+dHlwZSgpKS5zaXplKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBkZWZhdWx0OgorICAgICAgICArK29mZnNldDsKKyAgICAgICAgYnJlYWs7CisgICAg
fQogCiAgICAgcGF0Y2gtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CiAgICAgcGF0Y2gt
PmFwcGVuZFZlY3RvcldpdGhSZXAobGl2ZVZhbHVlcywgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsK
QEAgLTI2NTcsNiArMjY2NywxMCBAQCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1w
bChDYXRjCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRhdGEuY29udmVydFRyeVRvQ2F0Y2hB
bGwoKyttX2NhbGxTaXRlSW5kZXgsIG1fcHJvYy5hZGRWYXJpYWJsZShwb2ludGVyVHlwZSgpKSk7
CiAgICAgfQorICAgIC8vIFdlIGNvbnZlcnQgZnJvbSAidHJ5IiB0byAiY2F0Y2giIENvbnRyb2xU
eXBlIGFib3ZlLiBUaGlzIGRvZXNuJ3QKKyAgICAvLyBoYXBwZW4gaWYgQ29udHJvbFR5cGUgaXMg
YWxyZWFkeSBhICJjYXRjaCIuIFRoaXMgY2FuIGhhcHBlbiB3aGVuCisgICAgLy8gd2UgaGF2ZSBt
dWx0aXBsZSBjYXRjaGVzIGxpa2UgInRyeSB7fSBjYXRjaChBKXt9IGNhdGNoKEIpe30uLi5DYXRj
aEFsbChFKXt9IgorICAgIEFTU0VSVChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSk7CiAK
ICAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/
IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsKICAgICBtX2V4Y2Vw
dGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEu
dHJ5RW5kKCksIDAsIG1fdHJ5Q2F0Y2hEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448516</attachid>
            <date>2022-01-06 11:44:45 -0800</date>
            <delta_ts>2022-01-06 12:08:41 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>44772</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNiw2ICsxMjYsMTUg
QEAgcHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIH07CiAKK3N0cnVjdCBQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlIHsKKyAgICB2b2lkIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCBBaXJJUkdlbmVyYXRvciopIGNvbnN0OworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2ludmFsaWRDYWxsU2l0ZUluZGV4ID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworCisgICAgdW5zaWduZWQgbV9jYWxs
U2l0ZUluZGV4IHsgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCB9OworICAgIHVuc2lnbmVkIG1fb2Zm
c2V0OworfTsKKwogY2xhc3MgQWlySVJHZW5lcmF0b3IgewogcHVibGljOgogICAgIHVzaW5nIEV4
cHJlc3Npb25UeXBlID0gVHlwZWRUbXA7CkBAIC0xNDIsMTQgKzE1MSwyNSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKICAgICAgICAgfQogCisgICAgICAgIENv
bnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBCbG9ja1NpZ25hdHVyZSByZXN1bHQsIFJlc3Vs
dExpc3QgcmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
biwgdW5zaWduZWQgdHJ5U3RhcnQsIHVuc2lnbmVkIHRyeURlcHRoKQorICAgICAgICAgICAgOiBj
b250cm9sQmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51
YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwobnVsbHB0cikKKyAgICAgICAgICAgICwgcmVz
dWx0cyhyZXN1bHRUbXBzKQorICAgICAgICAgICAgLCByZXR1cm5UeXBlKHNpZ25hdHVyZSkKKyAg
ICAgICAgICAgICwgbV90cnlTdGFydCh0cnlTdGFydCkKKyAgICAgICAgICAgICwgbV90cnlDYXRj
aERlcHRoKHRyeURlcHRoKQorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAgICBDb250cm9s
RGF0YSgpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYo
Y29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkg
PT0gQmxvY2tUeXBlOjpJZjsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250
cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OlRyeTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRh
JiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0
Y2g7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYg
Y29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNo
OyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRy
b2wpIHsgcmV0dXJuIGlzQW55Q2F0Y2goY29udHJvbCkgJiYgY29udHJvbC5jYXRjaEtpbmQoKSA9
PSBDYXRjaEtpbmQ6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29u
c3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpUb3BMZXZlbDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3Qg
Q29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpMb29wOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29udHJv
bERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpCbG9jazsgfQpAQCAtMjIxLDYgKzI0MSw1NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gcmV0dXJuVHlwZS0+cmV0dXJuVHlwZShpKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQg
Y29udmVydFRyeVRvQ2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAg
ZXhjZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlw
ZTo6Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7Cisg
ICAgICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBt
X2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVy
dFRyeVRvQ2F0Y2hBbGwodW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhj
ZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6
Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2hBbGw7Cisg
ICAgICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBt
X2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRy
eVN0YXJ0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9j
a1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6
OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeVN0YXJ0OworICAgICAgICB9CisKKyAg
ICAgICAgdW5zaWduZWQgdHJ5RW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICBy
ZXR1cm4gbV90cnlFbmQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlEZXB0aCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09
IEJsb2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7
CisgICAgICAgICAgICByZXR1cm4gbV90cnlDYXRjaERlcHRoOworICAgICAgICB9CisKKyAgICAg
ICAgQ2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAg
cmV0dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAgICAgVHlwZWRUbXAgZXhjZXB0
aW9uKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5
cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGNlcHRpb247
CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdl
bmVyYXRvcjsKICAgICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CkBAIC0yMjgsNiAr
Mjk2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKICAgICAgICAg
UmVzdWx0TGlzdCByZXN1bHRzOwogICAgICAgICBCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlOwor
ICAgICAgICB1bnNpZ25lZCBtX3RyeVN0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX3RyeUVuZDsK
KyAgICAgICAgdW5zaWduZWQgbV90cnlDYXRjaERlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9j
YXRjaEtpbmQ7CisgICAgICAgIFR5cGVkVG1wIG1fZXhjZXB0aW9uOwogICAgIH07CiAKICAgICB1
c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwpAQCAtMjYwLDYgKzMzMyw4IEBAIHB1Ymxp
YzoKIAogICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlBy
b2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIGNv
bnN0IFNpZ25hdHVyZSYpOwogCisgICAgdm9pZCBmaW5hbGl6ZUVudHJ5cG9pbnRzKCk7CisKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVp
bnQ2NF90KTsKQEAgLTM0OSw3ICs0MjQsNyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVHlwZWRUbXAgY2FsbGVlSW5z
dGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKLSAgICBCMzo6UGF0
Y2hwb2ludFZhbHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJhc2lj
QmxvY2sqLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25z
dCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgZXh0cmFB
cmdzID0geyB9KTsKKyAgICBzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9pbnQo
QmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMs
IGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gZXh0
cmFBcmdzID0geyB9KTsKIAogICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoVHlwZSwgQjM6OkFp
cjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihC
Mzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKQEAgLTM2MSwxMSArNDM2LDI5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMoKSB7IH0KICAgICB2b2lkIGRpZFBvcFZhbHVl
RnJvbVN0YWNrKCkgeyB9CiAKKyAgICBUbXAgZW1pdENhdGNoSW1wbChDYXRjaEtpbmQsIENvbnRy
b2xUeXBlJiwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXggPSAwKTsKKyAgICBQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhQYXRjaHBvaW50VmFs
dWUqLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiBhcmdzKTsKKwogICAgIGNvbnN0IEJhZzxCMzo6
UGF0Y2hwb2ludFZhbHVlKj4mIHBhdGNocG9pbnRzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3BhdGNocG9pbnRzOwogICAgIH0KIAorICAgIHZvaWQgYWRkU3RhY2tNYXAodW5zaWdu
ZWQgY2FsbFNpdGVJbmRleCwgU3RhY2tNYXAmJiBzdGFja21hcCkKKyAgICB7CisgICAgICAgIG1f
c3RhY2ttYXBzLmFkZChDYWxsU2l0ZUluZGV4KGNhbGxTaXRlSW5kZXgpLCBXVEZNb3ZlKHN0YWNr
bWFwKSk7CisgICAgfQorCisgICAgU3RhY2tNYXBzJiYgdGFrZVN0YWNrbWFwcygpCisgICAgewor
ICAgICAgICByZXR1cm4gV1RGTW92ZShtX3N0YWNrbWFwcyk7CisgICAgfQorCisgICAgVmVjdG9y
PFVubGlua2VkSGFuZGxlckluZm8+JiYgdGFrZUV4Y2VwdGlvbkhhbmRsZXJzKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxlcnMpOworICAgIH0KKwogcHJp
dmF0ZToKICAgICBCMzo6VHlwZSB0b0IzUmVzdWx0VHlwZShCbG9ja1NpZ25hdHVyZSByZXR1cm5U
eXBlKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmFsaWRhdGVJbnN0KEluc3QmIGluc3QpCkBA
IC00MTcsMTYgKzUxMCw2IEBAIHByaXZhdGU6CiAKICAgICBUbXAgbmV3VG1wKEIzOjpCYW5rIGJh
bmspCiAgICAgewotICAgICAgICBzd2l0Y2ggKGJhbmspIHsKLSAgICAgICAgY2FzZSBCMzo6R1A6
Ci0gICAgICAgICAgICBpZiAobV9mcmVlR1BzLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9mcmVlR1BzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBCMzo6RlA6Ci0gICAgICAgICAgICBpZiAobV9mcmVlRlBzLnNpemUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbV9mcmVlRlBzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQogICAgICAgICByZXR1cm4gbV9jb2RlLm5ld1RtcChiYW5rKTsKICAgICB9CiAKQEAg
LTQ5Nyw3ICs1ODAsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBSZXN1bHRUbXBUeXBlLCBzaXplX3QgaW5saW5lU2l6ZT4KLSAgICB2b2lkIGVtaXRQYXRjaHBv
aW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBj
b25zdCBWZWN0b3I8UmVzdWx0VG1wVHlwZSwgOD4mICByZXN1bHRzLCBWZWN0b3I8Q29uc3RyYWlu
ZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2lj
QmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBjb25zdCBWZWN0
b3I8UmVzdWx0VG1wVHlwZSwgOD4mIHJlc3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5s
aW5lU2l6ZT4mJiBhcmdzKQogICAgIHsKICAgICAgICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFs
KQogICAgICAgICAgICAgbV9wYXRjaHBvaW50U3BlY2lhbCA9IHN0YXRpY19jYXN0PEIzOjpQYXRj
aHBvaW50U3BlY2lhbCo+KG1fY29kZS5hZGRTcGVjaWFsKG1ha2VVbmlxdWU8QjM6OlBhdGNocG9p
bnRTcGVjaWFsPigpKSk7CkBAIC02ODksNiArNzcyLDIzIEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICB2b2lkIGVtaXRMb2FkKE9wY29kZSBvcCwgQjM6OlR5cGUgdHlwZSwgVG1w
IGJhc2UsIHNpemVfdCBvZmZzZXQsIFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBpZiAoQXJn
Ojppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHR5cGUpKSkKKyAgICAg
ICAgICAgIGFwcGVuZChvcCwgQXJnOjphZGRyKGJhc2UsIG9mZnNldCksIHJlc3VsdCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byB0ZW1wMiA9IGc2NCgpOworICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIHRlbXAyKTsKKyAgICAgICAgICAgIGFw
cGVuZChBZGQ2NCwgdGVtcDIsIGJhc2UsIHRlbXAyKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwg
QXJnOjphZGRyKHRlbXAyKSwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
ZW1pdExvYWQoVG1wIGJhc2UsIHNpemVfdCBvZmZzZXQsIFR5cGVkVG1wIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIGVtaXRMb2FkKG1vdmVPcEZvclZhbHVlVHlwZShyZXN1bHQudHlwZSgpKSwgdG9C
M1R5cGUocmVzdWx0LnR5cGUoKSksIGJhc2UsIG9mZnNldCwgcmVzdWx0LnRtcCgpKTsKKyAgICB9
CisKICAgICB2b2lkIGVtaXRUaHJvd0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25U
eXBlKTsKIAogICAgIHZvaWQgZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKQEAgLTc1MywxMSArODUz
LDkgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJl
ZyB9OwogICAgIEdQUlJlZyBtX2JvdW5kc0NoZWNraW5nU2l6ZUdQUiB7IEludmFsaWRHUFJSZWcg
fTsKICAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9
OworICAgIEdQUlJlZyBtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIgeyBJbnZhbGlkR1BSUmVnIH07
CiAgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OwogCi0gICAgVmVjdG9yPFRtcCwgOD4g
bV9mcmVlR1BzOwotICAgIFZlY3RvcjxUbXAsIDg+IG1fZnJlZUZQczsKLQogICAgIEhhc2hNYXA8
QmxvY2tTaWduYXR1cmUsIEIzOjpUeXBlPiBtX3R1cGxlTWFwOwogICAgIC8vIFRoaXMgaXMgb25s
eSBmaWxsZWQgaWYgd2UgYXJlIGR1bXBpbmcgSVIuCiAgICAgQmFnPEIzOjpQYXRjaHBvaW50VmFs
dWUqPiBtX3BhdGNocG9pbnRzOwpAQCAtNzc0LDYgKzg3MiwxNSBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fbnVtSW1wb3J0RnVuY3Rpb25zOwogCiAgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFs
KiBtX3BhdGNocG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworCisgICAgUmVmUHRyPEIzOjpBaXI6
OlByb2xvZ3VlR2VuZXJhdG9yPiBtX3Byb2xvZ3VlR2VuZXJhdG9yOworCisgICAgVmVjdG9yPEJh
c2ljQmxvY2sqPiBtX2NhdGNoRW50cnlwb2ludHM7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBt
X3RyeUNhdGNoRGVwdGggeyAwIH07IC8vIE9PUFM6IGluY3JlbWVudCBldmVyeXdoZXJlCisgICAg
Q2hlY2tlZDx1bnNpZ25lZD4gbV9jYWxsU2l0ZUluZGV4IHsgMCB9OyAvLyBPT1BTOiBpbmNyZW1l
bnQgZXZlcnl3aGVyZQorICAgIFN0YWNrTWFwcyBtX3N0YWNrbWFwczsKKyAgICBWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIC8vIE1lbW9yeSBh
Y2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVy
ZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCkBAIC04NDcsMTEgKzk1
NCw5IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAg
bV9jb2RlLnBpblJlZ2lzdGVyKG1fYm91bmRzQ2hlY2tpbmdTaXplR1BSKTsKICAgICB9CiAKLSAg
ICBtX2NvZGUuc2V0TnVtRW50cnlwb2ludHMoMSk7Ci0KLSAgICBHUFJSZWcgY29udGV4dEluc3Rh
bmNlID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJv
bG9ndWVTY3JhdGNoR1BSc1sxXSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKyAgICBtX3By
b2xvZ3VlV2FzbUNvbnRleHRHUFIgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGlu
Z0NvbnZlbnRpb24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJzWzFdIDogbV93YXNtQ29udGV4dEluc3Rh
bmNlR1BSOwogCi0gICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdl
bmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5j
dGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAg
IG1fcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3Vl
R2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUm
IGNvZGUpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwogICAgICAgICBjb2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0KTsKIApAQCAt
ODkxLDMxICs5OTYsMzMgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1v
ZAogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gd2FzbUNhbGxpbmdDb252ZW50aW9u
KCkucHJvbG9ndWVTY3JhdGNoR1BSc1swXTsKIAogICAgICAgICAgICAgICAgIGlmIChDb250ZXh0
Ojp1c2VGYXN0VExTKCkpCi0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJ
bnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0SW5zdGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKIAogICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzY3JhdGNoKTsKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CiAgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCiAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93
LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2gsIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5k
KGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGNvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tM
aW1pdCgpKSkpOworICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRy
KENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3By
b2xvZ3VlV2FzbUNvbnRleHRHUFIsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQo
KSkpKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
b3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmds
ZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29k
ZSgpKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNl
c0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVl
cyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgotICAgICAgICAgICAgICAgIGppdC5sb2FkV2Fz
bUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgICAgIGppdC5s
b2FkV2FzbUNvbnRleHRJbnN0YW5jZShtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfSk7CiAKLSAgICBtX2NvZGUuc2V0UHJvbG9ndWVGb3JF
bnRyeXBvaW50KDAsIFdURk1vdmUocHJvbG9ndWVHZW5lcmF0b3IpKTsKLQogICAgIGlmIChDb250
ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZzY0KCk7CiAg
ICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2Ug
aW5zdGFuY2UgdmFsdWUuCi0gICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNl
KSwgbV9pbnN0YW5jZVZhbHVlKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChtX3Byb2xvZ3Vl
V2FzbUNvbnRleHRHUFIpLCBtX2luc3RhbmNlVmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBt
X2luc3RhbmNlVmFsdWUgPSB7IFRtcChjb250ZXh0SW5zdGFuY2UpLCBUeXBlczo6STY0IH07Cisg
ICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IHsgVG1wKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUiks
IFR5cGVzOjpJNjQgfTsKKworICAgIGFwcGVuZChFbnRyeVN3aXRjaCk7CisgICAgbV9tYWluRW50
cnlwb2ludFN0YXJ0ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBt
X21haW5FbnRyeXBvaW50U3RhcnQ7CiAKICAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CiAg
ICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKQEAgLTk1NCw2ICsx
MDYxLDY1IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICBl
bWl0RW50cnlUaWVyVXBDaGVjaygpOwogfQogCit2b2lkIEFpcklSR2VuZXJhdG9yOjpmaW5hbGl6
ZUVudHJ5cG9pbnRzKCkKK3sKKyAgICB1bnNpZ25lZCBudW1FbnRyeXBvaW50cyA9IDEgKyBtX2Nh
dGNoRW50cnlwb2ludHMuc2l6ZSgpOworICAgIG1fcHJvYy5zZXROdW1FbnRyeXBvaW50cyhudW1F
bnRyeXBvaW50cyk7CisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgwLCBSZWY8
QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+KCptX3Byb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAg
ICBpZiAobV9jYXRjaEVudHJ5cG9pbnRzLnNpemUoKSkgeworICAgICAgICBSZWY8QjM6OkFpcjo6
UHJvbG9ndWVHZW5lcmF0b3I+IGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRU
YXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFtdIChDQ2FsbEhlbHBlcnMm
IGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICBqaXQuZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRs
aW5nIHByZWNpc2UgYWxsb2NhdGlvbnMgaW4gV2FzbUIzSVJHZW5lcmF0b3IgY2F0Y2ggZW50cnlw
b2ludHMgbWlnaHQgYmUgdW5uZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEzCisgICAgICAgICAgICAgICAgYXV0
byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVj
aXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgICAgIGppdC5hbmRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBN
YXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAg
ICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgUHJlY2lzZUFs
bG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJl
Y2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIEdQUkluZm86OnJlZ1QwKTsKKworICAgICAg
ICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QzKTsKKworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9y
V2FzbUNhdGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSkp
OworICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdU
MywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKworICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9m
ZnNldCgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LnN0
b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkp
OworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgaml0
LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpyZWdUMyk7CisKKyAgICAgICAgICAg
IGppdC5wcm9iZSh0YWdDRnVuY3Rpb248SklUUHJvYmVQdHJUYWc+KGJ1aWxkRW50cnlCdWZmZXJG
b3JDYXRjaCksIG51bGxwdHIpOworCisgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgICAgICAg
ICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAgICAgLy8gU2hhcmVk
IHByb2xvZ3VlIGV4cGVjdHMgdGhpcyBpbiB0aGlzIHJlZ2lzdGVyIHdoZW4gZW50ZXJpbmcgdGhl
IGZ1bmN0aW9uIHVzaW5nIGZhc3QgVExTLgorICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNv
bnRleHRJbnN0YW5jZShtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYXRjaEVu
dHJ5cG9pbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9y
RW50cnlwb2ludCgxICsgaSwgY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvci5jb3B5UmVmKCkpOworICAg
IH0KKworICAgIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Qgc3VjY2Vzc29yczsKKyAgICBzdWNj
ZXNzb3JzLmFwcGVuZChtX21haW5FbnRyeXBvaW50U3RhcnQpOworICAgIHN1Y2Nlc3NvcnMuYXBw
ZW5kVmVjdG9yKG1fY2F0Y2hFbnRyeXBvaW50cyk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChudW1F
bnRyeXBvaW50cyA9PSBzdWNjZXNzb3JzLnNpemUoKSk7CisgICAgbV9yb290QmxvY2stPnN1Y2Nl
c3NvcnMoKSA9IHN1Y2Nlc3NvcnM7Cit9CisKIEIzOjpUeXBlIEFpcklSR2VuZXJhdG9yOjp0b0Iz
UmVzdWx0VHlwZShCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlKQogewogICAgIGlmIChyZXR1cm5U
eXBlLT5yZXR1cm5zVm9pZCgpKQpAQCAtMTQyOCw2ICsxNTk0LDggQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IAogICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8
aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICBzd2l0Y2ggKGdsb2JhbC5i
aW5kaW5nTW9kZSkgewogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdN
b2RlOjpFbWJlZGRlZEluSW5zdGFuY2U6CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy8gZW1p
dExvYWQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCB0b0IzVHlwZSh0eXBlKSwgdGVtcCwgb2Zm
c2V0LCByZXN1bHQpOwogICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBC
Mzo6d2lkdGhGb3JUeXBlKHRvQjNUeXBlKHR5cGUpKSkpCiAgICAgICAgICAgICBhcHBlbmQobW92
ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgcmVzdWx0KTsK
ICAgICAgICAgZWxzZSB7CkBAIC0xNDM5LDYgKzE2MDcsOCBAQCBhdXRvIEFpcklSR2VuZXJhdG9y
OjpnZXRHbG9iYWwodWludDMyX3QgCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xv
YmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZToKICAgICAgICAgQVNTRVJUKGds
b2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpN
dXRhYmxlKTsKKyAgICAgICAgLy8gT09QUworICAgICAgICAvLyBlbWl0TG9hZChNb3ZlLCBCMzo6
SW50NjQsIHRlbXAsIG9mZnNldCwgdGVtcCk7CiAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRy
Rm9ybShvZmZzZXQsIEIzOjpXaWR0aDY0KSkKICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmFkZHIodGVtcCwgb2Zmc2V0KSwgdGVtcCk7CiAgICAgICAgIGVsc2UgewpAQCAtMzAxMiw1NyAr
MzE4MiwyMjQgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibAogICAg
IHJldHVybiB7IH07CiB9CiAKLS8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRp
b25zIGluIHRoZSBBaXIgZ2VuZXJhdG9yCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMxMjExCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWdu
YXR1cmUsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNr
JiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgKyttX3RyeUNhdGNoRGVwdGg7CisKKyAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBzcGxpdFN0YWNrKHNp
Z25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICByZXN1bHQgPSBDb250cm9s
RGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVyZSksIEJs
b2NrVHlwZTo6VHJ5LCBjb250aW51YXRpb24sICsrbV9jYWxsU2l0ZUluZGV4LCBtX3RyeUNhdGNo
RGVwdGgpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENh
dGNoKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVz
dWx0TGlzdCYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNo
KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3Rh
Y2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiB7IH07CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBk
YXRhLnJlc3VsdHMpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0
U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNoVG9VbnJl
YWNoYWJsZShleGNlcHRpb25JbmRleCwgc2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKIH0KIAot
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkLCBjb25z
dCBTaWduYXR1cmUmLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFjayYgY3VycmVudFN0YWNrLCBD
b250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0cyk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1f
Y3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1
cm4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRhdGEpOwogfQogCi1hdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRDYXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2Vw
dGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEs
IFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFRtcCBidWZmZXIgPSBlbWl0Q2F0Y2hJbXBsKENhdGNo
S2luZDo6Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUg
dHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgVHlwZWRUbXAgdG1wID0gdG1w
Rm9yVHlwZSh0eXBlKTsKKyAgICAgICAgZW1pdExvYWQoYnVmZmVyLCBpICogc2l6ZW9mKHVpbnQ2
NF90KSwgdG1wKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQodG1wKTsKKyAgICB9CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hh
YmxlKENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBlbWl0Q2F0Y2hJ
bXBsKENhdGNoS2luZDo6Q2F0Y2hBbGwsIGRhdGEpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUm
KSAtPiBQYXJ0aWFsUmVzdWx0CitUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwoQ2F0
Y2hLaW5kIGtpbmQsIENvbnRyb2xUeXBlJiBkYXRhLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Cisg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBtX2NhdGNoRW50cnlw
b2ludHMuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsKKworICAgIGlmIChDb250cm9sVHlwZTo6aXNU
cnkoZGF0YSkpIHsKKyAgICAgICAgaWYgKGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCkKKyAgICAg
ICAgICAgIGRhdGEuY29udmVydFRyeVRvQ2F0Y2goKyttX2NhbGxTaXRlSW5kZXgsIGc2NCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21f
Y2FsbFNpdGVJbmRleCwgZzY0KCkpOworICAgIH0KKyAgICAvLyBXZSBjb252ZXJ0IGZyb20gInRy
eSIgdG8gImNhdGNoIiBDb250cm9sVHlwZSBhYm92ZS4gVGhpcyBkb2Vzbid0CisgICAgLy8gaGFw
cGVuIGlmIENvbnRyb2xUeXBlIGlzIGFscmVhZHkgYSAiY2F0Y2giLiBUaGlzIGNhbiBoYXBwZW4g
d2hlbgorICAgIC8vIHdlIGhhdmUgbXVsdGlwbGUgY2F0Y2hlcyBsaWtlICJ0cnkge30gY2F0Y2go
QSl7fSBjYXRjaChCKXt9Li4uQ2F0Y2hBbGwoRSl7fSIuCisgICAgLy8gV2UganVzdCBjb252ZXJ0
IHRoZSBmaXJzdCBDb250cm9sVHlwZSB0byBhIGNhdGNoLCB0aGVuIHRoZSBvdGhlcnMgd2lsbAor
ICAgIC8vIHVzZSBpdHMgZmllbGRzLgorICAgIEFTU0VSVChDb250cm9sVHlwZTo6aXNBbnlDYXRj
aChkYXRhKSk7CisKKyAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hL
aW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsK
KyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0
YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5Q2F0Y2hEZXB0aCwgZXhjZXB0aW9uSW5kZXgg
fSk7CisKKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJs
b2NrKTsKKworICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOworICAgIGF1dG8gbG9hZEZy
b21TY3JhdGNoQnVmZmVyID0gWyZdIChUeXBlZFRtcCByZXN1bHQpIHsKKyAgICAgICAgc2l6ZV90
IG9mZnNldCA9IHNpemVvZih1aW50NjRfdCkgKiBpbmRleEluQnVmZmVyOworICAgICAgICArK2lu
ZGV4SW5CdWZmZXI7CisgICAgICAgIFRtcCBidWZmZXJQdHIgPSBUbXAoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgZW1pdExvYWQoYnVmZmVyUHRyLCBvZmZzZXQsIHJlc3VsdCk7Cisg
ICAgfTsKKworICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKKyAgICAgICAgbG9hZEZy
b21TY3JhdGNoQnVmZmVyKGxvY2FsKTsKKworICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4
ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytj
b250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0byYgY29udHJvbERhdGEgPSBtX3BhcnNlci0+Y29u
dHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAgYXV0byYgZXhw
cmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFR5cGVkVG1wIHRtcCA9
IGV4cHJlc3Npb25TdGFja1tpXS52YWx1ZSgpOworICAgICAgICAgICAgbG9hZEZyb21TY3JhdGNo
QnVmZmVyKHRtcCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2Ugc2V0IG91ciBjdXJyZW50IENv
bnRyb2xFbnRyeSdzIGV4Y2VwdGlvbiBiZWxvdyBhZnRlciB0aGUgcGF0Y2hwb2ludC4KKyAgICAg
ICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGNvbnRyb2xEYXRhKSAmJiAmZGF0YSAhPSAm
Y29udHJvbERhdGEpCisgICAgICAgICAgICBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIoY29udHJvbERh
dGEuZXhjZXB0aW9uKCkpOworICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNo
ID0gYWRkUGF0Y2hwb2ludChtX3Byb2MuYWRkVHVwbGUoeyBCMzo6cG9pbnRlclR5cGUoKSwgQjM6
OnBvaW50ZXJUeXBlKCkgfSkpOworICAgIHBhdGNoLT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0
cnVlOworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlckxhdGUgPSBSZWdpc3RlclNldDo6dm9sYXRp
bGVSZWdpc3RlcnNGb3JKU0NhbGwoKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHBh
dGNoLT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUikpOworICAgIHBhdGNoLT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5j
YWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxs
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENs
ZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBU
bXAgZXhjZXB0aW9uID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBUbXAgYnVm
ZmVyID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgZW1pdFBhdGNocG9pbnQo
bV9jdXJyZW50QmxvY2ssIHBhdGNoLCBWZWN0b3I8VG1wPiB7IGV4Y2VwdGlvbiwgYnVmZmVyIH0s
IFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgMT4geyBpbnN0YW5jZVZhbHVlKCkgfSk7CisgICAgYXBw
ZW5kKE1vdmUsIGV4Y2VwdGlvbiwgZGF0YS5leGNlcHRpb24oKSk7CisKKyAgICByZXR1cm4gYnVm
ZmVyOwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUo
Q29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBk
YXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9s
VHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHVuc2lnbmVkIHRhcmdldERlcHRoID0gMDsKKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5KHRh
cmdldCkpCisgICAgICAgIHRhcmdldERlcHRoID0gdGFyZ2V0LnRyeURlcHRoKCk7CisKKyAgICBt
X2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgZGF0YS50
cnlTdGFydCgpLCArK21fY2FsbFNpdGVJbmRleCwgMCwgbV90cnlDYXRjaERlcHRoLCB0YXJnZXRE
ZXB0aCB9KTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRU
aHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0
YWNrJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5z
aWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNr
JikgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7
CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lk
KTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcGF0Y2gtPmNsb2Ji
ZXIoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworCisgICAgVmVj
dG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25z
dHJhaW5lZFRtcChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoVG1wKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQ
UjEpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoYXJnc1tpXSwgVmFsdWVSZXA6
OnN0YWNrQXJndW1lbnQoaSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSk7CisKKyAgICBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0
aW9ucyhwYXRjaCwgcGF0Y2hBcmdzKTsKKworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMs
IGV4Y2VwdGlvbkluZGV4LCBoYW5kbGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIC8vIE9PUFM6IHNoYXJl
IGNvZGUgd2l0aCBCMyBJUiBnZW5lcmF0b3IgaGVyZS4KKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKKyAgICAgICAgaGFuZGxl
LmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHJlY2lz
ZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJv
LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6
aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtlZEJsb2Nr
OjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIHNj
cmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAg
ICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFsbG9jYXRp
b246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFs
bG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAgICAgICAgICBsb2FkZWRD
YXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisKKyAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGNlcHRpb25JbmRleCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQu
ZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7
CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJvdykpOworICAgICAgICB9KTsKKyAgICB9KTsKKwor
ICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVG1wKCksIFdURk1vdmUo
cGF0Y2hBcmdzKSk7CisKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRh
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBh
ZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6
dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWlu
YWwgPSB0cnVlOworCisgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCAzPiBwYXRjaEFyZ3M7Cisg
ICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcChpbnN0YW5jZVZhbHVlKCksIFZhbHVl
UmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQo
Q29uc3RyYWluZWRUbXAoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgVmFsdWVSZXA6
OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25z
dHJhaW5lZFRtcChkYXRhLmV4Y2VwdGlvbigpLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMikpKTsKKworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJl
cGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNoLCBwYXRjaEFyZ3MpOworICAgIHBhdGNo
LT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQ
cmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNj
cmF0Y2gpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6
Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0g
aml0Lmp1bXAoKTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0
T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisg
ICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7
CisKKyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAg
ICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRocm93KSk7CisgICAgICAgIH0pOwor
ICAgIH0pOworCisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBUbXAo
KSwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTMyMDks
NyArMzU0Niw4IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUKICAg
ICBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7CiAgICAgICAgIGFwcGVu
ZChkYXRhLnNwZWNpYWwsIEp1bXApOwogICAgICAgICBkYXRhLnNwZWNpYWwtPnNldFN1Y2Nlc3Nv
cnMobV9jdXJyZW50QmxvY2spOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKGRhdGEuYmxvY2tUeXBl
KCkgPT0gQmxvY2tUeXBlOjpUcnkgfHwgZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNh
dGNoKQorICAgICAgICAtLW1fdHJ5Q2F0Y2hEZXB0aDsKIAogICAgIGlmIChkYXRhLmJsb2NrVHlw
ZSgpID09IEJsb2NrVHlwZTo6TG9vcCkgewogICAgICAgICBtX291dGVyTG9vcHMucmVtb3ZlTGFz
dCgpOwpAQCAtMzIzMyw3ICszNTcxLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9V
bnJlYWNoYWJsZQogICAgIHJldHVybiB7IH07CiB9CiAKLUIzOjpQYXRjaHBvaW50VmFsdWUqIEFp
cklSR2VuZXJhdG9yOjplbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBW
ZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgcGF0Y2hBcmdz
KQorc3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlPiBBaXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2Nr
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywg
Y29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRj
aEFyZ3MpCiB7CiAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQodG9CM1Jlc3Vs
dFR5cGUoJnNpZ25hdHVyZSkpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVk
ID0gdHJ1ZTsKQEAgLTMyNTgsOCArMzU5Niw5IEBAIEIzOjpQYXRjaHBvaW50VmFsdWUqIEFpcklS
R2VuZXJhdG9yOjplbWkKICAgICAgICAgICAgIHJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6
VmFsdWVSZXAodmFsdWVMb2NhdGlvbikpOwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25z
dHJhaW50cyA9IFdURk1vdmUocmVzdWx0Q29uc3RyYWludHMpOwogICAgIH0KKyAgICBQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlIGV4Y2VwdGlvbkhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9y
RXhjZXB0aW9ucyhwYXRjaHBvaW50LCBwYXRjaEFyZ3MpOwogICAgIGVtaXRQYXRjaHBvaW50KGJs
b2NrLCBwYXRjaHBvaW50LCByZXN1bHRzLCBXVEZNb3ZlKHBhdGNoQXJncykpOwotICAgIHJldHVy
biBwYXRjaHBvaW50OworICAgIHJldHVybiB7IHBhdGNocG9pbnQsIGV4Y2VwdGlvbkhhbmRsZSB9
OwogfQogCiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CkBAIC0zMjk1LDE0ICsz
NjM0LDE3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnUKICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNXYXNtQmxvY2ssIGlzRW1iZWRkZXJC
bG9jayk7CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGVtaXRD
YWxsUGF0Y2hwb2ludChpc1dhc21CbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzKTsKKyAg
ICAgICAgICAgIGF1dG8gcGFpciA9IGVtaXRDYWxsUGF0Y2hwb2ludChpc1dhc21CbG9jaywgc2ln
bmF0dXJlLCByZXN1bHRzLCBhcmdzKTsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBw
YWlyLmZpcnN0OworICAgICAgICAgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29u
ZDsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5l
ZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCiAgICAg
ICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcg
dG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJM
YXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nKSk7CiAKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVh
ckNhbGwoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewogICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVu
Y3Rpb25JbmRleCB9KTsKQEAgLTMzMjEsMTMgKzM2NjMsMTcgQEAgYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkQ2FsbCh1aW50MzJfdCBmdQogCiAgICAgICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRU
bXA+IGp1bXBBcmdzOwogICAgICAgICAgICAganVtcEFyZ3MuYXBwZW5kKHsganVtcERlc3RpbmF0
aW9uLCBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlciB9KTsKLSAgICAgICAgICAgIGF1dG8qIHBh
dGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNocG9pbnQoaXNFbWJlZGRlckJsb2NrLCBzaWduYXR1cmUs
IHJlc3VsdHMsIGFyZ3MsIFdURk1vdmUoanVtcEFyZ3MpKTsKKyAgICAgICAgICAgIGF1dG8gcGFp
ciA9IGVtaXRDYWxsUGF0Y2hwb2ludChpc0VtYmVkZGVyQmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0
cywgYXJncywgV1RGTW92ZShqdW1wQXJncykpOworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2lu
dCA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIu
c2Vjb25kOworCiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlh
bCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNl
LgogICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBj
YWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZykpOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3RoaXNdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS5nZW5lcmF0
ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3Bh
cmFtcy5wcm9jKCkucmVzdWx0Q291bnQocGFyYW1zLnZhbHVlKCktPnR5cGUoKSldLmdwcigpLCBX
YXNtRW50cnlQdHJUYWcpOwogICAgICAgICAgICAgfSk7CiAKQEAgLTMzMzksMTIgKzM2ODUsMTUg
QEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdQogICAgICAgICAvLyBU
aGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwg
YW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgogICAgICAgICByZXN0b3Jl
V2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2lu
Zm8ubWVtb3J5LCBjdXJyZW50SW5zdGFuY2UsIGNvbnRpbnVhdGlvbik7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRC
bG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzKTsKKyAgICAgICAgYXV0byBwYWlyID0gZW1p
dENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3Mp
OworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gcGFpci5maXJzdDsKKyAgICAgICAgYXV0byBl
eGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29uZDsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9i
YmVyIHRoZSBzaXplIHJlZ2lzdGVyIHNpbmNlIHRoZSBMTEludCBhbHdheXMgYm91bmRzIGNoZWNr
cwogICAgICAgICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCBtX2luZm8u
bWVtb3J5LmlzU2hhcmVkKCkpCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShS
ZWdpc3RlclNldCB7IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkuYm91bmRzQ2hlY2tpbmdTaXpl
UmVnaXN0ZXIgfSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJh
dGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNt
RW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMzUyMyw3ICszODcyLDkg
QEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChUeQogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQogICAgICAgICBy
ZXN1bHRzLmFwcGVuZCh0bXBGb3JUeXBlKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKSk7CiAKLSAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gZW1pdENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBz
aWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MsIFdURk1vdmUoZXh0cmFBcmdzKSk7CisgICAgYXV0byBw
YWlyID0gZW1pdENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBzaWduYXR1cmUsIHJlc3Vs
dHMsIGFyZ3MsIFdURk1vdmUoZXh0cmFBcmdzKSk7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IHBh
aXIuZmlyc3Q7CisgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29uZDsKIAogICAg
IC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2lu
Y2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCiAgICAgLy8gV2UgcGVzc2ltaXN0
aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhhdCBpcyBib3Vu
ZHMgY2hlY2tpbmcgc28KQEAgLTM1MzUsNiArMzg4Niw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6
OmVtaXRJbmRpcmVjdENhbGwoVHkKIAogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMs
IHRoaXMpOwogICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1bHRDb3Vu
dChwYXJhbXMudmFsdWUoKS0+dHlwZSgpKV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAg
fSk7CiAKQEAgLTM2MTUsMjUgKzM5NjcsMjcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3RpbwogICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIo
aXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwg
c2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5w
YXJzZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmZpbmFsaXplRW50cnlwb2ludHMoKTsKIAogICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgKytpKQogICAgICAgICAgICAgYmxvY2st
PnN1Y2Nlc3NvckJsb2NrKGkpLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CiAgICAgfQogCi0gICAg
ewotICAgICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoQjM6OkFpck1v
ZGUpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0ZWQgcGF0Y2hwb2ludHMiKTsK
LSAgICAgICAgICAgIGZvciAoQjM6OlBhdGNocG9pbnRWYWx1ZSoqIHBhdGNoIDogaXJHZW5lcmF0
b3IucGF0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oZGVlcER1bXAocHJv
Y2VkdXJlLCAqcGF0Y2gpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEIzOjpBaXI6OnByZXBhcmVG
b3JHZW5lcmF0aW9uKGNvZGUpOwotICAgICAgICBCMzo6QWlyOjpnZW5lcmF0ZShjb2RlLCAqY29t
cGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKLSAgICAgICAgY29tcGlsYXRpb25D
b250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9k
dWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9
IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAgaWYgKFVOTElLRUxZ
KHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzOjpBaXJNb2RlKSkpIHsKKyAgICAgICAgZGF0YUxv
Z0xuKCJHZW5lcmF0ZWQgcGF0Y2hwb2ludHMiKTsKKyAgICAgICAgZm9yIChCMzo6UGF0Y2hwb2lu
dFZhbHVlKiogcGF0Y2ggOiBpckdlbmVyYXRvci5wYXRjaHBvaW50cygpKQorICAgICAgICAgICAg
ZGF0YUxvZ0xuKGRlZXBEdW1wKHByb2NlZHVyZSwgKnBhdGNoKSk7CiAgICAgfQogCisgICAgQjM6
OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29kZSk7CisgICAgQjM6OkFpcjo6Z2VuZXJhdGUo
Y29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CisKKyAgICBjb21w
aWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVh
c2VCeXByb2R1Y3RzKCk7CisgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3Rl
cnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgIHJlc3VsdC0+
c3RhY2ttYXBzID0gaXJHZW5lcmF0b3IudGFrZVN0YWNrbWFwcygpOworICAgIHJlc3VsdC0+ZXhj
ZXB0aW9uSGFuZGxlcnMgPSBpckdlbmVyYXRvci50YWtlRXhjZXB0aW9uSGFuZGxlcnMoKTsKKwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUxNzgsNiArNTUzMiw0OCBAQCB0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wCiAgICAgcmV0dXJuIHsgfTsKIH0KIAorUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBCM0lSR2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hwb2ludEZv
ckV4Y2VwdGlvbnMoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVmVjdG9yPENvbnN0cmFpbmVkVG1w
PiYgYXJncykKK3sKKyAgICArK21fY2FsbFNpdGVJbmRleDsKKyAgICBpZiAoIW1fdHJ5Q2F0Y2hE
ZXB0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxUbXA+IGxpdmVWYWx1ZXM7
CisgICAgZm9yIChjb25zdCBhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQorICAgICAgICBsaXZlVmFs
dWVzLmFwcGVuZChsb2NhbCk7CisgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBj
b250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJ
bmRleCkgeworICAgICAgICBDb250cm9sRGF0YSYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3Rh
Y2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAgICAgICBTdGFjayYgZXhwcmVzc2lv
blN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG1wIDogZXhwcmVzc2lv
blN0YWNrKQorICAgICAgICAgICAgbGl2ZVZhbHVlcy5hcHBlbmQodG1wKTsKKyAgICAgICAgaWYg
KENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAgICAgbGl2ZVZhbHVlcy5h
cHBlbmQoZGF0YS5leGNlcHRpb24oKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0g
Y2hlY2tlZFN1bTx1bnNpZ25lZD4oYXJncy5zaXplKCksIHBhdGNoLT5yZXN1bHRDb25zdHJhaW50
cy5zaXplKCkpOworICAgIGZvciAoVG1wIHRtcCA6IGxpdmVWYWx1ZXMpCisgICAgICAgIGFyZ3Mu
YXBwZW5kKENvbnN0cmFpbmVkVG1wKHRtcCwgVmFsdWVSZXA6OkxhdGVDb2xkQW55KSk7CisKKyAg
ICBwYXRjaC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKworICAgIHJldHVybiBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlIHsgbV9jYWxsU2l0ZUluZGV4LCBvZmZzZXQgfTsKK30KKwor
dm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCBBaXJJUkdlbmVy
YXRvciogZ2VuZXJhdG9yKSBjb25zdAoreworICAgIGlmIChtX2NhbGxTaXRlSW5kZXggPT0gc19p
bnZhbGlkQ2FsbFNpdGVJbmRleCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RhY2tNYXAgdmFs
dWVzOworICAgIGlmIChwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4oKSA+PSBtX29mZnNldCkg
eworICAgICAgICB2YWx1ZXMgPSBTdGFja01hcChwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4o
KSAtIG1fb2Zmc2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vZmZzZXQ7IGkgPCBw
YXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4oKTsgKytpKQorICAgICAgICAgICAgdmFsdWVzW2kg
LSBtX29mZnNldF0gPSBPU1JFbnRyeVZhbHVlKHBhcmFtc1tpXSwgcGFyYW1zLnZhbHVlKCktPmNo
aWxkKGkpLT50eXBlKCkpOworICAgIH0KKyAgICBnZW5lcmF0b3ItPmFkZFN0YWNrTWFwKG1fY2Fs
bFNpdGVJbmRleCwgV1RGTW92ZSh2YWx1ZXMpKTsKKyAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihtX2NhbGxTaXRlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIGNs
YXNzIEIzSVJHZW5lcmF0b3I7CiBzdHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CiAg
ICAgdm9pZCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiwgQjNJUkdlbmVyYXRvciopIGNvbnN0OwogCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBzX2ludmFsaWRDYWxsU2l0ZUluZGV4ID0gIHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52YWxp
ZENhbGxTaXRlSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAK
ICAgICB1bnNpZ25lZCBtX2NhbGxTaXRlSW5kZXggeyBzX2ludmFsaWRDYWxsU2l0ZUluZGV4IH07
CiAgICAgdW5zaWduZWQgbV9vZmZzZXQ7CkBAIC0yNjEwLDggKzI2MTAsMTggQEAgUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZSBCM0lSR2VuZXJhdG9yOgogICAgIH0KIAogICAgIHVuc2lnbmVkIG9m
ZnNldCA9IHBhdGNoLT5udW1DaGlsZHJlbigpOwotICAgIGlmIChwYXRjaC0+dHlwZSgpICE9IFZv
aWQpCi0gICAgICAgIG9mZnNldCsrOworICAgIC8vIE9PUFM6IGFkZCB0ZXN0CisgICAgc3dpdGNo
IChwYXRjaC0+dHlwZSgpLmtpbmQoKSkgeworICAgIGNhc2UgQjM6OlZvaWQ6CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQjM6OlR1cGxlOiB7CisgICAgICAgIG9mZnNldCArPSBtX3Byb2MudHVw
bGVGb3JUeXBlKHBhdGNoLT50eXBlKCkpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGRlZmF1bHQ6CisgICAgICAgICsrb2Zmc2V0OworICAgICAgICBicmVhazsKKyAgICB9CiAK
ICAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKICAgICBwYXRjaC0+YXBw
ZW5kVmVjdG9yV2l0aFJlcChsaXZlVmFsdWVzLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOwpAQCAt
MjY1Nyw2ICsyNjY3LDEwIEBAIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENh
dGMKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgr
K21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlhYmxlKHBvaW50ZXJUeXBlKCkpKTsKICAg
ICB9CisgICAgLy8gV2UgY29udmVydCBmcm9tICJ0cnkiIHRvICJjYXRjaCIgQ29udHJvbFR5cGUg
YWJvdmUuIFRoaXMgZG9lc24ndAorICAgIC8vIGhhcHBlbiBpZiBDb250cm9sVHlwZSBpcyBhbHJl
YWR5IGEgImNhdGNoIi4gVGhpcyBjYW4gaGFwcGVuIHdoZW4KKyAgICAvLyB3ZSBoYXZlIG11bHRp
cGxlIGNhdGNoZXMgbGlrZSAidHJ5IHt9IGNhdGNoKEEpe30gY2F0Y2goQil7fS4uLkNhdGNoQWxs
KEUpe30iCisgICAgQVNTRVJUKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKTsKIAogICAg
IEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlID0ga2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoID8gSGFu
ZGxlclR5cGU6OkNhdGNoIDogSGFuZGxlclR5cGU6OkNhdGNoQWxsOwogICAgIG1fZXhjZXB0aW9u
SGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlclR5cGUsIGRhdGEudHJ5U3RhcnQoKSwgZGF0YS50cnlF
bmQoKSwgMCwgbV90cnlDYXRjaERlcHRoLCBleGNlcHRpb25JbmRleCB9KTsKQEAgLTMzMjQsNiAr
MzMzOCw3IEBAIHZvaWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2luTWFwKENvbXBpbGF0aW8KICAgICB9
CiB9CiAKKy8vIE9PUFM6IE1vdmUgdGhpcyB0byBzaGFyZWQgbG9jYWF0aW9uIGxlc3MgQjMgc3Bl
Y2lmaWMuCiB2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJ
bnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiBjb250
ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewogICAgIGlmICghY29udGV4dC5wcm9jZWR1
cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCShy
ZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw4ICsyMDMsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhCiAgICAgYm9vbCBmb3JjZVVzaW5nQjMgPSBmYWxzZTsK
ICAgICBpZiAoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNob2xkKCkgJiYgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+Y29kZVNlY3Rpb25TaXplID49IE9wdGlvbnM6OndlYkFzc2VtYmx5
QkJRQWlyTW9kZVRocmVzaG9sZCgpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwotICAg
IGVsc2UgaWYgKCFtX21vZHVsZUluZm9ybWF0aW9uLT5tX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2Vw
dGlvbnMucXVpY2tHZXQoZnVuY3Rpb25JbmRleCkpCi0gICAgICAgIGZvcmNlVXNpbmdCMyA9IHRy
dWU7CiAgICAgZWxzZSBpZiAoIU9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCiAgICAgICAgIGZv
cmNlVXNpbmdCMyA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludEdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTU5LDkgKzU1OSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dl
bmVyYXQKICAgICBSRUxFQVNFX0FTU0VSVCh1c2VkQnVmZmVyLmNhcGFjaXR5KCkgPT0gb2xkQ2Fw
YWNpdHkpOwogICAgICp0aHJlYWRTcGVjaWZpYyA9IFdURk1vdmUodXNlZEJ1ZmZlcik7CiAKLSAg
ICBpZiAoIW1fdXNlc0V4Y2VwdGlvbnMpCi0gICAgICAgIG1faW5mby5tX2Z1bmN0aW9uRG9lc05v
dFVzZUV4Y2VwdGlvbnMucXVpY2tTZXQobV9mdW5jdGlvbkluZGV4KTsKLQogICAgIHJldHVybiBX
VEZNb3ZlKG1fY29kZUJsb2NrKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgJKHJldmlzaW9uIDI4NzU4MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDYgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDog
cHVibGljIFRocmVhZAogCiAgICAgQml0VmVjdG9yIG1fZGVjbGFyZWRGdW5jdGlvbnM7CiAgICAg
Qml0VmVjdG9yIG1fZGVjbGFyZWRFeGNlcHRpb25zOwotICAgIEJpdFZlY3RvciBtX2Z1bmN0aW9u
RG9lc05vdFVzZUV4Y2VwdGlvbnM7CiAgICAgbXV0YWJsZSBCaXRWZWN0b3IgbV9yZWZlcmVuY2Vk
RnVuY3Rpb25zOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0
cmVhbWluZ1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJKHJldmlzaW9uIDI4NzU4MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNyArMTE3LDYgQEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rp
b25TaQogICAgIG1fZnVuY3Rpb25Db3VudCA9IGZ1bmN0aW9uQ291bnQ7CiAgICAgbV9mdW5jdGlv
bkluZGV4ID0gMDsKICAgICBtX2NvZGVPZmZzZXQgPSBtX29mZnNldDsKLSAgICBtX2luZm8tPm1f
ZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5lbnN1cmVTaXplKGZ1bmN0aW9uQ291bnQpOwog
CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcg
IiwgZnVuY3Rpb25Db3VudCk7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50
ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5j
dGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwg
bV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448522</attachid>
            <date>2022-01-06 12:08:41 -0800</date>
            <delta_ts>2022-01-06 12:48:53 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>47304</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5LDggQEAK
ICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisj
aW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBCMzo6QWlyOwpAQCAtMTI2LDIwICsxMjgsNDEgQEAgcHJp
dmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIH07CiAKK2NsYXNzIEFpcklSR2VuZXJhdG9yOworCitz
dHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdm9pZCBnZW5lcmF0ZShDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgQWlySVJHZW5l
cmF0b3IqKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlk
Q2FsbFNpdGVJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKwor
ICAgIHVuc2lnbmVkIG1fY2FsbFNpdGVJbmRleCB7IHNfaW52YWxpZENhbGxTaXRlSW5kZXggfTsK
KyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKIGNsYXNzIEFpcklSR2VuZXJhdG9yIHsKIHB1
YmxpYzoKICAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFR5cGVkVG1wOwogICAgIHVzaW5nIFJl
c3VsdExpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDg+OwogCiAgICAgc3RydWN0IENvbnRy
b2xEYXRhIHsKLSAgICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiBvcmlnaW4sIEJsb2NrU2ln
bmF0dXJlIHJlc3VsdCwgUmVzdWx0TGlzdCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFz
aWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAg
ICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBSZXN1
bHRMaXN0IHJlc3VsdFRtcHMsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24sIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250cm9s
QmxvY2tUeXBlKHR5cGUpCiAgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24p
CiAgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKICAgICAgICAgICAgICwgcmVzdWx0cyhy
ZXN1bHRUbXBzKQogICAgICAgICAgICAgLCByZXR1cm5UeXBlKHJlc3VsdCkKICAgICAgICAgewot
ICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7CisgICAgICAgIH0KKworICAgICAgICBD
b250cm9sRGF0YShCMzo6T3JpZ2luLCBCbG9ja1NpZ25hdHVyZSByZXN1bHQsIFJlc3VsdExpc3Qg
cmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgdW5z
aWduZWQgdHJ5U3RhcnQsIHVuc2lnbmVkIHRyeURlcHRoKQorICAgICAgICAgICAgOiBjb250cm9s
QmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24p
CisgICAgICAgICAgICAsIHNwZWNpYWwobnVsbHB0cikKKyAgICAgICAgICAgICwgcmVzdWx0cyhy
ZXN1bHRUbXBzKQorICAgICAgICAgICAgLCByZXR1cm5UeXBlKHJlc3VsdCkKKyAgICAgICAgICAg
ICwgbV90cnlTdGFydCh0cnlTdGFydCkKKyAgICAgICAgICAgICwgbV90cnlDYXRjaERlcHRoKHRy
eURlcHRoKQorICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBDb250cm9sRGF0YSgpCkBA
IC0xNDgsOCArMTcxLDggQEAgcHVibGljOgogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29u
c3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpJZjsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9s
RGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6
OlRyeTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBj
b250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7
IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29u
dHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wp
IHsgcmV0dXJuIGlzQW55Q2F0Y2goY29udHJvbCkgJiYgY29udHJvbC5jYXRjaEtpbmQoKSA9PSBD
YXRjaEtpbmQ6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3Qg
Q29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUb3BMZXZlbDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3QgQ29u
dHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpMb29wOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpC
bG9jazsgfQpAQCAtMjIxLDYgKzI0NCw1NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
cmV0dXJuVHlwZS0+cmV0dXJuVHlwZShpKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY29u
dmVydFRyeVRvQ2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhj
ZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6
Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7CisgICAg
ICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBtX2V4
Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVydFRy
eVRvQ2F0Y2hBbGwodW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhjZXB0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6Q2F0
Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2hBbGw7CisgICAg
ICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBtX2V4
Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRyeVN0
YXJ0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5
cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNh
dGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeVN0YXJ0OworICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgdHJ5RW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1
cm4gbV90cnlFbmQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlEZXB0aCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJs
b2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7Cisg
ICAgICAgICAgICByZXR1cm4gbV90cnlDYXRjaERlcHRoOworICAgICAgICB9CisKKyAgICAgICAg
Q2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0
dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAgICAgVHlwZWRUbXAgZXhjZXB0aW9u
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUg
PT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGNlcHRpb247Cisg
ICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdlbmVy
YXRvcjsKICAgICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CkBAIC0yMjgsNiArMjk5
LDExIEBAIHB1YmxpYzoKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKICAgICAgICAgUmVz
dWx0TGlzdCByZXN1bHRzOwogICAgICAgICBCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlOworICAg
ICAgICB1bnNpZ25lZCBtX3RyeVN0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX3RyeUVuZDsKKyAg
ICAgICAgdW5zaWduZWQgbV90cnlDYXRjaERlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9jYXRj
aEtpbmQ7CisgICAgICAgIFR5cGVkVG1wIG1fZXhjZXB0aW9uOwogICAgIH07CiAKICAgICB1c2lu
ZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwpAQCAtMjYwLDYgKzMzNiw4IEBAIHB1YmxpYzoK
IAogICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2Nl
ZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
LCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIGNvbnN0
IFNpZ25hdHVyZSYpOwogCisgICAgdm9pZCBmaW5hbGl6ZUVudHJ5cG9pbnRzKCk7CisKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0
dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2
NF90KTsKQEAgLTM0OSw3ICs0MjcsNyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVHlwZWRUbXAgY2FsbGVlSW5zdGFu
Y2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKLSAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxv
Y2sqLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBW
ZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgZXh0cmFBcmdz
ID0geyB9KTsKKyAgICBzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9pbnQoQmFz
aWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNv
bnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gZXh0cmFB
cmdzID0geyB9KTsKIAogICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoVHlwZSwgQjM6OkFpcjo6
T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihCMzo6
QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKQEAgLTM2MSwxMSArNDM5LDMwIEBAIHB1YmxpYzoKICAgICB2
b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMoKSB7IH0KICAgICB2b2lkIGRpZFBvcFZhbHVlRnJv
bVN0YWNrKCkgeyB9CiAKKyAgICBUbXAgZW1pdENhdGNoSW1wbChDYXRjaEtpbmQsIENvbnRyb2xU
eXBlJiwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXggPSAwKTsKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBh
dGNocG9pbnRGb3JFeGNlcHRpb25zKEIzOjpQYXRjaHBvaW50VmFsdWUqLCBWZWN0b3I8Q29uc3Ry
YWluZWRUbXAsIGlubGluZUNhcGFjaXR5PiYgYXJncyk7CisKICAgICBjb25zdCBCYWc8QjM6OlBh
dGNocG9pbnRWYWx1ZSo+JiBwYXRjaHBvaW50cygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gbV9wYXRjaHBvaW50czsKICAgICB9CiAKKyAgICB2b2lkIGFkZFN0YWNrTWFwKHVuc2lnbmVk
IGNhbGxTaXRlSW5kZXgsIFN0YWNrTWFwJiYgc3RhY2ttYXApCisgICAgeworICAgICAgICBtX3N0
YWNrbWFwcy5hZGQoQ2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KSwgV1RGTW92ZShzdGFja21h
cCkpOworICAgIH0KKworICAgIFN0YWNrTWFwcyYmIHRha2VTdGFja21hcHMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobV9zdGFja21hcHMpOworICAgIH0KKworICAgIFZlY3RvcjxV
bmxpbmtlZEhhbmRsZXJJbmZvPiYmIHRha2VFeGNlcHRpb25IYW5kbGVycygpCisgICAgeworICAg
ICAgICByZXR1cm4gV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJzKTsKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgQjM6OlR5cGUgdG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlw
ZSk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHZhbGlkYXRlSW5zdChJbnN0JiBpbnN0KQpAQCAt
NDE3LDE2ICs1MTQsNiBAQCBwcml2YXRlOgogCiAgICAgVG1wIG5ld1RtcChCMzo6QmFuayBiYW5r
KQogICAgIHsKLSAgICAgICAgc3dpdGNoIChiYW5rKSB7Ci0gICAgICAgIGNhc2UgQjM6OkdQOgot
ICAgICAgICAgICAgaWYgKG1fZnJlZUdQcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG1fZnJlZUdQcy50YWtlTGFzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QjM6OkZQOgotICAgICAgICAgICAgaWYgKG1fZnJlZUZQcy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1fZnJlZUZQcy50YWtlTGFzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIG1fY29kZS5uZXdUbXAoYmFuayk7CiAgICAgfQogCkBAIC00
OTYsOCArNTgzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxv
Y2ssIHBhdGNoLCBWZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9LCBWZWN0b3I8Q29uc3RyYWluZWRU
bXA+KCkpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDxzaXplX3QgaW5saW5lU2l6ZT4KKyAgICB2
b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50
VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNp
emU+JiYgYXJncykKKyAgICB7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ssIHBh
dGNoLCBWZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9LCBXVEZNb3ZlKGFyZ3MpKTsKKyAgICB9CisK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VG1wVHlwZSwgc2l6ZV90IGlubGluZVNpemU+
Ci0gICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0
Y2hwb2ludFZhbHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiAgcmVz
dWx0cywgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCisgICAgdm9p
ZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiByZXN1bHRzLCBWZWN0
b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKICAgICB7CiAgICAgICAgIGlm
ICghbV9wYXRjaHBvaW50U3BlY2lhbCkKICAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNpYWwg
PSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lhbCht
YWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOwpAQCAtNjg5LDYgKzc4MiwyMyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBlbWl0TG9hZChCMzo6QWly
OjpPcGNvZGUgb3AsIEIzOjpUeXBlIHR5cGUsIFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBUbXAg
cmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwg
QjM6OndpZHRoRm9yVHlwZSh0eXBlKSkpCisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRk
cihiYXNlLCBvZmZzZXQpLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gdGVtcDIgPSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShv
ZmZzZXQpLCB0ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCBiYXNlLCB0
ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcih0ZW1wMiksIHJlc3VsdCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKFRtcCBiYXNlLCBzaXplX3Qg
b2Zmc2V0LCBUeXBlZFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBlbWl0TG9hZChtb3ZlT3BG
b3JWYWx1ZVR5cGUocmVzdWx0LnR5cGUoKSksIHRvQjNUeXBlKHJlc3VsdC50eXBlKCkpLCBiYXNl
LCBvZmZzZXQsIHJlc3VsdC50bXAoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0VGhyb3dFeGNl
cHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKICAgICB2b2lkIGVtaXRFbnRy
eVRpZXJVcENoZWNrKCk7CkBAIC03NDgsMTYgKzg1OCwxNSBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjx1aW50MzJfdD4gbV9vdXRlckxvb3BzOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2Nr
IHsgbnVsbHB0ciB9OwogICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9Owor
ICAgIEJhc2ljQmxvY2sqIG1fbWFpbkVudHJ5cG9pbnRTdGFydCB7IG51bGxwdHIgfTsKICAgICBW
ZWN0b3I8VHlwZWRUbXA+IG1fbG9jYWxzOwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBh
bmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQg
d2l0aC4KICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAg
IEdQUlJlZyBtX2JvdW5kc0NoZWNraW5nU2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBH
UFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQ
UlJlZyBtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9v
bCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OwogCi0gICAgVmVjdG9yPFRtcCwgOD4gbV9mcmVlR1Bz
OwotICAgIFZlY3RvcjxUbXAsIDg+IG1fZnJlZUZQczsKLQogICAgIEhhc2hNYXA8QmxvY2tTaWdu
YXR1cmUsIEIzOjpUeXBlPiBtX3R1cGxlTWFwOwogICAgIC8vIFRoaXMgaXMgb25seSBmaWxsZWQg
aWYgd2UgYXJlIGR1bXBpbmcgSVIuCiAgICAgQmFnPEIzOjpQYXRjaHBvaW50VmFsdWUqPiBtX3Bh
dGNocG9pbnRzOwpAQCAtNzc0LDYgKzg4MywxNSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
bnVtSW1wb3J0RnVuY3Rpb25zOwogCiAgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFsKiBtX3BhdGNo
cG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworCisgICAgUmVmUHRyPEIzOjpBaXI6OlByb2xvZ3Vl
R2VuZXJhdG9yPiBtX3Byb2xvZ3VlR2VuZXJhdG9yOworCisgICAgVmVjdG9yPEJhc2ljQmxvY2sq
PiBtX2NhdGNoRW50cnlwb2ludHM7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3RyeUNhdGNo
RGVwdGggeyAwIH07IC8vIE9PUFM6IGluY3JlbWVudCBldmVyeXdoZXJlCisgICAgQ2hlY2tlZDx1
bnNpZ25lZD4gbV9jYWxsU2l0ZUluZGV4IHsgMCB9OyAvLyBPT1BTOiBpbmNyZW1lbnQgZXZlcnl3
aGVyZQorICAgIFN0YWNrTWFwcyBtX3N0YWNrbWFwczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5k
bGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIC8vIE1lbW9yeSBhY2Nlc3NlcyBp
biBXZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkg
aGF2ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCkBAIC04NDcsMTEgKzk2NSw5IEBAIEFp
cklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAgbV9jb2RlLnBp
blJlZ2lzdGVyKG1fYm91bmRzQ2hlY2tpbmdTaXplR1BSKTsKICAgICB9CiAKLSAgICBtX2NvZGUu
c2V0TnVtRW50cnlwb2ludHMoMSk7CisgICAgbV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSID0gQ29u
dGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3Jh
dGNoR1BSc1sxXSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKIAotICAgIEdQUlJlZyBjb250
ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJzWzFdIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwot
Ci0gICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9
IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgIG1fcHJvbG9n
dWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9y
RnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsK
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OwogICAgICAgICBjb2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0KTsKIApAQCAtODkxLDMxICsx
MDA3LDMzIEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xv
Z3VlU2NyYXRjaEdQUnNbMF07CiAKICAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFz
dFRMUygpKQotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
Y29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUik7CiAKICAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShu
ZWVkVW5kZXJmbG93Q2hlY2spKQogICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQo
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJh
bmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkp
KTsKKyAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6OkJlbG93LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9wcm9sb2d1ZVdh
c21Db250ZXh0R1BSLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKSk7CiAg
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5z
dHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5j
ZVZhbHVlICYmIENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICAgICAgICAgIC8vIE5v
IG92ZXJmbG93IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwg
bmVlZHMgdG8gYmUgY29ycmVjdC4KLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21D
b250ZXh0SW5zdGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0pOwogCi0gICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2lu
dCgwLCBXVEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7Ci0KICAgICBpZiAoQ29udGV4dDo6dXNl
RmFzdFRMUygpKSB7CiAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGc2NCgpOwogICAgICAgICAv
LyBGSVhNRTogV291bGQgYmUgbmljZSB0byBvbmx5IGRvIHRoaXMgaWYgd2UgdXNlIGluc3RhbmNl
IHZhbHVlLgotICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKGNvbnRleHRJbnN0YW5jZSksIG1faW5z
dGFuY2VWYWx1ZSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAobV9wcm9sb2d1ZVdhc21Db250
ZXh0R1BSKSwgbV9pbnN0YW5jZVZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9pbnN0YW5j
ZVZhbHVlID0geyBUbXAoY29udGV4dEluc3RhbmNlKSwgVHlwZXM6Okk2NCB9OworICAgICAgICBt
X2luc3RhbmNlVmFsdWUgPSB7IFRtcChtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpLCBUeXBlczo6
STY0IH07CisKKyAgICBhcHBlbmQoRW50cnlTd2l0Y2gpOworICAgIG1fbWFpbkVudHJ5cG9pbnRT
dGFydCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIG1fY3VycmVudEJsb2NrID0gbV9tYWluRW50
cnlwb2ludFN0YXJ0OwogCiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwogICAgIG1fbG9j
YWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CkBAIC05NTQsNiArMTA3Miw3OSBA
QCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAgZW1pdEVudHJ5
VGllclVwQ2hlY2soKTsKIH0KIAorLy8gT09QUzogZGUtZHVwbGljYXRlCitzdGF0aWMgdm9pZCBi
dWlsZEVudHJ5QnVmZmVyRm9yQ2F0Y2goUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCit7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7CisgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7Cisg
ICAgT3B0aW1pemluZ0pJVENhbGxlZSogY2FsbGVlID0gYml0d2lzZV9jYXN0PE9wdGltaXppbmdK
SVRDYWxsZWUqPihjYWxsRnJhbWUtPmNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsKKyAgICBjb25z
dCBTdGFja01hcCYgc3RhY2ttYXAgPSBjYWxsZWUtPnN0YWNrbWFwKGNhbGxTaXRlSW5kZXgpOwor
ICAgIFZNKiB2bSA9IGNvbnRleHQuZ3ByPFZNKj4oR1BSSW5mbzo6cmVnVDApOworICAgIHVpbnQ2
NF90KiBidWZmZXIgPSB2bS0+d2FzbUNvbnRleHQuc2NyYXRjaEJ1ZmZlckZvclNpemUoc3RhY2tt
YXAuc2l6ZSgpICogOCk7CisgICAgbG9hZFZhbHVlc0ludG9CdWZmZXIoY29udGV4dCwgc3RhY2tt
YXAsIGJ1ZmZlcik7CisKKyAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYnVmZmVyKTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRv
cjo6ZmluYWxpemVFbnRyeXBvaW50cygpCit7CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMg
PSAxICsgbV9jYXRjaEVudHJ5cG9pbnRzLnNpemUoKTsKKyAgICBtX3Byb2Muc2V0TnVtRW50cnlw
b2ludHMobnVtRW50cnlwb2ludHMpOworICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9p
bnQoMCwgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPigqbV9wcm9sb2d1ZUdlbmVyYXRv
cikpOworCisgICAgaWYgKG1fY2F0Y2hFbnRyeXBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgUmVm
PEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3Jl
YXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbdGhpc10g
KENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAg
ICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxpbmcgcHJlY2lzZSBhbGxvY2F0aW9ucyBpbiBXYXNtQjNJUkdlbmVyYXRv
ciBjYXRjaCBlbnRyeXBvaW50cyBtaWdodCBiZSB1bm5lY2Vzc2FyeQorICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyMTMKKyAgICAg
ICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRy
KENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7CisgICAgICAgICAg
ICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6
OmJsb2NrTWFzayksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE1hcmtlZEJsb2NrOjpvZmZz
ZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOwor
CisgICAgICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZz
ZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgR1BSSW5mbzo6cmVn
VDApOworCisgICAgICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDMpOworCisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZvcldhc21D
YXRjaE9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KEdQUkluZm86OnJlZ1QzLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworCisgICAgICAgICAgICBq
aXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxG
cmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6dGhpc0Fy
Z3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBHUFJJbmZvOjpyZWdUMyk7Cisg
ICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OnJlZ1QzKTsK
KworICAgICAgICAgICAgaml0LnByb2JlKHRhZ0NGdW5jdGlvbjxKSVRQcm9iZVB0clRhZz4oYnVp
bGRFbnRyeUJ1ZmZlckZvckNhdGNoKSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBTaGFyZWQgcHJvbG9ndWUgZXhwZWN0cyB0aGlzIGluIHRoaXMgcmVnaXN0ZXIgd2hl
biBlbnRlcmluZyB0aGUgZnVuY3Rpb24gdXNpbmcgZmFzdCBUTFMuCisgICAgICAgICAgICAgICAg
aml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2NhdGNoRW50cnlwb2ludHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2NvZGUu
c2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDEgKyBpLCBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yLmNv
cHlSZWYoKSk7CisgICAgfQorCisgICAgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCBzdWNjZXNz
b3JzOworICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKG1fbWFpbkVudHJ5cG9pbnRTdGFydCk7CisgICAg
c3VjY2Vzc29ycy5hcHBlbmRWZWN0b3IobV9jYXRjaEVudHJ5cG9pbnRzKTsKKworICAgIFJFTEVB
U0VfQVNTRVJUKG51bUVudHJ5cG9pbnRzID09IHN1Y2Nlc3NvcnMuc2l6ZSgpKTsKKyAgICBtX3Jv
b3RCbG9jay0+c3VjY2Vzc29ycygpID0gc3VjY2Vzc29yczsKK30KKwogQjM6OlR5cGUgQWlySVJH
ZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKEJsb2NrU2lnbmF0dXJlIHJldHVyblR5cGUpCiB7CiAg
ICAgaWYgKHJldHVyblR5cGUtPnJldHVybnNWb2lkKCkpCkBAIC0xNDI4LDYgKzE2MTksOCBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgCiAgICAgaW50MzJfdCBvZmZz
ZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIHN3
aXRjaCAoZ2xvYmFsLmJpbmRpbmdNb2RlKSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1h
dGlvbjo6QmluZGluZ01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZToKKyAgICAgICAgLy8gT09QUwor
ICAgICAgICAvLyBlbWl0TG9hZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIHRvQjNUeXBlKHR5
cGUpLCB0ZW1wLCBvZmZzZXQsIHJlc3VsdCk7CiAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRy
Rm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKICAgICAgICAg
ICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIEFyZzo6YWRkcih0ZW1wLCBvZmZz
ZXQpLCByZXN1bHQpOwogICAgICAgICBlbHNlIHsKQEAgLTE0MzksNiArMTYzMiw4IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCAKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOgogICAg
ICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246
Ok11dGFiaWxpdHk6Ok11dGFibGUpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vIGVtaXRM
b2FkKE1vdmUsIEIzOjpJbnQ2NCwgdGVtcCwgb2Zmc2V0LCB0ZW1wKTsKICAgICAgICAgaWYgKEFy
Zzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6OldpZHRoNjQpKQogICAgICAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpLCB0ZW1wKTsKICAgICAgICAgZWxzZSB7
CkBAIC0zMDEyLDU3ICszMjA3LDIyNCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9V
bnJlYWNoYWJsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBXYXNtIGV4Y2VwdGlvbnMgaW4gdGhlIEFpciBnZW5lcmF0b3IKLS8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyMTEKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smLCBDb250cm9sVHlwZSYsIFN0YWNrJikgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFj
ayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICArK21fdHJ5Q2F0Y2hEZXB0aDsK
KworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAg
IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIHJl
c3VsdCA9IENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1cmUo
c2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpUcnksIGNvbnRpbnVhdGlvbiwgKyttX2NhbGxTaXRlSW5k
ZXgsIG1fdHJ5Q2F0Y2hEZXB0aCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29u
dHJvbFR5cGUmLCBSZXN1bHRMaXN0JikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0
TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhj
dXJyZW50U3RhY2ssIGRhdGEucmVzdWx0cyk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4g
YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBzaWduYXR1cmUsIGRhdGEsIHJl
c3VsdHMpOwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNrJiBj
dXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OworICAgIHVuaWZ5
VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YS5yZXN1bHRzKTsKKyAgICBhcHBlbmQo
SnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRp
b24pOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CiAKLWF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDb250
cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVG1wIGJ1ZmZlciA9IGVtaXRD
YXRjaEltcGwoQ2F0Y2hLaW5kOjpDYXRjaCwgZGF0YSwgZXhjZXB0aW9uSW5kZXgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBUeXBl
ZFRtcCB0bXAgPSB0bXBGb3JUeXBlKHR5cGUpOworICAgICAgICBlbWl0TG9hZChidWZmZXIsIGkg
KiBzaXplb2YodWludDY0X3QpLCB0bXApOworICAgICAgICByZXN1bHRzLmFwcGVuZCh0bXApOwor
ICAgIH0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRj
aEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGRhdGEp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kOjpDYXRjaEFsbCwgZGF0YSk7CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUm
LCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK1RtcCBBaXJJUkdlbmVyYXRvcjo6ZW1p
dENhdGNoSW1wbChDYXRjaEtpbmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4KQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOworICAg
IG1fY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQobV9jdXJyZW50QmxvY2spOworCisgICAgaWYgKENv
bnRyb2xUeXBlOjppc1RyeShkYXRhKSkgeworICAgICAgICBpZiAoa2luZCA9PSBDYXRjaEtpbmQ6
OkNhdGNoKQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaCgrK21fY2FsbFNpdGVJ
bmRleCwgZzY0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlU
b0NhdGNoQWxsKCsrbV9jYWxsU2l0ZUluZGV4LCBnNjQoKSk7CisgICAgfQorICAgIC8vIFdlIGNv
bnZlcnQgZnJvbSAidHJ5IiB0byAiY2F0Y2giIENvbnRyb2xUeXBlIGFib3ZlLiBUaGlzIGRvZXNu
J3QKKyAgICAvLyBoYXBwZW4gaWYgQ29udHJvbFR5cGUgaXMgYWxyZWFkeSBhICJjYXRjaCIuIFRo
aXMgY2FuIGhhcHBlbiB3aGVuCisgICAgLy8gd2UgaGF2ZSBtdWx0aXBsZSBjYXRjaGVzIGxpa2Ug
InRyeSB7fSBjYXRjaChBKXt9IGNhdGNoKEIpe30uLi5DYXRjaEFsbChFKXt9Ii4KKyAgICAvLyBX
ZSBqdXN0IGNvbnZlcnQgdGhlIGZpcnN0IENvbnRyb2xUeXBlIHRvIGEgY2F0Y2gsIHRoZW4gdGhl
IG90aGVycyB3aWxsCisgICAgLy8gdXNlIGl0cyBmaWVsZHMuCisgICAgQVNTRVJUKENvbnRyb2xU
eXBlOjppc0FueUNhdGNoKGRhdGEpKTsKKworICAgIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlID0g
a2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoID8gSGFuZGxlclR5cGU6OkNhdGNoIDogSGFuZGxlclR5
cGU6OkNhdGNoQWxsOworICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlclR5
cGUsIGRhdGEudHJ5U3RhcnQoKSwgZGF0YS50cnlFbmQoKSwgMCwgbV90cnlDYXRjaERlcHRoLCBl
eGNlcHRpb25JbmRleCB9KTsKKworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUo
KSwgbV9jdXJyZW50QmxvY2spOworCisgICAgdW5zaWduZWQgaW5kZXhJbkJ1ZmZlciA9IDA7Cisg
ICAgYXV0byBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIgPSBbJl0gKFR5cGVkVG1wIHJlc3VsdCkgewor
ICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4SW5CdWZmZXI7
CisgICAgICAgICsraW5kZXhJbkJ1ZmZlcjsKKyAgICAgICAgVG1wIGJ1ZmZlclB0ciA9IFRtcChH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBlbWl0TG9hZChidWZmZXJQdHIsIG9mZnNl
dCwgcmVzdWx0KTsKKyAgICB9OworCisgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQor
ICAgICAgICBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIobG9jYWwpOworCisgICAgZm9yICh1bnNpZ25l
ZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNr
KCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgeworICAgICAgICBhdXRvJiBjb250cm9sRGF0YSA9
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAg
ICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29u
dHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkrKykgeworICAgICAgICAgICAg
VHlwZWRUbXAgdG1wID0gZXhwcmVzc2lvblN0YWNrW2ldLnZhbHVlKCk7CisgICAgICAgICAgICBs
b2FkRnJvbVNjcmF0Y2hCdWZmZXIodG1wKTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBzZXQg
b3VyIGN1cnJlbnQgQ29udHJvbEVudHJ5J3MgZXhjZXB0aW9uIGJlbG93IGFmdGVyIHRoZSBwYXRj
aHBvaW50LgorICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goY29udHJvbERhdGEp
ICYmICZkYXRhICE9ICZjb250cm9sRGF0YSkKKyAgICAgICAgICAgIGxvYWRGcm9tU2NyYXRjaEJ1
ZmZlcihjb250cm9sRGF0YS5leGNlcHRpb24oKSk7CisgICAgfQorCisgICAgQjM6OlBhdGNocG9p
bnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KG1fcHJvYy5hZGRUdXBsZSh7IEIzOjpwb2lu
dGVyVHlwZSgpLCBCMzo6cG9pbnRlclR5cGUoKSB9KSk7CisgICAgcGF0Y2gtPmVmZmVjdHMuZXhp
dHNTaWRld2F5cyA9IHRydWU7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3Jv
U2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZSA9IFJlZ2lz
dGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIGNsb2JiZXJMYXRlLmFk
ZChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHBhdGNoLT5jbG9iYmVyTGF0ZShjbG9iYmVy
TGF0ZSk7CisgICAgcGF0Y2gtPnJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6VmFsdWVSZXA6
OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHBhdGNoLT5yZXN1bHRDb25zdHJh
aW50cy5hcHBlbmQoQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7
CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubW92
ZShwYXJhbXNbMl0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSkpOworICAg
ICAgICB9KTsKKyAgICB9KTsKKworICAgIFRtcCBleGNlcHRpb24gPSBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgIFRtcCBidWZmZXIgPSBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIyKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFZlY3RvcjxU
bXAsIDg+Ojpmcm9tKGV4Y2VwdGlvbiwgYnVmZmVyKSwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCAx
Pjo6ZnJvbShpbnN0YW5jZVZhbHVlKCkpKTsKKyAgICBhcHBlbmQoTW92ZSwgZXhjZXB0aW9uLCBk
YXRhLmV4Y2VwdGlvbigpKTsKKworICAgIHJldHVybiBidWZmZXI7CiB9CiAKLWF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYsIENvbnRyb2xU
eXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUo
Q29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBhZGREZWxl
Z2F0ZVRvVW5yZWFjaGFibGUodGFyZ2V0LCBkYXRhKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xU
eXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5zaWduZWQgdGFyZ2V0RGVwdGgg
PSAwOworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSkKKyAgICAgICAgdGFyZ2V0
RGVwdGggPSB0YXJnZXQudHJ5RGVwdGgoKTsKKworICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBw
ZW5kKHsgSGFuZGxlclR5cGU6OkRlbGVnYXRlLCBkYXRhLnRyeVN0YXJ0KCksICsrbV9jYWxsU2l0
ZUluZGV4LCAwLCBtX3RyeUNhdGNoRGVwdGgsIHRhcmdldERlcHRoIH0pOwogICAgIHJldHVybiB7
IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGV4Y2VwdGlvbkluZGV4KTsKKyAgICBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIHBhdGNoLT5lZmZlY3Rz
LnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRp
bGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIDg+
IHBhdGNoQXJnczsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGluc3RhbmNl
VmFsdWUoKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworICAg
IHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQorICAgICAgICBwYXRj
aEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGFyZ3NbaV0sIEIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudChpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpKTsKKworICAgIFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBh
dGNoLCBwYXRjaEFyZ3MpOworCisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpcywgZXhjZXB0
aW9uSW5kZXgsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgLy8gT09QUzogc2hhcmUgY29kZSB3
aXRoIEIzIElSIGdlbmVyYXRvciBoZXJlLgorICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOworICAgICAgICBoYW5kbGUuZ2VuZXJh
dGUoaml0LCBwYXJhbXMsIHRoaXMpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVy
KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2Nh
dGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0
Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxp
Z25tZW50KSk7CisgICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNl
dE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7
CisgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOworCisgICAgICAgICAg
ICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zm
c2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlv
bjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7CisKKyAgICAgICAgICAgIGxvYWRlZENhc2UubGlu
aygmaml0KTsKKyAgICAgICAgfQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3JhdGNoKTsKKworICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4Y2VwdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyKTsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uV2FzbVRocm93KSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZW1p
dFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBUbXAoKSwgV1RGTW92ZShwYXRjaEFy
Z3MpKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJl
dGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IGFkZFBhdGNo
cG9pbnQoQjM6OlZvaWQpOworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0Ojp2b2xhdGls
ZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRy
dWU7CisKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIDM+IHBhdGNoQXJnczsKKyAgICBwYXRj
aEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGluc3RhbmNlVmFsdWUoKSwgQjM6OlZhbHVlUmVw
OjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29u
c3RyYWluZWRUbXAoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgQjM6OlZhbHVlUmVw
OjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29u
c3RyYWluZWRUbXAoZGF0YS5leGNlcHRpb24oKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6
YXJndW1lbnRHUFIyKSkpOworCisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUg
PSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2gsIHBhdGNoQXJncyk7CisgICAg
cGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjA7Cisg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7CisgICAgICAgICAgICBqaXQu
YW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNr
KSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZv
b3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRvIGxvYWRlZENh
c2UgPSBqaXQuanVtcCgpOworCisgICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGlu
aygmaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0Ojpv
ZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7
CisKKyAgICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKKyAgICAgICAgfQorICAgICAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3Jh
dGNoKTsKKworICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOworICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7
CisgICAgICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJldGhyb3cpKTsKKyAgICAgICAg
fSk7CisgICAgfSk7CisKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gs
IFRtcCgpLCBXVEZNb3ZlKHBhdGNoQXJncykpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
MzIwOSw3ICszNTcxLDggQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJs
ZQogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKICAgICAgICAg
YXBwZW5kKGRhdGEuc3BlY2lhbCwgSnVtcCk7CiAgICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3Vj
Y2Vzc29ycyhtX2N1cnJlbnRCbG9jayk7Ci0gICAgfQorICAgIH0gZWxzZSBpZiAoZGF0YS5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBkYXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlw
ZTo6Q2F0Y2gpCisgICAgICAgIC0tbV90cnlDYXRjaERlcHRoOwogCiAgICAgaWYgKGRhdGEuYmxv
Y2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKSB7CiAgICAgICAgIG1fb3V0ZXJMb29wcy5yZW1v
dmVMYXN0KCk7CkBAIC0zMjMzLDcgKzM1OTYsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRF
bmRUb1VucmVhY2hhYmxlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotQjM6OlBhdGNocG9pbnRWYWx1
ZSogQWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNv
bnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4mJiBwYXRj
aEFyZ3MpCitzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGU+IEFpcklSR2VuZXJhdG9yOjplbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayog
YmxvY2ssIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1
bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+
IHBhdGNoQXJncykKIHsKICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0Iz
UmVzdWx0VHlwZSgmc2lnbmF0dXJlKSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQ
aW5uZWQgPSB0cnVlOwpAQCAtMzI1OCw4ICszNjIxLDkgQEAgQjM6OlBhdGNocG9pbnRWYWx1ZSog
QWlySVJHZW5lcmF0b3I6OmVtaQogICAgICAgICAgICAgcmVzdWx0Q29uc3RyYWludHMuYXBwZW5k
KEIzOjpWYWx1ZVJlcCh2YWx1ZUxvY2F0aW9uKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPnJlc3Vs
dENvbnN0cmFpbnRzID0gV1RGTW92ZShyZXN1bHRDb25zdHJhaW50cyk7CiAgICAgfQorICAgIFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUgZXhjZXB0aW9uSGFuZGxlID0gcHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQsIHBhdGNoQXJncyk7CiAgICAgZW1pdFBhdGNocG9p
bnQoYmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdHMsIFdURk1vdmUocGF0Y2hBcmdzKSk7Ci0gICAg
cmV0dXJuIHBhdGNocG9pbnQ7CisgICAgcmV0dXJuIHsgcGF0Y2hwb2ludCwgZXhjZXB0aW9uSGFu
ZGxlIH07CiB9CiAKIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKQEAgLTMyOTUs
MTQgKzM2NTksMTcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdQog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1dhc21CbG9jaywgaXNFbWJl
ZGRlckJsb2NrKTsKIAogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0g
ZW1pdENhbGxQYXRjaHBvaW50KGlzV2FzbUJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3Mp
OworICAgICAgICAgICAgYXV0byBwYWlyID0gZW1pdENhbGxQYXRjaHBvaW50KGlzV2FzbUJsb2Nr
LCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MpOworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2lu
dCA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIu
c2Vjb25kOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwg
cGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4K
ICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2Fs
bGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmcpKTsKIAotICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAg
ICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFi
bGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBl
bmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwp
LCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMzMyMSwxMyArMzY4OCwxNyBAQCBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1CiAKICAgICAgICAgICAgIFZlY3RvcjxDb25zdHJh
aW5lZFRtcD4ganVtcEFyZ3M7CiAgICAgICAgICAgICBqdW1wQXJncy5hcHBlbmQoeyBqdW1wRGVz
dGluYXRpb24sIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyIH0pOwotICAgICAgICAgICAgYXV0
byogcGF0Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hwb2ludChpc0VtYmVkZGVyQmxvY2ssIHNpZ25h
dHVyZSwgcmVzdWx0cywgYXJncywgV1RGTW92ZShqdW1wQXJncykpOworICAgICAgICAgICAgYXV0
byBwYWlyID0gZW1pdENhbGxQYXRjaHBvaW50KGlzRW1iZWRkZXJCbG9jaywgc2lnbmF0dXJlLCBy
ZXN1bHRzLCBhcmdzLCBXVEZNb3ZlKGp1bXBBcmdzKSk7CisgICAgICAgICAgICBhdXRvKiBwYXRj
aHBvaW50ID0gcGFpci5maXJzdDsKKyAgICAgICAgICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlID0g
cGFpci5zZWNvbmQ7CisKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90
ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5z
dGFuY2UuCiAgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxk
IGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLmdlbmVy
YXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNb
cGFyYW1zLnByb2MoKS5yZXN1bHRDb3VudChwYXJhbXMudmFsdWUoKS0+dHlwZSgpKV0uZ3ByKCks
IFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMzMzOSwxMiArMzcxMCwx
NSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1CiAgICAgICAgIC8v
IFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNl
LCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCiAgICAgICAgIHJlc3Rv
cmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1f
aW5mby5tZW1vcnksIGN1cnJlbnRJbnN0YW5jZSwgY29udGludWF0aW9uKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gZW1pdENhbGxQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MpOworICAgICAgICBhdXRvIHBhaXIgPSBl
bWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJn
cyk7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWlyLmZpcnN0OworICAgICAgICBhdXRv
IGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIuc2Vjb25kOwogICAgICAgICAvLyBXZSBuZWVkIHRvIGNs
b2JiZXIgdGhlIHNpemUgcmVnaXN0ZXIgc2luY2UgdGhlIExMSW50IGFsd2F5cyBib3VuZHMgY2hl
Y2tzCiAgICAgICAgIGlmIChtX21vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nIHx8IG1faW5m
by5tZW1vcnkuaXNTaGFyZWQoKSkKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRl
KFJlZ2lzdGVyU2V0IHsgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS5ib3VuZHNDaGVja2luZ1Np
emVSZWdpc3RlciB9KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBleGNlcHRpb25IYW5k
bGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5j
dGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMzUyMyw3
ICszODk3LDkgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChUeQogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQog
ICAgICAgICByZXN1bHRzLmFwcGVuZCh0bXBGb3JUeXBlKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkp
KSk7CiAKLSAgICBhdXRvKiBwYXRjaHBvaW50ID0gZW1pdENhbGxQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MsIFdURk1vdmUoZXh0cmFBcmdzKSk7Cisg
ICAgYXV0byBwYWlyID0gZW1pdENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBzaWduYXR1
cmUsIHJlc3VsdHMsIGFyZ3MsIFdURk1vdmUoZXh0cmFBcmdzKSk7CisgICAgYXV0byogcGF0Y2hw
b2ludCA9IHBhaXIuZmlyc3Q7CisgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29u
ZDsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdp
c3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCiAgICAgLy8gV2Ug
cGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcgc28KQEAgLTM1MzUsNiArMzkxMSw3IEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVHkKIAogICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0
LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5y
ZXN1bHRDb3VudChwYXJhbXMudmFsdWUoKS0+dHlwZSgpKV0uZ3ByKCksIFdhc21FbnRyeVB0clRh
Zyk7CiAgICAgfSk7CiAKQEAgLTM2MTUsMjUgKzM5OTIsMjcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3RpbwogICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9y
PiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRh
LnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlci5wYXJzZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmZpbmFsaXplRW50cnlwb2ludHMo
KTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgKytpKQogICAgICAgICAg
ICAgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CiAgICAg
fQogCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2Uo
QjM6OkFpck1vZGUpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0ZWQgcGF0Y2hw
b2ludHMiKTsKLSAgICAgICAgICAgIGZvciAoQjM6OlBhdGNocG9pbnRWYWx1ZSoqIHBhdGNoIDog
aXJHZW5lcmF0b3IucGF0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oZGVl
cER1bXAocHJvY2VkdXJlLCAqcGF0Y2gpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEIzOjpBaXI6
OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOwotICAgICAgICBCMzo6QWlyOjpnZW5lcmF0ZShj
b2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKLSAgICAgICAgY29t
cGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5yZWxl
YXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAgaWYg
KFVOTElLRUxZKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzOjpBaXJNb2RlKSkpIHsKKyAgICAg
ICAgZGF0YUxvZ0xuKCJHZW5lcmF0ZWQgcGF0Y2hwb2ludHMiKTsKKyAgICAgICAgZm9yIChCMzo6
UGF0Y2hwb2ludFZhbHVlKiogcGF0Y2ggOiBpckdlbmVyYXRvci5wYXRjaHBvaW50cygpKQorICAg
ICAgICAgICAgZGF0YUxvZ0xuKGRlZXBEdW1wKHByb2NlZHVyZSwgKnBhdGNoKSk7CiAgICAgfQog
CisgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29kZSk7CisgICAgQjM6OkFpcjo6
Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CisK
KyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2Vk
dXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7CisgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNh
dmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAg
IHJlc3VsdC0+c3RhY2ttYXBzID0gaXJHZW5lcmF0b3IudGFrZVN0YWNrbWFwcygpOworICAgIHJl
c3VsdC0+ZXhjZXB0aW9uSGFuZGxlcnMgPSBpckdlbmVyYXRvci50YWtlRXhjZXB0aW9uSGFuZGxl
cnMoKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUxNzgsNiArNTU1Nyw0OSBAQCB0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAordGVtcGxhdGUgPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK1BhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGUgQWlySVJHZW5lcmF0b3I6OnByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhC
Mzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVD
YXBhY2l0eT4mIGFyZ3MpCit7CisgICAgKyttX2NhbGxTaXRlSW5kZXg7CisgICAgaWYgKCFtX3Ry
eUNhdGNoRGVwdGgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8VG1wPiBsaXZl
VmFsdWVzOworICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWwgOiBtX2xvY2FscykKKyAgICAgICAg
bGl2ZVZhbHVlcy5hcHBlbmQobG9jYWwpOworICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4
ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytj
b250cm9sSW5kZXgpIHsKKyAgICAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBtX3BhcnNlci0+Y29u
dHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAgU3RhY2smIGV4
cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVu
Y2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRtcCA6IGV4
cHJlc3Npb25TdGFjaykKKyAgICAgICAgICAgIGxpdmVWYWx1ZXMuYXBwZW5kKHRtcC52YWx1ZSgp
KTsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAg
ICAgbGl2ZVZhbHVlcy5hcHBlbmQoZGF0YS5leGNlcHRpb24oKSk7CisgICAgfQorCisgICAgdW5z
aWduZWQgb2Zmc2V0ID0gY2hlY2tlZFN1bTx1bnNpZ25lZD4oYXJncy5zaXplKCksIHBhdGNoLT5y
ZXN1bHRDb25zdHJhaW50cy5zaXplKCkpOworICAgIGZvciAoVG1wIHRtcCA6IGxpdmVWYWx1ZXMp
CisgICAgICAgIGFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHRtcCwgQjM6OlZhbHVlUmVwOjpM
YXRlQ29sZEFueSkpOworCisgICAgcGF0Y2gtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7
CisKKyAgICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7IG1fY2FsbFNpdGVJbmRl
eCwgb2Zmc2V0IH07Cit9CisKK3ZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2VuZXJh
dGUoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcywgQWlySVJHZW5lcmF0b3IqIGdlbmVyYXRvcikgY29uc3QKK3sKKyAgICBpZiAobV9j
YWxsU2l0ZUluZGV4ID09IHNfaW52YWxpZENhbGxTaXRlSW5kZXgpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0YWNrTWFwIHZhbHVlczsKKyAgICBpZiAocGFyYW1zLnZhbHVlKCktPm51bUNoaWxk
cmVuKCkgPj0gbV9vZmZzZXQpIHsKKyAgICAgICAgdmFsdWVzID0gU3RhY2tNYXAocGFyYW1zLnZh
bHVlKCktPm51bUNoaWxkcmVuKCkgLSBtX29mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fb2Zmc2V0OyBpIDwgcGFyYW1zLnZhbHVlKCktPm51bUNoaWxkcmVuKCk7ICsraSkKKyAg
ICAgICAgICAgIHZhbHVlc1tpIC0gbV9vZmZzZXRdID0gT1NSRW50cnlWYWx1ZShwYXJhbXNbaV0s
IHBhcmFtcy52YWx1ZSgpLT5jaGlsZChpKS0+dHlwZSgpKTsKKyAgICB9CisgICAgZ2VuZXJhdG9y
LT5hZGRTdGFja01hcChtX2NhbGxTaXRlSW5kZXgsIFdURk1vdmUodmFsdWVzKSk7CisgICAgaml0
LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9jYWxsU2l0ZUluZGV4KSwgQ0Nh
bGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4NzU4MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNyArOTEsNyBAQCBjbGFzcyBCM0lSR2VuZXJhdG9yOwogc3RydWN0IFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUgewogICAgIHZvaWQgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIEIzSVJHZW5lcmF0b3IqKSBjb25zdDsKIAot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCA9ICBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBzX2ludmFsaWRDYWxsU2l0ZUluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpOwogCiAgICAgdW5zaWduZWQgbV9jYWxsU2l0ZUluZGV4IHsgc19pbnZh
bGlkQ2FsbFNpdGVJbmRleCB9OwogICAgIHVuc2lnbmVkIG1fb2Zmc2V0OwpAQCAtODU3LDYgKzg1
Nyw3IEBAIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpmcmFtZVBvaW50ZXIoKQogICAgIHJldHVybiBt
X2ZyYW1lUG9pbnRlcjsKIH0KIAorLy8gT09QUzogZGUtZHVwbGljYXRlCiBzdGF0aWMgdm9pZCBi
dWlsZEVudHJ5QnVmZmVyRm9yQ2F0Y2goUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7CkBAIC0yNjEw
LDggKzI2MTEsMTggQEAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBCM0lSR2VuZXJhdG9yOgog
ICAgIH0KIAogICAgIHVuc2lnbmVkIG9mZnNldCA9IHBhdGNoLT5udW1DaGlsZHJlbigpOwotICAg
IGlmIChwYXRjaC0+dHlwZSgpICE9IFZvaWQpCi0gICAgICAgIG9mZnNldCsrOworICAgIC8vIE9P
UFM6IGFkZCB0ZXN0CisgICAgc3dpdGNoIChwYXRjaC0+dHlwZSgpLmtpbmQoKSkgeworICAgIGNh
c2UgQjM6OlZvaWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQjM6OlR1cGxlOiB7CisgICAg
ICAgIG9mZnNldCArPSBtX3Byb2MudHVwbGVGb3JUeXBlKHBhdGNoLT50eXBlKCkpLnNpemUoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgICsrb2Zmc2V0Owor
ICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlz
ID0gdHJ1ZTsKICAgICBwYXRjaC0+YXBwZW5kVmVjdG9yV2l0aFJlcChsaXZlVmFsdWVzLCBWYWx1
ZVJlcDo6TGF0ZUNvbGRBbnkpOwpAQCAtMjY1Nyw2ICsyNjY4LDEwIEBAIFZhbHVlKiBCM0lSR2Vu
ZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENhdGMKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGF0
YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlh
YmxlKHBvaW50ZXJUeXBlKCkpKTsKICAgICB9CisgICAgLy8gV2UgY29udmVydCBmcm9tICJ0cnki
IHRvICJjYXRjaCIgQ29udHJvbFR5cGUgYWJvdmUuIFRoaXMgZG9lc24ndAorICAgIC8vIGhhcHBl
biBpZiBDb250cm9sVHlwZSBpcyBhbHJlYWR5IGEgImNhdGNoIi4gVGhpcyBjYW4gaGFwcGVuIHdo
ZW4KKyAgICAvLyB3ZSBoYXZlIG11bHRpcGxlIGNhdGNoZXMgbGlrZSAidHJ5IHt9IGNhdGNoKEEp
e30gY2F0Y2goQil7fS4uLkNhdGNoQWxsKEUpe30iCisgICAgQVNTRVJUKENvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKGRhdGEpKTsKIAogICAgIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlID0ga2luZCA9
PSBDYXRjaEtpbmQ6OkNhdGNoID8gSGFuZGxlclR5cGU6OkNhdGNoIDogSGFuZGxlclR5cGU6OkNh
dGNoQWxsOwogICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlclR5cGUsIGRh
dGEudHJ5U3RhcnQoKSwgZGF0YS50cnlFbmQoKSwgMCwgbV90cnlDYXRjaERlcHRoLCBleGNlcHRp
b25JbmRleCB9KTsKQEAgLTMzMjQsNiArMzMzOSw3IEBAIHZvaWQgY29tcHV0ZVBDVG9Db2RlT3Jp
Z2luTWFwKENvbXBpbGF0aW8KICAgICB9CiB9CiAKKy8vIE9PUFM6IE1vdmUgdGhpcyB0byBzaGFy
ZWQgbG9jYWF0aW9uIGxlc3MgQjMgc3BlY2lmaWMuCiB2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3Qg
Q29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewog
ICAgIGlmICghY29udGV4dC5wcm9jZWR1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw4ICsy
MDMsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhCiAgICAgYm9v
bCBmb3JjZVVzaW5nQjMgPSBmYWxzZTsKICAgICBpZiAoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFB
aXJNb2RlVGhyZXNob2xkKCkgJiYgbV9tb2R1bGVJbmZvcm1hdGlvbi0+Y29kZVNlY3Rpb25TaXpl
ID49IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpKQogICAgICAgICBm
b3JjZVVzaW5nQjMgPSB0cnVlOwotICAgIGVsc2UgaWYgKCFtX21vZHVsZUluZm9ybWF0aW9uLT5t
X2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMucXVpY2tHZXQoZnVuY3Rpb25JbmRleCkpCi0g
ICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CiAgICAgZWxzZSBpZiAoIU9wdGlvbnM6Ondhc21C
QlFVc2VzQWlyKCkpCiAgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU5LDkgKzU1OSw2IEBAIHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXQKICAgICBSRUxFQVNFX0FTU0VSVCh1c2VkQnVm
ZmVyLmNhcGFjaXR5KCkgPT0gb2xkQ2FwYWNpdHkpOwogICAgICp0aHJlYWRTcGVjaWZpYyA9IFdU
Rk1vdmUodXNlZEJ1ZmZlcik7CiAKLSAgICBpZiAoIW1fdXNlc0V4Y2VwdGlvbnMpCi0gICAgICAg
IG1faW5mby5tX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMucXVpY2tTZXQobV9mdW5jdGlv
bkluZGV4KTsKLQogICAgIHJldHVybiBXVEZNb3ZlKG1fY29kZUJsb2NrKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9u
LmgJKHJldmlzaW9uIDI4NzU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVJbmZvcm1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDYgQEAgc3Ry
dWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZAogCiAgICAgQml0VmVjdG9yIG1f
ZGVjbGFyZWRGdW5jdGlvbnM7CiAgICAgQml0VmVjdG9yIG1fZGVjbGFyZWRFeGNlcHRpb25zOwot
ICAgIEJpdFZlY3RvciBtX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnM7CiAgICAgbXV0YWJs
ZSBCaXRWZWN0b3IgbV9yZWZlcmVuY2VkRnVuY3Rpb25zOwogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJKHJldmlz
aW9uIDI4NzU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDYgQEAgYXV0byBTdHJlYW1p
bmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaQogICAgIG1fZnVuY3Rpb25Db3VudCA9IGZ1bmN0
aW9uQ291bnQ7CiAgICAgbV9mdW5jdGlvbkluZGV4ID0gMDsKICAgICBtX2NvZGVPZmZzZXQgPSBt
X29mZnNldDsKLSAgICBtX2luZm8tPm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5lbnN1
cmVTaXplKGZ1bmN0aW9uQ291bnQpOwogCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlv
bkNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNvZGUgc2Vj
dGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZnVuY3Rpb25Db3VudCk7CiAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSwgIkNv
ZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5jdGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVk
IG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448528</attachid>
            <date>2022-01-06 12:48:53 -0800</date>
            <delta_ts>2022-01-06 14:46:00 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>47779</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5LDggQEAK
ICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisj
aW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBCMzo6QWlyOwpAQCAtMTI2LDIwICsxMjgsNDEgQEAgcHJp
dmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIH07CiAKK2NsYXNzIEFpcklSR2VuZXJhdG9yOworCitz
dHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdm9pZCBnZW5lcmF0ZShDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgQWlySVJHZW5l
cmF0b3IqKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlk
Q2FsbFNpdGVJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKwor
ICAgIHVuc2lnbmVkIG1fY2FsbFNpdGVJbmRleCB7IHNfaW52YWxpZENhbGxTaXRlSW5kZXggfTsK
KyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKIGNsYXNzIEFpcklSR2VuZXJhdG9yIHsKIHB1
YmxpYzoKICAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFR5cGVkVG1wOwogICAgIHVzaW5nIFJl
c3VsdExpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDg+OwogCiAgICAgc3RydWN0IENvbnRy
b2xEYXRhIHsKLSAgICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiBvcmlnaW4sIEJsb2NrU2ln
bmF0dXJlIHJlc3VsdCwgUmVzdWx0TGlzdCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFz
aWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAg
ICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBSZXN1
bHRMaXN0IHJlc3VsdFRtcHMsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24sIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250cm9s
QmxvY2tUeXBlKHR5cGUpCiAgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24p
CiAgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKICAgICAgICAgICAgICwgcmVzdWx0cyhy
ZXN1bHRUbXBzKQogICAgICAgICAgICAgLCByZXR1cm5UeXBlKHJlc3VsdCkKICAgICAgICAgewot
ICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7CisgICAgICAgIH0KKworICAgICAgICBD
b250cm9sRGF0YShCMzo6T3JpZ2luLCBCbG9ja1NpZ25hdHVyZSByZXN1bHQsIFJlc3VsdExpc3Qg
cmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgdW5z
aWduZWQgdHJ5U3RhcnQsIHVuc2lnbmVkIHRyeURlcHRoKQorICAgICAgICAgICAgOiBjb250cm9s
QmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24p
CisgICAgICAgICAgICAsIHNwZWNpYWwobnVsbHB0cikKKyAgICAgICAgICAgICwgcmVzdWx0cyhy
ZXN1bHRUbXBzKQorICAgICAgICAgICAgLCByZXR1cm5UeXBlKHJlc3VsdCkKKyAgICAgICAgICAg
ICwgbV90cnlTdGFydCh0cnlTdGFydCkKKyAgICAgICAgICAgICwgbV90cnlDYXRjaERlcHRoKHRy
eURlcHRoKQorICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBDb250cm9sRGF0YSgpCkBA
IC0xNDgsOCArMTcxLDggQEAgcHVibGljOgogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29u
c3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpJZjsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9s
RGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6
OlRyeTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBj
b250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7
IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29u
dHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wp
IHsgcmV0dXJuIGlzQW55Q2F0Y2goY29udHJvbCkgJiYgY29udHJvbC5jYXRjaEtpbmQoKSA9PSBD
YXRjaEtpbmQ6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3Qg
Q29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUb3BMZXZlbDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3QgQ29u
dHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpMb29wOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpC
bG9jazsgfQpAQCAtMjIxLDYgKzI0NCw1NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
cmV0dXJuVHlwZS0+cmV0dXJuVHlwZShpKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY29u
dmVydFRyeVRvQ2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhj
ZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6
Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7CisgICAg
ICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBtX2V4
Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVydFRy
eVRvQ2F0Y2hBbGwodW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhjZXB0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6Q2F0
Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2hBbGw7CisgICAg
ICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBtX2V4
Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRyeVN0
YXJ0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5
cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNh
dGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeVN0YXJ0OworICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgdHJ5RW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1
cm4gbV90cnlFbmQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlEZXB0aCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJs
b2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7Cisg
ICAgICAgICAgICByZXR1cm4gbV90cnlDYXRjaERlcHRoOworICAgICAgICB9CisKKyAgICAgICAg
Q2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0
dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAgICAgVHlwZWRUbXAgZXhjZXB0aW9u
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUg
PT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGNlcHRpb247Cisg
ICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdlbmVy
YXRvcjsKICAgICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CkBAIC0yMjgsNiArMjk5
LDExIEBAIHB1YmxpYzoKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKICAgICAgICAgUmVz
dWx0TGlzdCByZXN1bHRzOwogICAgICAgICBCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlOworICAg
ICAgICB1bnNpZ25lZCBtX3RyeVN0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX3RyeUVuZDsKKyAg
ICAgICAgdW5zaWduZWQgbV90cnlDYXRjaERlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9jYXRj
aEtpbmQ7CisgICAgICAgIFR5cGVkVG1wIG1fZXhjZXB0aW9uOwogICAgIH07CiAKICAgICB1c2lu
ZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwpAQCAtMjYwLDYgKzMzNiw4IEBAIHB1YmxpYzoK
IAogICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2Nl
ZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
LCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIGNvbnN0
IFNpZ25hdHVyZSYpOwogCisgICAgdm9pZCBmaW5hbGl6ZUVudHJ5cG9pbnRzKCk7CisKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0
dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2
NF90KTsKQEAgLTM0OSw3ICs0MjcsNyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVHlwZWRUbXAgY2FsbGVlSW5zdGFu
Y2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKLSAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxv
Y2sqLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBW
ZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgZXh0cmFBcmdz
ID0geyB9KTsKKyAgICBzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9pbnQoQmFz
aWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNv
bnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gZXh0cmFB
cmdzID0geyB9KTsKIAogICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoVHlwZSwgQjM6OkFpcjo6
T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihCMzo6
QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKQEAgLTM2MSwxMSArNDM5LDMwIEBAIHB1YmxpYzoKICAgICB2
b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMoKSB7IH0KICAgICB2b2lkIGRpZFBvcFZhbHVlRnJv
bVN0YWNrKCkgeyB9CiAKKyAgICBUbXAgZW1pdENhdGNoSW1wbChDYXRjaEtpbmQsIENvbnRyb2xU
eXBlJiwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXggPSAwKTsKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBh
dGNocG9pbnRGb3JFeGNlcHRpb25zKEIzOjpQYXRjaHBvaW50VmFsdWUqLCBWZWN0b3I8Q29uc3Ry
YWluZWRUbXAsIGlubGluZUNhcGFjaXR5PiYgYXJncyk7CisKICAgICBjb25zdCBCYWc8QjM6OlBh
dGNocG9pbnRWYWx1ZSo+JiBwYXRjaHBvaW50cygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gbV9wYXRjaHBvaW50czsKICAgICB9CiAKKyAgICB2b2lkIGFkZFN0YWNrTWFwKHVuc2lnbmVk
IGNhbGxTaXRlSW5kZXgsIFN0YWNrTWFwJiYgc3RhY2ttYXApCisgICAgeworICAgICAgICBtX3N0
YWNrbWFwcy5hZGQoQ2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KSwgV1RGTW92ZShzdGFja21h
cCkpOworICAgIH0KKworICAgIFN0YWNrTWFwcyYmIHRha2VTdGFja21hcHMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobV9zdGFja21hcHMpOworICAgIH0KKworICAgIFZlY3RvcjxV
bmxpbmtlZEhhbmRsZXJJbmZvPiYmIHRha2VFeGNlcHRpb25IYW5kbGVycygpCisgICAgeworICAg
ICAgICByZXR1cm4gV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJzKTsKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgQjM6OlR5cGUgdG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlw
ZSk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHZhbGlkYXRlSW5zdChJbnN0JiBpbnN0KQpAQCAt
NDE3LDE2ICs1MTQsNiBAQCBwcml2YXRlOgogCiAgICAgVG1wIG5ld1RtcChCMzo6QmFuayBiYW5r
KQogICAgIHsKLSAgICAgICAgc3dpdGNoIChiYW5rKSB7Ci0gICAgICAgIGNhc2UgQjM6OkdQOgot
ICAgICAgICAgICAgaWYgKG1fZnJlZUdQcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG1fZnJlZUdQcy50YWtlTGFzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QjM6OkZQOgotICAgICAgICAgICAgaWYgKG1fZnJlZUZQcy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1fZnJlZUZQcy50YWtlTGFzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIG1fY29kZS5uZXdUbXAoYmFuayk7CiAgICAgfQogCkBAIC00
OTYsOCArNTgzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxv
Y2ssIHBhdGNoLCBWZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9LCBWZWN0b3I8Q29uc3RyYWluZWRU
bXA+KCkpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDxzaXplX3QgaW5saW5lU2l6ZT4KKyAgICB2
b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50
VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNp
emU+JiYgYXJncykKKyAgICB7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ssIHBh
dGNoLCBWZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9LCBXVEZNb3ZlKGFyZ3MpKTsKKyAgICB9CisK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VG1wVHlwZSwgc2l6ZV90IGlubGluZVNpemU+
Ci0gICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0
Y2hwb2ludFZhbHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiAgcmVz
dWx0cywgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCisgICAgdm9p
ZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiByZXN1bHRzLCBWZWN0
b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKICAgICB7CiAgICAgICAgIGlm
ICghbV9wYXRjaHBvaW50U3BlY2lhbCkKICAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNpYWwg
PSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lhbCht
YWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOwpAQCAtNjg5LDYgKzc4MiwyMyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBlbWl0TG9hZChCMzo6QWly
OjpPcGNvZGUgb3AsIEIzOjpUeXBlIHR5cGUsIFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBUbXAg
cmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwg
QjM6OndpZHRoRm9yVHlwZSh0eXBlKSkpCisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRk
cihiYXNlLCBvZmZzZXQpLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gdGVtcDIgPSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShv
ZmZzZXQpLCB0ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCBiYXNlLCB0
ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcih0ZW1wMiksIHJlc3VsdCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKFRtcCBiYXNlLCBzaXplX3Qg
b2Zmc2V0LCBUeXBlZFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBlbWl0TG9hZChtb3ZlT3BG
b3JWYWx1ZVR5cGUocmVzdWx0LnR5cGUoKSksIHRvQjNUeXBlKHJlc3VsdC50eXBlKCkpLCBiYXNl
LCBvZmZzZXQsIHJlc3VsdC50bXAoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0VGhyb3dFeGNl
cHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKICAgICB2b2lkIGVtaXRFbnRy
eVRpZXJVcENoZWNrKCk7CkBAIC03NDgsMTYgKzg1OCwxNSBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjx1aW50MzJfdD4gbV9vdXRlckxvb3BzOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2Nr
IHsgbnVsbHB0ciB9OwogICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9Owor
ICAgIEJhc2ljQmxvY2sqIG1fbWFpbkVudHJ5cG9pbnRTdGFydCB7IG51bGxwdHIgfTsKICAgICBW
ZWN0b3I8VHlwZWRUbXA+IG1fbG9jYWxzOwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBh
bmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQg
d2l0aC4KICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAg
IEdQUlJlZyBtX2JvdW5kc0NoZWNraW5nU2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBH
UFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQ
UlJlZyBtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9v
bCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OwogCi0gICAgVmVjdG9yPFRtcCwgOD4gbV9mcmVlR1Bz
OwotICAgIFZlY3RvcjxUbXAsIDg+IG1fZnJlZUZQczsKLQogICAgIEhhc2hNYXA8QmxvY2tTaWdu
YXR1cmUsIEIzOjpUeXBlPiBtX3R1cGxlTWFwOwogICAgIC8vIFRoaXMgaXMgb25seSBmaWxsZWQg
aWYgd2UgYXJlIGR1bXBpbmcgSVIuCiAgICAgQmFnPEIzOjpQYXRjaHBvaW50VmFsdWUqPiBtX3Bh
dGNocG9pbnRzOwpAQCAtNzc0LDYgKzg4MywxNSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
bnVtSW1wb3J0RnVuY3Rpb25zOwogCiAgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFsKiBtX3BhdGNo
cG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworCisgICAgUmVmUHRyPEIzOjpBaXI6OlByb2xvZ3Vl
R2VuZXJhdG9yPiBtX3Byb2xvZ3VlR2VuZXJhdG9yOworCisgICAgVmVjdG9yPEJhc2ljQmxvY2sq
PiBtX2NhdGNoRW50cnlwb2ludHM7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3RyeUNhdGNo
RGVwdGggeyAwIH07IC8vIE9PUFM6IGluY3JlbWVudCBldmVyeXdoZXJlCisgICAgQ2hlY2tlZDx1
bnNpZ25lZD4gbV9jYWxsU2l0ZUluZGV4IHsgMCB9OyAvLyBPT1BTOiBpbmNyZW1lbnQgZXZlcnl3
aGVyZQorICAgIFN0YWNrTWFwcyBtX3N0YWNrbWFwczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5k
bGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIC8vIE1lbW9yeSBhY2Nlc3NlcyBp
biBXZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkg
aGF2ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCkBAIC04NDcsMTEgKzk2NSw5IEBAIEFp
cklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAgbV9jb2RlLnBp
blJlZ2lzdGVyKG1fYm91bmRzQ2hlY2tpbmdTaXplR1BSKTsKICAgICB9CiAKLSAgICBtX2NvZGUu
c2V0TnVtRW50cnlwb2ludHMoMSk7CisgICAgbV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSID0gQ29u
dGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3Jh
dGNoR1BSc1sxXSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKIAotICAgIEdQUlJlZyBjb250
ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJzWzFdIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwot
Ci0gICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9
IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgIG1fcHJvbG9n
dWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9y
RnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsK
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OwogICAgICAgICBjb2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0KTsKIApAQCAtODkxLDMxICsx
MDA3LDMzIEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xv
Z3VlU2NyYXRjaEdQUnNbMF07CiAKICAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFz
dFRMUygpKQotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
Y29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUik7CiAKICAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShu
ZWVkVW5kZXJmbG93Q2hlY2spKQogICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQo
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJh
bmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkp
KTsKKyAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6OkJlbG93LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9wcm9sb2d1ZVdh
c21Db250ZXh0R1BSLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKSk7CiAg
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5z
dHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5j
ZVZhbHVlICYmIENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICAgICAgICAgIC8vIE5v
IG92ZXJmbG93IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwg
bmVlZHMgdG8gYmUgY29ycmVjdC4KLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21D
b250ZXh0SW5zdGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0pOwogCi0gICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2lu
dCgwLCBXVEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7Ci0KICAgICBpZiAoQ29udGV4dDo6dXNl
RmFzdFRMUygpKSB7CiAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGc2NCgpOwogICAgICAgICAv
LyBGSVhNRTogV291bGQgYmUgbmljZSB0byBvbmx5IGRvIHRoaXMgaWYgd2UgdXNlIGluc3RhbmNl
IHZhbHVlLgotICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKGNvbnRleHRJbnN0YW5jZSksIG1faW5z
dGFuY2VWYWx1ZSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAobV9wcm9sb2d1ZVdhc21Db250
ZXh0R1BSKSwgbV9pbnN0YW5jZVZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9pbnN0YW5j
ZVZhbHVlID0geyBUbXAoY29udGV4dEluc3RhbmNlKSwgVHlwZXM6Okk2NCB9OworICAgICAgICBt
X2luc3RhbmNlVmFsdWUgPSB7IFRtcChtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpLCBUeXBlczo6
STY0IH07CisKKyAgICBhcHBlbmQoRW50cnlTd2l0Y2gpOworICAgIG1fbWFpbkVudHJ5cG9pbnRT
dGFydCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIG1fY3VycmVudEJsb2NrID0gbV9tYWluRW50
cnlwb2ludFN0YXJ0OwogCiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwogICAgIG1fbG9j
YWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CkBAIC05NTQsNiArMTA3Miw3OSBA
QCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAgZW1pdEVudHJ5
VGllclVwQ2hlY2soKTsKIH0KIAorLy8gT09QUzogZGUtZHVwbGljYXRlCitzdGF0aWMgdm9pZCBi
dWlsZEVudHJ5QnVmZmVyRm9yQ2F0Y2goUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCit7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7CisgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7Cisg
ICAgT3B0aW1pemluZ0pJVENhbGxlZSogY2FsbGVlID0gYml0d2lzZV9jYXN0PE9wdGltaXppbmdK
SVRDYWxsZWUqPihjYWxsRnJhbWUtPmNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsKKyAgICBjb25z
dCBTdGFja01hcCYgc3RhY2ttYXAgPSBjYWxsZWUtPnN0YWNrbWFwKGNhbGxTaXRlSW5kZXgpOwor
ICAgIFZNKiB2bSA9IGNvbnRleHQuZ3ByPFZNKj4oR1BSSW5mbzo6cmVnVDApOworICAgIHVpbnQ2
NF90KiBidWZmZXIgPSB2bS0+d2FzbUNvbnRleHQuc2NyYXRjaEJ1ZmZlckZvclNpemUoc3RhY2tt
YXAuc2l6ZSgpICogOCk7CisgICAgbG9hZFZhbHVlc0ludG9CdWZmZXIoY29udGV4dCwgc3RhY2tt
YXAsIGJ1ZmZlcik7CisKKyAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYnVmZmVyKTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRv
cjo6ZmluYWxpemVFbnRyeXBvaW50cygpCit7CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMg
PSAxICsgbV9jYXRjaEVudHJ5cG9pbnRzLnNpemUoKTsKKyAgICBtX3Byb2Muc2V0TnVtRW50cnlw
b2ludHMobnVtRW50cnlwb2ludHMpOworICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9p
bnQoMCwgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPigqbV9wcm9sb2d1ZUdlbmVyYXRv
cikpOworCisgICAgaWYgKG1fY2F0Y2hFbnRyeXBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgUmVm
PEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3Jl
YXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbdGhpc10g
KENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAg
ICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxpbmcgcHJlY2lzZSBhbGxvY2F0aW9ucyBpbiBXYXNtQjNJUkdlbmVyYXRv
ciBjYXRjaCBlbnRyeXBvaW50cyBtaWdodCBiZSB1bm5lY2Vzc2FyeQorICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyMTMKKyAgICAg
ICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRy
KENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7CisgICAgICAgICAg
ICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6
OmJsb2NrTWFzayksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE1hcmtlZEJsb2NrOjpvZmZz
ZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOwor
CisgICAgICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZz
ZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgR1BSSW5mbzo6cmVn
VDApOworCisgICAgICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDMpOworCisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZvcldhc21D
YXRjaE9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KEdQUkluZm86OnJlZ1QzLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworCisgICAgICAgICAgICBq
aXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxG
cmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6dGhpc0Fy
Z3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBHUFJJbmZvOjpyZWdUMyk7Cisg
ICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OnJlZ1QzKTsK
KworICAgICAgICAgICAgaml0LnByb2JlKHRhZ0NGdW5jdGlvbjxKSVRQcm9iZVB0clRhZz4oYnVp
bGRFbnRyeUJ1ZmZlckZvckNhdGNoKSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBTaGFyZWQgcHJvbG9ndWUgZXhwZWN0cyB0aGlzIGluIHRoaXMgcmVnaXN0ZXIgd2hl
biBlbnRlcmluZyB0aGUgZnVuY3Rpb24gdXNpbmcgZmFzdCBUTFMuCisgICAgICAgICAgICAgICAg
aml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2NhdGNoRW50cnlwb2ludHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2NvZGUu
c2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDEgKyBpLCBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yLmNv
cHlSZWYoKSk7CisgICAgfQorCisgICAgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCBzdWNjZXNz
b3JzOworICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKG1fbWFpbkVudHJ5cG9pbnRTdGFydCk7CisgICAg
c3VjY2Vzc29ycy5hcHBlbmRWZWN0b3IobV9jYXRjaEVudHJ5cG9pbnRzKTsKKworICAgIFJFTEVB
U0VfQVNTRVJUKG51bUVudHJ5cG9pbnRzID09IHN1Y2Nlc3NvcnMuc2l6ZSgpKTsKKyAgICBtX3Jv
b3RCbG9jay0+c3VjY2Vzc29ycygpID0gc3VjY2Vzc29yczsKK30KKwogQjM6OlR5cGUgQWlySVJH
ZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKEJsb2NrU2lnbmF0dXJlIHJldHVyblR5cGUpCiB7CiAg
ICAgaWYgKHJldHVyblR5cGUtPnJldHVybnNWb2lkKCkpCkBAIC0xNDI4LDYgKzE2MTksOCBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgCiAgICAgaW50MzJfdCBvZmZz
ZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIHN3
aXRjaCAoZ2xvYmFsLmJpbmRpbmdNb2RlKSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1h
dGlvbjo6QmluZGluZ01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZToKKyAgICAgICAgLy8gT09QUwor
ICAgICAgICAvLyBlbWl0TG9hZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIHRvQjNUeXBlKHR5
cGUpLCB0ZW1wLCBvZmZzZXQsIHJlc3VsdCk7CiAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRy
Rm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKICAgICAgICAg
ICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIEFyZzo6YWRkcih0ZW1wLCBvZmZz
ZXQpLCByZXN1bHQpOwogICAgICAgICBlbHNlIHsKQEAgLTE0MzksNiArMTYzMiw4IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCAKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOgogICAg
ICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246
Ok11dGFiaWxpdHk6Ok11dGFibGUpOworICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vIGVtaXRM
b2FkKE1vdmUsIEIzOjpJbnQ2NCwgdGVtcCwgb2Zmc2V0LCB0ZW1wKTsKICAgICAgICAgaWYgKEFy
Zzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6OldpZHRoNjQpKQogICAgICAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpLCB0ZW1wKTsKICAgICAgICAgZWxzZSB7
CkBAIC0zMDEyLDU3ICszMjA3LDIyNCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9V
bnJlYWNoYWJsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBXYXNtIGV4Y2VwdGlvbnMgaW4gdGhlIEFpciBnZW5lcmF0b3IKLS8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyMTEKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smLCBDb250cm9sVHlwZSYsIFN0YWNrJikgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFj
ayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICArK21fdHJ5Q2F0Y2hEZXB0aDsK
KworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAg
IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIHJl
c3VsdCA9IENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1cmUo
c2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpUcnksIGNvbnRpbnVhdGlvbiwgKyttX2NhbGxTaXRlSW5k
ZXgsIG1fdHJ5Q2F0Y2hEZXB0aCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29u
dHJvbFR5cGUmLCBSZXN1bHRMaXN0JikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0
TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhj
dXJyZW50U3RhY2ssIGRhdGEucmVzdWx0cyk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4g
YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBzaWduYXR1cmUsIGRhdGEsIHJl
c3VsdHMpOwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNrJiBj
dXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OworICAgIHVuaWZ5
VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YS5yZXN1bHRzKTsKKyAgICBhcHBlbmQo
SnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRp
b24pOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CiAKLWF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDb250
cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVG1wIGJ1ZmZlciA9IGVtaXRD
YXRjaEltcGwoQ2F0Y2hLaW5kOjpDYXRjaCwgZGF0YSwgZXhjZXB0aW9uSW5kZXgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBUeXBl
ZFRtcCB0bXAgPSB0bXBGb3JUeXBlKHR5cGUpOworICAgICAgICBlbWl0TG9hZChidWZmZXIsIGkg
KiBzaXplb2YodWludDY0X3QpLCB0bXApOworICAgICAgICByZXN1bHRzLmFwcGVuZCh0bXApOwor
ICAgIH0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRj
aEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGRhdGEp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kOjpDYXRjaEFsbCwgZGF0YSk7CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUm
LCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK1RtcCBBaXJJUkdlbmVyYXRvcjo6ZW1p
dENhdGNoSW1wbChDYXRjaEtpbmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4KQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOworICAg
IG1fY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQobV9jdXJyZW50QmxvY2spOworCisgICAgaWYgKENv
bnRyb2xUeXBlOjppc1RyeShkYXRhKSkgeworICAgICAgICBpZiAoa2luZCA9PSBDYXRjaEtpbmQ6
OkNhdGNoKQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaCgrK21fY2FsbFNpdGVJ
bmRleCwgZzY0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlU
b0NhdGNoQWxsKCsrbV9jYWxsU2l0ZUluZGV4LCBnNjQoKSk7CisgICAgfQorICAgIC8vIFdlIGNv
bnZlcnQgZnJvbSAidHJ5IiB0byAiY2F0Y2giIENvbnRyb2xUeXBlIGFib3ZlLiBUaGlzIGRvZXNu
J3QKKyAgICAvLyBoYXBwZW4gaWYgQ29udHJvbFR5cGUgaXMgYWxyZWFkeSBhICJjYXRjaCIuIFRo
aXMgY2FuIGhhcHBlbiB3aGVuCisgICAgLy8gd2UgaGF2ZSBtdWx0aXBsZSBjYXRjaGVzIGxpa2Ug
InRyeSB7fSBjYXRjaChBKXt9IGNhdGNoKEIpe30uLi5DYXRjaEFsbChFKXt9Ii4KKyAgICAvLyBX
ZSBqdXN0IGNvbnZlcnQgdGhlIGZpcnN0IENvbnRyb2xUeXBlIHRvIGEgY2F0Y2gsIHRoZW4gdGhl
IG90aGVycyB3aWxsCisgICAgLy8gdXNlIGl0cyBmaWVsZHMuCisgICAgQVNTRVJUKENvbnRyb2xU
eXBlOjppc0FueUNhdGNoKGRhdGEpKTsKKworICAgIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlID0g
a2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoID8gSGFuZGxlclR5cGU6OkNhdGNoIDogSGFuZGxlclR5
cGU6OkNhdGNoQWxsOworICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlclR5
cGUsIGRhdGEudHJ5U3RhcnQoKSwgZGF0YS50cnlFbmQoKSwgMCwgbV90cnlDYXRjaERlcHRoLCBl
eGNlcHRpb25JbmRleCB9KTsKKworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUo
KSwgbV9jdXJyZW50QmxvY2spOworCisgICAgdW5zaWduZWQgaW5kZXhJbkJ1ZmZlciA9IDA7Cisg
ICAgYXV0byBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIgPSBbJl0gKFR5cGVkVG1wIHJlc3VsdCkgewor
ICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4SW5CdWZmZXI7
CisgICAgICAgICsraW5kZXhJbkJ1ZmZlcjsKKyAgICAgICAgVG1wIGJ1ZmZlclB0ciA9IFRtcChH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBlbWl0TG9hZChidWZmZXJQdHIsIG9mZnNl
dCwgcmVzdWx0KTsKKyAgICB9OworCisgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQor
ICAgICAgICBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIobG9jYWwpOworCisgICAgZm9yICh1bnNpZ25l
ZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNr
KCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgeworICAgICAgICBhdXRvJiBjb250cm9sRGF0YSA9
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAg
ICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29u
dHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkrKykgeworICAgICAgICAgICAg
VHlwZWRUbXAgdG1wID0gZXhwcmVzc2lvblN0YWNrW2ldLnZhbHVlKCk7CisgICAgICAgICAgICBs
b2FkRnJvbVNjcmF0Y2hCdWZmZXIodG1wKTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBzZXQg
b3VyIGN1cnJlbnQgQ29udHJvbEVudHJ5J3MgZXhjZXB0aW9uIGJlbG93IGFmdGVyIHRoZSBwYXRj
aHBvaW50LgorICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goY29udHJvbERhdGEp
ICYmICZkYXRhICE9ICZjb250cm9sRGF0YSkKKyAgICAgICAgICAgIGxvYWRGcm9tU2NyYXRjaEJ1
ZmZlcihjb250cm9sRGF0YS5leGNlcHRpb24oKSk7CisgICAgfQorCisgICAgQjM6OlBhdGNocG9p
bnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KG1fcHJvYy5hZGRUdXBsZSh7IEIzOjpwb2lu
dGVyVHlwZSgpLCBCMzo6cG9pbnRlclR5cGUoKSB9KSk7CisgICAgcGF0Y2gtPmVmZmVjdHMuZXhp
dHNTaWRld2F5cyA9IHRydWU7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3Jv
U2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZSA9IFJlZ2lz
dGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIGNsb2JiZXJMYXRlLmFk
ZChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHBhdGNoLT5jbG9iYmVyTGF0ZShjbG9iYmVy
TGF0ZSk7CisgICAgcGF0Y2gtPnJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6VmFsdWVSZXA6
OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHBhdGNoLT5yZXN1bHRDb25zdHJh
aW50cy5hcHBlbmQoQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7
CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubW92
ZShwYXJhbXNbMl0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSkpOworICAg
ICAgICB9KTsKKyAgICB9KTsKKworICAgIFRtcCBleGNlcHRpb24gPSBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgIFRtcCBidWZmZXIgPSBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIyKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFZlY3RvcjxU
bXAsIDg+Ojpmcm9tKGV4Y2VwdGlvbiwgYnVmZmVyKSwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCAx
Pjo6ZnJvbShpbnN0YW5jZVZhbHVlKCkpKTsKKyAgICBhcHBlbmQoTW92ZSwgZXhjZXB0aW9uLCBk
YXRhLmV4Y2VwdGlvbigpKTsKKworICAgIHJldHVybiBidWZmZXI7CiB9CiAKLWF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYsIENvbnRyb2xU
eXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUo
Q29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBhZGREZWxl
Z2F0ZVRvVW5yZWFjaGFibGUodGFyZ2V0LCBkYXRhKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xU
eXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5zaWduZWQgdGFyZ2V0RGVwdGgg
PSAwOworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSkKKyAgICAgICAgdGFyZ2V0
RGVwdGggPSB0YXJnZXQudHJ5RGVwdGgoKTsKKworICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBw
ZW5kKHsgSGFuZGxlclR5cGU6OkRlbGVnYXRlLCBkYXRhLnRyeVN0YXJ0KCksICsrbV9jYWxsU2l0
ZUluZGV4LCAwLCBtX3RyeUNhdGNoRGVwdGgsIHRhcmdldERlcHRoIH0pOwogICAgIHJldHVybiB7
IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGV4Y2VwdGlvbkluZGV4KTsKKyAgICBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIHBhdGNoLT5lZmZlY3Rz
LnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRp
bGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIDg+
IHBhdGNoQXJnczsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGluc3RhbmNl
VmFsdWUoKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworICAg
IHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQorICAgICAgICBwYXRj
aEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGFyZ3NbaV0sIEIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudChpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpKTsKKworICAgIFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBh
dGNoLCBwYXRjaEFyZ3MpOworCisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpcywgZXhjZXB0
aW9uSW5kZXgsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgLy8gT09QUzogc2hhcmUgY29kZSB3
aXRoIEIzIElSIGdlbmVyYXRvciBoZXJlLgorICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOworICAgICAgICBoYW5kbGUuZ2VuZXJh
dGUoaml0LCBwYXJhbXMsIHRoaXMpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVy
KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2Nh
dGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0
Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxp
Z25tZW50KSk7CisgICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNl
dE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7
CisgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOworCisgICAgICAgICAg
ICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zm
c2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlv
bjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7CisKKyAgICAgICAgICAgIGxvYWRlZENhc2UubGlu
aygmaml0KTsKKyAgICAgICAgfQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3JhdGNoKTsKKworICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4Y2VwdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyKTsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uV2FzbVRocm93KSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZW1p
dFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBUbXAoKSwgV1RGTW92ZShwYXRjaEFy
Z3MpKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJl
dGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IGFkZFBhdGNo
cG9pbnQoQjM6OlZvaWQpOworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0Ojp2b2xhdGls
ZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRy
dWU7CisKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIDM+IHBhdGNoQXJnczsKKyAgICBwYXRj
aEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGluc3RhbmNlVmFsdWUoKSwgQjM6OlZhbHVlUmVw
OjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29u
c3RyYWluZWRUbXAoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgQjM6OlZhbHVlUmVw
OjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29u
c3RyYWluZWRUbXAoZGF0YS5leGNlcHRpb24oKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6
YXJndW1lbnRHUFIyKSkpOworCisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUg
PSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2gsIHBhdGNoQXJncyk7CisgICAg
cGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjA7Cisg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7CisgICAgICAgICAgICBqaXQu
YW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNr
KSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZv
b3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRvIGxvYWRlZENh
c2UgPSBqaXQuanVtcCgpOworCisgICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGlu
aygmaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0Ojpv
ZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7
CisKKyAgICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKKyAgICAgICAgfQorICAgICAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3Jh
dGNoKTsKKworICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOworICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7
CisgICAgICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJldGhyb3cpKTsKKyAgICAgICAg
fSk7CisgICAgfSk7CisKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gs
IFRtcCgpLCBXVEZNb3ZlKHBhdGNoQXJncykpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
MzIwOSw3ICszNTcxLDggQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJs
ZQogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKICAgICAgICAg
YXBwZW5kKGRhdGEuc3BlY2lhbCwgSnVtcCk7CiAgICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3Vj
Y2Vzc29ycyhtX2N1cnJlbnRCbG9jayk7Ci0gICAgfQorICAgIH0gZWxzZSBpZiAoZGF0YS5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBkYXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlw
ZTo6Q2F0Y2gpCisgICAgICAgIC0tbV90cnlDYXRjaERlcHRoOwogCiAgICAgaWYgKGRhdGEuYmxv
Y2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKSB7CiAgICAgICAgIG1fb3V0ZXJMb29wcy5yZW1v
dmVMYXN0KCk7CkBAIC0zMjMzLDcgKzM1OTYsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRF
bmRUb1VucmVhY2hhYmxlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotQjM6OlBhdGNocG9pbnRWYWx1
ZSogQWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNv
bnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4mJiBwYXRj
aEFyZ3MpCitzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGU+IEFpcklSR2VuZXJhdG9yOjplbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayog
YmxvY2ssIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1
bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+
IHBhdGNoQXJncykKIHsKICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0Iz
UmVzdWx0VHlwZSgmc2lnbmF0dXJlKSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQ
aW5uZWQgPSB0cnVlOwpAQCAtMzI1OCw4ICszNjIxLDkgQEAgQjM6OlBhdGNocG9pbnRWYWx1ZSog
QWlySVJHZW5lcmF0b3I6OmVtaQogICAgICAgICAgICAgcmVzdWx0Q29uc3RyYWludHMuYXBwZW5k
KEIzOjpWYWx1ZVJlcCh2YWx1ZUxvY2F0aW9uKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPnJlc3Vs
dENvbnN0cmFpbnRzID0gV1RGTW92ZShyZXN1bHRDb25zdHJhaW50cyk7CiAgICAgfQorICAgIFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUgZXhjZXB0aW9uSGFuZGxlID0gcHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQsIHBhdGNoQXJncyk7CiAgICAgZW1pdFBhdGNocG9p
bnQoYmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdHMsIFdURk1vdmUocGF0Y2hBcmdzKSk7Ci0gICAg
cmV0dXJuIHBhdGNocG9pbnQ7CisgICAgcmV0dXJuIHsgcGF0Y2hwb2ludCwgZXhjZXB0aW9uSGFu
ZGxlIH07CiB9CiAKIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKQEAgLTMyOTUs
MTQgKzM2NTksMTcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdQog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1dhc21CbG9jaywgaXNFbWJl
ZGRlckJsb2NrKTsKIAogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0g
ZW1pdENhbGxQYXRjaHBvaW50KGlzV2FzbUJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3Mp
OworICAgICAgICAgICAgYXV0byBwYWlyID0gZW1pdENhbGxQYXRjaHBvaW50KGlzV2FzbUJsb2Nr
LCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MpOworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2lu
dCA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIu
c2Vjb25kOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwg
cGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4K
ICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2Fs
bGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmcpKTsKIAotICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAg
ICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFi
bGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBl
bmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwp
LCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMzMyMSwxMyArMzY4OCwxNyBAQCBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1CiAKICAgICAgICAgICAgIFZlY3RvcjxDb25zdHJh
aW5lZFRtcD4ganVtcEFyZ3M7CiAgICAgICAgICAgICBqdW1wQXJncy5hcHBlbmQoeyBqdW1wRGVz
dGluYXRpb24sIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyIH0pOwotICAgICAgICAgICAgYXV0
byogcGF0Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hwb2ludChpc0VtYmVkZGVyQmxvY2ssIHNpZ25h
dHVyZSwgcmVzdWx0cywgYXJncywgV1RGTW92ZShqdW1wQXJncykpOworICAgICAgICAgICAgYXV0
byBwYWlyID0gZW1pdENhbGxQYXRjaHBvaW50KGlzRW1iZWRkZXJCbG9jaywgc2lnbmF0dXJlLCBy
ZXN1bHRzLCBhcmdzLCBXVEZNb3ZlKGp1bXBBcmdzKSk7CisgICAgICAgICAgICBhdXRvKiBwYXRj
aHBvaW50ID0gcGFpci5maXJzdDsKKyAgICAgICAgICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlID0g
cGFpci5zZWNvbmQ7CisKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90
ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5z
dGFuY2UuCiAgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxk
IGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLmdlbmVy
YXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNb
cGFyYW1zLnByb2MoKS5yZXN1bHRDb3VudChwYXJhbXMudmFsdWUoKS0+dHlwZSgpKV0uZ3ByKCks
IFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMzMzOSwxMiArMzcxMCwx
NSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1CiAgICAgICAgIC8v
IFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNl
LCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCiAgICAgICAgIHJlc3Rv
cmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1f
aW5mby5tZW1vcnksIGN1cnJlbnRJbnN0YW5jZSwgY29udGludWF0aW9uKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gZW1pdENhbGxQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MpOworICAgICAgICBhdXRvIHBhaXIgPSBl
bWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJn
cyk7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWlyLmZpcnN0OworICAgICAgICBhdXRv
IGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIuc2Vjb25kOwogICAgICAgICAvLyBXZSBuZWVkIHRvIGNs
b2JiZXIgdGhlIHNpemUgcmVnaXN0ZXIgc2luY2UgdGhlIExMSW50IGFsd2F5cyBib3VuZHMgY2hl
Y2tzCiAgICAgICAgIGlmIChtX21vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nIHx8IG1faW5m
by5tZW1vcnkuaXNTaGFyZWQoKSkKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRl
KFJlZ2lzdGVyU2V0IHsgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS5ib3VuZHNDaGVja2luZ1Np
emVSZWdpc3RlciB9KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBleGNlcHRpb25IYW5k
bGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5j
dGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMzUyMyw3
ICszODk3LDkgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChUeQogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQog
ICAgICAgICByZXN1bHRzLmFwcGVuZCh0bXBGb3JUeXBlKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkp
KSk7CiAKLSAgICBhdXRvKiBwYXRjaHBvaW50ID0gZW1pdENhbGxQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MsIFdURk1vdmUoZXh0cmFBcmdzKSk7Cisg
ICAgYXV0byBwYWlyID0gZW1pdENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBzaWduYXR1
cmUsIHJlc3VsdHMsIGFyZ3MsIFdURk1vdmUoZXh0cmFBcmdzKSk7CisgICAgYXV0byogcGF0Y2hw
b2ludCA9IHBhaXIuZmlyc3Q7CisgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29u
ZDsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdp
c3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCiAgICAgLy8gV2Ug
cGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcgc28KQEAgLTM1MzUsNiArMzkxMSw3IEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVHkKIAogICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0
LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5y
ZXN1bHRDb3VudChwYXJhbXMudmFsdWUoKS0+dHlwZSgpKV0uZ3ByKCksIFdhc21FbnRyeVB0clRh
Zyk7CiAgICAgfSk7CiAKQEAgLTM1OTUsNyArMzk3Miw4IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW8KICAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJFbnRy
eXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgY29tcGlsYXRpb25D
b250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAK
LSAgICBCMzo6UHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQucHJv
Y2VkdXJlID0gbWFrZVVuaXF1ZTxCMzo6UHJvY2VkdXJlPigpOworICAgIGF1dG8mIHByb2NlZHVy
ZSA9ICpjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlOwogICAgIENvZGUmIGNvZGUgPSBwcm9j
ZWR1cmUuY29kZSgpOwogCiAgICAgcHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIoW10gKFByaW50
U3RyZWFtJiBvdXQsIEIzOjpPcmlnaW4gb3JpZ2luKSB7CkBAIC0zNjE1LDI1ICszOTkzLDI3IEBA
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW8KICAgICBGdW5jdGlvblBh
cnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRh
dGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9G
QUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKKyAgICBpckdlbmVyYXRvci5m
aW5hbGl6ZUVudHJ5cG9pbnRzKCk7CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1TdWNjZXNzb3Jz
KCk7ICsraSkKICAgICAgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKS0+YWRkUHJlZGVj
ZXNzb3IoYmxvY2spOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKHNob3Vs
ZER1bXBJUkF0RWFjaFBoYXNlKEIzOjpBaXJNb2RlKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dM
bigiR2VuZXJhdGVkIHBhdGNocG9pbnRzIik7Ci0gICAgICAgICAgICBmb3IgKEIzOjpQYXRjaHBv
aW50VmFsdWUqKiBwYXRjaCA6IGlyR2VuZXJhdG9yLnBhdGNocG9pbnRzKCkpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKGRlZXBEdW1wKHByb2NlZHVyZSwgKnBhdGNoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCMzo6QWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihjb2RlKTsKLSAgICAgICAg
QjM6OkFpcjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCk7Ci0gICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVj
dHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKLSAgICAgICAgcmVzdWx0LT5lbnRy
eXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zm
c2V0TGlzdCgpOworICAgIGlmIChVTkxJS0VMWShzaG91bGREdW1wSVJBdEVhY2hQaGFzZShCMzo6
QWlyTW9kZSkpKSB7CisgICAgICAgIGRhdGFMb2dMbigiR2VuZXJhdGVkIHBhdGNocG9pbnRzIik7
CisgICAgICAgIGZvciAoQjM6OlBhdGNocG9pbnRWYWx1ZSoqIHBhdGNoIDogaXJHZW5lcmF0b3Iu
cGF0Y2hwb2ludHMoKSkKKyAgICAgICAgICAgIGRhdGFMb2dMbihkZWVwRHVtcChwcm9jZWR1cmUs
ICpwYXRjaCkpOwogICAgIH0KIAorICAgIEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNv
ZGUpOworICAgIEIzOjpBaXI6OmdlbmVyYXRlKGNvZGUsICpjb21waWxhdGlvbkNvbnRleHQud2Fz
bUVudHJ5cG9pbnRKSVQpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50
Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOworICAgIHJlc3VsdC0+
ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJB
dE9mZnNldExpc3QoKTsKKyAgICByZXN1bHQtPnN0YWNrbWFwcyA9IGlyR2VuZXJhdG9yLnRha2VT
dGFja21hcHMoKTsKKyAgICByZXN1bHQtPmV4Y2VwdGlvbkhhbmRsZXJzID0gaXJHZW5lcmF0b3Iu
dGFrZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01
MTc4LDYgKzU1NTgsNDkgQEAgdGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cAogICAgIHJldHVybiB7IH07CiB9CiAKK3RlbXBsYXRlIDxzaXplX3QgaW5saW5lQ2FwYWNpdHk+
CitQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIEFpcklSR2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hw
b2ludEZvckV4Y2VwdGlvbnMoQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFZlY3RvcjxDb25z
dHJhaW5lZFRtcCwgaW5saW5lQ2FwYWNpdHk+JiBhcmdzKQoreworICAgICsrbV9jYWxsU2l0ZUlu
ZGV4OworICAgIGlmICghbV90cnlDYXRjaERlcHRoKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgVmVjdG9yPFRtcD4gbGl2ZVZhbHVlczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsIDog
bV9sb2NhbHMpCisgICAgICAgIGxpdmVWYWx1ZXMuYXBwZW5kKGxvY2FsKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9s
U3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIENvbnRyb2xEYXRhJiBk
YXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7
CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNr
KClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZm9yIChj
b25zdCBhdXRvJiB0bXAgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgICAgICBsaXZlVmFsdWVz
LmFwcGVuZCh0bXAudmFsdWUoKSk7CisgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRj
aChkYXRhKSkKKyAgICAgICAgICAgIGxpdmVWYWx1ZXMuYXBwZW5kKGRhdGEuZXhjZXB0aW9uKCkp
OworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCA9IGNoZWNrZWRTdW08dW5zaWduZWQ+KGFy
Z3Muc2l6ZSgpLCBwYXRjaC0+cmVzdWx0Q29uc3RyYWludHMuc2l6ZSgpKTsKKyAgICBmb3IgKFRt
cCB0bXAgOiBsaXZlVmFsdWVzKQorICAgICAgICBhcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh0
bXAsIEIzOjpWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpKTsKKworICAgIHBhdGNoLT5lZmZlY3RzLmV4
aXRzU2lkZXdheXMgPSB0cnVlOworCisgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUgeyBtX2NhbGxTaXRlSW5kZXgsIG9mZnNldCB9OworfQorCit2b2lkIFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGU6OmdlbmVyYXRlKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIEFpcklSR2VuZXJhdG9yKiBnZW5lcmF0b3IpIGNv
bnN0Cit7CisgICAgaWYgKG1fY2FsbFNpdGVJbmRleCA9PSBzX2ludmFsaWRDYWxsU2l0ZUluZGV4
KQorICAgICAgICByZXR1cm47CisKKyAgICBTdGFja01hcCB2YWx1ZXM7CisgICAgaWYgKHBhcmFt
cy52YWx1ZSgpLT5udW1DaGlsZHJlbigpID49IG1fb2Zmc2V0KSB7CisgICAgICAgIHZhbHVlcyA9
IFN0YWNrTWFwKHBhcmFtcy52YWx1ZSgpLT5udW1DaGlsZHJlbigpIC0gbV9vZmZzZXQpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29mZnNldDsgaSA8IHBhcmFtcy52YWx1ZSgpLT5udW1D
aGlsZHJlbigpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaSAtIG1fb2Zmc2V0XSA9IE9TUkVu
dHJ5VmFsdWUocGFyYW1zW2ldLCBwYXJhbXMudmFsdWUoKS0+Y2hpbGQoaSktPnR5cGUoKSk7Cisg
ICAgfQorICAgIGdlbmVyYXRvci0+YWRkU3RhY2tNYXAobV9jYWxsU2l0ZUluZGV4LCBXVEZNb3Zl
KHZhbHVlcykpOworICAgIGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1f
Y2FsbFNpdGVJbmRleCksIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAy
ODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgQjNJUkdlbmVyYXRvcjsK
IHN0cnVjdCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHsKICAgICB2b2lkIGdlbmVyYXRlKEND
YWxsSGVscGVycyYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCBCM0lSR2Vu
ZXJhdG9yKikgY29uc3Q7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52YWxp
ZENhbGxTaXRlSW5kZXggPSAgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKIAogICAgIHVuc2lnbmVkIG1fY2Fs
bFNpdGVJbmRleCB7IHNfaW52YWxpZENhbGxTaXRlSW5kZXggfTsKICAgICB1bnNpZ25lZCBtX29m
ZnNldDsKQEAgLTg1Nyw2ICs4NTcsNyBAQCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZnJhbWVQb2lu
dGVyKCkKICAgICByZXR1cm4gbV9mcmFtZVBvaW50ZXI7CiB9CiAKKy8vIE9PUFM6IGRlLWR1cGxp
Y2F0ZQogc3RhdGljIHZvaWQgYnVpbGRFbnRyeUJ1ZmZlckZvckNhdGNoKFByb2JlOjpDb250ZXh0
JiBjb250ZXh0KQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxs
RnJhbWUqPigpOwpAQCAtMjYxMCw4ICsyNjExLDE4IEBAIFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUgQjNJUkdlbmVyYXRvcjoKICAgICB9CiAKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBwYXRjaC0+
bnVtQ2hpbGRyZW4oKTsKLSAgICBpZiAocGF0Y2gtPnR5cGUoKSAhPSBWb2lkKQotICAgICAgICBv
ZmZzZXQrKzsKKyAgICAvLyBPT1BTOiBhZGQgdGVzdAorICAgIHN3aXRjaCAocGF0Y2gtPnR5cGUo
KS5raW5kKCkpIHsKKyAgICBjYXNlIEIzOjpWb2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEIzOjpUdXBsZTogeworICAgICAgICBvZmZzZXQgKz0gbV9wcm9jLnR1cGxlRm9yVHlwZShwYXRj
aC0+dHlwZSgpKS5zaXplKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0Ogor
ICAgICAgICArK29mZnNldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgcGF0Y2gtPmVm
ZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CiAgICAgcGF0Y2gtPmFwcGVuZFZlY3RvcldpdGhS
ZXAobGl2ZVZhbHVlcywgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKQEAgLTI2NTcsNiArMjY2OCwx
MCBAQCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGRhdGEuY29udmVydFRyeVRvQ2F0Y2hBbGwoKyttX2NhbGxTaXRlSW5k
ZXgsIG1fcHJvYy5hZGRWYXJpYWJsZShwb2ludGVyVHlwZSgpKSk7CiAgICAgfQorICAgIC8vIFdl
IGNvbnZlcnQgZnJvbSAidHJ5IiB0byAiY2F0Y2giIENvbnRyb2xUeXBlIGFib3ZlLiBUaGlzIGRv
ZXNuJ3QKKyAgICAvLyBoYXBwZW4gaWYgQ29udHJvbFR5cGUgaXMgYWxyZWFkeSBhICJjYXRjaCIu
IFRoaXMgY2FuIGhhcHBlbiB3aGVuCisgICAgLy8gd2UgaGF2ZSBtdWx0aXBsZSBjYXRjaGVzIGxp
a2UgInRyeSB7fSBjYXRjaChBKXt9IGNhdGNoKEIpe30uLi5DYXRjaEFsbChFKXt9IgorICAgIEFT
U0VSVChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSk7CiAKICAgICBIYW5kbGVyVHlwZSBo
YW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRj
aCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsKICAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVu
ZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5
Q2F0Y2hEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7CkBAIC0zMzI0LDYgKzMzMzksNyBAQCB2b2lk
IGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChDb21waWxhdGlvCiAgICAgfQogfQogCisvLyBPT1BT
OiBNb3ZlIHRoaXMgdG8gc2hhcmVkIGxvY2FhdGlvbiBsZXNzIEIzIHNwZWNpZmljLgogdm9pZCBj
b21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlv
biogZnVuY3Rpb24sIGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCwgTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikKIHsKICAgICBpZiAoIWNvbnRleHQucHJvY2VkdXJlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjg3NTgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDMsOCArMjAzLDYgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IEJCUVBsYQogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7CiAgICAgaWYgKE9wdGlv
bnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRp
b24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJl
c2hvbGQoKSkKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKLSAgICBlbHNlIGlmICghbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0
KGZ1bmN0aW9uSW5kZXgpKQotICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogICAgIGVsc2Ug
aWYgKCFPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0
cnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4NzU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1OSw5ICs1
NTksNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0CiAgICAgUkVM
RUFTRV9BU1NFUlQodXNlZEJ1ZmZlci5jYXBhY2l0eSgpID09IG9sZENhcGFjaXR5KTsKICAgICAq
dGhyZWFkU3BlY2lmaWMgPSBXVEZNb3ZlKHVzZWRCdWZmZXIpOwogCi0gICAgaWYgKCFtX3VzZXNF
eGNlcHRpb25zKQotICAgICAgICBtX2luZm8ubV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25z
LnF1aWNrU2V0KG1fZnVuY3Rpb25JbmRleCk7Ci0KICAgICByZXR1cm4gV1RGTW92ZShtX2NvZGVC
bG9jayk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oCShyZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MTE5LDcgKzExOSw2IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWQK
IAogICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRnVuY3Rpb25zOwogICAgIEJpdFZlY3RvciBtX2Rl
Y2xhcmVkRXhjZXB0aW9uczsKLSAgICBCaXRWZWN0b3IgbV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNl
cHRpb25zOwogICAgIG11dGFibGUgQml0VmVjdG9yIG1fcmVmZXJlbmNlZEZ1bmN0aW9uczsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1p
bmdQYXJzZXIuY3BwCShyZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzEx
Nyw2IEBAIGF1dG8gU3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVTZWN0aW9uU2kKICAgICBtX2Z1
bmN0aW9uQ291bnQgPSBmdW5jdGlvbkNvdW50OwogICAgIG1fZnVuY3Rpb25JbmRleCA9IDA7CiAg
ICAgbV9jb2RlT2Zmc2V0ID0gbV9vZmZzZXQ7Ci0gICAgbV9pbmZvLT5tX2Z1bmN0aW9uRG9lc05v
dFVzZUV4Y2VwdGlvbnMuZW5zdXJlU2l6ZShmdW5jdGlvbkNvdW50KTsKIAogICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGZ1bmN0aW9uQ291
bnQpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCAhPSBtX2luZm8tPmZ1
bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVuY3Rpb25Db3VudCwgIiBl
eGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1faW5mby0+ZnVuY3Rp
b25zLnNpemUoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448538</attachid>
            <date>2022-01-06 14:46:00 -0800</date>
            <delta_ts>2022-01-06 16:40:11 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>49373</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5LDggQEAK
ICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisj
aW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBCMzo6QWlyOwpAQCAtMTI2LDIwICsxMjgsNDEgQEAgcHJp
dmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIH07CiAKK2NsYXNzIEFpcklSR2VuZXJhdG9yOworCitz
dHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdm9pZCBnZW5lcmF0ZShDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgQWlySVJHZW5l
cmF0b3IqKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlk
Q2FsbFNpdGVJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKwor
ICAgIHVuc2lnbmVkIG1fY2FsbFNpdGVJbmRleCB7IHNfaW52YWxpZENhbGxTaXRlSW5kZXggfTsK
KyAgICB1bnNpZ25lZCBtX251bUxpdmVWYWx1ZXM7Cit9OworCiBjbGFzcyBBaXJJUkdlbmVyYXRv
ciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUeXBlZFRtcDsKICAgICB1
c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCA4PjsKIAogICAgIHN0cnVj
dCBDb250cm9sRGF0YSB7Ci0gICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBC
bG9ja1NpZ25hdHVyZSByZXN1bHQsIFJlc3VsdExpc3QgcmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5
cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxw
dHIpCisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHJlc3Vs
dCwgUmVzdWx0TGlzdCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29u
dGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKICAgICAgICAgICAgIDog
Y29udHJvbEJsb2NrVHlwZSh0eXBlKQogICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGlu
dWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCiAgICAgICAgICAgICAsIHJl
c3VsdHMocmVzdWx0VG1wcykKICAgICAgICAgICAgICwgcmV0dXJuVHlwZShyZXN1bHQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOworICAgICAgICB9CisKKyAg
ICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBSZXN1
bHRMaXN0IHJlc3VsdFRtcHMsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24sIHVuc2lnbmVkIHRyeVN0YXJ0LCB1bnNpZ25lZCB0cnlEZXB0aCkKKyAgICAgICAgICAgIDog
Y29udHJvbEJsb2NrVHlwZSh0eXBlKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGlu
dWF0aW9uKQorICAgICAgICAgICAgLCBzcGVjaWFsKG51bGxwdHIpCisgICAgICAgICAgICAsIHJl
c3VsdHMocmVzdWx0VG1wcykKKyAgICAgICAgICAgICwgcmV0dXJuVHlwZShyZXN1bHQpCisgICAg
ICAgICAgICAsIG1fdHJ5U3RhcnQodHJ5U3RhcnQpCisgICAgICAgICAgICAsIG1fdHJ5Q2F0Y2hE
ZXB0aCh0cnlEZXB0aCkKKyAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgQ29udHJvbERh
dGEoKQpAQCAtMTQ4LDggKzE3MSw4IEBAIHB1YmxpYzoKIAogICAgICAgICBzdGF0aWMgYm9vbCBp
c0lmKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlw
ZSgpID09IEJsb2NrVHlwZTo6SWY7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNUcnkoY29uc3Qg
Q29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUcnk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9s
RGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6
OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzQW55Q2F0Y2goY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpD
YXRjaDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBj
b250cm9sKSB7IHJldHVybiBpc0FueUNhdGNoKGNvbnRyb2wpICYmIGNvbnRyb2wuY2F0Y2hLaW5k
KCkgPT0gQ2F0Y2hLaW5kOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVs
KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNMb29wKGNv
bnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6TG9vcDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0Jsb2NrKGNvbnN0IENv
bnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6QmxvY2s7IH0KQEAgLTIyMSw2ICsyNDQsNTQgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuIHJldHVyblR5cGUtPnJldHVyblR5cGUoaSk7CiAgICAgICAgIH0KIAorICAgICAgICB2
b2lkIGNvbnZlcnRUcnlUb0NhdGNoKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFR5cGVk
VG1wIGV4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6VHJ5KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9j
a1R5cGU6OkNhdGNoOworICAgICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNo
OworICAgICAgICAgICAgbV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAg
ICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNv
bnZlcnRUcnlUb0NhdGNoQWxsKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFR5cGVkVG1w
IGV4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6VHJ5KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5
cGU6OkNhdGNoOworICAgICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoQWxs
OworICAgICAgICAgICAgbV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAg
ICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25l
ZCB0cnlTdGFydCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9s
QmxvY2tUeXBlID09IEJsb2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tU
eXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV90cnlTdGFydDsKKyAgICAgICAgfQor
CisgICAgICAgIHVuc2lnbmVkIHRyeUVuZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAg
ICAgcmV0dXJuIG1fdHJ5RW5kOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdHJ5RGVw
dGgoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlw
ZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0
Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5Q2F0Y2hEZXB0aDsKKyAgICAgICAgfQorCisg
ICAgICAgIENhdGNoS2luZCBjYXRjaEtpbmQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2NhdGNoS2luZDsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGVkVG1wIGV4
Y2VwdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxv
Y2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fZXhjZXB0
aW9uOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQWly
SVJHZW5lcmF0b3I7CiAgICAgICAgIEJsb2NrVHlwZSBjb250cm9sQmxvY2tUeXBlOwpAQCAtMjI4
LDYgKzI5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7CiAgICAg
ICAgIFJlc3VsdExpc3QgcmVzdWx0czsKICAgICAgICAgQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlw
ZTsKKyAgICAgICAgdW5zaWduZWQgbV90cnlTdGFydDsKKyAgICAgICAgdW5zaWduZWQgbV90cnlF
bmQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5Q2F0Y2hEZXB0aDsKKyAgICAgICAgQ2F0Y2hLaW5k
IG1fY2F0Y2hLaW5kOworICAgICAgICBUeXBlZFRtcCBtX2V4Y2VwdGlvbjsKICAgICB9OwogCiAg
ICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKQEAgLTI2MCw2ICszMzYsOCBAQCBw
dWJsaWM6CiAKICAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIz
OjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQq
LCBjb25zdCBTaWduYXR1cmUmKTsKIAorICAgIHZvaWQgZmluYWxpemVFbnRyeXBvaW50cygpOwor
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0
IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExv
Y2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBl
LCB1aW50NjRfdCk7CkBAIC0zNDksNyArNDI3LDcgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0SW5kaXJlY3RDYWxsKFR5cGVkVG1wIGNhbGxl
ZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBj
b25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7Ci0gICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRDYWxsUGF0Y2hwb2ludChC
YXNpY0Jsb2NrKiwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywg
Y29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYmIGV4
dHJhQXJncyA9IHsgfSk7CisgICAgc3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBv
aW50KEJhc2ljQmxvY2sqLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1
bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+
IGV4dHJhQXJncyA9IHsgfSk7CiAKICAgICBQYXJ0aWFsUmVzdWx0IGFkZFNoaWZ0KFR5cGUsIEIz
OjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IGFkZEludGVnZXJT
dWIoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJo
cywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CkBAIC0zNjEsMTEgKzQzOSwzMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CiAgICAgdm9pZCBkaWRQb3BW
YWx1ZUZyb21TdGFjaygpIHsgfQogCisgICAgVG1wIGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kLCBD
b250cm9sVHlwZSYsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4ID0gMCk7CisgICAgdGVtcGxhdGUg
PHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhCMzo6UGF0Y2hwb2ludFZhbHVlKiwgVmVjdG9y
PENvbnN0cmFpbmVkVG1wLCBpbmxpbmVDYXBhY2l0eT4mIGFyZ3MpOworCiAgICAgY29uc3QgQmFn
PEIzOjpQYXRjaHBvaW50VmFsdWUqPiYgcGF0Y2hwb2ludHMoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fcGF0Y2hwb2ludHM7CiAgICAgfQogCisgICAgdm9pZCBhZGRTdGFja01hcCh1
bnNpZ25lZCBjYWxsU2l0ZUluZGV4LCBTdGFja01hcCYmIHN0YWNrbWFwKQorICAgIHsKKyAgICAg
ICAgbV9zdGFja21hcHMuYWRkKENhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCksIFdURk1vdmUo
c3RhY2ttYXApKTsKKyAgICB9CisKKyAgICBTdGFja01hcHMmJiB0YWtlU3RhY2ttYXBzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fc3RhY2ttYXBzKTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiB0YWtlRXhjZXB0aW9uSGFuZGxlcnMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIEIzOjpUeXBlIHRvQjNSZXN1bHRUeXBlKEJsb2NrU2lnbmF0dXJlIHJl
dHVyblR5cGUpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2YWxpZGF0ZUluc3QoSW5zdCYgaW5z
dCkKQEAgLTQxNywxNiArNTE0LDYgQEAgcHJpdmF0ZToKIAogICAgIFRtcCBuZXdUbXAoQjM6OkJh
bmsgYmFuaykKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoYmFuaykgewotICAgICAgICBjYXNlIEIz
OjpHUDoKLSAgICAgICAgICAgIGlmIChtX2ZyZWVHUHMuc2l6ZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBtX2ZyZWVHUHMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEIzOjpGUDoKLSAgICAgICAgICAgIGlmIChtX2ZyZWVGUHMuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBtX2ZyZWVGUHMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgIH0K
IApAQCAtNDk2LDggKzU4MywxNCBAQCBwcml2YXRlOgogICAgICAgICBlbWl0UGF0Y2hwb2ludChi
YXNpY0Jsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgOD4geyByZXN1bHQgfSwgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPigpKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGlubGluZVNpemU+
CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0
Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBp
bmxpbmVTaXplPiYmIGFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Js
b2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgOD4geyByZXN1bHQgfSwgV1RGTW92ZShhcmdzKSk7Cisg
ICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFRtcFR5cGUsIHNpemVfdCBpbmxp
bmVTaXplPgotICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywg
QjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1bHRUbXBUeXBlLCA4
PiYgIHJlc3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBhcmdzKQor
ICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1bHRUbXBUeXBlLCA4PiYgcmVzdWx0
cywgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCiAgICAgewogICAg
ICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwpCiAgICAgICAgICAgICBtX3BhdGNocG9pbnRT
cGVjaWFsID0gc3RhdGljX2Nhc3Q8QjM6OlBhdGNocG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNw
ZWNpYWwobWFrZVVuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNpYWw+KCkpKTsKQEAgLTU0OSw3ICs2
NDIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgQjM6OlZhbHVlKiBkdW1teVZhbHVlID0gbV9w
cm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgdG1wLnRtcC5pc0dQKCkgPyBCMzo6SW50NjQg
OiBCMzo6RG91YmxlLCAwKTsKICAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQoZHVtbXlWYWx1ZSwg
dG1wLnJlcCk7CiAgICAgICAgICAgICBzd2l0Y2ggKHRtcC5yZXAua2luZCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6Q29sZEFueTogLy8gQjM6OlZhbHVlIHByb3BhZ2F0ZXMg
Q29sZEFueSBpbmZvcm1hdGlvbiBhbmQgbGF0ZXIgQWlyIHdpbGwgYWxsb2NhdGUgYXBwcm9wcmlh
dGUgc3RhY2suCisgICAgICAgICAgICAvLyBCMzo6VmFsdWUgcHJvcGFnYXRlcyAoTGF0ZSlDb2xk
QW55IGluZm9ybWF0aW9uIGFuZCBsYXRlciBBaXIgd2lsbCBhbGxvY2F0ZSBhcHByb3ByaWF0ZSBz
dGFjay4KKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpDb2xkQW55OiAKKyAgICAgICAg
ICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpMYXRlQ29sZEFueToKICAgICAgICAgICAgIGNhc2UgQjM6
OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVu
ZCh0bXAudG1wKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTU1OSw3ICs2NTQsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKHRtcC5yZXAucmVn
KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVl
UmVwOjpTdGFja0FyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFwYXRjaC0+ZWZm
ZWN0cy50ZXJtaW5hbCk7CisgICAgICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgICAg
IC8vQVNTRVJUKCFwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCk7CiAgICAgICAgICAgICAgICAgQXJn
IGFyZyA9IEFyZzo6Y2FsbEFyZyh0bXAucmVwLm9mZnNldEZyb21TUCgpKTsKICAgICAgICAgICAg
ICAgICBhcHBlbmQoYmFzaWNCbG9jaywgdG1wLnRtcC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJs
ZSwgdG1wLnRtcCwgYXJnKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLmNhblJlcHJlc2Vu
dChwYXRjaC0+Y2hpbGQoaSktPnR5cGUoKSkpOwpAQCAtNjg5LDYgKzc4NSwyMyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBlbWl0TG9hZChCMzo6QWlyOjpPcGNvZGUg
b3AsIEIzOjpUeXBlIHR5cGUsIFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBUbXAgcmVzdWx0KQor
ICAgIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6OndpZHRo
Rm9yVHlwZSh0eXBlKSkpCisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcihiYXNlLCBv
ZmZzZXQpLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gdGVtcDIg
PSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCB0
ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCBiYXNlLCB0ZW1wMik7Cisg
ICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcih0ZW1wMiksIHJlc3VsdCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBU
eXBlZFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBlbWl0TG9hZChtb3ZlT3BGb3JWYWx1ZVR5
cGUocmVzdWx0LnR5cGUoKSksIHRvQjNUeXBlKHJlc3VsdC50eXBlKCkpLCBiYXNlLCBvZmZzZXQs
IHJlc3VsdC50bXAoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0VGhyb3dFeGNlcHRpb24oQ0Nh
bGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKICAgICB2b2lkIGVtaXRFbnRyeVRpZXJVcENo
ZWNrKCk7CkBAIC03NDgsMTYgKzg2MSwxNSBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx1aW50MzJf
dD4gbV9vdXRlckxvb3BzOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0
ciB9OwogICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJhc2lj
QmxvY2sqIG1fbWFpbkVudHJ5cG9pbnRTdGFydCB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8VHlw
ZWRUbXA+IG1fbG9jYWxzOwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1
bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KICAg
ICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBt
X2JvdW5kc0NoZWNraW5nU2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV93
YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3By
b2xvZ3VlV2FzbUNvbnRleHRHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9vbCBtX21ha2Vz
Q2FsbHMgeyBmYWxzZSB9OwogCi0gICAgVmVjdG9yPFRtcCwgOD4gbV9mcmVlR1BzOwotICAgIFZl
Y3RvcjxUbXAsIDg+IG1fZnJlZUZQczsKLQogICAgIEhhc2hNYXA8QmxvY2tTaWduYXR1cmUsIEIz
OjpUeXBlPiBtX3R1cGxlTWFwOwogICAgIC8vIFRoaXMgaXMgb25seSBmaWxsZWQgaWYgd2UgYXJl
IGR1bXBpbmcgSVIuCiAgICAgQmFnPEIzOjpQYXRjaHBvaW50VmFsdWUqPiBtX3BhdGNocG9pbnRz
OwpAQCAtNzc0LDYgKzg4NiwxNSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0
RnVuY3Rpb25zOwogCiAgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFsKiBtX3BhdGNocG9pbnRTcGVj
aWFsIHsgbnVsbHB0ciB9OworCisgICAgUmVmUHRyPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9y
PiBtX3Byb2xvZ3VlR2VuZXJhdG9yOworCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2NhdGNo
RW50cnlwb2ludHM7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3RyeUNhdGNoRGVwdGggeyAw
IH07IC8vIE9PUFM6IGluY3JlbWVudCBldmVyeXdoZXJlCisgICAgQ2hlY2tlZDx1bnNpZ25lZD4g
bV9jYWxsU2l0ZUluZGV4IHsgMCB9OyAvLyBPT1BTOiBpbmNyZW1lbnQgZXZlcnl3aGVyZQorICAg
IFN0YWNrTWFwcyBtX3N0YWNrbWFwczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4g
bV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3Nl
bWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWdu
ZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCkBAIC04NDcsMTEgKzk2OCw5IEBAIEFpcklSR2VuZXJh
dG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVy
KG1fYm91bmRzQ2hlY2tpbmdTaXplR1BSKTsKICAgICB9CiAKLSAgICBtX2NvZGUuc2V0TnVtRW50
cnlwb2ludHMoMSk7Ci0KLSAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNl
RmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1sx
XSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKyAgICBtX3Byb2xvZ3VlV2FzbUNvbnRleHRH
UFIgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5wcm9s
b2d1ZVNjcmF0Y2hHUFJzWzFdIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogCi0gICAgUmVm
PEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNo
YXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgIG1fcHJvbG9ndWVHZW5lcmF0
b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAg
ICBjb2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0KTsKIApAQCAtODkxLDMxICsxMDEwLDM5IEBA
IEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xvZ3VlU2NyYXRj
aEdQUnNbMF07CiAKICAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQot
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dElu
c3RhbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUik7CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlciwgc2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5kZXJm
bG93Q2hlY2spKQogICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5j
aFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlcikpOwotICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0
SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpKTsKKyAgICAg
ICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJl
bG93LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9wcm9sb2d1ZVdhc21Db250ZXh0
R1BSLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKSk7CiAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93
U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYm
IENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93
IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8g
YmUgY29ycmVjdC4KLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
Y29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5z
dGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG1fY2F0Y2hFbnRyeXBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQ
UnNbMF07CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUiwgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNj
cmF0Y2gpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfSk7CiAKLSAgICBtX2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDAsIFdURk1v
dmUocHJvbG9ndWVHZW5lcmF0b3IpKTsKLQogICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkp
IHsKICAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZzY0KCk7CiAgICAgICAgIC8vIEZJWE1FOiBX
b3VsZCBiZSBuaWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCi0g
ICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNlKSwgbV9pbnN0YW5jZVZhbHVl
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpLCBt
X2luc3RhbmNlVmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSB7
IFRtcChjb250ZXh0SW5zdGFuY2UpLCBUeXBlczo6STY0IH07CisgICAgICAgIG1faW5zdGFuY2VW
YWx1ZSA9IHsgVG1wKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUiksIFR5cGVzOjpJNjQgfTsKKwor
ICAgIGFwcGVuZChFbnRyeVN3aXRjaCk7CisgICAgbV9tYWluRW50cnlwb2ludFN0YXJ0ID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX21haW5FbnRyeXBvaW50U3Rh
cnQ7CiAKICAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CiAgICAgbV9sb2NhbHMuZ3Jvdyhz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKQEAgLTk1NCw2ICsxMDgxLDc5IEBAIEFpcklSR2Vu
ZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICBlbWl0RW50cnlUaWVyVXBDaGVj
aygpOwogfQogCisvLyBPT1BTOiBkZS1kdXBsaWNhdGUKK3N0YXRpYyB2b2lkIGJ1aWxkRW50cnlC
dWZmZXJGb3JDYXRjaChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKKyAgICBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKKyAgICBPcHRpbWl6
aW5nSklUQ2FsbGVlKiBjYWxsZWUgPSBiaXR3aXNlX2Nhc3Q8T3B0aW1pemluZ0pJVENhbGxlZSo+
KGNhbGxGcmFtZS0+Y2FsbGVlKCkuYXNXYXNtQ2FsbGVlKCkpOworICAgIGNvbnN0IFN0YWNrTWFw
JiBzdGFja21hcCA9IGNhbGxlZS0+c3RhY2ttYXAoY2FsbFNpdGVJbmRleCk7CisgICAgVk0qIHZt
ID0gY29udGV4dC5ncHI8Vk0qPihHUFJJbmZvOjpyZWdUMCk7CisgICAgdWludDY0X3QqIGJ1ZmZl
ciA9IHZtLT53YXNtQ29udGV4dC5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzdGFja21hcC5zaXplKCkg
KiA4KTsKKyAgICBsb2FkVmFsdWVzSW50b0J1ZmZlcihjb250ZXh0LCBzdGFja21hcCwgYnVmZmVy
KTsKKworICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihidWZmZXIpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpmaW5hbGl6
ZUVudHJ5cG9pbnRzKCkKK3sKKyAgICB1bnNpZ25lZCBudW1FbnRyeXBvaW50cyA9IDEgKyBtX2Nh
dGNoRW50cnlwb2ludHMuc2l6ZSgpOworICAgIG1fcHJvYy5zZXROdW1FbnRyeXBvaW50cyhudW1F
bnRyeXBvaW50cyk7CisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgwLCBSZWY8
QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+KCptX3Byb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAg
ICBpZiAobV9jYXRjaEVudHJ5cG9pbnRzLnNpemUoKSkgeworICAgICAgICBSZWY8QjM6OkFpcjo6
UHJvbG9ndWVHZW5lcmF0b3I+IGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRU
YXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFt0aGlzXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgaml0
LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBI
YW5kbGluZyBwcmVjaXNlIGFsbG9jYXRpb25zIGluIFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVu
dHJ5cG9pbnRzIG1pZ2h0IGJlIHVubmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMworICAgICAgICAgICAgICAg
IGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
UHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgICAgICBqaXQu
YW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNr
KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVy
ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAg
ICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFByZWNp
c2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAt
IFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAg
ICAgICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMyk7CisKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxl
ZUZvcldhc21DYXRjaE9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6
cmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisKKyAgICAgICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpKTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mSW5zdGFuY2UoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6cmVnVDMpOworCisgICAgICAg
ICAgICBqaXQucHJvYmUodGFnQ0Z1bmN0aW9uPEpJVFByb2JlUHRyVGFnPihidWlsZEVudHJ5QnVm
ZmVyRm9yQ2F0Y2gpLCBudWxscHRyKTsKKworICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAg
ICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIFNo
YXJlZCBwcm9sb2d1ZSBleHBlY3RzIHRoaXMgaW4gdGhpcyByZWdpc3RlciB3aGVuIGVudGVyaW5n
IHRoZSBmdW5jdGlvbiB1c2luZyBmYXN0IFRMUy4KKyAgICAgICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0SW5zdGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2F0
Y2hFbnRyeXBvaW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fY29kZS5zZXRQcm9sb2d1
ZUZvckVudHJ5cG9pbnQoMSArIGksIGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpKTsK
KyAgICB9CisKKyAgICBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0IHN1Y2Nlc3NvcnM7CisgICAg
c3VjY2Vzc29ycy5hcHBlbmQobV9tYWluRW50cnlwb2ludFN0YXJ0KTsKKyAgICBzdWNjZXNzb3Jz
LmFwcGVuZFZlY3RvcihtX2NhdGNoRW50cnlwb2ludHMpOworCisgICAgUkVMRUFTRV9BU1NFUlQo
bnVtRW50cnlwb2ludHMgPT0gc3VjY2Vzc29ycy5zaXplKCkpOworICAgIG1fcm9vdEJsb2NrLT5z
dWNjZXNzb3JzKCkgPSBzdWNjZXNzb3JzOworfQorCiBCMzo6VHlwZSBBaXJJUkdlbmVyYXRvcjo6
dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZSkKIHsKICAgICBpZiAocmV0
dXJuVHlwZS0+cmV0dXJuc1ZvaWQoKSkKQEAgLTE0MjgsNiArMTYyOCw4IEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCAKICAgICBpbnQzMl90IG9mZnNldCA9IHNhZmVD
YXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgc3dpdGNoIChnbG9i
YWwuYmluZGluZ01vZGUpIHsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5k
aW5nTW9kZTo6RW1iZWRkZWRJbkluc3RhbmNlOgorICAgICAgICAvLyBPT1BTCisgICAgICAgIC8v
IGVtaXRMb2FkKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdG9CM1R5cGUodHlwZSksIHRlbXAs
IG9mZnNldCwgcmVzdWx0KTsKICAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNl
dCwgQjM6OndpZHRoRm9yVHlwZSh0b0IzVHlwZSh0eXBlKSkpKQogICAgICAgICAgICAgYXBwZW5k
KG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3Vs
dCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTQzOSw2ICsxNjQxLDggQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IAogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206
Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6CiAgICAgICAgIEFTU0VS
VChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0
eTo6TXV0YWJsZSk7CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy8gZW1pdExvYWQoTW92ZSwg
QjM6OkludDY0LCB0ZW1wLCBvZmZzZXQsIHRlbXApOwogICAgICAgICBpZiAoQXJnOjppc1ZhbGlk
QWRkckZvcm0ob2Zmc2V0LCBCMzo6V2lkdGg2NCkpCiAgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHRlbXApOwogICAgICAgICBlbHNlIHsKQEAgLTMwMTIs
NTcgKzMyMTYsMjI0IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmwK
ICAgICByZXR1cm4geyB9OwogfQogCi0vLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIFdhc20gZXhj
ZXB0aW9ucyBpbiB0aGUgQWlyIGdlbmVyYXRvcgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMTIxMQotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2Nr
U2lnbmF0dXJlLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBT
dGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFj
aykgLT4gUGFydGlhbFJlc3VsdAogeworICAgICsrbV90cnlDYXRjaERlcHRoOworCisgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgc3BsaXRTdGFj
ayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CisgICAgcmVzdWx0ID0gQ29u
dHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShzaWduYXR1cmUp
LCBCbG9ja1R5cGU6OlRyeSwgY29udGludWF0aW9uLCArK21fY2FsbFNpdGVJbmRleCwgbV90cnlD
YXRjaERlcHRoKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRDYXRjaCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYs
IFJlc3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRD
YXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1
bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4geyB9OworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFj
aywgZGF0YS5yZXN1bHRzKTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2st
PnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRjaFRv
VW5yZWFjaGFibGUoZXhjZXB0aW9uSW5kZXgsIHNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7CiB9
CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCwg
Y29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0JikgLT4gUGFydGlhbFJl
c3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGN1cnJlbnRTdGFj
aywgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAgdW5pZnlWYWx1ZXNXaXRo
QmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdHMpOworICAgIGFwcGVuZChKdW1wKTsKKyAg
ICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisgICAg
cmV0dXJuIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKIH0KIAotYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBk
YXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBUbXAgYnVmZmVyID0gZW1pdENhdGNoSW1wbChD
YXRjaEtpbmQ6OkNhdGNoLCBkYXRhLCBleGNlcHRpb25JbmRleCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBU
eXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgIFR5cGVkVG1wIHRtcCA9
IHRtcEZvclR5cGUodHlwZSk7CisgICAgICAgIGVtaXRMb2FkKGJ1ZmZlciwgaSAqIHNpemVvZih1
aW50NjRfdCksIHRtcCk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHRtcCk7CisgICAgfQogICAg
IHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9VbnJl
YWNoYWJsZShDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlh
bFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZW1pdENh
dGNoSW1wbChDYXRjaEtpbmQ6OkNhdGNoQWxsLCBkYXRhKTsKICAgICByZXR1cm4geyB9OwogfQog
Ci1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xU
eXBlJikgLT4gUGFydGlhbFJlc3VsdAorVG1wIEFpcklSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBs
KENhdGNoS2luZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwgdW5zaWduZWQgZXhjZXB0aW9uSW5k
ZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9
OworICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgbV9jYXRjaEVu
dHJ5cG9pbnRzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisKKyAgICBpZiAoQ29udHJvbFR5cGU6
OmlzVHJ5KGRhdGEpKSB7CisgICAgICAgIGlmIChraW5kID09IENhdGNoS2luZDo6Q2F0Y2gpCisg
ICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoKCsrbV9jYWxsU2l0ZUluZGV4LCBnNjQo
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRhdGEuY29udmVydFRyeVRvQ2F0Y2hBbGwo
KyttX2NhbGxTaXRlSW5kZXgsIGc2NCgpKTsKKyAgICB9CisgICAgLy8gV2UgY29udmVydCBmcm9t
ICJ0cnkiIHRvICJjYXRjaCIgQ29udHJvbFR5cGUgYWJvdmUuIFRoaXMgZG9lc24ndAorICAgIC8v
IGhhcHBlbiBpZiBDb250cm9sVHlwZSBpcyBhbHJlYWR5IGEgImNhdGNoIi4gVGhpcyBjYW4gaGFw
cGVuIHdoZW4KKyAgICAvLyB3ZSBoYXZlIG11bHRpcGxlIGNhdGNoZXMgbGlrZSAidHJ5IHt9IGNh
dGNoKEEpe30gY2F0Y2goQil7fS4uLkNhdGNoQWxsKEUpe30iLgorICAgIC8vIFdlIGp1c3QgY29u
dmVydCB0aGUgZmlyc3QgQ29udHJvbFR5cGUgdG8gYSBjYXRjaCwgdGhlbiB0aGUgb3RoZXJzIHdp
bGwKKyAgICAvLyB1c2UgaXRzIGZpZWxkcy4KKyAgICBBU1NFUlQoQ29udHJvbFR5cGU6OmlzQW55
Q2F0Y2goZGF0YSkpOworCisgICAgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUgPSBraW5kID09IENh
dGNoS2luZDo6Q2F0Y2ggPyBIYW5kbGVyVHlwZTo6Q2F0Y2ggOiBIYW5kbGVyVHlwZTo6Q2F0Y2hB
bGw7CisgICAgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyVHlwZSwgZGF0YS50
cnlTdGFydCgpLCBkYXRhLnRyeUVuZCgpLCAwLCBtX3RyeUNhdGNoRGVwdGgsIGV4Y2VwdGlvbklu
ZGV4IH0pOworCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hl
ZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJl
bnRCbG9jayk7CisKKyAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKKyAgICBhdXRvIGxv
YWRGcm9tU2NyYXRjaEJ1ZmZlciA9IFsmXSAoVHlwZWRUbXAgcmVzdWx0KSB7CisgICAgICAgIHNp
emVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcjsKKyAgICAgICAg
KytpbmRleEluQnVmZmVyOworICAgICAgICBUbXAgYnVmZmVyUHRyID0gVG1wKEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgICAgIGVtaXRMb2FkKGJ1ZmZlclB0ciwgb2Zmc2V0LCByZXN1bHQp
OworICAgIH07CisKKyAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgIGxv
YWRGcm9tU2NyYXRjaEJ1ZmZlcihsb2NhbCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJ
bmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7
ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIGF1dG8mIGNvbnRyb2xEYXRhID0gbV9wYXJzZXIt
PmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgIGF1dG8m
IGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhd
LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBUeXBlZFRtcCB0
bXAgPSBleHByZXNzaW9uU3RhY2tbaV0udmFsdWUoKTsKKyAgICAgICAgICAgIGxvYWRGcm9tU2Ny
YXRjaEJ1ZmZlcih0bXApOworICAgICAgICB9CisgICAgICAgIC8vIFdlIHNldCBvdXIgY3VycmVu
dCBDb250cm9sRW50cnkncyBleGNlcHRpb24gYmVsb3cgYWZ0ZXIgdGhlIHBhdGNocG9pbnQuCisg
ICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChjb250cm9sRGF0YSkgJiYgJmRhdGEg
IT0gJmNvbnRyb2xEYXRhKQorICAgICAgICAgICAgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGNvbnRy
b2xEYXRhLmV4Y2VwdGlvbigpKTsKKyAgICB9CisKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBw
YXRjaCA9IGFkZFBhdGNocG9pbnQobV9wcm9jLmFkZFR1cGxlKHsgQjM6OnBvaW50ZXJUeXBlKCks
IEIzOjpwb2ludGVyVHlwZSgpIH0pKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlz
ID0gdHJ1ZTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVn
aXN0ZXJzKCkpOworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJMYXRlID0gUmVnaXN0ZXJTZXQ6OnZv
bGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgcGF0Y2gtPmNsb2JiZXJMYXRlKGNsb2JiZXJMYXRlKTsKKyAg
ICBwYXRjaC0+cmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKEIzOjpWYWx1ZVJlcDo6cmVnKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcGF0Y2gtPnJlc3VsdENvbnN0cmFpbnRzLmFwcGVu
ZChCMzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpKTsKKyAgICBwYXRj
aC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sy
XS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25X
YXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlKSk7CisgICAgICAgIH0pOwor
ICAgIH0pOworCisgICAgVG1wIGV4Y2VwdGlvbiA9IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgVG1wIGJ1ZmZlciA9IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAg
IGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgOD46OmZy
b20oZXhjZXB0aW9uLCBidWZmZXIpLCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIDE+Ojpmcm9tKGlu
c3RhbmNlVmFsdWUoKSkpOworICAgIGFwcGVuZChNb3ZlLCBleGNlcHRpb24sIGRhdGEuZXhjZXB0
aW9uKCkpOworCisgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlw
ZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGFkZERlbGVnYXRlVG9VbnJl
YWNoYWJsZSh0YXJnZXQsIGRhdGEpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxl
Z2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bnNpZ25lZCB0YXJnZXREZXB0aCA9IDA7CisgICAg
aWYgKENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpKQorICAgICAgICB0YXJnZXREZXB0aCA9IHRh
cmdldC50cnlEZXB0aCgpOworCisgICAgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBIYW5k
bGVyVHlwZTo6RGVsZWdhdGUsIGRhdGEudHJ5U3RhcnQoKSwgKyttX2NhbGxTaXRlSW5kZXgsIDAs
IG1fdHJ5Q2F0Y2hEZXB0aCwgdGFyZ2V0RGVwdGggfSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBVTlVT
RURfUEFSQU0oZXhjZXB0aW9uSW5kZXgpOworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNo
ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwg
PSB0cnVlOworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVy
c0ZvckpTQ2FsbCgpKTsKKworICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgOD4gcGF0Y2hBcmdz
OworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoaW5zdGFuY2VWYWx1ZSgpLCBC
Mzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7CisgICAgcGF0Y2hBcmdz
LmFwcGVuZChDb25zdHJhaW5lZFRtcChUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBC
Mzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHBhdGNoQXJncy5hcHBl
bmQoQ29uc3RyYWluZWRUbXAoYXJnc1tpXSwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KGkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSkpOworCisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2gsIHBhdGNo
QXJncyk7CisKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBleGNlcHRpb25JbmRleCwg
aGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAvLyBPT1BTOiBzaGFyZSBjb2RlIHdpdGggQjMgSVIg
Z2VuZXJhdG9yIGhlcmUuCisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpub25Q
cmVzZXJ2ZWROb25Bcmd1bWVudEdQUjA7CisgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBh
cmFtcywgdGhpcyk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNjcmF0
Y2gpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9
IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsK
KyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtl
ZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIg
KyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAg
ICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgICAgIHByZWNpc2VB
bGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFByZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtT
ZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJT
aXplKCkpLCBzY3JhdGNoKTsKKworICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOwor
ICAgICAgICB9CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOworCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoZXhjZXB0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwor
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0g
aml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAgICBqaXQuYWRk
TGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25XYXNtVGhyb3cpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBlbWl0UGF0Y2hwb2lu
dChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFRtcCgpLCBXVEZNb3ZlKHBhdGNoQXJncykpOworCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNp
Z25lZCwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3Vs
dAogeworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gYWRkUGF0Y2hwb2ludChCMzo6
Vm9pZCk7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJz
Rm9ySlNDYWxsKCkpOworICAgIHBhdGNoLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKworICAg
IFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgMz4gcGF0Y2hBcmdzOworICAgIHBhdGNoQXJncy5hcHBl
bmQoQ29uc3RyYWluZWRUbXAoaW5zdGFuY2VWYWx1ZSgpLCBCMzo6VmFsdWVSZXA6OnJlZyhHUFJJ
bmZvOjphcmd1bWVudEdQUjApKSk7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRt
cChUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBCMzo6VmFsdWVSZXA6OnJlZyhHUFJJ
bmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRt
cChkYXRhLmV4Y2VwdGlvbigpLCBCMzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQ
UjIpKSk7CisKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQ
YXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaCwgcGF0Y2hBcmdzKTsKKyAgICBwYXRjaC0+c2V0
R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICBHUFJSZWcgc2Ny
YXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKKyAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSW5z
dGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVs
cGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lz
ZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNo
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
LCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZz
ZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5q
dW1wKCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFBy
ZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0o
KSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAgICAg
ICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOworCisg
ICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CisgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAg
aml0LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWcpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgICAgICB9KTsKKyAgICB9
KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVG1wKCksIFdU
Rk1vdmUocGF0Y2hBcmdzKSk7CisKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0zMjA5LDcgKzM1
ODAsOCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlCiAgICAgaWYg
KGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewogICAgICAgICBhcHBlbmQoZGF0
YS5zcGVjaWFsLCBKdW1wKTsKICAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNzb3JzKG1f
Y3VycmVudEJsb2NrKTsKLSAgICB9CisgICAgfSBlbHNlIGlmIChkYXRhLmJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6VHJ5IHx8IGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaCkK
KyAgICAgICAgLS1tX3RyeUNhdGNoRGVwdGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9
PSBCbG9ja1R5cGU6Okxvb3ApIHsKICAgICAgICAgbV9vdXRlckxvb3BzLnJlbW92ZUxhc3QoKTsK
QEAgLTMyMzMsNyArMzYwNSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFj
aGFibGUKICAgICByZXR1cm4geyB9OwogfQogCi1CMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdl
bmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9y
PFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYmIHBhdGNoQXJncykKK3N0
ZDo6cGFpcjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4g
QWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0
IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdz
KQogewogICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNSZXN1bHRUeXBl
KCZzaWduYXR1cmUpKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRy
dWU7CkBAIC0zMjU4LDggKzM2MzAsOSBAQCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVy
YXRvcjo6ZW1pCiAgICAgICAgICAgICByZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6OlZhbHVl
UmVwKHZhbHVlTG9jYXRpb24pKTsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWlu
dHMgPSBXVEZNb3ZlKHJlc3VsdENvbnN0cmFpbnRzKTsKICAgICB9CisgICAgUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZSBleGNlcHRpb25IYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2Vw
dGlvbnMocGF0Y2hwb2ludCwgcGF0Y2hBcmdzKTsKICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywg
cGF0Y2hwb2ludCwgcmVzdWx0cywgV1RGTW92ZShwYXRjaEFyZ3MpKTsKLSAgICByZXR1cm4gcGF0
Y2hwb2ludDsKKyAgICByZXR1cm4geyBwYXRjaHBvaW50LCBleGNlcHRpb25IYW5kbGUgfTsKIH0K
IAogYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
UmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdApAQCAtMzI5NSwxNCArMzY2OCwx
NyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1CiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVyQmxvY2sp
OwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBh
dGNocG9pbnQoaXNXYXNtQmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAg
ICAgICBhdXRvIHBhaXIgPSBlbWl0Q2FsbFBhdGNocG9pbnQoaXNXYXNtQmxvY2ssIHNpZ25hdHVy
ZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gcGFpci5m
aXJzdDsKKyAgICAgICAgICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlID0gcGFpci5zZWNvbmQ7CiAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVn
aXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgogICAgICAgICAg
ICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNv
bWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQ
aW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2lu
ZykpOwogCi0gICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxs
KCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAg
ICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9u
SW5kZXggfSk7CkBAIC0zMzIxLDEzICszNjk3LDE3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZENhbGwodWludDMyX3QgZnUKIAogICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBq
dW1wQXJnczsKICAgICAgICAgICAgIGp1bXBBcmdzLmFwcGVuZCh7IGp1bXBEZXN0aW5hdGlvbiwg
QjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIgfSk7Ci0gICAgICAgICAgICBhdXRvKiBwYXRjaHBv
aW50ID0gZW1pdENhbGxQYXRjaHBvaW50KGlzRW1iZWRkZXJCbG9jaywgc2lnbmF0dXJlLCByZXN1
bHRzLCBhcmdzLCBXVEZNb3ZlKGp1bXBBcmdzKSk7CisgICAgICAgICAgICBhdXRvIHBhaXIgPSBl
bWl0Q2FsbFBhdGNocG9pbnQoaXNFbWJlZGRlckJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFy
Z3MsIFdURk1vdmUoanVtcEFyZ3MpKTsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBw
YWlyLmZpcnN0OworICAgICAgICAgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29u
ZDsKKwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlu
bmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KICAg
ICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGlu
ZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcpKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBw
YXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXJhbXMucHJv
YygpLnJlc3VsdENvdW50KHBhcmFtcy52YWx1ZSgpLT50eXBlKCkpXS5ncHIoKSwgV2FzbUVudHJ5
UHRyVGFnKTsKICAgICAgICAgICAgIH0pOwogCkBAIC0zMzM5LDEyICszNzE5LDE1IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnUKICAgICAgICAgLy8gVGhlIGNhbGwg
Y291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9y
IGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KICAgICAgICAgcmVzdG9yZVdlYkFzc2Vt
Ymx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9y
eSwgY3VycmVudEluc3RhbmNlLCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNp
Z25hdHVyZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAgIGF1dG8gcGFpciA9IGVtaXRDYWxsUGF0
Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzKTsKKyAgICAg
ICAgYXV0byogcGF0Y2hwb2ludCA9IHBhaXIuZmlyc3Q7CisgICAgICAgIGF1dG8gZXhjZXB0aW9u
SGFuZGxlID0gcGFpci5zZWNvbmQ7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciB0aGUg
c2l6ZSByZWdpc3RlciBzaW5jZSB0aGUgTExJbnQgYWx3YXlzIGJvdW5kcyBjaGVja3MKICAgICAg
ICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcgfHwgbV9pbmZvLm1lbW9yeS5p
c1NoYXJlZCgpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJT
ZXQgeyBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVy
IH0pOwotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS5nZW5lcmF0
ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21F
bnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CkBAIC0zNTIzLDcgKzM5MDYsOSBA
QCBhdXRvIEFpcklSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFR5CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCiAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKHRtcEZvclR5cGUoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpKTsKIAotICAg
IGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNp
Z25hdHVyZSwgcmVzdWx0cywgYXJncywgV1RGTW92ZShleHRyYUFyZ3MpKTsKKyAgICBhdXRvIHBh
aXIgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0
cywgYXJncywgV1RGTW92ZShleHRyYUFyZ3MpKTsKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gcGFp
ci5maXJzdDsKKyAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIuc2Vjb25kOwogCiAgICAg
Ly8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5j
ZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KICAgICAvLyBXZSBwZXNzaW1pc3Rp
Y2FsbHkgYXNzdW1lIHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5k
cyBjaGVja2luZyBzbwpAQCAtMzUzNSw2ICszOTIwLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6
ZW1pdEluZGlyZWN0Q2FsbChUeQogCiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywg
dGhpcyk7CiAgICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXJhbXMucHJvYygpLnJlc3VsdENvdW50
KHBhcmFtcy52YWx1ZSgpLT50eXBlKCkpXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICB9
KTsKIApAQCAtMzU5NSw3ICszOTgxLDggQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3RpbwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQg
PSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2Fz
bUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIAotICAgIEIzOjpQ
cm9jZWR1cmUgcHJvY2VkdXJlOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1cmUgPSBt
YWtlVW5pcXVlPEIzOjpQcm9jZWR1cmU+KCk7CisgICAgYXV0byYgcHJvY2VkdXJlID0gKmNvbXBp
bGF0aW9uQ29udGV4dC5wcm9jZWR1cmU7CiAgICAgQ29kZSYgY29kZSA9IHByb2NlZHVyZS5jb2Rl
KCk7CiAKICAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRTdHJlYW0mIG91
dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKQEAgLTM2MTUsMjUgKzQwMDIsMjcgQEAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklS
R2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5j
dGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmZpbmFsaXplRW50
cnlwb2ludHMoKTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgKytpKQog
ICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpLT5hZGRQcmVkZWNlc3NvcihibG9j
ayk7CiAgICAgfQogCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkRHVtcElSQXRF
YWNoUGhhc2UoQjM6OkFpck1vZGUpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0
ZWQgcGF0Y2hwb2ludHMiKTsKLSAgICAgICAgICAgIGZvciAoQjM6OlBhdGNocG9pbnRWYWx1ZSoq
IHBhdGNoIDogaXJHZW5lcmF0b3IucGF0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oZGVlcER1bXAocHJvY2VkdXJlLCAqcGF0Y2gpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOwotICAgICAgICBCMzo6QWlyOjpn
ZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKLSAg
ICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2Nl
ZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2Fs
bGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7
CisgICAgaWYgKFVOTElLRUxZKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzOjpBaXJNb2RlKSkp
IHsKKyAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0ZWQgcGF0Y2hwb2ludHMiKTsKKyAgICAgICAg
Zm9yIChCMzo6UGF0Y2hwb2ludFZhbHVlKiogcGF0Y2ggOiBpckdlbmVyYXRvci5wYXRjaHBvaW50
cygpKQorICAgICAgICAgICAgZGF0YUxvZ0xuKGRlZXBEdW1wKHByb2NlZHVyZSwgKnBhdGNoKSk7
CiAgICAgfQogCisgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29kZSk7CisgICAg
QjM6OkFpcjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCk7CisKKyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3Rz
ID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7CisgICAgcmVzdWx0LT5lbnRyeXBvaW50
LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlz
dCgpOworICAgIHJlc3VsdC0+c3RhY2ttYXBzID0gaXJHZW5lcmF0b3IudGFrZVN0YWNrbWFwcygp
OworICAgIHJlc3VsdC0+ZXhjZXB0aW9uSGFuZGxlcnMgPSBpckdlbmVyYXRvci50YWtlRXhjZXB0
aW9uSGFuZGxlcnMoKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUxNzgsNiArNTU2
Nyw0OCBAQCB0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAordGVtcGxhdGUgPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK1BhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUgQWlySVJHZW5lcmF0b3I6OnByZXBhcmVQYXRjaHBvaW50Rm9yRXhj
ZXB0aW9ucyhCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVmVjdG9yPENvbnN0cmFpbmVkVG1w
LCBpbmxpbmVDYXBhY2l0eT4mIGFyZ3MpCit7CisgICAgKyttX2NhbGxTaXRlSW5kZXg7CisgICAg
aWYgKCFtX3RyeUNhdGNoRGVwdGgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8
VG1wPiBsaXZlVmFsdWVzOworICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWwgOiBtX2xvY2FscykK
KyAgICAgICAgbGl2ZVZhbHVlcy5hcHBlbmQobG9jYWwpOworICAgIGZvciAodW5zaWduZWQgY29u
dHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNp
emUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBtX3Bh
cnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAg
U3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9s
SW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IHRtcCA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgICAgIGxpdmVWYWx1ZXMuYXBwZW5kKHRt
cC52YWx1ZSgpKTsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQor
ICAgICAgICAgICAgbGl2ZVZhbHVlcy5hcHBlbmQoZGF0YS5leGNlcHRpb24oKSk7CisgICAgfQor
CisgICAgZm9yIChUbXAgdG1wIDogbGl2ZVZhbHVlcykKKyAgICAgICAgYXJncy5hcHBlbmQoQ29u
c3RyYWluZWRUbXAodG1wLCBCMzo6VmFsdWVSZXA6OkxhdGVDb2xkQW55KSk7CisKKyAgICBwYXRj
aC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKworICAgIHJldHVybiBQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlIHsgbV9jYWxsU2l0ZUluZGV4LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bGl2ZVZhbHVlcy5zaXplKCkpIH07Cit9CisKK3ZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZTo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcywgQWlySVJHZW5lcmF0b3IqIGdlbmVyYXRvcikgY29uc3QKK3sKKyAg
ICBpZiAobV9jYWxsU2l0ZUluZGV4ID09IHNfaW52YWxpZENhbGxTaXRlSW5kZXgpCisgICAgICAg
IHJldHVybjsKKworICAgIFN0YWNrTWFwIHZhbHVlcyhtX251bUxpdmVWYWx1ZXMpOworICAgIHVu
c2lnbmVkIHBhcmFtc09mZnNldCA9IHBhcmFtcy5zaXplKCkgLSBtX251bUxpdmVWYWx1ZXM7Cisg
ICAgdW5zaWduZWQgY2hpbGRyZW5PZmZzZXQgPSBwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4o
KSAtIG1fbnVtTGl2ZVZhbHVlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1M
aXZlVmFsdWVzOyArK2kpCisgICAgICAgIHZhbHVlc1tpXSA9IE9TUkVudHJ5VmFsdWUocGFyYW1z
W2kgKyBwYXJhbXNPZmZzZXRdLCBwYXJhbXMudmFsdWUoKS0+Y2hpbGQoaSArIGNoaWxkcmVuT2Zm
c2V0KS0+dHlwZSgpKTsKKworICAgIGdlbmVyYXRvci0+YWRkU3RhY2tNYXAobV9jYWxsU2l0ZUlu
ZGV4LCBXVEZNb3ZlKHZhbHVlcykpOworICAgIGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRleCksIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDkgKzkxLDEwIEBAIGNsYXNzIEIz
SVJHZW5lcmF0b3I7CiBzdHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CiAgICAgdm9p
ZCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiwgQjNJUkdlbmVyYXRvciopIGNvbnN0OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBzX2ludmFsaWRDYWxsU2l0ZUluZGV4ID0gIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52YWxpZENhbGxT
aXRlSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAKICAgICB1
bnNpZ25lZCBtX2NhbGxTaXRlSW5kZXggeyBzX2ludmFsaWRDYWxsU2l0ZUluZGV4IH07CisgICAg
Ly8gT09QUzogcmVmYWN0b3Igb2ZmIG1fb2Zmc2V0CiAgICAgdW5zaWduZWQgbV9vZmZzZXQ7CiB9
OwogCkBAIC04NTcsNiArODU4LDcgQEAgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmZyYW1lUG9pbnRl
cigpCiAgICAgcmV0dXJuIG1fZnJhbWVQb2ludGVyOwogfQogCisvLyBPT1BTOiBkZS1kdXBsaWNh
dGUKIHN0YXRpYyB2b2lkIGJ1aWxkRW50cnlCdWZmZXJGb3JDYXRjaChQcm9iZTo6Q29udGV4dCYg
Y29udGV4dCkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZy
YW1lKj4oKTsKQEAgLTI2MTAsOCArMjYxMiwxOCBAQCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
IEIzSVJHZW5lcmF0b3I6CiAgICAgfQogCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gcGF0Y2gtPm51
bUNoaWxkcmVuKCk7Ci0gICAgaWYgKHBhdGNoLT50eXBlKCkgIT0gVm9pZCkKLSAgICAgICAgb2Zm
c2V0Kys7CisgICAgLy8gT09QUzogYWRkIHRlc3QKKyAgICBzd2l0Y2ggKHBhdGNoLT50eXBlKCku
a2luZCgpKSB7CisgICAgY2FzZSBCMzo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
Mzo6VHVwbGU6IHsKKyAgICAgICAgb2Zmc2V0ICs9IG1fcHJvYy50dXBsZUZvclR5cGUocGF0Y2gt
PnR5cGUoKSkuc2l6ZSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgKytvZmZzZXQ7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIHBhdGNoLT5lZmZl
Y3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOwogICAgIHBhdGNoLT5hcHBlbmRWZWN0b3JXaXRoUmVw
KGxpdmVWYWx1ZXMsIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7CkBAIC0yNjU3LDYgKzI2NjksMTAg
QEAgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwoQ2F0YwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoQWxsKCsrbV9jYWxsU2l0ZUluZGV4
LCBtX3Byb2MuYWRkVmFyaWFibGUocG9pbnRlclR5cGUoKSkpOwogICAgIH0KKyAgICAvLyBXZSBj
b252ZXJ0IGZyb20gInRyeSIgdG8gImNhdGNoIiBDb250cm9sVHlwZSBhYm92ZS4gVGhpcyBkb2Vz
bid0CisgICAgLy8gaGFwcGVuIGlmIENvbnRyb2xUeXBlIGlzIGFscmVhZHkgYSAiY2F0Y2giLiBU
aGlzIGNhbiBoYXBwZW4gd2hlbgorICAgIC8vIHdlIGhhdmUgbXVsdGlwbGUgY2F0Y2hlcyBsaWtl
ICJ0cnkge30gY2F0Y2goQSl7fSBjYXRjaChCKXt9Li4uQ2F0Y2hBbGwoRSl7fSIKKyAgICBBU1NF
UlQoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpOwogCiAgICAgSGFuZGxlclR5cGUgaGFu
ZGxlclR5cGUgPSBraW5kID09IENhdGNoS2luZDo6Q2F0Y2ggPyBIYW5kbGVyVHlwZTo6Q2F0Y2gg
OiBIYW5kbGVyVHlwZTo6Q2F0Y2hBbGw7CiAgICAgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQo
eyBoYW5kbGVyVHlwZSwgZGF0YS50cnlTdGFydCgpLCBkYXRhLnRyeUVuZCgpLCAwLCBtX3RyeUNh
dGNoRGVwdGgsIGV4Y2VwdGlvbkluZGV4IH0pOwpAQCAtMzMyNCw2ICszMzQwLDcgQEAgdm9pZCBj
b21wdXRlUENUb0NvZGVPcmlnaW5NYXAoQ29tcGlsYXRpbwogICAgIH0KIH0KIAorLy8gT09QUzog
TW92ZSB0aGlzIHRvIHNoYXJlZCBsb2NhYXRpb24gbGVzcyBCMyBzcGVjaWZpYy4KIHZvaWQgY29t
cHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24q
IGZ1bmN0aW9uLCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQsIExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpCiB7CiAgICAgaWYgKCFjb250ZXh0LnByb2NlZHVyZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI4NzU4MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAzLDggKzIwMyw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiBCQlFQbGEKICAgICBib29sIGZvcmNlVXNpbmdCMyA9IGZhbHNlOwogICAgIGlmIChPcHRpb25z
Ojp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSAmJiBtX21vZHVsZUluZm9ybWF0aW9u
LT5jb2RlU2VjdGlvblNpemUgPj0gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNo
b2xkKCkpCiAgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7Ci0gICAgZWxzZSBpZiAoIW1fbW9k
dWxlSW5mb3JtYXRpb24tPm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5xdWlja0dldChm
dW5jdGlvbkluZGV4KSkKLSAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKICAgICBlbHNlIGlm
ICghT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1
ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksOSArNTU5
LDYgQEAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdAogICAgIFJFTEVB
U0VfQVNTRVJUKHVzZWRCdWZmZXIuY2FwYWNpdHkoKSA9PSBvbGRDYXBhY2l0eSk7CiAgICAgKnRo
cmVhZFNwZWNpZmljID0gV1RGTW92ZSh1c2VkQnVmZmVyKTsKIAotICAgIGlmICghbV91c2VzRXhj
ZXB0aW9ucykKLSAgICAgICAgbV9pbmZvLm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5x
dWlja1NldChtX2Z1bmN0aW9uSW5kZXgpOwotCiAgICAgcmV0dXJuIFdURk1vdmUobV9jb2RlQmxv
Y2spOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlSW5mb3JtYXRpb24uaAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSw3ICsxMTksNiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkCiAK
ICAgICBCaXRWZWN0b3IgbV9kZWNsYXJlZEZ1bmN0aW9uczsKICAgICBCaXRWZWN0b3IgbV9kZWNs
YXJlZEV4Y2VwdGlvbnM7Ci0gICAgQml0VmVjdG9yIG1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0
aW9uczsKICAgICBtdXRhYmxlIEJpdFZlY3RvciBtX3JlZmVyZW5jZWRGdW5jdGlvbnM7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5n
UGFyc2VyLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcs
NiBAQCBhdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VDb2RlU2VjdGlvblNpCiAgICAgbV9mdW5j
dGlvbkNvdW50ID0gZnVuY3Rpb25Db3VudDsKICAgICBtX2Z1bmN0aW9uSW5kZXggPSAwOwogICAg
IG1fY29kZU9mZnNldCA9IG1fb2Zmc2V0OwotICAgIG1faW5mby0+bV9mdW5jdGlvbkRvZXNOb3RV
c2VFeGNlcHRpb25zLmVuc3VyZVNpemUoZnVuY3Rpb25Db3VudCk7CiAKICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKGZ1bmN0aW9uQ291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpLCAiQ29kZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBmdW5jdGlvbkNvdW50
KTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uQ291bnQgIT0gbV9pbmZvLT5mdW5j
dGlvbnMuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGZ1bmN0aW9uQ291bnQsICIgZXhj
ZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2luZm8tPmZ1bmN0aW9u
cy5zaXplKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448545</attachid>
            <date>2022-01-06 16:40:11 -0800</date>
            <delta_ts>2022-01-06 22:30:32 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>50332</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5LDggQEAK
ICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisj
aW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBCMzo6QWlyOwpAQCAtMTI2LDIwICsxMjgsNDEgQEAgcHJp
dmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIH07CiAKK2NsYXNzIEFpcklSR2VuZXJhdG9yOworCitz
dHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdm9pZCBnZW5lcmF0ZShDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgQWlySVJHZW5l
cmF0b3IqKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlk
Q2FsbFNpdGVJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKwor
ICAgIHVuc2lnbmVkIG1fY2FsbFNpdGVJbmRleCB7IHNfaW52YWxpZENhbGxTaXRlSW5kZXggfTsK
KyAgICB1bnNpZ25lZCBtX251bUxpdmVWYWx1ZXM7Cit9OworCiBjbGFzcyBBaXJJUkdlbmVyYXRv
ciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUeXBlZFRtcDsKICAgICB1
c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCA4PjsKIAogICAgIHN0cnVj
dCBDb250cm9sRGF0YSB7Ci0gICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBC
bG9ja1NpZ25hdHVyZSByZXN1bHQsIFJlc3VsdExpc3QgcmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5
cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxw
dHIpCisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHJlc3Vs
dCwgUmVzdWx0TGlzdCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29u
dGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKICAgICAgICAgICAgIDog
Y29udHJvbEJsb2NrVHlwZSh0eXBlKQogICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGlu
dWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCiAgICAgICAgICAgICAsIHJl
c3VsdHMocmVzdWx0VG1wcykKICAgICAgICAgICAgICwgcmV0dXJuVHlwZShyZXN1bHQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOworICAgICAgICB9CisKKyAg
ICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBSZXN1
bHRMaXN0IHJlc3VsdFRtcHMsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24sIHVuc2lnbmVkIHRyeVN0YXJ0LCB1bnNpZ25lZCB0cnlEZXB0aCkKKyAgICAgICAgICAgIDog
Y29udHJvbEJsb2NrVHlwZSh0eXBlKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGlu
dWF0aW9uKQorICAgICAgICAgICAgLCBzcGVjaWFsKG51bGxwdHIpCisgICAgICAgICAgICAsIHJl
c3VsdHMocmVzdWx0VG1wcykKKyAgICAgICAgICAgICwgcmV0dXJuVHlwZShyZXN1bHQpCisgICAg
ICAgICAgICAsIG1fdHJ5U3RhcnQodHJ5U3RhcnQpCisgICAgICAgICAgICAsIG1fdHJ5Q2F0Y2hE
ZXB0aCh0cnlEZXB0aCkKKyAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgQ29udHJvbERh
dGEoKQpAQCAtMTQ4LDggKzE3MSw4IEBAIHB1YmxpYzoKIAogICAgICAgICBzdGF0aWMgYm9vbCBp
c0lmKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlw
ZSgpID09IEJsb2NrVHlwZTo6SWY7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNUcnkoY29uc3Qg
Q29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUcnk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9s
RGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6
OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzQW55Q2F0Y2goY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpD
YXRjaDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBj
b250cm9sKSB7IHJldHVybiBpc0FueUNhdGNoKGNvbnRyb2wpICYmIGNvbnRyb2wuY2F0Y2hLaW5k
KCkgPT0gQ2F0Y2hLaW5kOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVs
KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNMb29wKGNv
bnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6TG9vcDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0Jsb2NrKGNvbnN0IENv
bnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6QmxvY2s7IH0KQEAgLTIyMSw2ICsyNDQsNTQgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuIHJldHVyblR5cGUtPnJldHVyblR5cGUoaSk7CiAgICAgICAgIH0KIAorICAgICAgICB2
b2lkIGNvbnZlcnRUcnlUb0NhdGNoKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFR5cGVk
VG1wIGV4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6VHJ5KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9j
a1R5cGU6OkNhdGNoOworICAgICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNo
OworICAgICAgICAgICAgbV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAg
ICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNv
bnZlcnRUcnlUb0NhdGNoQWxsKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFR5cGVkVG1w
IGV4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6VHJ5KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5
cGU6OkNhdGNoOworICAgICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoQWxs
OworICAgICAgICAgICAgbV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAg
ICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25l
ZCB0cnlTdGFydCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9s
QmxvY2tUeXBlID09IEJsb2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tU
eXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV90cnlTdGFydDsKKyAgICAgICAgfQor
CisgICAgICAgIHVuc2lnbmVkIHRyeUVuZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAg
ICAgcmV0dXJuIG1fdHJ5RW5kOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdHJ5RGVw
dGgoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlw
ZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0
Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5Q2F0Y2hEZXB0aDsKKyAgICAgICAgfQorCisg
ICAgICAgIENhdGNoS2luZCBjYXRjaEtpbmQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2NhdGNoS2luZDsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGVkVG1wIGV4
Y2VwdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxv
Y2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fZXhjZXB0
aW9uOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQWly
SVJHZW5lcmF0b3I7CiAgICAgICAgIEJsb2NrVHlwZSBjb250cm9sQmxvY2tUeXBlOwpAQCAtMjI4
LDYgKzI5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7CiAgICAg
ICAgIFJlc3VsdExpc3QgcmVzdWx0czsKICAgICAgICAgQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlw
ZTsKKyAgICAgICAgdW5zaWduZWQgbV90cnlTdGFydDsKKyAgICAgICAgdW5zaWduZWQgbV90cnlF
bmQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5Q2F0Y2hEZXB0aDsKKyAgICAgICAgQ2F0Y2hLaW5k
IG1fY2F0Y2hLaW5kOworICAgICAgICBUeXBlZFRtcCBtX2V4Y2VwdGlvbjsKICAgICB9OwogCiAg
ICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKQEAgLTI2MCw2ICszMzYsOCBAQCBw
dWJsaWM6CiAKICAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIz
OjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQq
LCBjb25zdCBTaWduYXR1cmUmKTsKIAorICAgIHZvaWQgZmluYWxpemVFbnRyeXBvaW50cygpOwor
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0
IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExv
Y2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBl
LCB1aW50NjRfdCk7CkBAIC0zNDksNyArNDI3LDcgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0SW5kaXJlY3RDYWxsKFR5cGVkVG1wIGNhbGxl
ZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBj
b25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7Ci0gICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRDYWxsUGF0Y2hwb2ludChC
YXNpY0Jsb2NrKiwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywg
Y29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYmIGV4
dHJhQXJncyA9IHsgfSk7CisgICAgc3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBv
aW50KEJhc2ljQmxvY2sqLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1
bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+
IGV4dHJhQXJncyA9IHsgfSk7CiAKICAgICBQYXJ0aWFsUmVzdWx0IGFkZFNoaWZ0KFR5cGUsIEIz
OjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IGFkZEludGVnZXJT
dWIoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJo
cywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CkBAIC0zNjEsMTEgKzQzOSwzMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CiAgICAgdm9pZCBkaWRQb3BW
YWx1ZUZyb21TdGFjaygpIHsgfQogCisgICAgVG1wIGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kLCBD
b250cm9sVHlwZSYsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4ID0gMCk7CisgICAgdGVtcGxhdGUg
PHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhCMzo6UGF0Y2hwb2ludFZhbHVlKiwgVmVjdG9y
PENvbnN0cmFpbmVkVG1wLCBpbmxpbmVDYXBhY2l0eT4mIGFyZ3MpOworCiAgICAgY29uc3QgQmFn
PEIzOjpQYXRjaHBvaW50VmFsdWUqPiYgcGF0Y2hwb2ludHMoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fcGF0Y2hwb2ludHM7CiAgICAgfQogCisgICAgdm9pZCBhZGRTdGFja01hcCh1
bnNpZ25lZCBjYWxsU2l0ZUluZGV4LCBTdGFja01hcCYmIHN0YWNrbWFwKQorICAgIHsKKyAgICAg
ICAgbV9zdGFja21hcHMuYWRkKENhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCksIFdURk1vdmUo
c3RhY2ttYXApKTsKKyAgICB9CisKKyAgICBTdGFja01hcHMmJiB0YWtlU3RhY2ttYXBzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fc3RhY2ttYXBzKTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiB0YWtlRXhjZXB0aW9uSGFuZGxlcnMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIEIzOjpUeXBlIHRvQjNSZXN1bHRUeXBlKEJsb2NrU2lnbmF0dXJlIHJl
dHVyblR5cGUpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2YWxpZGF0ZUluc3QoSW5zdCYgaW5z
dCkKQEAgLTQxNywxNiArNTE0LDYgQEAgcHJpdmF0ZToKIAogICAgIFRtcCBuZXdUbXAoQjM6OkJh
bmsgYmFuaykKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoYmFuaykgewotICAgICAgICBjYXNlIEIz
OjpHUDoKLSAgICAgICAgICAgIGlmIChtX2ZyZWVHUHMuc2l6ZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBtX2ZyZWVHUHMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEIzOjpGUDoKLSAgICAgICAgICAgIGlmIChtX2ZyZWVGUHMuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBtX2ZyZWVGUHMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgIH0K
IApAQCAtNDk2LDggKzU4MywxNCBAQCBwcml2YXRlOgogICAgICAgICBlbWl0UGF0Y2hwb2ludChi
YXNpY0Jsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgOD4geyByZXN1bHQgfSwgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPigpKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGlubGluZVNpemU+
CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0
Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBp
bmxpbmVTaXplPiYmIGFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Js
b2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgOD4geyByZXN1bHQgfSwgV1RGTW92ZShhcmdzKSk7Cisg
ICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFRtcFR5cGUsIHNpemVfdCBpbmxp
bmVTaXplPgotICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywg
QjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1bHRUbXBUeXBlLCA4
PiYgIHJlc3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBhcmdzKQor
ICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1bHRUbXBUeXBlLCA4PiYgcmVzdWx0
cywgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCiAgICAgewogICAg
ICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwpCiAgICAgICAgICAgICBtX3BhdGNocG9pbnRT
cGVjaWFsID0gc3RhdGljX2Nhc3Q8QjM6OlBhdGNocG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNw
ZWNpYWwobWFrZVVuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNpYWw+KCkpKTsKQEAgLTU0OSw3ICs2
NDIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgQjM6OlZhbHVlKiBkdW1teVZhbHVlID0gbV9w
cm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgdG1wLnRtcC5pc0dQKCkgPyBCMzo6SW50NjQg
OiBCMzo6RG91YmxlLCAwKTsKICAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQoZHVtbXlWYWx1ZSwg
dG1wLnJlcCk7CiAgICAgICAgICAgICBzd2l0Y2ggKHRtcC5yZXAua2luZCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6Q29sZEFueTogLy8gQjM6OlZhbHVlIHByb3BhZ2F0ZXMg
Q29sZEFueSBpbmZvcm1hdGlvbiBhbmQgbGF0ZXIgQWlyIHdpbGwgYWxsb2NhdGUgYXBwcm9wcmlh
dGUgc3RhY2suCisgICAgICAgICAgICAvLyBCMzo6VmFsdWUgcHJvcGFnYXRlcyAoTGF0ZSlDb2xk
QW55IGluZm9ybWF0aW9uIGFuZCBsYXRlciBBaXIgd2lsbCBhbGxvY2F0ZSBhcHByb3ByaWF0ZSBz
dGFjay4KKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpDb2xkQW55OiAKKyAgICAgICAg
ICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpMYXRlQ29sZEFueToKICAgICAgICAgICAgIGNhc2UgQjM6
OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVu
ZCh0bXAudG1wKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTU1OSw3ICs2NTQsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKHRtcC5yZXAucmVn
KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVl
UmVwOjpTdGFja0FyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFwYXRjaC0+ZWZm
ZWN0cy50ZXJtaW5hbCk7CisgICAgICAgICAgICAgICAgLy8gT09QUworICAgICAgICAgICAgICAg
IC8vQVNTRVJUKCFwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCk7CiAgICAgICAgICAgICAgICAgQXJn
IGFyZyA9IEFyZzo6Y2FsbEFyZyh0bXAucmVwLm9mZnNldEZyb21TUCgpKTsKICAgICAgICAgICAg
ICAgICBhcHBlbmQoYmFzaWNCbG9jaywgdG1wLnRtcC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJs
ZSwgdG1wLnRtcCwgYXJnKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLmNhblJlcHJlc2Vu
dChwYXRjaC0+Y2hpbGQoaSktPnR5cGUoKSkpOwpAQCAtNjg5LDYgKzc4NSwyMyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBlbWl0TG9hZChCMzo6QWlyOjpPcGNvZGUg
b3AsIEIzOjpUeXBlIHR5cGUsIFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBUbXAgcmVzdWx0KQor
ICAgIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6OndpZHRo
Rm9yVHlwZSh0eXBlKSkpCisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcihiYXNlLCBv
ZmZzZXQpLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gdGVtcDIg
PSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCB0
ZW1wMik7CisgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCBiYXNlLCB0ZW1wMik7Cisg
ICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6YWRkcih0ZW1wMiksIHJlc3VsdCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKFRtcCBiYXNlLCBzaXplX3Qgb2Zmc2V0LCBU
eXBlZFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBlbWl0TG9hZChtb3ZlT3BGb3JWYWx1ZVR5
cGUocmVzdWx0LnR5cGUoKSksIHRvQjNUeXBlKHJlc3VsdC50eXBlKCkpLCBiYXNlLCBvZmZzZXQs
IHJlc3VsdC50bXAoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0VGhyb3dFeGNlcHRpb24oQ0Nh
bGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKICAgICB2b2lkIGVtaXRFbnRyeVRpZXJVcENo
ZWNrKCk7CkBAIC03NDgsMTYgKzg2MSwxNSBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx1aW50MzJf
dD4gbV9vdXRlckxvb3BzOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0
ciB9OwogICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJhc2lj
QmxvY2sqIG1fbWFpbkVudHJ5cG9pbnRTdGFydCB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8VHlw
ZWRUbXA+IG1fbG9jYWxzOwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1
bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KICAg
ICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBt
X2JvdW5kc0NoZWNraW5nU2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV93
YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3By
b2xvZ3VlV2FzbUNvbnRleHRHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9vbCBtX21ha2Vz
Q2FsbHMgeyBmYWxzZSB9OwogCi0gICAgVmVjdG9yPFRtcCwgOD4gbV9mcmVlR1BzOwotICAgIFZl
Y3RvcjxUbXAsIDg+IG1fZnJlZUZQczsKLQogICAgIEhhc2hNYXA8QmxvY2tTaWduYXR1cmUsIEIz
OjpUeXBlPiBtX3R1cGxlTWFwOwogICAgIC8vIFRoaXMgaXMgb25seSBmaWxsZWQgaWYgd2UgYXJl
IGR1bXBpbmcgSVIuCiAgICAgQmFnPEIzOjpQYXRjaHBvaW50VmFsdWUqPiBtX3BhdGNocG9pbnRz
OwpAQCAtNzc0LDYgKzg4NiwxNSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0
RnVuY3Rpb25zOwogCiAgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFsKiBtX3BhdGNocG9pbnRTcGVj
aWFsIHsgbnVsbHB0ciB9OworCisgICAgUmVmUHRyPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9y
PiBtX3Byb2xvZ3VlR2VuZXJhdG9yOworCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2NhdGNo
RW50cnlwb2ludHM7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3RyeUNhdGNoRGVwdGggeyAw
IH07IC8vIE9PUFM6IGluY3JlbWVudCBldmVyeXdoZXJlCisgICAgQ2hlY2tlZDx1bnNpZ25lZD4g
bV9jYWxsU2l0ZUluZGV4IHsgMCB9OyAvLyBPT1BTOiBpbmNyZW1lbnQgZXZlcnl3aGVyZQorICAg
IFN0YWNrTWFwcyBtX3N0YWNrbWFwczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4g
bV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3Nl
bWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWdu
ZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCkBAIC04NDcsMTEgKzk2OCw5IEBAIEFpcklSR2VuZXJh
dG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVy
KG1fYm91bmRzQ2hlY2tpbmdTaXplR1BSKTsKICAgICB9CiAKLSAgICBtX2NvZGUuc2V0TnVtRW50
cnlwb2ludHMoMSk7Ci0KLSAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNl
RmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1sx
XSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKyAgICBtX3Byb2xvZ3VlV2FzbUNvbnRleHRH
UFIgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5wcm9s
b2d1ZVNjcmF0Y2hHUFJzWzFdIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogCi0gICAgUmVm
PEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNo
YXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgIG1fcHJvbG9ndWVHZW5lcmF0
b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAg
ICBjb2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0KTsKIApAQCAtODkxLDMxICsxMDEwLDM5IEBA
IEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICAgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xvZ3VlU2NyYXRj
aEdQUnNbMF07CiAKICAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQot
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dElu
c3RhbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUik7CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlciwgc2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5kZXJm
bG93Q2hlY2spKQogICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5j
aFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlcikpOwotICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0
SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpKTsKKyAgICAg
ICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJl
bG93LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9wcm9sb2d1ZVdhc21Db250ZXh0
R1BSLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKSk7CiAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93
U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYm
IENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93
IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8g
YmUgY29ycmVjdC4KLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
Y29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5z
dGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG1fY2F0Y2hFbnRyeXBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQ
UnNbMF07CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUiwgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNj
cmF0Y2gpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfSk7CiAKLSAgICBtX2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDAsIFdURk1v
dmUocHJvbG9ndWVHZW5lcmF0b3IpKTsKLQogICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkp
IHsKICAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZzY0KCk7CiAgICAgICAgIC8vIEZJWE1FOiBX
b3VsZCBiZSBuaWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCi0g
ICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNlKSwgbV9pbnN0YW5jZVZhbHVl
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpLCBt
X2luc3RhbmNlVmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSB7
IFRtcChjb250ZXh0SW5zdGFuY2UpLCBUeXBlczo6STY0IH07CisgICAgICAgIG1faW5zdGFuY2VW
YWx1ZSA9IHsgVG1wKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUiksIFR5cGVzOjpJNjQgfTsKKwor
ICAgIGFwcGVuZChFbnRyeVN3aXRjaCk7CisgICAgbV9tYWluRW50cnlwb2ludFN0YXJ0ID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX21haW5FbnRyeXBvaW50U3Rh
cnQ7CiAKICAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CiAgICAgbV9sb2NhbHMuZ3Jvdyhz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKQEAgLTk1NCw2ICsxMDgxLDc5IEBAIEFpcklSR2Vu
ZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2QKICAgICBlbWl0RW50cnlUaWVyVXBDaGVj
aygpOwogfQogCisvLyBPT1BTOiBkZS1kdXBsaWNhdGUKK3N0YXRpYyB2b2lkIGJ1aWxkRW50cnlC
dWZmZXJGb3JDYXRjaChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKKyAgICBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKKyAgICBPcHRpbWl6
aW5nSklUQ2FsbGVlKiBjYWxsZWUgPSBiaXR3aXNlX2Nhc3Q8T3B0aW1pemluZ0pJVENhbGxlZSo+
KGNhbGxGcmFtZS0+Y2FsbGVlKCkuYXNXYXNtQ2FsbGVlKCkpOworICAgIGNvbnN0IFN0YWNrTWFw
JiBzdGFja21hcCA9IGNhbGxlZS0+c3RhY2ttYXAoY2FsbFNpdGVJbmRleCk7CisgICAgVk0qIHZt
ID0gY29udGV4dC5ncHI8Vk0qPihHUFJJbmZvOjpyZWdUMCk7CisgICAgdWludDY0X3QqIGJ1ZmZl
ciA9IHZtLT53YXNtQ29udGV4dC5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzdGFja21hcC5zaXplKCkg
KiA4KTsKKyAgICBsb2FkVmFsdWVzSW50b0J1ZmZlcihjb250ZXh0LCBzdGFja21hcCwgYnVmZmVy
KTsKKworICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihidWZmZXIpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpmaW5hbGl6
ZUVudHJ5cG9pbnRzKCkKK3sKKyAgICB1bnNpZ25lZCBudW1FbnRyeXBvaW50cyA9IDEgKyBtX2Nh
dGNoRW50cnlwb2ludHMuc2l6ZSgpOworICAgIG1fcHJvYy5zZXROdW1FbnRyeXBvaW50cyhudW1F
bnRyeXBvaW50cyk7CisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgwLCBSZWY8
QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+KCptX3Byb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAg
ICBpZiAobV9jYXRjaEVudHJ5cG9pbnRzLnNpemUoKSkgeworICAgICAgICBSZWY8QjM6OkFpcjo6
UHJvbG9ndWVHZW5lcmF0b3I+IGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRU
YXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFt0aGlzXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgaml0
LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBI
YW5kbGluZyBwcmVjaXNlIGFsbG9jYXRpb25zIGluIFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVu
dHJ5cG9pbnRzIG1pZ2h0IGJlIHVubmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMworICAgICAgICAgICAgICAg
IGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
UHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgICAgICBqaXQu
YW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNr
KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVy
ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAg
ICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFByZWNp
c2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAt
IFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAg
ICAgICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMyk7CisKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxl
ZUZvcldhc21DYXRjaE9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6
cmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisKKyAgICAgICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpKTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mSW5zdGFuY2UoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6cmVnVDMpOworCisgICAgICAg
ICAgICBqaXQucHJvYmUodGFnQ0Z1bmN0aW9uPEpJVFByb2JlUHRyVGFnPihidWlsZEVudHJ5QnVm
ZmVyRm9yQ2F0Y2gpLCBudWxscHRyKTsKKworICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAg
ICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIFNo
YXJlZCBwcm9sb2d1ZSBleHBlY3RzIHRoaXMgaW4gdGhpcyByZWdpc3RlciB3aGVuIGVudGVyaW5n
IHRoZSBmdW5jdGlvbiB1c2luZyBmYXN0IFRMUy4KKyAgICAgICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0SW5zdGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2F0
Y2hFbnRyeXBvaW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fY29kZS5zZXRQcm9sb2d1
ZUZvckVudHJ5cG9pbnQoMSArIGksIGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpKTsK
KyAgICB9CisKKyAgICBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0IHN1Y2Nlc3NvcnM7CisgICAg
c3VjY2Vzc29ycy5hcHBlbmQobV9tYWluRW50cnlwb2ludFN0YXJ0KTsKKyAgICBzdWNjZXNzb3Jz
LmFwcGVuZFZlY3RvcihtX2NhdGNoRW50cnlwb2ludHMpOworCisgICAgUkVMRUFTRV9BU1NFUlQo
bnVtRW50cnlwb2ludHMgPT0gc3VjY2Vzc29ycy5zaXplKCkpOworICAgIG1fcm9vdEJsb2NrLT5z
dWNjZXNzb3JzKCkgPSBzdWNjZXNzb3JzOworfQorCiBCMzo6VHlwZSBBaXJJUkdlbmVyYXRvcjo6
dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZSkKIHsKICAgICBpZiAocmV0
dXJuVHlwZS0+cmV0dXJuc1ZvaWQoKSkKQEAgLTE0MjgsNiArMTYyOCw4IEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCAKICAgICBpbnQzMl90IG9mZnNldCA9IHNhZmVD
YXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgc3dpdGNoIChnbG9i
YWwuYmluZGluZ01vZGUpIHsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5k
aW5nTW9kZTo6RW1iZWRkZWRJbkluc3RhbmNlOgorICAgICAgICAvLyBPT1BTCisgICAgICAgIC8v
IGVtaXRMb2FkKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdG9CM1R5cGUodHlwZSksIHRlbXAs
IG9mZnNldCwgcmVzdWx0KTsKICAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNl
dCwgQjM6OndpZHRoRm9yVHlwZSh0b0IzVHlwZSh0eXBlKSkpKQogICAgICAgICAgICAgYXBwZW5k
KG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3Vs
dCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTQzOSw2ICsxNjQxLDggQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IAogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206
Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6CiAgICAgICAgIEFTU0VS
VChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0
eTo6TXV0YWJsZSk7CisgICAgICAgIC8vIE9PUFMKKyAgICAgICAgLy8gZW1pdExvYWQoTW92ZSwg
QjM6OkludDY0LCB0ZW1wLCBvZmZzZXQsIHRlbXApOwogICAgICAgICBpZiAoQXJnOjppc1ZhbGlk
QWRkckZvcm0ob2Zmc2V0LCBCMzo6V2lkdGg2NCkpCiAgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHRlbXApOwogICAgICAgICBlbHNlIHsKQEAgLTI5MDYs
OSArMzExMCwxMiBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrCiAg
ICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQogICAgICAgICBwYXRjaEFyZ3MuYXBwZW5k
KENvbnN0cmFpbmVkVG1wKGxvY2FsLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7Ci0gICAgICAgIFN0YWNrJiBleHBy
ZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgYXV0byYgZGF0YSA9IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAgICAgICBhdXRvJiBleHBy
ZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjazsKICAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUg
OiBleHByZXNzaW9uU3RhY2spCiAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFp
bmVkVG1wKHZhbHVlLnZhbHVlKCksIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOworICAgICAgICBp
ZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBwYXRjaEFyZ3Mu
YXBwZW5kKENvbnN0cmFpbmVkVG1wKGRhdGEuZXhjZXB0aW9uKCkudG1wKCksIEIzOjpWYWx1ZVJl
cDo6Q29sZEFueSkpOwogICAgIH0KICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA6IGVu
Y2xvc2luZ1N0YWNrKQogICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZh
bHVlLnZhbHVlKCksIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOwpAQCAtMzAxMiw1NyArMzIxOSwy
MjQgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibAogICAgIHJldHVy
biB7IH07CiB9CiAKLS8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRpb25zIGlu
IHRoZSBBaXIgZ2VuZXJhdG9yCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjMxMjExCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUs
IFN0YWNrJiwgQ29udHJvbFR5cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CisgICAgKyttX3RyeUNhdGNoRGVwdGg7CisKKyAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVy
ZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShv
cmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVyZSksIEJsb2NrVHlw
ZTo6VHJ5LCBjb250aW51YXRpb24sICsrbV9jYWxsU2l0ZUluZGV4LCBtX3RyeUNhdGNoRGVwdGgp
OwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVu
c2lnbmVkLCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlz
dCYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2ln
bmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1
cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiB7IH07CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJl
c3VsdHMpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNoVG9VbnJlYWNoYWJs
ZShleGNlcHRpb25JbmRleCwgc2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKIH0KIAotYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkLCBjb25zdCBTaWdu
YXR1cmUmLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9s
VHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJy
ZW50U3RhY2ssIGRhdGEucmVzdWx0cyk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4gYWRk
Q2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRhdGEpOwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRDYXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3Vs
dExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIFRtcCBidWZmZXIgPSBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6
Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlwZSA9
IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgVHlwZWRUbXAgdG1wID0gdG1wRm9yVHlw
ZSh0eXBlKTsKKyAgICAgICAgZW1pdExvYWQoYnVmZmVyLCBpICogc2l6ZW9mKHVpbnQ2NF90KSwg
dG1wKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQodG1wKTsKKyAgICB9CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENv
bnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBlbWl0Q2F0Y2hJbXBsKENh
dGNoS2luZDo6Q2F0Y2hBbGwsIGRhdGEpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQ
YXJ0aWFsUmVzdWx0CitUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5k
IGtpbmQsIENvbnRyb2xUeXBlJiBkYXRhLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAgbV9j
dXJyZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBtX2NhdGNoRW50cnlwb2ludHMu
YXBwZW5kKG1fY3VycmVudEJsb2NrKTsKKworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0
YSkpIHsKKyAgICAgICAgaWYgKGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCkKKyAgICAgICAgICAg
IGRhdGEuY29udmVydFRyeVRvQ2F0Y2goKyttX2NhbGxTaXRlSW5kZXgsIGc2NCgpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNp
dGVJbmRleCwgZzY0KCkpOworICAgIH0KKyAgICAvLyBXZSBjb252ZXJ0IGZyb20gInRyeSIgdG8g
ImNhdGNoIiBDb250cm9sVHlwZSBhYm92ZS4gVGhpcyBkb2Vzbid0CisgICAgLy8gaGFwcGVuIGlm
IENvbnRyb2xUeXBlIGlzIGFscmVhZHkgYSAiY2F0Y2giLiBUaGlzIGNhbiBoYXBwZW4gd2hlbgor
ICAgIC8vIHdlIGhhdmUgbXVsdGlwbGUgY2F0Y2hlcyBsaWtlICJ0cnkge30gY2F0Y2goQSl7fSBj
YXRjaChCKXt9Li4uQ2F0Y2hBbGwoRSl7fSIuCisgICAgLy8gV2UganVzdCBjb252ZXJ0IHRoZSBm
aXJzdCBDb250cm9sVHlwZSB0byBhIGNhdGNoLCB0aGVuIHRoZSBvdGhlcnMgd2lsbAorICAgIC8v
IHVzZSBpdHMgZmllbGRzLgorICAgIEFTU0VSVChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRh
KSk7CisKKyAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpD
YXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsKKyAgICBt
X2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCks
IGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5Q2F0Y2hEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7CisK
KyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1p
dDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsK
KworICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOworICAgIGF1dG8gbG9hZEZyb21TY3Jh
dGNoQnVmZmVyID0gWyZdIChUeXBlZFRtcCByZXN1bHQpIHsKKyAgICAgICAgc2l6ZV90IG9mZnNl
dCA9IHNpemVvZih1aW50NjRfdCkgKiBpbmRleEluQnVmZmVyOworICAgICAgICArK2luZGV4SW5C
dWZmZXI7CisgICAgICAgIFRtcCBidWZmZXJQdHIgPSBUbXAoR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgZW1pdExvYWQoYnVmZmVyUHRyLCBvZmZzZXQsIHJlc3VsdCk7CisgICAgfTsK
KworICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKKyAgICAgICAgbG9hZEZyb21TY3Jh
dGNoQnVmZmVyKGxvY2FsKTsKKworICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsg
Y29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9s
SW5kZXgpIHsKKyAgICAgICAgYXV0byYgY29udHJvbERhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0
YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAgYXV0byYgZXhwcmVzc2lv
blN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNz
aW9uU3RhY2suc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFR5cGVkVG1wIHRtcCA9IGV4cHJl
c3Npb25TdGFja1tpXS52YWx1ZSgpOworICAgICAgICAgICAgbG9hZEZyb21TY3JhdGNoQnVmZmVy
KHRtcCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2Ugc2V0IG91ciBjdXJyZW50IENvbnRyb2xF
bnRyeSdzIGV4Y2VwdGlvbiBiZWxvdyBhZnRlciB0aGUgcGF0Y2hwb2ludC4KKyAgICAgICAgaWYg
KENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGNvbnRyb2xEYXRhKSAmJiAmZGF0YSAhPSAmY29udHJv
bERhdGEpCisgICAgICAgICAgICBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIoY29udHJvbERhdGEuZXhj
ZXB0aW9uKCkpOworICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gYWRk
UGF0Y2hwb2ludChtX3Byb2MuYWRkVHVwbGUoeyBCMzo6cG9pbnRlclR5cGUoKSwgQjM6OnBvaW50
ZXJUeXBlKCkgfSkpOworICAgIHBhdGNoLT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOwor
ICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7
CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlckxhdGUgPSBSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdp
c3RlcnNGb3JKU0NhbGwoKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHBhdGNoLT5y
ZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICBwYXRjaC0+cmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKEIzOjpWYWx1
ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSMikpOworICAgIHBhdGNoLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9
IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2Fs
bF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRyaWV2
ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisK
KyAgICBUbXAgZXhjZXB0aW9uID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBU
bXAgYnVmZmVyID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgZW1pdFBhdGNo
cG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBWZWN0b3I8VG1wLCA4Pjo6ZnJvbShleGNlcHRp
b24sIGJ1ZmZlciksIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgMT46OmZyb20oaW5zdGFuY2VWYWx1
ZSgpKSk7CisgICAgYXBwZW5kKE1vdmUsIGV4Y2VwdGlvbiwgZGF0YS5leGNlcHRpb24oKSk7CisK
KyAgICByZXR1cm4gYnVmZmVyOwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0
ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiB0YXJnZXQs
IENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKHRh
cmdldCwgZGF0YSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJl
YWNoYWJsZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHVuc2lnbmVkIHRhcmdldERlcHRoID0gMDsKKyAgICBpZiAoQ29udHJv
bFR5cGU6OmlzVHJ5KHRhcmdldCkpCisgICAgICAgIHRhcmdldERlcHRoID0gdGFyZ2V0LnRyeURl
cHRoKCk7CisKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IEhhbmRsZXJUeXBlOjpE
ZWxlZ2F0ZSwgZGF0YS50cnlTdGFydCgpLCArK21fY2FsbFNpdGVJbmRleCwgMCwgbV90cnlDYXRj
aERlcHRoLCB0YXJnZXREZXB0aCB9KTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFVOVVNFRF9QQVJBTShl
eGNlcHRpb25JbmRleCk7CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7Cisg
ICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxs
KCkpOworCisgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCA4PiBwYXRjaEFyZ3M7CisgICAgcGF0
Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcChpbnN0YW5jZVZhbHVlKCksIEIzOjpWYWx1ZVJl
cDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENv
bnN0cmFpbmVkVG1wKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIEIzOjpWYWx1ZVJl
cDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJh
aW5lZFRtcChhcmdzW2ldLCBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoaSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKSk7CisKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRs
ZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaCwgcGF0Y2hBcmdzKTsKKwor
ICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGV4Y2VwdGlvbkluZGV4LCBoYW5kbGVdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIC8vIE9PUFM6IHNoYXJlIGNvZGUgd2l0aCBCMyBJUiBnZW5lcmF0b3Ig
aGVyZS4KKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5v
bkFyZ3VtZW50R1BSMDsKKyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlz
KTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5j
aFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAg
ICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJs
b2NrTWFzayksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJs
b2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBs
b2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25D
YXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vh
a1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNj
cmF0Y2gpOworCisgICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0K
KyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoc2NyYXRjaCk7CisKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihleGNlcHRpb25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChP
cGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
Y2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJv
dykpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBwYXRjaCwgVG1wKCksIFdURk1vdmUocGF0Y2hBcmdzKSk7CisKICAgICByZXR1cm4g
eyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250
cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldGhy
b3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAg
QjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAg
ICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwo
KSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworCisgICAgVmVjdG9yPENv
bnN0cmFpbmVkVG1wLCAzPiBwYXRjaEFyZ3M7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJh
aW5lZFRtcChpbnN0YW5jZVZhbHVlKCksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpKTsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKFRtcChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSkpKTsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGRhdGEuZXhj
ZXB0aW9uKCksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMikpKTsKKwor
ICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKHBhdGNoLCBwYXRjaEFyZ3MpOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3Io
W3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOworICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHJl
Y2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlv
bjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtlZEJs
b2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSks
IHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKwor
ICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFsbG9j
YXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lz
ZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAgICAgICAgICBsb2Fk
ZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisKKyAgICAgICAgaGFu
ZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbldhc21SZXRocm93KSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAg
ZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBUbXAoKSwgV1RGTW92ZShwYXRj
aEFyZ3MpKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTMyMDksNyArMzU4Myw4IEBAIGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUKICAgICBpZiAoZGF0YS5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7CiAgICAgICAgIGFwcGVuZChkYXRhLnNwZWNpYWws
IEp1bXApOwogICAgICAgICBkYXRhLnNwZWNpYWwtPnNldFN1Y2Nlc3NvcnMobV9jdXJyZW50Qmxv
Y2spOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpUcnkgfHwgZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAt
LW1fdHJ5Q2F0Y2hEZXB0aDsKIAogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlw
ZTo6TG9vcCkgewogICAgICAgICBtX291dGVyTG9vcHMucmVtb3ZlTGFzdCgpOwpAQCAtMzIzMyw3
ICszNjA4LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZQogICAg
IHJldHVybiB7IH07CiB9CiAKLUIzOjpQYXRjaHBvaW50VmFsdWUqIEFpcklSR2VuZXJhdG9yOjpl
bWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+
JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgcGF0Y2hBcmdzKQorc3RkOjpwYWlyPEIz
OjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBBaXJJUkdlbmVy
YXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5
cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3MpCiB7CiAgICAg
YXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQodG9CM1Jlc3VsdFR5cGUoJnNpZ25hdHVy
ZSkpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAgLTMy
NTgsOCArMzYzMyw5IEBAIEIzOjpQYXRjaHBvaW50VmFsdWUqIEFpcklSR2VuZXJhdG9yOjplbWkK
ICAgICAgICAgICAgIHJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6VmFsdWVSZXAodmFsdWVM
b2NhdGlvbikpOwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IFdURk1v
dmUocmVzdWx0Q29uc3RyYWludHMpOwogICAgIH0KKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlIGV4Y2VwdGlvbkhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRj
aHBvaW50LCBwYXRjaEFyZ3MpOwogICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50
LCByZXN1bHRzLCBXVEZNb3ZlKHBhdGNoQXJncykpOwotICAgIHJldHVybiBwYXRjaHBvaW50Owor
ICAgIHJldHVybiB7IHBhdGNocG9pbnQsIGV4Y2VwdGlvbkhhbmRsZSB9OwogfQogCiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0
JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CkBAIC0zMjk1LDE0ICszNjcxLDE3IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnUKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnNldFN1Y2Nlc3NvcnMoaXNXYXNtQmxvY2ssIGlzRW1iZWRkZXJCbG9jayk7CiAKICAgICAg
ICAgewotICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hwb2ludChp
c1dhc21CbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzKTsKKyAgICAgICAgICAgIGF1dG8g
cGFpciA9IGVtaXRDYWxsUGF0Y2hwb2ludChpc1dhc21CbG9jaywgc2lnbmF0dXJlLCByZXN1bHRz
LCBhcmdzKTsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWlyLmZpcnN0OworICAg
ICAgICAgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29uZDsKICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2lu
Y2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCiAgICAgICAgICAgICAvLyBXZSBw
ZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRo
YXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CiAKLSAg
ICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxl
LmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxs
LCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAg
ICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsK
QEAgLTMzMjEsMTMgKzM3MDAsMTcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50
MzJfdCBmdQogCiAgICAgICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGp1bXBBcmdzOwog
ICAgICAgICAgICAganVtcEFyZ3MuYXBwZW5kKHsganVtcERlc3RpbmF0aW9uLCBCMzo6VmFsdWVS
ZXA6OlNvbWVSZWdpc3RlciB9KTsKLSAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0
Q2FsbFBhdGNocG9pbnQoaXNFbWJlZGRlckJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3Ms
IFdURk1vdmUoanVtcEFyZ3MpKTsKKyAgICAgICAgICAgIGF1dG8gcGFpciA9IGVtaXRDYWxsUGF0
Y2hwb2ludChpc0VtYmVkZGVyQmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncywgV1RGTW92
ZShqdW1wQXJncykpOworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IHBhaXIuZmlyc3Q7
CisgICAgICAgICAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIuc2Vjb25kOworCiAgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0
ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgogICAgICAgICAgICAg
Ly8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0
aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykp
OwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhp
cyk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9jKCkucmVzdWx0
Q291bnQocGFyYW1zLnZhbHVlKCktPnR5cGUoKSldLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwog
ICAgICAgICAgICAgfSk7CiAKQEAgLTMzMzksMTIgKzM3MjIsMTUgQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdQogICAgICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZl
IGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2
ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgogICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxT
dGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBjdXJyZW50
SW5zdGFuY2UsIGNvbnRpbnVhdGlvbik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byogcGF0
Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2lnbmF0dXJlLCBy
ZXN1bHRzLCBhcmdzKTsKKyAgICAgICAgYXV0byBwYWlyID0gZW1pdENhbGxQYXRjaHBvaW50KG1f
Y3VycmVudEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MpOworICAgICAgICBhdXRvKiBw
YXRjaHBvaW50ID0gcGFpci5maXJzdDsKKyAgICAgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBw
YWlyLnNlY29uZDsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIHRoZSBzaXplIHJlZ2lz
dGVyIHNpbmNlIHRoZSBMTEludCBhbHdheXMgYm91bmRzIGNoZWNrcwogICAgICAgICBpZiAobV9t
b2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCBtX2luZm8ubWVtb3J5LmlzU2hhcmVkKCkp
CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldCB7IFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCkuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIgfSk7Ci0gICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1
bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLmdlbmVyYXRlKGppdCwgcGFy
YW1zLCB0aGlzKTsKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFn
PihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKQEAgLTM1MjMsNyArMzkwOSw5IEBAIGF1dG8gQWly
SVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVHkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKICAgICAgICAgcmVzdWx0cy5hcHBl
bmQodG1wRm9yVHlwZShzaWduYXR1cmUucmV0dXJuVHlwZShpKSkpOwogCi0gICAgYXV0byogcGF0
Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2lnbmF0dXJlLCBy
ZXN1bHRzLCBhcmdzLCBXVEZNb3ZlKGV4dHJhQXJncykpOworICAgIGF1dG8gcGFpciA9IGVtaXRD
YWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzLCBX
VEZNb3ZlKGV4dHJhQXJncykpOworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWlyLmZpcnN0Owor
ICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlID0gcGFpci5zZWNvbmQ7CiAKICAgICAvLyBXZSBuZWVk
IHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0
IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgogICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1
bWUgd2UncmUgYWx3YXlzIGNhbGxpbmcgc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5n
IHNvCkBAIC0zNTM1LDYgKzM5MjMsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjplbWl0SW5kaXJl
Y3RDYWxsKFR5CiAKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgZXhjZXB0aW9uSGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAg
ICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9jKCkucmVzdWx0Q291bnQocGFyYW1zLnZh
bHVlKCktPnR5cGUoKSldLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgIH0pOwogCkBAIC0z
NTk1LDcgKzM5ODQsOCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
CiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlx
dWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCi0gICAgQjM6OlByb2NlZHVyZSBw
cm9jZWR1cmU7CisgICAgY29tcGlsYXRpb25Db250ZXh0LnByb2NlZHVyZSA9IG1ha2VVbmlxdWU8
QjM6OlByb2NlZHVyZT4oKTsKKyAgICBhdXRvJiBwcm9jZWR1cmUgPSAqY29tcGlsYXRpb25Db250
ZXh0LnByb2NlZHVyZTsKICAgICBDb2RlJiBjb2RlID0gcHJvY2VkdXJlLmNvZGUoKTsKIAogICAg
IHByb2NlZHVyZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBCMzo6T3Jp
Z2luIG9yaWdpbikgewpAQCAtMzYxNSwyNSArNDAwNSwyNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+
IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEu
c2l6ZSgpLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VyLnBhcnNlKCkpOwogCisgICAgaXJHZW5lcmF0b3IuZmluYWxpemVFbnRyeXBvaW50cygp
OwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpCiAgICAgICAgICAg
ICBibG9jay0+c3VjY2Vzc29yQmxvY2soaSktPmFkZFByZWRlY2Vzc29yKGJsb2NrKTsKICAgICB9
CiAKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzaG91bGREdW1wSVJBdEVhY2hQaGFzZShC
Mzo6QWlyTW9kZSkpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIkdlbmVyYXRlZCBwYXRjaHBv
aW50cyIpOwotICAgICAgICAgICAgZm9yIChCMzo6UGF0Y2hwb2ludFZhbHVlKiogcGF0Y2ggOiBp
ckdlbmVyYXRvci5wYXRjaHBvaW50cygpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbihkZWVw
RHVtcChwcm9jZWR1cmUsICpwYXRjaCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQjM6OkFpcjo6
cHJlcGFyZUZvckdlbmVyYXRpb24oY29kZSk7Ci0gICAgICAgIEIzOjpBaXI6OmdlbmVyYXRlKGNv
ZGUsICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOwotICAgICAgICBjb21w
aWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVh
c2VCeXByb2R1Y3RzKCk7Ci0gICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVn
aXN0ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoQjM6OkFpck1vZGUpKSkgeworICAgICAg
ICBkYXRhTG9nTG4oIkdlbmVyYXRlZCBwYXRjaHBvaW50cyIpOworICAgICAgICBmb3IgKEIzOjpQ
YXRjaHBvaW50VmFsdWUqKiBwYXRjaCA6IGlyR2VuZXJhdG9yLnBhdGNocG9pbnRzKCkpCisgICAg
ICAgICAgICBkYXRhTG9nTG4oZGVlcER1bXAocHJvY2VkdXJlLCAqcGF0Y2gpKTsKICAgICB9CiAK
KyAgICBCMzo6QWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihjb2RlKTsKKyAgICBCMzo6QWlyOjpn
ZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKKwor
ICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1
cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKKyAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAg
cmVzdWx0LT5zdGFja21hcHMgPSBpckdlbmVyYXRvci50YWtlU3RhY2ttYXBzKCk7CisgICAgcmVz
dWx0LT5leGNlcHRpb25IYW5kbGVycyA9IGlyR2VuZXJhdG9yLnRha2VFeGNlcHRpb25IYW5kbGVy
cygpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTE3OCw2ICs1NTcwLDQ4IEBAIHRl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3AKICAgICByZXR1cm4geyB9Owog
fQogCit0ZW1wbGF0ZSA8c2l6ZV90IGlubGluZUNhcGFjaXR5PgorUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZSBBaXJJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZUNh
cGFjaXR5PiYgYXJncykKK3sKKyAgICArK21fY2FsbFNpdGVJbmRleDsKKyAgICBpZiAoIW1fdHJ5
Q2F0Y2hEZXB0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxUbXA+IGxpdmVW
YWx1ZXM7CisgICAgZm9yIChjb25zdCBhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQorICAgICAgICBs
aXZlVmFsdWVzLmFwcGVuZChsb2NhbCk7CisgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXgg
PSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2Nv
bnRyb2xJbmRleCkgeworICAgICAgICBDb250cm9sRGF0YSYgZGF0YSA9IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAgICAgICBTdGFjayYgZXhw
cmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG1wIDogZXhw
cmVzc2lvblN0YWNrKQorICAgICAgICAgICAgbGl2ZVZhbHVlcy5hcHBlbmQodG1wLnZhbHVlKCkp
OworICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAg
ICBsaXZlVmFsdWVzLmFwcGVuZChkYXRhLmV4Y2VwdGlvbigpKTsKKyAgICB9CisKKyAgICBmb3Ig
KFRtcCB0bXAgOiBsaXZlVmFsdWVzKQorICAgICAgICBhcmdzLmFwcGVuZChDb25zdHJhaW5lZFRt
cCh0bXAsIEIzOjpWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpKTsKKworICAgIHBhdGNoLT5lZmZlY3Rz
LmV4aXRzU2lkZXdheXMgPSB0cnVlOworCisgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUgeyBtX2NhbGxTaXRlSW5kZXgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsaXZlVmFsdWVz
LnNpemUoKSkgfTsKK30KKwordm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpnZW5lcmF0
ZShDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zLCBBaXJJUkdlbmVyYXRvciogZ2VuZXJhdG9yKSBjb25zdAoreworICAgIGlmIChtX2Nh
bGxTaXRlSW5kZXggPT0gc19pbnZhbGlkQ2FsbFNpdGVJbmRleCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU3RhY2tNYXAgdmFsdWVzKG1fbnVtTGl2ZVZhbHVlcyk7CisgICAgdW5zaWduZWQgcGFy
YW1zT2Zmc2V0ID0gcGFyYW1zLnNpemUoKSAtIG1fbnVtTGl2ZVZhbHVlczsKKyAgICB1bnNpZ25l
ZCBjaGlsZHJlbk9mZnNldCA9IHBhcmFtcy52YWx1ZSgpLT5udW1DaGlsZHJlbigpIC0gbV9udW1M
aXZlVmFsdWVzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUxpdmVWYWx1ZXM7
ICsraSkKKyAgICAgICAgdmFsdWVzW2ldID0gT1NSRW50cnlWYWx1ZShwYXJhbXNbaSArIHBhcmFt
c09mZnNldF0sIHBhcmFtcy52YWx1ZSgpLT5jaGlsZChpICsgY2hpbGRyZW5PZmZzZXQpLT50eXBl
KCkpOworCisgICAgZ2VuZXJhdG9yLT5hZGRTdGFja01hcChtX2NhbGxTaXRlSW5kZXgsIFdURk1v
dmUodmFsdWVzKSk7CisgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bV9jYWxsU2l0ZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9u
IDI4NzU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsOSArOTEsMTAgQEAgY2xhc3MgQjNJUkdlbmVyYXRv
cjsKIHN0cnVjdCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHsKICAgICB2b2lkIGdlbmVyYXRl
KENDYWxsSGVscGVycyYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCBCM0lS
R2VuZXJhdG9yKikgY29uc3Q7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52
YWxpZENhbGxTaXRlSW5kZXggPSAgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKIAogICAgIHVuc2lnbmVkIG1f
Y2FsbFNpdGVJbmRleCB7IHNfaW52YWxpZENhbGxTaXRlSW5kZXggfTsKKyAgICAvLyBPT1BTOiBy
ZWZhY3RvciBvZmYgbV9vZmZzZXQKICAgICB1bnNpZ25lZCBtX29mZnNldDsKIH07CiAKQEAgLTg1
Nyw2ICs4NTgsNyBAQCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZnJhbWVQb2ludGVyKCkKICAgICBy
ZXR1cm4gbV9mcmFtZVBvaW50ZXI7CiB9CiAKKy8vIE9PUFM6IGRlLWR1cGxpY2F0ZQogc3RhdGlj
IHZvaWQgYnVpbGRFbnRyeUJ1ZmZlckZvckNhdGNoKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KQog
ewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwpA
QCAtMjYxMCw4ICsyNjEyLDE4IEBAIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgQjNJUkdlbmVy
YXRvcjoKICAgICB9CiAKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBwYXRjaC0+bnVtQ2hpbGRyZW4o
KTsKLSAgICBpZiAocGF0Y2gtPnR5cGUoKSAhPSBWb2lkKQotICAgICAgICBvZmZzZXQrKzsKKyAg
ICAvLyBPT1BTOiBhZGQgdGVzdAorICAgIHN3aXRjaCAocGF0Y2gtPnR5cGUoKS5raW5kKCkpIHsK
KyAgICBjYXNlIEIzOjpWb2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEIzOjpUdXBsZTog
eworICAgICAgICBvZmZzZXQgKz0gbV9wcm9jLnR1cGxlRm9yVHlwZShwYXRjaC0+dHlwZSgpKS5z
aXplKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICArK29m
ZnNldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgcGF0Y2gtPmVmZmVjdHMuZXhpdHNT
aWRld2F5cyA9IHRydWU7CiAgICAgcGF0Y2gtPmFwcGVuZFZlY3RvcldpdGhSZXAobGl2ZVZhbHVl
cywgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKQEAgLTI2NTcsNiArMjY2OSwxMCBAQCBWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGRhdGEuY29udmVydFRyeVRvQ2F0Y2hBbGwoKyttX2NhbGxTaXRlSW5kZXgsIG1fcHJvYy5h
ZGRWYXJpYWJsZShwb2ludGVyVHlwZSgpKSk7CiAgICAgfQorICAgIC8vIFdlIGNvbnZlcnQgZnJv
bSAidHJ5IiB0byAiY2F0Y2giIENvbnRyb2xUeXBlIGFib3ZlLiBUaGlzIGRvZXNuJ3QKKyAgICAv
LyBoYXBwZW4gaWYgQ29udHJvbFR5cGUgaXMgYWxyZWFkeSBhICJjYXRjaCIuIFRoaXMgY2FuIGhh
cHBlbiB3aGVuCisgICAgLy8gd2UgaGF2ZSBtdWx0aXBsZSBjYXRjaGVzIGxpa2UgInRyeSB7fSBj
YXRjaChBKXt9IGNhdGNoKEIpe30uLi5DYXRjaEFsbChFKXt9IgorICAgIEFTU0VSVChDb250cm9s
VHlwZTo6aXNBbnlDYXRjaChkYXRhKSk7CiAKICAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9
IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJU
eXBlOjpDYXRjaEFsbDsKICAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJU
eXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5Q2F0Y2hEZXB0aCwg
ZXhjZXB0aW9uSW5kZXggfSk7CkBAIC0zMzI0LDYgKzMzNDAsNyBAQCB2b2lkIGNvbXB1dGVQQ1Rv
Q29kZU9yaWdpbk1hcChDb21waWxhdGlvCiAgICAgfQogfQogCisvLyBPT1BTOiBNb3ZlIHRoaXMg
dG8gc2hhcmVkIGxvY2FhdGlvbiBsZXNzIEIzIHNwZWNpZmljLgogdm9pZCBjb21wdXRlRXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24s
IGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikKIHsKICAgICBpZiAoIWNvbnRleHQucHJvY2VkdXJlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjg3NTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDMsOCArMjAzLDYgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IEJCUVBsYQog
ICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7CiAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2Vt
Ymx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0
aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAg
ICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKLSAgICBlbHNlIGlmICghbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0KGZ1bmN0aW9uSW5k
ZXgpKQotICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogICAgIGVsc2UgaWYgKCFPcHRpb25z
Ojp3YXNtQkJRVXNlc0FpcigpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDI4NzU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
TEludEdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1OSw5ICs1NTksNiBAQCBzdGQ6
OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0CiAgICAgUkVMRUFTRV9BU1NFUlQo
dXNlZEJ1ZmZlci5jYXBhY2l0eSgpID09IG9sZENhcGFjaXR5KTsKICAgICAqdGhyZWFkU3BlY2lm
aWMgPSBXVEZNb3ZlKHVzZWRCdWZmZXIpOwogCi0gICAgaWYgKCFtX3VzZXNFeGNlcHRpb25zKQot
ICAgICAgICBtX2luZm8ubV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrU2V0KG1f
ZnVuY3Rpb25JbmRleCk7Ci0KICAgICByZXR1cm4gV1RGTW92ZShtX2NvZGVCbG9jayk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZv
cm1hdGlvbi5oCShyZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw2
IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWQKIAogICAgIEJpdFZl
Y3RvciBtX2RlY2xhcmVkRnVuY3Rpb25zOwogICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRXhjZXB0
aW9uczsKLSAgICBCaXRWZWN0b3IgbV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zOwogICAg
IG11dGFibGUgQml0VmVjdG9yIG1fcmVmZXJlbmNlZEZ1bmN0aW9uczsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3Bw
CShyZXZpc2lvbiAyODc1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3Ry
ZWFtaW5nUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw2IEBAIGF1dG8g
U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVTZWN0aW9uU2kKICAgICBtX2Z1bmN0aW9uQ291bnQg
PSBmdW5jdGlvbkNvdW50OwogICAgIG1fZnVuY3Rpb25JbmRleCA9IDA7CiAgICAgbV9jb2RlT2Zm
c2V0ID0gbV9vZmZzZXQ7Ci0gICAgbV9pbmZvLT5tX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlv
bnMuZW5zdXJlU2l6ZShmdW5jdGlvbkNvdW50KTsKIAogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
ZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJD
b2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGZ1bmN0aW9uQ291bnQpOwogICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXpl
KCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVuY3Rpb25Db3VudCwgIiBleGNlZWRzIHRoZSBk
ZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448562</attachid>
            <date>2022-01-06 22:30:32 -0800</date>
            <delta_ts>2022-01-07 12:52:28 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>70834</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3NzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDIyLTAxLTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBzdXBwb3J0IGZvciBXYXNtIGV4Y2VwdGlvbnMgaW4gdGhlIEFpciBnZW5lcmF0b3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vODQxMzI4NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgdG8gQWlyIGZv
ciBXYXNtIGV4Y2VwdGlvbnMuIFRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBpcyB2ZXJ5IHNp
bWlsYXIgdG8gaG93IHdlIGltcGxlbWVudCBpdCBpbiB0aGUgQjMgV2FzbSB0aWVyLiBUaGlzIHBh
dGNoCisgICAgICAgIHNoYXJlcyBjb2RlIHdpdGggdGhlIEIzIHRpZXIgd2hlcmUgaXQgY2FuLgor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpjb252ZXJ0VHJ5VG9DYXRj
aCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29u
dmVydFRyeVRvQ2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
Q29udHJvbERhdGE6OnRyeVN0YXJ0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjp0cnlFbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnRyeURlcHRoIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpjYXRjaEtpbmQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmV4Y2Vw
dGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0Q2Fs
bFBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkU3Rh
Y2tNYXApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6dGFrZVN0YWNrbWFw
cyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjp0YWtlRXhjZXB0aW9uSGFu
ZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6bmV3VG1wKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRQYXRjaHBvaW50KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmZpbmFsaXplRW50cnlwb2ludHMpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6Zm9yRWFjaExpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRD
YXRjaFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmVtaXRDYXRjaEltcGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
RGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFJl
dGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJl
YWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKToKKyAg
ICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6aW5zZXJ0RW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkVGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRSZXRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZTo6Z2VuZXJhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpidWlsZEVu
dHJ5QnVmZmVyRm9yQ2F0Y2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpjb21wdXRl
RXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIHdhc20v
V2FzbUlSR2VuZXJhdG9ySGVscGVycy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2VuZXJhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6Oldh
c206OmVtaXRSZXRocm93SW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OmVtaXRUaHJvd0ltcGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpidWlsZEVudHJ5QnVmZmVyRm9yQ2F0Y2gpOgorICAgICAg
ICAoSlNDOjpXYXNtOjplbWl0Q2F0Y2hQcm9sb2d1ZVNoYXJlZCk6CisgICAgICAgICogd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6ZmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6Cisg
ICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtT1NSRW50
cnlQbGFuLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKToK
KwogMjAyMi0wMS0wNiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMgbmVlZHMgdG8gaGFuZGxlIHR1cGxlcwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4NzczOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC05MDAsNiArOTAwLDcgQEAKIAkJNTJFNjVBMUUyNzY4Mjc3
MTAwMkI0QzBBIC8qIEIzRXN0aW1hdGVTdGF0aWNFeGVjdXRpb25Db3VudHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTY1QTFCMjc2ODI3NjAwMDJC
NEMwQSAvKiBCM0VzdGltYXRlU3RhdGljRXhlY3V0aW9uQ291bnRzLmggKi87IH07CiAJCTUyRUVE
Nzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAwOEY0Qzkz
IC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CisJCTUyRkRBQkMzMjc4ODA3NkIwMEMxNUI1
OSAvKiBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkZEQUJDMjI3ODgwNzY5MDBDMTVCNTkgLyogV2FzbUlSR2Vu
ZXJhdG9ySGVscGVycy5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyogVW5p
ZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0g
Ki87IH07CiAJCTUzMEE2NkJBMUZBM0U3OEIwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlNC1tbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkI4
MUZBM0U3N0UwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlNC1tbS5tbSAqLzsgfTsKIAkJNTMwQTY2
QkIxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U1LW1tLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwQTY2QjUxRkEzRTc3RDAwMjZBNTQ1
IC8qIFVuaWZpZWRTb3VyY2U1LW1tLm1tICovOyB9OwpAQCAtMzc2MCw2ICszNzYxLDcgQEAKIAkJ
NTJFRUQ3OTMyNDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZ1bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJGREFC
QzIyNzg4MDc2OTAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzAwNzQwQzIyREQ2RjY2MDBCOUFDQjMgLyogSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDAxRkEzRTMxQzAwMjZBNTQ1IC8qIFNvdXJj
ZXNDb2NvYS50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU291cmNlc0NvY29hLnR4dDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDExRkEzRTMxRDAwMjZBNTQ1IC8qIFNv
dXJjZXMudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNvdXJjZXMudHh0OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzMwNSw2ICs3MzA3LDcgQEAKIAkJCQlFMzgzNTAwOTIzOTBE
OTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5oICovLAogCQkJCTE0ODUyMUQ1MjZFQUVCREYwMEND
MUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3BwICovLAogCQkJCTE0ODUyMUQ3MjZFQUVCRkUwMEND
MUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAqLywKKwkJCQk1MkZEQUJDMjI3ODgwNzY5MDBDMTVC
NTkgLyogV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oICovLAogCQkJCUFEOEZGMzk2MUVCNUJEODUw
MDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuY3BwICovLAogCQkJCUFEOEZGMzk1MUVCNUJEODUw
MDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLywKIAkJCQlBRDVDMzZERTFGNjk5RUI2MDAw
QkNBQUYgLyogV2FzbUluc3RhbmNlLmNwcCAqLywKQEAgLTExMTYwLDYgKzExMTYzLDcgQEAKIAkJ
CQlFM0EzMkJDNzFGQzgzMTQ3MDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzOTNBREQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU2MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkZEQUJDMzI3ODgwNzZCMDBDMTVCNTkgLyog
V2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5OTMwQzgyMkFE
M0I5QTAwNTFDREUyIC8qIFdlYWtPYmplY3RSZWZDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTM5QkZCQUUyMkFEM0MzQTAwMjNGNEMwIC8qIFdlYWtPYmplY3RSZWZQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrU2V0
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3NzM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKICNpbmNs
dWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5o
IgorI2luY2x1ZGUgIldhc21JUkdlbmVyYXRvckhlbHBlcnMuaCIKICNpbmNsdWRlICJXYXNtSW5z
dGFuY2UuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU9TUkVudHJ5
RGF0YS5oIgpAQCAtMTMyLDE0ICsxMzMsMjQgQEAgcHVibGljOgogICAgIHVzaW5nIFJlc3VsdExp
c3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDg+OwogCiAgICAgc3RydWN0IENvbnRyb2xEYXRh
IHsKLSAgICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJl
IHJlc3VsdCwgUmVzdWx0TGlzdCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9j
ayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAg
Q29udHJvbERhdGEoQjM6Ok9yaWdpbiwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBSZXN1bHRMaXN0
IHJlc3VsdFRtcHMsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIEJh
c2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250cm9sQmxvY2tU
eXBlKHR5cGUpCiAgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCiAgICAg
ICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKICAgICAgICAgICAgICwgcmVzdWx0cyhyZXN1bHRU
bXBzKQogICAgICAgICAgICAgLCByZXR1cm5UeXBlKHJlc3VsdCkKICAgICAgICAgewotICAgICAg
ICAgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7CisgICAgICAgIH0KKworICAgICAgICBDb250cm9s
RGF0YShCMzo6T3JpZ2luLCBCbG9ja1NpZ25hdHVyZSByZXN1bHQsIFJlc3VsdExpc3QgcmVzdWx0
VG1wcywgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgdW5zaWduZWQg
dHJ5U3RhcnQsIHVuc2lnbmVkIHRyeURlcHRoKQorICAgICAgICAgICAgOiBjb250cm9sQmxvY2tU
eXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAg
ICAgICAgICAsIHNwZWNpYWwobnVsbHB0cikKKyAgICAgICAgICAgICwgcmVzdWx0cyhyZXN1bHRU
bXBzKQorICAgICAgICAgICAgLCByZXR1cm5UeXBlKHJlc3VsdCkKKyAgICAgICAgICAgICwgbV90
cnlTdGFydCh0cnlTdGFydCkKKyAgICAgICAgICAgICwgbV90cnlDYXRjaERlcHRoKHRyeURlcHRo
KQorICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBDb250cm9sRGF0YSgpCkBAIC0xNDgs
OCArMTU5LDggQEAgcHVibGljOgogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29u
dHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpJZjsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sRGF0YSYg
Y29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeTsg
fQotICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9s
KSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0KICAg
ICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkg
eyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CisgICAg
ICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0
dXJuIGlzQW55Q2F0Y2goY29udHJvbCkgJiYgY29udHJvbC5jYXRjaEtpbmQoKSA9PSBDYXRjaEtp
bmQ6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJv
bERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpUb3BMZXZlbDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpM
b29wOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29udHJvbERhdGEmIGNv
bnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jazsg
fQpAQCAtMjIxLDYgKzIzMiw1NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gcmV0dXJu
VHlwZS0+cmV0dXJuVHlwZShpKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY29udmVydFRy
eVRvQ2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhjZXB0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6Q2F0Y2g7
CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgICAgICAg
ICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBtX2V4Y2VwdGlv
biA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVydFRyeVRvQ2F0
Y2hBbGwodW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhjZXB0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpU
cnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6Q2F0Y2g7Cisg
ICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2hBbGw7CisgICAgICAgICAg
ICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBtX2V4Y2VwdGlv
biA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRyeVN0YXJ0KCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0g
QmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsK
KyAgICAgICAgICAgIHJldHVybiBtX3RyeVN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgdHJ5RW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRy
b2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV90
cnlFbmQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlEZXB0aCgpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlw
ZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAg
ICAgICByZXR1cm4gbV90cnlDYXRjaERlcHRoOworICAgICAgICB9CisKKyAgICAgICAgQ2F0Y2hL
aW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250
cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1f
Y2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAgICAgVHlwZWRUbXAgZXhjZXB0aW9uKCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxv
Y2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGNlcHRpb247CisgICAgICAg
IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdlbmVyYXRvcjsK
ICAgICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CkBAIC0yMjgsNiArMjg3LDExIEBA
IHB1YmxpYzoKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKICAgICAgICAgUmVzdWx0TGlz
dCByZXN1bHRzOwogICAgICAgICBCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlOworICAgICAgICB1
bnNpZ25lZCBtX3RyeVN0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX3RyeUVuZDsKKyAgICAgICAg
dW5zaWduZWQgbV90cnlDYXRjaERlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9jYXRjaEtpbmQ7
CisgICAgICAgIFR5cGVkVG1wIG1fZXhjZXB0aW9uOwogICAgIH07CiAKICAgICB1c2luZyBDb250
cm9sVHlwZSA9IENvbnRyb2xEYXRhOwpAQCAtMjYwLDYgKzMyNCw4IEBAIHB1YmxpYzoKIAogICAg
IEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYs
IEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1v
cnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIGNvbnN0IFNpZ25h
dHVyZSYpOwogCisgICAgdm9pZCBmaW5hbGl6ZUVudHJ5cG9pbnRzKCk7CisKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWlu
dDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KTsK
QEAgLTM0OSw3ICs0MTUsNyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVHlwZWRUbXAgY2FsbGVlSW5zdGFuY2UsIEV4
cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKLSAgICBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqLCBj
b25zdCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8
VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgZXh0cmFBcmdzID0geyB9
KTsKKyAgICBzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9j
ayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0IFZl
Y3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gZXh0cmFBcmdzID0g
eyB9KTsKIAogICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoVHlwZSwgQjM6OkFpcjo6T3Bjb2Rl
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihCMzo6QWlyOjpP
cGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKQEAgLTM2MSwxMSArNDI3LDMwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRp
ZEZpbmlzaFBhcnNpbmdMb2NhbHMoKSB7IH0KICAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNr
KCkgeyB9CiAKKyAgICBUbXAgZW1pdENhdGNoSW1wbChDYXRjaEtpbmQsIENvbnRyb2xUeXBlJiwg
dW5zaWduZWQgZXhjZXB0aW9uSW5kZXggPSAwKTsKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGlubGlu
ZUNhcGFjaXR5PgorICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKEIzOjpQYXRjaHBvaW50VmFsdWUqLCBWZWN0b3I8Q29uc3RyYWluZWRU
bXAsIGlubGluZUNhcGFjaXR5PiYgYXJncyk7CisKICAgICBjb25zdCBCYWc8QjM6OlBhdGNocG9p
bnRWYWx1ZSo+JiBwYXRjaHBvaW50cygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9w
YXRjaHBvaW50czsKICAgICB9CiAKKyAgICB2b2lkIGFkZFN0YWNrTWFwKHVuc2lnbmVkIGNhbGxT
aXRlSW5kZXgsIFN0YWNrTWFwJiYgc3RhY2ttYXApCisgICAgeworICAgICAgICBtX3N0YWNrbWFw
cy5hZGQoQ2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KSwgV1RGTW92ZShzdGFja21hcCkpOwor
ICAgIH0KKworICAgIFN0YWNrTWFwcyYmIHRha2VTdGFja21hcHMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUobV9zdGFja21hcHMpOworICAgIH0KKworICAgIFZlY3RvcjxVbmxpbmtl
ZEhhbmRsZXJJbmZvPiYmIHRha2VFeGNlcHRpb25IYW5kbGVycygpCisgICAgeworICAgICAgICBy
ZXR1cm4gV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJzKTsKKyAgICB9CisKIHByaXZhdGU6CiAg
ICAgQjM6OlR5cGUgdG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZSk7CiAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHZhbGlkYXRlSW5zdChJbnN0JiBpbnN0KQpAQCAtNDE3LDE2
ICs1MDIsNiBAQCBwcml2YXRlOgogCiAgICAgVG1wIG5ld1RtcChCMzo6QmFuayBiYW5rKQogICAg
IHsKLSAgICAgICAgc3dpdGNoIChiYW5rKSB7Ci0gICAgICAgIGNhc2UgQjM6OkdQOgotICAgICAg
ICAgICAgaWYgKG1fZnJlZUdQcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZnJl
ZUdQcy50YWtlTGFzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQjM6OkZQ
OgotICAgICAgICAgICAgaWYgKG1fZnJlZUZQcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG1fZnJlZUZQcy50YWtlTGFzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIG1fY29kZS5uZXdUbXAoYmFuayk7CiAgICAgfQogCkBAIC00OTYsOCAr
NTcxLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ssIHBh
dGNoLCBWZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9LCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+KCkp
OwogICAgIH0KIAorICAgIHRlbXBsYXRlIDxzaXplX3QgaW5saW5lU2l6ZT4KKyAgICB2b2lkIGVt
aXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHBhdGNoLCBUbXAgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYg
YXJncykKKyAgICB7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ssIHBhdGNoLCBW
ZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9LCBXVEZNb3ZlKGFyZ3MpKTsKKyAgICB9CisKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VG1wVHlwZSwgc2l6ZV90IGlubGluZVNpemU+Ci0gICAg
dm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiAgcmVzdWx0cywg
VmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCisgICAgdm9pZCBlbWl0
UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBw
YXRjaCwgY29uc3QgVmVjdG9yPFJlc3VsdFRtcFR5cGUsIDg+JiByZXN1bHRzLCBWZWN0b3I8Q29u
c3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKICAgICB7CiAgICAgICAgIGlmICghbV9w
YXRjaHBvaW50U3BlY2lhbCkKICAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNpYWwgPSBzdGF0
aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lhbChtYWtlVW5p
cXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOwpAQCAtNTQ5LDcgKzYzMCw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBCMzo6VmFsdWUqIGR1bW15VmFsdWUgPSBtX3Byb2MuYWRkQ29uc3Rh
bnQoQjM6Ok9yaWdpbigpLCB0bXAudG1wLmlzR1AoKSA/IEIzOjpJbnQ2NCA6IEIzOjpEb3VibGUs
IDApOwogICAgICAgICAgICAgcGF0Y2gtPmFwcGVuZChkdW1teVZhbHVlLCB0bXAucmVwKTsKICAg
ICAgICAgICAgIHN3aXRjaCAodG1wLnJlcC5raW5kKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQjM6
OlZhbHVlUmVwOjpDb2xkQW55OiAvLyBCMzo6VmFsdWUgcHJvcGFnYXRlcyBDb2xkQW55IGluZm9y
bWF0aW9uIGFuZCBsYXRlciBBaXIgd2lsbCBhbGxvY2F0ZSBhcHByb3ByaWF0ZSBzdGFjay4KKyAg
ICAgICAgICAgIC8vIEIzOjpWYWx1ZSBwcm9wYWdhdGVzIChMYXRlKUNvbGRBbnkgaW5mb3JtYXRp
b24gYW5kIGxhdGVyIEFpciB3aWxsIGFsbG9jYXRlIGFwcHJvcHJpYXRlIHN0YWNrLgorICAgICAg
ICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OkNvbGRBbnk6IAorICAgICAgICAgICAgY2FzZSBCMzo6
VmFsdWVSZXA6OkxhdGVDb2xkQW55OgogICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNv
bWVSZWdpc3RlcjoKICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcC50bXApOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTU5LDcgKzY0Miw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAodG1wLnJlcC5yZWcoKSkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXBhdGNoLT5lZmZlY3RzLnRlcm1pbmFs
KTsKICAgICAgICAgICAgICAgICBBcmcgYXJnID0gQXJnOjpjYWxsQXJnKHRtcC5yZXAub2Zmc2V0
RnJvbVNQKCkpOwogICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0bXAudG1wLmlz
R1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCBhcmcpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChhcmcuY2FuUmVwcmVzZW50KHBhdGNoLT5jaGlsZChpKS0+dHlwZSgpKSk7CkBAIC02
ODksNiArNzcxLDIzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIGVt
aXRMb2FkKEIzOjpBaXI6Ok9wY29kZSBvcCwgQjM6OlR5cGUgdHlwZSwgVG1wIGJhc2UsIHNpemVf
dCBvZmZzZXQsIFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRk
ckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHR5cGUpKSkKKyAgICAgICAgICAgIGFwcGVu
ZChvcCwgQXJnOjphZGRyKGJhc2UsIG9mZnNldCksIHJlc3VsdCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgYXV0byB0ZW1wMiA9IGc2NCgpOworICAgICAgICAgICAgYXBwZW5kKE1vdmUs
IEFyZzo6YmlnSW1tKG9mZnNldCksIHRlbXAyKTsKKyAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwg
dGVtcDIsIGJhc2UsIHRlbXAyKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwgQXJnOjphZGRyKHRl
bXAyKSwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZW1pdExvYWQoVG1w
IGJhc2UsIHNpemVfdCBvZmZzZXQsIFR5cGVkVG1wIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGVt
aXRMb2FkKG1vdmVPcEZvclZhbHVlVHlwZShyZXN1bHQudHlwZSgpKSwgdG9CM1R5cGUocmVzdWx0
LnR5cGUoKSksIGJhc2UsIG9mZnNldCwgcmVzdWx0LnRtcCgpKTsKKyAgICB9CisKICAgICB2b2lk
IGVtaXRUaHJvd0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIAogICAg
IHZvaWQgZW1pdEVudHJ5VGllclVwQ2hlY2soKTsKQEAgLTczNyw2ICs4MzYsOSBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gbV9vdXRlckxvb3BzLmxhc3QoKTsKICAgICB9CiAKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBmb3JFYWNoTGl2ZVZhbHVlKEZ1bmN0
aW9uKTsKKwogICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBu
dWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAgICBjb25z
dCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CkBAIC03
NDgsMTYgKzg1MCwxNSBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9vdXRlckxv
b3BzOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIEJh
c2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1fbWFp
bkVudHJ5cG9pbnRTdGFydCB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8VHlwZWRUbXA+IG1fbG9j
YWxzOwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21U
b1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4
IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KICAgICBHUFJSZWcgbV9t
ZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBtX2JvdW5kc0NoZWNr
aW5nU2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV93YXNtQ29udGV4dElu
c3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3Byb2xvZ3VlV2FzbUNv
bnRleHRHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxz
ZSB9OwogCi0gICAgVmVjdG9yPFRtcCwgOD4gbV9mcmVlR1BzOwotICAgIFZlY3RvcjxUbXAsIDg+
IG1fZnJlZUZQczsKLQogICAgIEhhc2hNYXA8QmxvY2tTaWduYXR1cmUsIEIzOjpUeXBlPiBtX3R1
cGxlTWFwOwogICAgIC8vIFRoaXMgaXMgb25seSBmaWxsZWQgaWYgd2UgYXJlIGR1bXBpbmcgSVIu
CiAgICAgQmFnPEIzOjpQYXRjaHBvaW50VmFsdWUqPiBtX3BhdGNocG9pbnRzOwpAQCAtNzc0LDYg
Kzg3NSwxNSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVuY3Rpb25zOwog
CiAgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFsKiBtX3BhdGNocG9pbnRTcGVjaWFsIHsgbnVsbHB0
ciB9OworCisgICAgUmVmUHRyPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBtX3Byb2xvZ3Vl
R2VuZXJhdG9yOworCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2NhdGNoRW50cnlwb2ludHM7
CisKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3RyeUNhdGNoRGVwdGggeyAwIH07CisgICAgQ2hl
Y2tlZDx1bnNpZ25lZD4gbV9jYWxsU2l0ZUluZGV4IHsgMCB9OworICAgIFN0YWNrTWFwcyBtX3N0
YWNrbWFwczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5k
bGVyczsKIH07CiAKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2ln
bmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNl
dHMgaW4gQjMuCkBAIC04NDcsMTEgKzk1Nyw5IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVy
YXRvcihjb25zdCBNb2QKICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fYm91bmRzQ2hlY2tp
bmdTaXplR1BSKTsKICAgICB9CiAKLSAgICBtX2NvZGUuc2V0TnVtRW50cnlwb2ludHMoMSk7Ci0K
LSAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gd2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1sxXSA6IG1fd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUjsKKyAgICBtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIgPSBDb250ZXh0Ojp1
c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJz
WzFdIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogCi0gICAgUmVmPEIzOjpBaXI6OlByb2xv
Z3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFp
cjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6
OkFpcjo6Q29kZSYgY29kZSkgeworICAgIG1fcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFy
ZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICBjb2RlLmVtaXREZWZh
dWx0UHJvbG9ndWUoaml0KTsKIApAQCAtODkxLDMxICs5OTksMzkgQEAgQWlySVJHZW5lcmF0b3I6
OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1swXTsKIAogICAg
ICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOworICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UobV9wcm9sb2d1ZVdhc21D
b250ZXh0R1BSKTsKIAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzY3Jh
dGNoKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7
CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCiAgICAg
ICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVy
czo6QWJvdmUsIHNjcmF0Y2gsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0gICAgICAg
ICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxv
dywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHRJbnN0YW5jZSwgSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSkpOworICAgICAgICAgICAgICAgIG92ZXJm
bG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIsIEluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRo
dW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJv
bVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFz
dFRMUygpKSB7CiAgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVk
LCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgotICAg
ICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2Up
OworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShtX3Byb2xvZ3Vl
V2FzbUNvbnRleHRHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobV9jYXRj
aEVudHJ5cG9pbnRzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1swXTsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9wcm9sb2d1ZVdhc21D
b250ZXh0R1BSLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9KTsKIAotICAg
IG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoMCwgV1RGTW92ZShwcm9sb2d1ZUdlbmVy
YXRvcikpOwotCiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBtX2lu
c3RhbmNlVmFsdWUgPSBnNjQoKTsKICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8g
b25seSBkbyB0aGlzIGlmIHdlIHVzZSBpbnN0YW5jZSB2YWx1ZS4KLSAgICAgICAgYXBwZW5kKE1v
dmUsIFRtcChjb250ZXh0SW5zdGFuY2UpLCBtX2luc3RhbmNlVmFsdWUpOworICAgICAgICBhcHBl
bmQoTW92ZSwgVG1wKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUiksIG1faW5zdGFuY2VWYWx1ZSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IHsgVG1wKGNvbnRleHRJbnN0
YW5jZSksIFR5cGVzOjpJNjQgfTsKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0geyBUbXAobV9w
cm9sb2d1ZVdhc21Db250ZXh0R1BSKSwgVHlwZXM6Okk2NCB9OworCisgICAgYXBwZW5kKEVudHJ5
U3dpdGNoKTsKKyAgICBtX21haW5FbnRyeXBvaW50U3RhcnQgPSBtX2NvZGUuYWRkQmxvY2soKTsK
KyAgICBtX2N1cnJlbnRCbG9jayA9IG1fbWFpbkVudHJ5cG9pbnRTdGFydDsKIAogICAgIEFTU0VS
VCghbV9sb2NhbHMuc2l6ZSgpKTsKICAgICBtX2xvY2Fscy5ncm93KHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCkpOwpAQCAtOTU0LDYgKzEwNzAsMzUgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2Vu
ZXJhdG9yKGNvbnN0IE1vZAogICAgIGVtaXRFbnRyeVRpZXJVcENoZWNrKCk7CiB9CiAKK3ZvaWQg
QWlySVJHZW5lcmF0b3I6OmZpbmFsaXplRW50cnlwb2ludHMoKQoreworICAgIHVuc2lnbmVkIG51
bUVudHJ5cG9pbnRzID0gMSArIG1fY2F0Y2hFbnRyeXBvaW50cy5zaXplKCk7CisgICAgbV9wcm9j
LnNldE51bUVudHJ5cG9pbnRzKG51bUVudHJ5cG9pbnRzKTsKKyAgICBtX2NvZGUuc2V0UHJvbG9n
dWVGb3JFbnRyeXBvaW50KDAsIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4oKm1fcHJv
bG9ndWVHZW5lcmF0b3IpKTsKKworICAgIGlmIChtX2NhdGNoRW50cnlwb2ludHMuc2l6ZSgpKSB7
CisgICAgICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gY2F0Y2hQcm9sb2d1ZUdl
bmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5j
dGlvbj4oW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgewor
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOworICAgICAgICAgICAgZW1pdENhdGNoUHJvbG9ndWVTaGFyZWQoY29kZSwgaml0KTsKKwor
ICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAg
IC8vIFNoYXJlZCBwcm9sb2d1ZSBleHBlY3RzIHRoaXMgaW4gdGhpcyByZWdpc3RlciB3aGVuIGVu
dGVyaW5nIHRoZSBmdW5jdGlvbiB1c2luZyBmYXN0IFRMUy4KKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFdhc21Db250ZXh0SW5zdGFuY2UobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY2F0Y2hFbnRyeXBvaW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fY29kZS5zZXRQ
cm9sb2d1ZUZvckVudHJ5cG9pbnQoMSArIGksIGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IuY29weVJl
ZigpKTsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0IHN1Y2Nlc3NvcnM7
CisgICAgc3VjY2Vzc29ycy5hcHBlbmQobV9tYWluRW50cnlwb2ludFN0YXJ0KTsKKyAgICBzdWNj
ZXNzb3JzLmFwcGVuZFZlY3RvcihtX2NhdGNoRW50cnlwb2ludHMpOworCisgICAgUkVMRUFTRV9B
U1NFUlQobnVtRW50cnlwb2ludHMgPT0gc3VjY2Vzc29ycy5zaXplKCkpOworICAgIG1fcm9vdEJs
b2NrLT5zdWNjZXNzb3JzKCkgPSBzdWNjZXNzb3JzOworfQorCiBCMzo6VHlwZSBBaXJJUkdlbmVy
YXRvcjo6dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZSkKIHsKICAgICBp
ZiAocmV0dXJuVHlwZS0+cmV0dXJuc1ZvaWQoKSkKQEAgLTEwMjcsNiArMTE3MiwyMSBAQCB2b2lk
IEFpcklSR2VuZXJhdG9yOjplbWl0VGhyb3dFeGNlcHRpb24oCiAgICAgfSk7CiB9CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmZvckVhY2hMaXZl
VmFsdWUoRnVuY3Rpb24gZnVuY3Rpb24pCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBsb2NhbCA6
IG1fbG9jYWxzKQorICAgICAgICBmdW5jdGlvbihsb2NhbCk7CisgICAgZm9yICh1bnNpZ25lZCBj
b250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCku
c2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgeworICAgICAgICBDb250cm9sRGF0YSYgZGF0YSA9IG1f
cGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAgICAg
ICBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRy
b2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgdG1wIDogZXhwcmVzc2lvblN0YWNrKQorICAgICAgICAgICAgZnVuY3Rpb24odG1wLnZhbHVl
KCkpOworICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAg
ICAgICBmdW5jdGlvbihkYXRhLmV4Y2VwdGlvbigpKTsKKyAgICB9Cit9CisKIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbG9jYWxzLnNpemUoKSArIGNvdW50OwpA
QCAtMjkwMywxMyArMzA2Myw5IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVw
Q2hlY2sKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKICAgICBwYXRjaEFy
Z3MuYXBwZW5kKGNvdW50ZG93blB0cik7CiAKLSAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2Nh
bHMpCi0gICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAobG9jYWwsIEIzOjpW
YWx1ZVJlcDo6Q29sZEFueSkpOwotICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsg
Y29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9s
SW5kZXgpIHsKLSAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwotICAgICAg
ICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA6IGV4cHJlc3Npb25TdGFjaykKLSAgICAgICAg
ICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodmFsdWUudmFsdWUoKSwgQjM6OlZh
bHVlUmVwOjpDb2xkQW55KSk7Ci0gICAgfQorICAgIGZvckVhY2hMaXZlVmFsdWUoWyZdIChUbXAg
dG1wKSB7CisgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodG1wLCBCMzo6
VmFsdWVSZXA6OkNvbGRBbnkpKTsKKyAgICB9KTsKICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2
YWx1ZSA6IGVuY2xvc2luZ1N0YWNrKQogICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFp
bmVkVG1wKHZhbHVlLnZhbHVlKCksIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOwogICAgIGZvciAo
VHlwZWRFeHByZXNzaW9uIHZhbHVlIDogbmV3U3RhY2spCkBAIC0zMDEyLDU3ICszMTY4LDE3MyBA
QCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBXYXNtIGV4Y2VwdGlvbnMgaW4gdGhl
IEFpciBnZW5lcmF0b3IKLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzEyMTEKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3Rh
Y2smLCBDb250cm9sVHlwZSYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2lu
Z1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKKyAgICArK21fdHJ5Q2F0Y2hEZXB0aDsKKworICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBl
bmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG9yaWdp
bigpLCBzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1cmUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpU
cnksIGNvbnRpbnVhdGlvbiwgKyttX2NhbGxTaXRlSW5kZXgsIG1fdHJ5Q2F0Y2hEZXB0aCk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWdu
ZWQsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jikg
LT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQg
ZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBTdGFjayYgY3VycmVu
dFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlh
bFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHsgfTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0
cyk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3Jz
KGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4
Y2VwdGlvbkluZGV4LCBzaWduYXR1cmUsIGRhdGEsIHJlc3VsdHMpOwogfQogCi1hdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQsIGNvbnN0IFNpZ25hdHVy
ZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBl
JiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4geyB9OworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRT
dGFjaywgZGF0YS5yZXN1bHRzKTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50Qmxv
Y2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRj
aEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENh
dGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlz
dCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgVG1wIGJ1ZmZlciA9IGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kOjpDYXRj
aCwgZGF0YSwgZXhjZXB0aW9uSW5kZXgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVHlwZSB0eXBlID0gc2ln
bmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBUeXBlZFRtcCB0bXAgPSB0bXBGb3JUeXBlKHR5
cGUpOworICAgICAgICBlbWl0TG9hZChidWZmZXIsIGkgKiBzaXplb2YodWludDY0X3QpLCB0bXAp
OworICAgICAgICByZXN1bHRzLmFwcGVuZCh0bXApOworICAgIH0KICAgICByZXR1cm4geyB9Owog
fQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJv
bFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFs
bFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGVtaXRDYXRjaEltcGwoQ2F0Y2hL
aW5kOjpDYXRjaEFsbCwgZGF0YSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpIC0+IFBhcnRp
YWxSZXN1bHQKK1RtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjaEtpbmQga2lu
ZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4KQogewotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICBtX2N1cnJl
bnRCbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIG1fY2F0Y2hFbnRyeXBvaW50cy5hcHBl
bmQobV9jdXJyZW50QmxvY2spOworCisgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSkg
eworICAgICAgICBpZiAoa2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoKQorICAgICAgICAgICAgZGF0
YS5jb252ZXJ0VHJ5VG9DYXRjaCgrK21fY2FsbFNpdGVJbmRleCwgZzY0KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoQWxsKCsrbV9jYWxsU2l0ZUlu
ZGV4LCBnNjQoKSk7CisgICAgfQorICAgIC8vIFdlIGNvbnZlcnQgZnJvbSAidHJ5IiB0byAiY2F0
Y2giIENvbnRyb2xUeXBlIGFib3ZlLiBUaGlzIGRvZXNuJ3QKKyAgICAvLyBoYXBwZW4gaWYgQ29u
dHJvbFR5cGUgaXMgYWxyZWFkeSBhICJjYXRjaCIuIFRoaXMgY2FuIGhhcHBlbiB3aGVuCisgICAg
Ly8gd2UgaGF2ZSBtdWx0aXBsZSBjYXRjaGVzIGxpa2UgInRyeSB7fSBjYXRjaChBKXt9IGNhdGNo
KEIpe30uLi5DYXRjaEFsbChFKXt9Ii4KKyAgICAvLyBXZSBqdXN0IGNvbnZlcnQgdGhlIGZpcnN0
IENvbnRyb2xUeXBlIHRvIGEgY2F0Y2gsIHRoZW4gdGhlIG90aGVycyB3aWxsCisgICAgLy8gdXNl
IGl0cyBmaWVsZHMuCisgICAgQVNTRVJUKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKTsK
KworICAgIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlID0ga2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNo
ID8gSGFuZGxlclR5cGU6OkNhdGNoIDogSGFuZGxlclR5cGU6OkNhdGNoQWxsOworICAgIG1fZXhj
ZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlclR5cGUsIGRhdGEudHJ5U3RhcnQoKSwgZGF0
YS50cnlFbmQoKSwgMCwgbV90cnlDYXRjaERlcHRoLCBleGNlcHRpb25JbmRleCB9KTsKKworICAg
IHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZ
ZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2spOworCisg
ICAgdW5zaWduZWQgaW5kZXhJbkJ1ZmZlciA9IDA7CisgICAgYXV0byBsb2FkRnJvbVNjcmF0Y2hC
dWZmZXIgPSBbJl0gKFR5cGVkVG1wIHJlc3VsdCkgeworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0g
c2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4SW5CdWZmZXI7CisgICAgICAgICsraW5kZXhJbkJ1ZmZl
cjsKKyAgICAgICAgVG1wIGJ1ZmZlclB0ciA9IFRtcChHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgICAgICBlbWl0TG9hZChidWZmZXJQdHIsIG9mZnNldCwgcmVzdWx0KTsKKyAgICB9OworICAg
IGZvckVhY2hMaXZlVmFsdWUoWyZdIChUeXBlZFRtcCB0bXApIHsKKyAgICAgICAgLy8gV2Ugc2V0
IG91ciBjdXJyZW50IENvbnRyb2xFbnRyeSdzIGV4Y2VwdGlvbiBiZWxvdyBhZnRlciB0aGUgcGF0
Y2hwb2ludCwgaXQncworICAgICAgICAvLyBub3QgaW4gdGhlIGluY29taW5nIGJ1ZmZlciBvZiBs
aXZlIHZhbHVlcy4KKyAgICAgICAgYXV0byB0b0lnbm9yZSA9IGRhdGEuZXhjZXB0aW9uKCk7Cisg
ICAgICAgIGlmICh0bXAudG1wKCkgIT0gdG9JZ25vcmUudG1wKCkpCisgICAgICAgICAgICBsb2Fk
RnJvbVNjcmF0Y2hCdWZmZXIodG1wKTsKKyAgICB9KTsKKworICAgIEIzOjpQYXRjaHBvaW50VmFs
dWUqIHBhdGNoID0gYWRkUGF0Y2hwb2ludChtX3Byb2MuYWRkVHVwbGUoeyBCMzo6cG9pbnRlclR5
cGUoKSwgQjM6OnBvaW50ZXJUeXBlKCkgfSkpOworICAgIHBhdGNoLT5lZmZlY3RzLmV4aXRzU2lk
ZXdheXMgPSB0cnVlOworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKSk7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlckxhdGUgPSBSZWdpc3RlclNl
dDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoY2xvYmJlckxhdGUp
OworICAgIHBhdGNoLT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6OlZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBwYXRjaC0+cmVzdWx0Q29uc3RyYWludHMu
YXBwZW5kKEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSMikpOworICAg
IHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0Lm1vdmUocGFy
YW1zWzJdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpKTsKKyAgICAgICAg
fSk7CisgICAgfSk7CisKKyAgICBUbXAgZXhjZXB0aW9uID0gVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICBUbXAgYnVmZmVyID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7
CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBWZWN0b3I8VG1wLCA4
Pjo6ZnJvbShleGNlcHRpb24sIGJ1ZmZlciksIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgMT46OmZy
b20oaW5zdGFuY2VWYWx1ZSgpKSk7CisgICAgYXBwZW5kKE1vdmUsIGV4Y2VwdGlvbiwgZGF0YS5l
eGNlcHRpb24oKSk7CisKKyAgICByZXR1cm4gYnVmZmVyOwogfQogCi1hdXRvIEFpcklSR2VuZXJh
dG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRy
b2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gYWRkRGVsZWdhdGVU
b1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYg
ZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuc2lnbmVkIHRhcmdldERlcHRoID0gMDsK
KyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5KHRhcmdldCkpCisgICAgICAgIHRhcmdldERlcHRo
ID0gdGFyZ2V0LnRyeURlcHRoKCk7CisKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7
IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgZGF0YS50cnlTdGFydCgpLCArK21fY2FsbFNpdGVJbmRl
eCwgMCwgbV90cnlDYXRjaERlcHRoLCB0YXJnZXREZXB0aCB9KTsKICAgICByZXR1cm4geyB9Owog
fQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRl
eCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSog
cGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJt
aW5hbCA9IHRydWU7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVn
aXN0ZXJzRm9ySlNDYWxsKCkpOworCisgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCA4PiBwYXRj
aEFyZ3M7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcChpbnN0YW5jZVZhbHVl
KCksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKyAgICBwYXRj
aEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcGF0Y2hBcmdz
LmFwcGVuZChDb25zdHJhaW5lZFRtcChhcmdzW2ldLCBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1l
bnQoaSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSk7CisKKyAgICBQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaCwg
cGF0Y2hBcmdzKTsKKworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGV4Y2VwdGlvbklu
ZGV4LCBoYW5kbGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFy
YW1zLCB0aGlzKTsKKyAgICAgICAgZW1pdFRocm93SW1wbChqaXQsIGV4Y2VwdGlvbkluZGV4KTsg
CisgICAgfSk7CisKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFRt
cCgpLCBXVEZNb3ZlKHBhdGNoQXJncykpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0
aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250
cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIEIzOjpQYXRjaHBvaW50VmFs
dWUqIHBhdGNoID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgcGF0Y2gtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworICAgIHBhdGNoLT5l
ZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKworICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgMz4g
cGF0Y2hBcmdzOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoaW5zdGFuY2VW
YWx1ZSgpLCBCMzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7CisgICAg
cGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcChUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpLCBCMzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAg
cGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcChkYXRhLmV4Y2VwdGlvbigpLCBCMzo6VmFs
dWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjIpKSk7CisKKyAgICBQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRj
aCwgcGF0Y2hBcmdzKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGVdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKyAg
ICAgICAgZW1pdFJldGhyb3dJbXBsKGppdCk7CisgICAgfSk7CisKKyAgICBlbWl0UGF0Y2hwb2lu
dChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFRtcCgpLCBXVEZNb3ZlKHBhdGNoQXJncykpOworCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMzIwOSw3ICszNDgxLDggQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZQogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJs
b2NrVHlwZTo6SWYpIHsKICAgICAgICAgYXBwZW5kKGRhdGEuc3BlY2lhbCwgSnVtcCk7CiAgICAg
ICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29ycyhtX2N1cnJlbnRCbG9jayk7Ci0gICAgfQor
ICAgIH0gZWxzZSBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBkYXRh
LmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2gpCisgICAgICAgIC0tbV90cnlDYXRjaERl
cHRoOwogCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKSB7CiAg
ICAgICAgIG1fb3V0ZXJMb29wcy5yZW1vdmVMYXN0KCk7CkBAIC0zMjMzLDcgKzM1MDYsNyBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotQjM6OlBhdGNocG9pbnRWYWx1ZSogQWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hw
b2ludChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0
IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3Rv
cjxDb25zdHJhaW5lZFRtcD4mJiBwYXRjaEFyZ3MpCitzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRW
YWx1ZSosIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IEFpcklSR2VuZXJhdG9yOjplbWl0Q2Fs
bFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdz
LCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJncykKIHsKICAgICBhdXRvKiBwYXRjaHBv
aW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKSk7CiAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMzI1OCw4ICszNTMxLDkg
QEAgQjM6OlBhdGNocG9pbnRWYWx1ZSogQWlySVJHZW5lcmF0b3I6OmVtaQogICAgICAgICAgICAg
cmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKEIzOjpWYWx1ZVJlcCh2YWx1ZUxvY2F0aW9uKSk7CiAg
ICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnRzID0gV1RGTW92ZShyZXN1bHRDb25z
dHJhaW50cyk7CiAgICAgfQorICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgZXhjZXB0aW9u
SGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQsIHBhdGNo
QXJncyk7CiAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdHMsIFdU
Rk1vdmUocGF0Y2hBcmdzKSk7Ci0gICAgcmV0dXJuIHBhdGNocG9pbnQ7CisgICAgcmV0dXJuIHsg
cGF0Y2hwb2ludCwgZXhjZXB0aW9uSGFuZGxlIH07CiB9CiAKIGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+
IFBhcnRpYWxSZXN1bHQKQEAgLTMyOTUsMTQgKzM1NjksMTcgQEAgYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkQ2FsbCh1aW50MzJfdCBmdQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyhpc1dhc21CbG9jaywgaXNFbWJlZGRlckJsb2NrKTsKIAogICAgICAgICB7Ci0gICAgICAg
ICAgICBhdXRvKiBwYXRjaHBvaW50ID0gZW1pdENhbGxQYXRjaHBvaW50KGlzV2FzbUJsb2NrLCBz
aWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MpOworICAgICAgICAgICAgYXV0byBwYWlyID0gZW1pdENh
bGxQYXRjaHBvaW50KGlzV2FzbUJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MpOworICAg
ICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICBhdXRv
IGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIuc2Vjb25kOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBi
ZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxs
eSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMg
Y2hlY2tpbmcuCiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8g
dGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKIAotICAgICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25J
bmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
ewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0
LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
ID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5k
ZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMzMyMSwxMyAr
MzU5OCwxNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1CiAKICAg
ICAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4ganVtcEFyZ3M7CiAgICAgICAgICAgICBq
dW1wQXJncy5hcHBlbmQoeyBqdW1wRGVzdGluYXRpb24sIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyIH0pOwotICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGVtaXRDYWxsUGF0Y2hwb2lu
dChpc0VtYmVkZGVyQmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncywgV1RGTW92ZShqdW1w
QXJncykpOworICAgICAgICAgICAgYXV0byBwYWlyID0gZW1pdENhbGxQYXRjaHBvaW50KGlzRW1i
ZWRkZXJCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzLCBXVEZNb3ZlKGp1bXBBcmdzKSk7
CisgICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gcGFpci5maXJzdDsKKyAgICAgICAgICAg
IGF1dG8gZXhjZXB0aW9uSGFuZGxlID0gcGFpci5zZWNvbmQ7CisKICAgICAgICAgICAgIC8vIFdl
IG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2Ug
bWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCiAgICAgICAgICAgICAvLyBXZSBwZXNzaW1p
c3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMg
Ym91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZl
IHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIx
ODEKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAg
ICAgZXhjZXB0aW9uSGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAg
ICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1bHRDb3VudChwYXJhbXMu
dmFsdWUoKS0+dHlwZSgpKV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAgICAgICB9
KTsKIApAQCAtMzMzOSwxMiArMzYyMCwxNSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxs
KHVpbnQzMl90IGZ1CiAgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90
aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91
ciBNZW1vcnkuCiAgICAgICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVD
YWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGN1cnJlbnRJbnN0YW5jZSwgY29u
dGludWF0aW9uKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gZW1p
dENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3Mp
OworICAgICAgICBhdXRvIHBhaXIgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ss
IHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBw
YWlyLmZpcnN0OworICAgICAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIuc2Vjb25kOwog
ICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgdGhlIHNpemUgcmVnaXN0ZXIgc2luY2UgdGhl
IExMSW50IGFsd2F5cyBib3VuZHMgY2hlY2tzCiAgICAgICAgIGlmIChtX21vZGUgPT0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nIHx8IG1faW5mby5tZW1vcnkuaXNTaGFyZWQoKSkKICAgICAgICAgICAg
IHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0IHsgUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKS5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3RlciB9KTsKLSAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Cisg
ICAgICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwog
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNo
YWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5j
dGlvbkluZGV4IH0pOwpAQCAtMzUyMyw3ICszODA3LDkgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6
ZW1pdEluZGlyZWN0Q2FsbChUeQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1
cmUucmV0dXJuQ291bnQoKTsgKytpKQogICAgICAgICByZXN1bHRzLmFwcGVuZCh0bXBGb3JUeXBl
KHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKSk7CiAKLSAgICBhdXRvKiBwYXRjaHBvaW50ID0gZW1p
dENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3Ms
IFdURk1vdmUoZXh0cmFBcmdzKSk7CisgICAgYXV0byBwYWlyID0gZW1pdENhbGxQYXRjaHBvaW50
KG1fY3VycmVudEJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MsIFdURk1vdmUoZXh0cmFB
cmdzKSk7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IHBhaXIuZmlyc3Q7CisgICAgYXV0byBleGNl
cHRpb25IYW5kbGUgPSBwYWlyLnNlY29uZDsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBh
bGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0
aGUgaW5zdGFuY2UuCiAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdh
eXMgY2FsbGluZyBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcgc28KQEAgLTM1MzUs
NiArMzgyMSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVHkKIAog
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBleGNl
cHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICBqaXQuY2Fs
bChwYXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1bHRDb3VudChwYXJhbXMudmFsdWUoKS0+dHlwZSgp
KV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgfSk7CiAKQEAgLTM1OTUsNyArMzg4Miw4
IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW8KICAgICBjb21waWxh
dGlvbkNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBl
cnM+KCk7CiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVu
aXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAKLSAgICBCMzo6UHJvY2VkdXJlIHByb2NlZHVyZTsKKyAg
ICBjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlID0gbWFrZVVuaXF1ZTxCMzo6UHJvY2VkdXJl
PigpOworICAgIGF1dG8mIHByb2NlZHVyZSA9ICpjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJl
OwogICAgIENvZGUmIGNvZGUgPSBwcm9jZWR1cmUuY29kZSgpOwogCiAgICAgcHJvY2VkdXJlLnNl
dE9yaWdpblByaW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIEIzOjpPcmlnaW4gb3JpZ2luKSB7
CkBAIC0zNjE1LDI1ICszOTAzLDI3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW8KICAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2Vu
ZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25h
dHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2Uo
KSk7CiAKKyAgICBpckdlbmVyYXRvci5maW5hbGl6ZUVudHJ5cG9pbnRzKCk7CiAKICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKICAgICAgICAgICAgIGJsb2NrLT5zdWNj
ZXNzb3JCbG9jayhpKS0+YWRkUHJlZGVjZXNzb3IoYmxvY2spOwogICAgIH0KIAotICAgIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzOjpBaXJNb2RlKSkp
IHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiR2VuZXJhdGVkIHBhdGNocG9pbnRzIik7Ci0gICAg
ICAgICAgICBmb3IgKEIzOjpQYXRjaHBvaW50VmFsdWUqKiBwYXRjaCA6IGlyR2VuZXJhdG9yLnBh
dGNocG9pbnRzKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKGRlZXBEdW1wKHByb2NlZHVy
ZSwgKnBhdGNoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBCMzo6QWlyOjpwcmVwYXJlRm9yR2Vu
ZXJhdGlvbihjb2RlKTsKLSAgICAgICAgQjM6OkFpcjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0
aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7Ci0gICAgICAgIGNvbXBpbGF0aW9uQ29udGV4
dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMo
KTsKLSAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2Rl
LmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgIGlmIChVTkxJS0VMWShzaG91
bGREdW1wSVJBdEVhY2hQaGFzZShCMzo6QWlyTW9kZSkpKSB7CisgICAgICAgIGRhdGFMb2dMbigi
R2VuZXJhdGVkIHBhdGNocG9pbnRzIik7CisgICAgICAgIGZvciAoQjM6OlBhdGNocG9pbnRWYWx1
ZSoqIHBhdGNoIDogaXJHZW5lcmF0b3IucGF0Y2hwb2ludHMoKSkKKyAgICAgICAgICAgIGRhdGFM
b2dMbihkZWVwRHVtcChwcm9jZWR1cmUsICpwYXRjaCkpOwogICAgIH0KIAorICAgIEIzOjpBaXI6
OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOworICAgIEIzOjpBaXI6OmdlbmVyYXRlKGNvZGUs
ICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOworCisgICAgY29tcGlsYXRp
b25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlw
cm9kdWN0cygpOworICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0g
Y29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICByZXN1bHQtPnN0YWNr
bWFwcyA9IGlyR2VuZXJhdG9yLnRha2VTdGFja21hcHMoKTsKKyAgICByZXN1bHQtPmV4Y2VwdGlv
bkhhbmRsZXJzID0gaXJHZW5lcmF0b3IudGFrZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CisKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC01MTc4LDYgKzU0NjgsMjQgQEAgdGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcAogICAgIHJldHVybiB7IH07CiB9CiAKK3RlbXBsYXRl
IDxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CitQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIEFpcklS
R2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoQjM6OlBhdGNocG9pbnRW
YWx1ZSogcGF0Y2gsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lQ2FwYWNpdHk+JiBhcmdz
KQoreworICAgICsrbV9jYWxsU2l0ZUluZGV4OworICAgIGlmICghbV90cnlDYXRjaERlcHRoKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgdW5zaWduZWQgbnVtTGl2ZVZhbHVlcyA9IDA7Cisg
ICAgZm9yRWFjaExpdmVWYWx1ZShbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgKytudW1MaXZlVmFs
dWVzOworICAgICAgICBhcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh0bXAsIEIzOjpWYWx1ZVJl
cDo6TGF0ZUNvbGRBbnkpKTsKKyAgICB9KTsKKworICAgIHBhdGNoLT5lZmZlY3RzLmV4aXRzU2lk
ZXdheXMgPSB0cnVlOworCisgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgeyBt
X2NhbGxTaXRlSW5kZXgsIG51bUxpdmVWYWx1ZXMgfTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDI4NzczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJX
YXNtQ29udGV4dElubGluZXMuaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2lu
Y2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgorI2luY2x1ZGUgIldhc21JUkdlbmVyYXRvckhl
bHBlcnMuaCIKICNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5
LmgiCiAjaW5jbHVkZSAiV2FzbU9TUkVudHJ5RGF0YS5oIgpAQCAtODcsMTYgKzg4LDYgQEAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIH0KIAotY2xhc3MgQjNJUkdl
bmVyYXRvcjsKLXN0cnVjdCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHsKLSAgICB2b2lkIGdl
bmVyYXRlKENDYWxsSGVscGVycyYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
LCBCM0lSR2VuZXJhdG9yKikgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IHNfaW52YWxpZENhbGxTaXRlSW5kZXggPSAgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpOwotCi0gICAgdW5zaWduZWQgbV9jYWxsU2l0ZUluZGV4IHsgc19pbnZhbGlkQ2FsbFNp
dGVJbmRleCB9OwotICAgIHVuc2lnbmVkIG1fbnVtTGl2ZVZhbHVlczsKLX07Ci0KIGNsYXNzIEIz
SVJHZW5lcmF0b3IgewogcHVibGljOgogICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmFyaWFi
bGUqOwpAQCAtNTc4LDIxICs1NjksNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxVbmxpbmtlZEhh
bmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAotdm9pZCBQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlOjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCBCM0lSR2VuZXJhdG9yKiBnZW5lcmF0b3IpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fY2FsbFNpdGVJbmRleCA9PSBzX2ludmFsaWRDYWxsU2l0ZUluZGV4
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdGFja01hcCB2YWx1ZXMobV9udW1MaXZlVmFsdWVz
KTsKLSAgICB1bnNpZ25lZCBwYXJhbXNPZmZzZXQgPSBwYXJhbXMuc2l6ZSgpIC0gbV9udW1MaXZl
VmFsdWVzOwotICAgIHVuc2lnbmVkIGNoaWxkcmVuT2Zmc2V0ID0gcGFyYW1zLnZhbHVlKCktPm51
bUNoaWxkcmVuKCkgLSBtX251bUxpdmVWYWx1ZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fbnVtTGl2ZVZhbHVlczsgKytpKQotICAgICAgICB2YWx1ZXNbaV0gPSBPU1JFbnRyeVZh
bHVlKHBhcmFtc1tpICsgcGFyYW1zT2Zmc2V0XSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGkgKyBj
aGlsZHJlbk9mZnNldCktPnR5cGUoKSk7Ci0KLSAgICBnZW5lcmF0b3ItPmFkZFN0YWNrTWFwKG1f
Y2FsbFNpdGVJbmRleCwgV1RGTW92ZSh2YWx1ZXMpKTsKLSAgICBqaXQuc3RvcmUzMihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihtX2NhbGxTaXRlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OnRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwotfQotCiAvLyBN
ZW1vcnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0
cywgd2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgogaW50MzJf
dCBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVlKiYgcHRyLCB1aW50
MzJfdCBvZmZzZXQpCiB7CkBAIC04NTcsNTYgKzgzMywxMyBAQCBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6ZnJhbWVQb2ludGVyKCkKICAgICByZXR1cm4gbV9mcmFtZVBvaW50ZXI7CiB9CiAKLXN0YXRp
YyB2b2lkIGJ1aWxkRW50cnlCdWZmZXJGb3JDYXRjaChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsK
LSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5k
ZXgoKTsKLSAgICBPcHRpbWl6aW5nSklUQ2FsbGVlKiBjYWxsZWUgPSBiaXR3aXNlX2Nhc3Q8T3B0
aW1pemluZ0pJVENhbGxlZSo+KGNhbGxGcmFtZS0+Y2FsbGVlKCkuYXNXYXNtQ2FsbGVlKCkpOwot
ICAgIGNvbnN0IFN0YWNrTWFwJiBzdGFja21hcCA9IGNhbGxlZS0+c3RhY2ttYXAoY2FsbFNpdGVJ
bmRleCk7Ci0gICAgVk0qIHZtID0gY29udGV4dC5ncHI8Vk0qPihHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgdWludDY0X3QqIGJ1ZmZlciA9IHZtLT53YXNtQ29udGV4dC5zY3JhdGNoQnVmZmVyRm9yU2l6
ZShzdGFja21hcC5zaXplKCkgKiA4KTsKLSAgICBsb2FkVmFsdWVzSW50b0J1ZmZlcihjb250ZXh0
LCBzdGFja21hcCwgYnVmZmVyKTsKLQotICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50
R1BSMCkgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihidWZmZXIpOwotfQotCiB2b2lkIEIzSVJH
ZW5lcmF0b3I6Omluc2VydEVudHJ5U3dpdGNoKCkKIHsKICAgICBtX3Byb2Muc2V0TnVtRW50cnlw
b2ludHMobV9yb290QmxvY2tzLnNpemUoKSk7CiAKICAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVH
ZW5lcmF0b3I+IGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpB
aXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6
OkFpcjo6Q29kZSYgY29kZSkgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0KLSAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxpbmcgcHJlY2lzZSBhbGxvY2F0aW9ucyBp
biBXYXNtQjNJUkdlbmVyYXRvciBjYXRjaCBlbnRyeXBvaW50cyBtaWdodCBiZSB1bm5lY2Vzc2Fy
eQotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMTIxMwotICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOwot
ICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2Vk
QmxvY2s6OmJsb2NrTWFzayksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgTWFya2VkQmxvY2s6Om9m
ZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKLQot
ICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7Ci0gICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFByZWNp
c2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAt
IFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0KLSAg
ICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKLSAgICAgICAgfQotICAgICAgICBqaXQu
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUklu
Zm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMyk7Ci0KLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zm
c2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgVk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCgpKSk7Ci0gICAgICAgIGppdC5l
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSk7Ci0KLSAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOwotICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZN
OjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7Ci0KLSAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVT
bG90Ojp0aGlzQXJndW1lbnQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDMpOwot
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwgR1BSSW5mbzo6cmVn
VDMpOwotICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OnJlZ1Qz
KTsKLQotICAgICAgICBqaXQucHJvYmUodGFnQ0Z1bmN0aW9uPEpJVFByb2JlUHRyVGFnPihidWls
ZEVudHJ5QnVmZmVyRm9yQ2F0Y2gpLCBudWxscHRyKTsKLQotICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
ICAgICBlbWl0Q2F0Y2hQcm9sb2d1ZVNoYXJlZChjb2RlLCBqaXQpOwogICAgIH0pOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fcm9vdEJsb2Nrcy5zaXplKCk7ICsraSkKQEAgLTI2
NTIsNiArMjU4NSwxMCBAQCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRj
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRhdGEuY29udmVydFRyeVRvQ2F0Y2hBbGwoKytt
X2NhbGxTaXRlSW5kZXgsIG1fcHJvYy5hZGRWYXJpYWJsZShwb2ludGVyVHlwZSgpKSk7CiAgICAg
fQorICAgIC8vIFdlIGNvbnZlcnQgZnJvbSAidHJ5IiB0byAiY2F0Y2giIENvbnRyb2xUeXBlIGFi
b3ZlLiBUaGlzIGRvZXNuJ3QKKyAgICAvLyBoYXBwZW4gaWYgQ29udHJvbFR5cGUgaXMgYWxyZWFk
eSBhICJjYXRjaCIuIFRoaXMgY2FuIGhhcHBlbiB3aGVuCisgICAgLy8gd2UgaGF2ZSBtdWx0aXBs
ZSBjYXRjaGVzIGxpa2UgInRyeSB7fSBjYXRjaChBKXt9IGNhdGNoKEIpe30uLi5DYXRjaEFsbChF
KXt9IgorICAgIEFTU0VSVChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSk7CiAKICAgICBI
YW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRs
ZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsKICAgICBtX2V4Y2VwdGlvbkhh
bmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5k
KCksIDAsIG1fdHJ5Q2F0Y2hEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7CkBAIC0yNzIyLDMwICsy
NjU5LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleAogICAgIFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNl
cHRpb25zKG1fY3VycmVudEJsb2NrLCBwYXRjaCk7CiAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihb
dGhpcywgZXhjZXB0aW9uSW5kZXgsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKICAgICAgICAg
aGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKLQotICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8g
cHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpO
b25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2Nh
dGlvbjo6aGFsZkFsaWdubWVudCkpOwotICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOwotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtl
ZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0o
KSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsK
LQotICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7Ci0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFs
bG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJl
Y2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOwotCi0gICAgICAgICAgICBs
b2FkZWRDYXNlLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7Ci0KLSAgICAgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGNlcHRpb25JbmRleCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotICAgICAg
ICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0
clRhZyk7Ci0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJvdykpOwotICAgICAgICB9KTsKKyAgICAg
ICAgZW1pdFRocm93SW1wbChqaXQsIGV4Y2VwdGlvbkluZGV4KTsgCiAgICAgfSk7CiAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZChwYXRjaCk7CiAKQEAgLTI3NjMsMjggKzI2NzgsOCBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZFJldGhyb3codW5zaWduZWQsCiAgICAgUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJy
ZW50QmxvY2ssIHBhdGNoKTsKICAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGVd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLQotICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNl
cnZlZE5vbkFyZ3VtZW50R1BSMDsKLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSks
IHNjcmF0Y2gpOwotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9u
Q2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaCwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1l
bnQpKTsKLSAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZG
b290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7Ci0KLSAgICAgICAgICAgIHBy
ZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFByZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRP
ZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNpc2VBbGxvY2F0aW9uOjpo
ZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKLQotICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZq
aXQpOwotICAgICAgICB9Ci0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOwotCiAgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShq
aXQsIHBhcmFtcywgdGhpcyk7Ci0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0
LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKLSAgICAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwotICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25X
YXNtUmV0aHJvdykpOwotICAgICAgICB9KTsKKyAgICAgICAgZW1pdFJldGhyb3dJbXBsKGppdCk7
CiAgICAgfSk7CiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChwYXRjaCk7CiAKQEAgLTMzMjAs
MjYgKzMyMTUsNiBAQCB2b2lkIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChDb21waWxhdGlvCiAg
ICAgfQogfQogCi12b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25z
dCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiBj
b250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQotewotICAgIGlmICghY29udGV4dC5wcm9j
ZWR1cmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9
IDA7Ci0gICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSBjb250ZXh0LnByb2NlZHVyZS0+bnVt
RW50cnlwb2ludHMoKTsKLSAgICBmb3IgKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRs
ZXJJbmZvIDogZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGVudHJ5cG9pbnRJbmRleCA8IG51bUVudHJ5cG9pbnRzKTsKLSAgICAgICAgaWYgKGhh
bmRsZXJJbmZvLm1fdHlwZSA9PSBIYW5kbGVyVHlwZTo6RGVsZWdhdGUpIHsKLSAgICAgICAgICAg
IGhhbmRsZXJzLmFwcGVuZCh7IH0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICArK2VudHJ5cG9pbnRJbmRleDsKLSAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGxp
bmtCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihjb250ZXh0LnByb2Nl
ZHVyZS0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKSk7Ci0gICAgfQot
ICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9pbnRJbmRleCA9PSBudW1FbnRyeXBvaW50cyAtIDEp
OwotfQotCiAvLyBDdXN0b20gd2FzbSBvcHMuIFRoZXNlIGFyZSB0aGUgb25lcyB0b28gbWVzc3kg
dG8gZG8gaW4gd2FzbS5qc29uLgogCiB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JN
b2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjg3NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBzdHJ1Y3QgQ29t
cGlsYXRpb25Db250ZXh0IHsKIAogRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25z
dCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCog
PSBudWxscHRyKTsKIAotdm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0
b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5kbGVycywg
Y29uc3QgSW50ZXJuYWxGdW5jdGlvbiosIGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYsIExpbmtC
dWZmZXImKTsKIHZvaWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2luTWFwKENvbXBpbGF0aW9uQ29udGV4
dCYsIExpbmtCdWZmZXImKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI4Nzcz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNs
dWRlICJXYXNtQ2FsbGVlR3JvdXAuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIK
KyNpbmNsdWRlICJXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25h
dHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgpAQCAtMjAzLDggKzIwNCw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiBCQlFQbGEKICAgICBib29sIGZvcmNlVXNpbmdCMyA9IGZhbHNlOwogICAgIGlm
IChPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSAmJiBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5jb2RlU2VjdGlvblNpemUgPj0gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJN
b2RlVGhyZXNob2xkKCkpCiAgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7Ci0gICAgZWxzZSBp
ZiAoIW1fbW9kdWxlSW5mb3JtYXRpb24tPm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5x
dWlja0dldChmdW5jdGlvbkluZGV4KSkKLSAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKICAg
ICBlbHNlIGlmICghT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkKICAgICAgICAgZm9yY2VVc2lu
Z0IzID0gdHJ1ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlSR2Vu
ZXJhdG9ySGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21JUkdlbmVyYXRvckhlbHBlcnMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKKworI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIlByb2JlQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2Uu
aCIKKyNpbmNsdWRlICJXYXNtT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20geworCitzdHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcj4KKyAgICB2b2lkIGdlbmVyYXRlKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIEdlbmVy
YXRvciogZ2VuZXJhdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fY2FsbFNpdGVJbmRl
eCA9PSBzX2ludmFsaWRDYWxsU2l0ZUluZGV4KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIFN0YWNrTWFwIHZhbHVlcyhtX251bUxpdmVWYWx1ZXMpOworICAgICAgICB1bnNpZ25lZCBw
YXJhbXNPZmZzZXQgPSBwYXJhbXMuc2l6ZSgpIC0gbV9udW1MaXZlVmFsdWVzOworICAgICAgICB1
bnNpZ25lZCBjaGlsZHJlbk9mZnNldCA9IHBhcmFtcy52YWx1ZSgpLT5udW1DaGlsZHJlbigpIC0g
bV9udW1MaXZlVmFsdWVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1M
aXZlVmFsdWVzOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBPU1JFbnRyeVZhbHVlKHBh
cmFtc1tpICsgcGFyYW1zT2Zmc2V0XSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGkgKyBjaGlsZHJl
bk9mZnNldCktPnR5cGUoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLT5hZGRTdGFja01hcChtX2Nh
bGxTaXRlSW5kZXgsIFdURk1vdmUodmFsdWVzKSk7CisgICAgICAgIGppdC5zdG9yZTMyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRleCksIENDYWxsSGVscGVyczo6dGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgfQor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2ludmFsaWRDYWxsU2l0ZUluZGV4ID0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworCisgICAgdW5zaWduZWQgbV9j
YWxsU2l0ZUluZGV4IHsgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCB9OworICAgIHVuc2lnbmVkIG1f
bnVtTGl2ZVZhbHVlczsKK307CisKKworc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwg
Y29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KQoreworICAgIGlmICghY29udGV4dC5wcm9jZWR1cmUpCisgICAgICAgIHJldHVybjsKKworICAg
IHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2lu
dHMgPSBjb250ZXh0LnByb2NlZHVyZS0+bnVtRW50cnlwb2ludHMoKTsKKyAgICBmb3IgKGNvbnN0
IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXJJbmZvIDogZnVuY3Rpb24tPmV4Y2VwdGlvbkhh
bmRsZXJzKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9pbnRJbmRleCA8IG51bUVu
dHJ5cG9pbnRzKTsKKyAgICAgICAgaWYgKGhhbmRsZXJJbmZvLm1fdHlwZSA9PSBIYW5kbGVyVHlw
ZTo6RGVsZWdhdGUpIHsKKyAgICAgICAgICAgIGhhbmRsZXJzLmFwcGVuZCh7IH0pOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICArK2VudHJ5cG9pbnRJbmRleDsK
KyAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPihjb250ZXh0LnByb2NlZHVyZS0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbChl
bnRyeXBvaW50SW5kZXgpKSk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9pbnRJ
bmRleCA9PSBudW1FbnRyeXBvaW50cyAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW1p
dFJldGhyb3dJbXBsKENDYWxsSGVscGVycyYgaml0KQoreworICAgIC8vIEluc3RhbmNlIGluIGFy
Z3VtZW50R1BSMAorICAgIC8vIGZyYW1lIHBvaW50ZXIgaW4gYXJndW1lbnRHUFIxCisgICAgLy8g
ZXhjZXB0aW9uIHBvaW50ZXIgaW4gYXJndW1lbnRHUFIyCisKKyAgICBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKKyAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgeworICAgICAgICBhdXRvIHByZWNpc2VBbGxv
Y2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2Ny
YXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZB
bGlnbm1lbnQpKTsKKyAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOworICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9v
dGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7CisgICAg
ICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgcHJlY2lzZUFsbG9j
YXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBX
ZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwg
c2NyYXRjaCk7CisKKyAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgIH0KKyAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3JhdGNo
KTsKKworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRy
VGFnKTsKKyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9u
SGFuZGxlclB0clRhZyk7CisgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgIH0pOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgZW1pdFRocm93SW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgdW5zaWdu
ZWQgZXhjZXB0aW9uSW5kZXgpCit7CisgICAgLy8gSW5zdGFuY2UgaW4gYXJndW1lbnRHUFIwCisg
ICAgLy8gZnJhbWUgcG9pbnRlciBpbiBhcmd1bWVudEdQUjEKKyAgICAvLyBhcmd1bWVudHMgdG8g
dGhlIGV4Y2VwdGlvbiBvZmYgb2Ygc3RhY2sgcG9pbnRlcgorCisgICAgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjA7CisgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSW5zdGFuY2U6Om9m
ZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgIHsKKyAgICAgICAgYXV0byBwcmVjaXNlQWxs
b2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNj
cmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxm
QWxpZ25tZW50KSk7CisgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoKTsKKyAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZv
b3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAg
ICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOworCisgICAgICAgIHByZWNpc2VBbGxv
Y2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsg
V2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSks
IHNjcmF0Y2gpOworCisgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKKyAgICB9CisgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRj
aCk7CisKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4Y2VwdGlv
bkluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAg
IGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRy
VGFnKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbldhc21UaHJvdykpOworICAgIH0pOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgYnVpbGRFbnRyeUJ1ZmZlckZvckNhdGNoKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KQor
eworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwor
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRl
eCgpOworICAgIE9wdGltaXppbmdKSVRDYWxsZWUqIGNhbGxlZSA9IGJpdHdpc2VfY2FzdDxPcHRp
bWl6aW5nSklUQ2FsbGVlKj4oY2FsbEZyYW1lLT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKSk7Cisg
ICAgY29uc3QgU3RhY2tNYXAmIHN0YWNrbWFwID0gY2FsbGVlLT5zdGFja21hcChjYWxsU2l0ZUlu
ZGV4KTsKKyAgICBWTSogdm0gPSBjb250ZXh0LmdwcjxWTSo+KEdQUkluZm86OnJlZ1QwKTsKKyAg
ICB1aW50NjRfdCogYnVmZmVyID0gdm0tPndhc21Db250ZXh0LnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHN0YWNrbWFwLnNpemUoKSAqIDgpOworICAgIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRleHQs
IHN0YWNrbWFwLCBidWZmZXIpOworCisgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBlbWl0Q2F0Y2hQcm9sb2d1ZVNoYXJlZChCMzo6QWlyOjpDb2RlJiBjb2RlLCBDQ2Fs
bEhlbHBlcnMmIGppdCkKK3sKKyAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgeworICAgICAgICAv
LyBGSVhNRTogSGFuZGxpbmcgcHJlY2lzZSBhbGxvY2F0aW9ucyBpbiBXYXNtQjNJUkdlbmVyYXRv
ciBjYXRjaCBlbnRyeXBvaW50cyBtaWdodCBiZSB1bm5lY2Vzc2FyeQorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEzCisgICAgICAgIGF1dG8g
cHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpO
b25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lz
ZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVy
OjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGF1dG8gbG9hZGVkQ2Fz
ZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmpp
dCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zm
c2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIEdQUkluZm86OnJl
Z1QwKTsKKworICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgfQorICAgIGppdC5y
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5m
bzo6cmVnVDAsIEdQUkluZm86OnJlZ1QzKTsKKworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCgp
KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCgpKSk7CisgICAgaml0LmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKworICAg
IGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2Fs
bEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9m
ZnNldCgpKSk7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mSW5zdGFuY2UoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQuc3RvcmVXYXNtQ29udGV4
dEluc3RhbmNlKEdQUkluZm86OnJlZ1QzKTsKKworICAgIGppdC5wcm9iZSh0YWdDRnVuY3Rpb248
SklUUHJvYmVQdHJUYWc+KGJ1aWxkRW50cnlCdWZmZXJGb3JDYXRjaCksIG51bGxwdHIpOworCisg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUo
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3NzM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTU5LDkgKzU1OSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVC
bG9ja0dlbmVyYXQKICAgICBSRUxFQVNFX0FTU0VSVCh1c2VkQnVmZmVyLmNhcGFjaXR5KCkgPT0g
b2xkQ2FwYWNpdHkpOwogICAgICp0aHJlYWRTcGVjaWZpYyA9IFdURk1vdmUodXNlZEJ1ZmZlcik7
CiAKLSAgICBpZiAoIW1fdXNlc0V4Y2VwdGlvbnMpCi0gICAgICAgIG1faW5mby5tX2Z1bmN0aW9u
RG9lc05vdFVzZUV4Y2VwdGlvbnMucXVpY2tTZXQobV9mdW5jdGlvbkluZGV4KTsKLQogICAgIHJl
dHVybiBXVEZNb3ZlKG1fY29kZUJsb2NrKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgJKHJldmlzaW9uIDI4Nzcz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDYgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0
aW9uIDogcHVibGljIFRocmVhZAogCiAgICAgQml0VmVjdG9yIG1fZGVjbGFyZWRGdW5jdGlvbnM7
CiAgICAgQml0VmVjdG9yIG1fZGVjbGFyZWRFeGNlcHRpb25zOwotICAgIEJpdFZlY3RvciBtX2Z1
bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnM7CiAgICAgbXV0YWJsZSBCaXRWZWN0b3IgbV9yZWZl
cmVuY2VkRnVuY3Rpb25zOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjg3NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgi
CiAjaW5jbHVkZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiV2FzbUlSR2VuZXJh
dG9ySGVscGVycy5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvbi5oIgogI2luY2x1ZGUgIldh
c21TaWduYXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCShyZXZp
c2lvbiAyODc3MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21D
YWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgiCiAjaW5jbHVkZSAi
V2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uLmgiCiAjaW5j
bHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCShyZXZpc2lvbiAyODc3Mzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw2IEBAIGF1dG8gU3RyZWFtaW5nUGFyc2VyOjpw
YXJzZUNvZGVTZWN0aW9uU2kKICAgICBtX2Z1bmN0aW9uQ291bnQgPSBmdW5jdGlvbkNvdW50Owog
ICAgIG1fZnVuY3Rpb25JbmRleCA9IDA7CiAgICAgbV9jb2RlT2Zmc2V0ID0gbV9vZmZzZXQ7Ci0g
ICAgbV9pbmZvLT5tX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMuZW5zdXJlU2l6ZShmdW5j
dGlvbkNvdW50KTsKIAogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3Vu
dCBpcyB0b28gYmlnICIsIGZ1bmN0aW9uQ291bnQpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
ZnVuY3Rpb25Db3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24g
Y291bnQgIiwgZnVuY3Rpb25Db3VudCwgIiBleGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2Yg
ZnVuY3Rpb25zICIsIG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSk7Cg==
</data>
<flag name="commit-queue"
          id="474456"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448621</attachid>
            <date>2022-01-07 12:52:28 -0800</date>
            <delta_ts>2022-01-07 12:56:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>77691</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3Nzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDIyLTAxLTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBzdXBwb3J0IGZvciBXYXNtIGV4Y2VwdGlvbnMgaW4gdGhlIEFpciBnZW5lcmF0b3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vODQxMzI4NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgdG8gQWlyIGZv
ciBXYXNtIGV4Y2VwdGlvbnMuIFRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBpcyB2ZXJ5IHNp
bWlsYXIgdG8gaG93IHdlIGltcGxlbWVudCBpdCBpbiB0aGUgQjMgV2FzbSB0aWVyLiBUaGlzIHBh
dGNoCisgICAgICAgIHNoYXJlcyBjb2RlIHdpdGggdGhlIEIzIHRpZXIgd2hlcmUgaXQgY2FuLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIHdoZXJlIHlvdSB0
aGUgZWFybHkgY2xvYmJlcmVkIHJlZ2lzdGVycworICAgICAgICBvZiBhIHBhdGNocG9pbnQgY291
bGQgcHJldmVudCB0aGUgcHJpb3IgaW5zdHJ1Y3Rpb24gZnJvbSByZWdpc3RlciBhbGxvY2F0aW5n
LgorICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBoYXZlIHRoZSBpbnN0cnVjdGlvbnMgSTEs
IEkyLiBXaGVyZSBJMiBjbG9iYmVycyB0aGUKKyAgICAgICAgZW50aXJlIHJlZ2lzdGVyIGZpbGUu
IEl0IGRvZXNuJ3QgbWVhbiBJMSBzaG91bGRuJ3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorICAgICAg
ICByZWdpc3RlcnMuIEluc3RlYWQsIHRoZSBjbG9iYmVyIHNob3VsZCBvY2N1ciBhZnRlciBJMSBl
eGVjdXRlcy4gVGhpcyBwYXRjaAorICAgICAgICBmaXhlcyB0aGUgaXNzdWUuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGIz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXJh
dGUpOgorICAgICAgICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpDb250cm9sRGF0YSk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNUcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQ2F0Y2gpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmNvbnZlcnRU
cnlUb0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xE
YXRhOjpjb252ZXJ0VHJ5VG9DYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3RhcnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnRyeUVuZCBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5RGVwdGggY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2lu
ZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6ZXhjZXB0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmVtaXRDYWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRTdGFja01hcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjp0YWtl
U3RhY2ttYXBzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnRha2VFeGNl
cHRpb25IYW5kbGVycyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpuZXdU
bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdFBhdGNocG9pbnQp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZmluYWxpemVFbnRyeXBvaW50cyk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpmb3JFYWNoTGl2ZVZhbHVlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2spOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZENhdGNoQWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGREZWxlZ2F0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkVGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkUmV0aHJvdyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRF
bmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUFpcik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlv
bnMpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjppbnNlcnRFbnRyeVN3aXRjaCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlOjpnZW5lcmF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
OmJ1aWxkRW50cnlCdWZmZXJGb3JDYXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
OmNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAg
ICogd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpnZW5lcmF0ZSBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6ZW1pdFJldGhyb3dJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW1pdFRo
cm93SW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OmJ1aWxkRW50cnlCdWZmZXJGb3JDYXRjaCk6
CisgICAgICAgIChKU0M6Oldhc206OmVtaXRDYXRjaFByb2xvZ3VlU2hhcmVkKToKKyAgICAgICAg
KiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRp
b24uaDoKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKiB3YXNtL1dh
c21PU1JFbnRyeVBsYW4uY3BwOgorICAgICAgICAqIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VDb2RlU2VjdGlv
blNpemUpOgorCiAyMDIyLTAxLTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODc2OTguCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg3NzY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkU2NUExRTI3NjgyNzcxMDAy
QjRDMEEgLyogQjNFc3RpbWF0ZVN0YXRpY0V4ZWN1dGlvbkNvdW50cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFNjVBMUIyNzY4Mjc2MDAwMkI0QzBB
IC8qIEIzRXN0aW1hdGVTdGF0aWNFeGVjdXRpb25Db3VudHMuaCAqLzsgfTsKIAkJNTJFRUQ3OTQy
NDkyQjg3MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyog
RnVuY3Rpb25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgfTsKKwkJNTJGREFCQzMyNzg4MDc2QjAwQzE1QjU5IC8q
IFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyRkRBQkMyMjc4ODA3NjkwMEMxNUI1OSAvKiBXYXNtSVJHZW5lcmF0
b3JIZWxwZXJzLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0NSAvKiBVbmlmaWVk
U291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSAqLzsg
fTsKIAkJNTMwQTY2QkExRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwQTY2QjgxRkEz
RTc3RTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tICovOyB9OwogCQk1MzBBNjZCQjFG
QTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTUtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCNTFGQTNFNzdEMDAyNkE1NDUgLyog
VW5pZmllZFNvdXJjZTUtbW0ubW0gKi87IH07CkBAIC0zNzYwLDYgKzM3NjEsNyBAQAogCQk1MkVF
RDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJG
NkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkZEQUJDMjI3
ODgwNzY5MDBDMTVCNTkgLyogV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzMDA3NDBDMjJERDZGNjYwMEI5QUNCMyAvKiBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzBBNjM0MDFGQTNFMzFDMDAyNkE1NDUgLyogU291cmNlc0Nv
Y29hLnR4dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTb3VyY2VzQ29jb2EudHh0OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzBBNjM0MTFGQTNFMzFEMDAyNkE1NDUgLyogU291cmNl
cy50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU291cmNlcy50eHQ7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC03MzA1LDYgKzczMDcsNyBAQAogCQkJCUUzODM1MDA5MjM5MEQ5Mzcw
MDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggKi8sCiAJCQkJMTQ4NTIxRDUyNkVBRUJERjAwQ0MxRDFB
IC8qIFdhc21IYW5kbGVySW5mby5jcHAgKi8sCiAJCQkJMTQ4NTIxRDcyNkVBRUJGRTAwQ0MxRDFB
IC8qIFdhc21IYW5kbGVySW5mby5oICovLAorCQkJCTUyRkRBQkMyMjc4ODA3NjkwMEMxNUI1OSAv
KiBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggKi8sCiAJCQkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdG
RjgyIC8qIFdhc21JbmRleE9yTmFtZS5jcHAgKi8sCiAJCQkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdG
RjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovLAogCQkJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FB
RiAvKiBXYXNtSW5zdGFuY2UuY3BwICovLApAQCAtMTExNjAsNiArMTExNjMsNyBAQAogCQkJCUUz
QTMyQkM3MUZDODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTM5M0FERDgxRkU3MDJEMDAwMjJENjgxIC8qIFdlYWtNYXBJbXBsSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRkRBQkMzMjc4ODA3NkIwMEMxNUI1OSAvKiBXYXNt
SVJHZW5lcmF0b3JIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Mzk5MzBDODIyQUQzQjlB
MDA1MUNERTIgLyogV2Vha09iamVjdFJlZkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MzlCRkJBRTIyQUQzQzNBMDAyM0Y0QzAgLyogV2Vha09iamVjdFJlZlByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGQTExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtTZXQuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tB
bmRHZW5lcmF0ZUNvZGUuY3BwCShyZXZpc2lvbiAyODc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTYxMiwxNiArNjEyLDE4IEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxv
Y2F0ZVJlZ2lzdGVyczo6Z2VuZXIKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBSZWdp
c3RlclNldCBjbG9iYmVyZWRSZWdpc3RlcnM7CisgICAgICAgICAgICBSZWdpc3RlclNldCBlYXJs
eU5leHRDbG9iYmVyZWRSZWdpc3RlcnM7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
SW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpOwogICAgICAgICAgICAg
ICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoIHx8IChuZXh0SW5zdCAmJiBuZXh0SW5z
dC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0
LmtpbmQub3Bjb2RlID09IFBhdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVk
UmVnaXN0ZXJzLm1lcmdlKGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmtpbmQub3Bjb2RlID09IFBhdGNoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLm1lcmdlKG5leHRJbnN0
LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVh
cmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycy5tZXJnZShuZXh0SW5zdC0+ZXh0cmFFYXJseUNsb2Ji
ZXJlZFJlZ3MoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLmZp
bHRlcihtX2FsbG93ZWRSZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRS
ZWdpc3RlcnMuZXhjbHVkZShtX25hbWVkRGVmZFJlZ3MpOworICAgICAgICAgICAgICAgICAgICBl
YXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnMuZmlsdGVyKG1fYWxsb3dlZFJlZ2lzdGVycyk7CiAK
ICAgICAgICAgICAgICAgICAgICAgbV9uYW1lZERlZmRSZWdzLm1lcmdlKGNsb2JiZXJlZFJlZ2lz
dGVycyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzM5LDMwICs3NDEsMTUgQEAgdm9pZCBHZW5l
cmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAgICAgIGluc3QucmVw
b3J0VXNlZFJlZ2lzdGVycyhyZWdpc3RlclNldCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmIChpbnN0LmlzVGVybWluYWwoKSAmJiBibG9jay0+bnVtU3VjY2Vzc29ycygpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgd2Ugc3BpbGwgZXZlcnl0aGluZyBiZXR3ZWVu
IGJsb2NrIGJvdW5kYXJpZXMuIEhvd2V2ZXIsIHdlIGhhdmUgYSBzbWFsbAotICAgICAgICAgICAg
ICAgIC8vIGhldXJpc3RpYyB0byBwYXNzIGFsb25nIHJlZ2lzdGVyIHN0YXRlLiBXZSBzaG91bGQg
ZXZlbnR1YWxseSBtYWtlIHRoaXMgYmV0dGVyLgotICAgICAgICAgICAgICAgIC8vIFdoYXQgd2Ug
ZG8gbm93IGlzIGlmIHdlIGhhdmUgYSBzdWNjZXNzb3Igd2l0aCBhIHNpbmdsZSBwcmVkZWNlc3Nv
ciAodXMpLCBhbmQgd2UKLSAgICAgICAgICAgICAgICAvLyBoYXZlbid0IHlldCBnZW5lcmF0ZWQg
Y29kZSBmb3IgaXQsIHdlIGdpdmUgaXQgb3VyIHJlZ2lzdGVyIHN0YXRlLiBJZiBhbGwgb3VyIHN1
Y2Nlc3NvcnMKLSAgICAgICAgICAgICAgICAvLyBjYW4gdGFrZSBvbiBvdXIgcmVnaXN0ZXIgc3Rh
dGUsIHdlIGRvbid0IGZsdXNoIGF0IHRoZSBlbmQgb2YgdGhpcyBibG9jay4KLQotICAgICAgICAg
ICAgICAgIGJvb2wgZXZlcnlTdWNjZXNzb3JHZXRzT3VyUmVnaXN0ZXJTdGF0ZSA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5udW1TdWNjZXNz
b3JzKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
PSBibG9jay0+c3VjY2Vzc29yQmxvY2soaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEgJiYgIWNvbnRleHQuYmxvY2tMYWJlbHNbc3Vj
Y2Vzc29yXS0+aXNTZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBbGxvY2F0
aW9uTWFwW3N1Y2Nlc3Nvcl0gPSBjdXJyZW50QWxsb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZXZlcnlTdWNjZXNzb3JHZXRzT3VyUmVn
aXN0ZXJTdGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoIWV2ZXJ5U3VjY2Vzc29yR2V0c091clJlZ2lzdGVyU3RhdGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChUbXAgdG1wIDogbV9saXZlbmVzcy0+bGl2ZUF0VGFpbChibG9jaykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSAmJiBpc0Rpc2FsbG93ZWRSZWdp
c3Rlcih0bXAucmVnKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlZyByZWcgPSBtX21hcFt0bXBdLnJlZykKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaCh0bXAsIHJlZyk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gY2xvYmJlciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJT
ZXQmIHNldCkgeworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHNldCkgeworICAgICAg
ICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChj
dXJyZW50QWxsb2NhdGlvbltyZWddID09IHRtcCk7CisgICAgICAgICAgICAgICAgICAgIG1fYXZh
aWxhYmxlUmVnc1t0bXAuYmFuaygpXS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKSA9IFRtcCgpOworICAgICAgICAgICAgICAgICAgICBt
X21hcFt0bXBdLnJlZyA9IFJlZygpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGlmICghaW5zdC5pc1Rlcm1pbmFsKCkpIHsK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcDsKQEAgLTc3MCwxNSArNzU3
LDQxIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKICAgICAgICAg
ICAgICAgICAgICAganVtcCA9IGluc3QuZ2VuZXJhdGUoKm1faml0LCBjb250ZXh0KTsKICAgICAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGp1bXAsICFqdW1wLmlzU2V0KCkpOwogCi0gICAgICAg
ICAgICAgICAgZm9yIChSZWcgcmVnIDogY2xvYmJlcmVkUmVnaXN0ZXJzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFRtcCB0bXAocmVnKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJl
bnRBbGxvY2F0aW9uW3JlZ10gPT0gdG1wKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hdmFpbGFi
bGVSZWdzW3RtcC5iYW5rKCldLnNldChyZWcpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRBbGxvY2F0aW9uLT5hdChyZWcpID0gVG1wKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWFw
W3RtcF0ucmVnID0gUmVnKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFs
bG9jTmFtZWQoZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICBjbG9iYmVyKGNsb2JiZXJlZFJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgY2xvYmJl
cihlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnMpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQobmVlZHNUb0dlbmVyYXRlKTsKKworICAgICAgICAgICAgICAg
IGNsb2JiZXIoY2xvYmJlcmVkUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWFy
bHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLmlzRW1wdHkoKSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBCeSBk
ZWZhdWx0LCB3ZSBzcGlsbCBldmVyeXRoaW5nIGJldHdlZW4gYmxvY2sgYm91bmRhcmllcy4gSG93
ZXZlciwgd2UgaGF2ZSBhIHNtYWxsCisgICAgICAgICAgICAgICAgICAgIC8vIGhldXJpc3RpYyB0
byBwYXNzIGFsb25nIHJlZ2lzdGVyIHN0YXRlLiBXZSBzaG91bGQgZXZlbnR1YWxseSBtYWtlIHRo
aXMgYmV0dGVyLgorICAgICAgICAgICAgICAgICAgICAvLyBXaGF0IHdlIGRvIG5vdyBpcyBpZiB3
ZSBoYXZlIGEgc3VjY2Vzc29yIHdpdGggYSBzaW5nbGUgcHJlZGVjZXNzb3IgKHVzKSwgYW5kIHdl
CisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmVuJ3QgeWV0IGdlbmVyYXRlZCBjb2RlIGZvciBp
dCwgd2UgZ2l2ZSBpdCBvdXIgcmVnaXN0ZXIgc3RhdGUuIElmIGFsbCBvdXIgc3VjY2Vzc29ycwor
ICAgICAgICAgICAgICAgICAgICAvLyBjYW4gdGFrZSBvbiBvdXIgcmVnaXN0ZXIgc3RhdGUsIHdl
IGRvbid0IGZsdXNoIGF0IHRoZSBlbmQgb2YgdGhpcyBibG9jay4KKworCisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZXZlcnlTdWNjZXNzb3JHZXRzT3VyUmVnaXN0ZXJTdGF0ZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+bnVtU3Vj
Y2Vzc29ycygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEgJiYgIWNvbnRleHQuYmxv
Y2tMYWJlbHNbc3VjY2Vzc29yXS0+aXNTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50QWxsb2NhdGlvbk1hcFtzdWNjZXNzb3JdID0gY3VycmVudEFsbG9jYXRpb247Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlcnlTdWNjZXNzb3JHZXRzT3VyUmVnaXN0ZXJTdGF0ZSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghZXZlcnlTdWNjZXNzb3JHZXRzT3Vy
UmVnaXN0ZXJTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChUbXAgdG1wIDog
bV9saXZlbmVzcy0+bGl2ZUF0VGFpbChibG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2VkUmVnaXN0ZXIodG1wLnJlZygpKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKFJlZyByZWcgPSBtX21hcFt0bXBdLnJlZykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmx1c2godG1wLCByZWcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gSnVtcCAmJiBibG9jay0+c3VjY2Vz
c29yQmxvY2soMCkgPT0gbV9jb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQogICAgICAgICAgICAg
ICAgICAgICBuZWVkc1RvR2VuZXJhdGUgPSBmYWxzZTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODc3
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIldhc21Db250ZXh0
SW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIgog
I2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNs
dWRlICJXYXNtT1NSRW50cnlEYXRhLmgiCkBAIC0xMzIsMTQgKzEzMywyNCBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgOD47CiAKICAgICBz
dHJ1Y3QgQ29udHJvbERhdGEgewotICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdp
biwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBSZXN1bHRMaXN0IHJlc3VsdFRtcHMsIEJsb2NrVHlw
ZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBu
dWxscHRyKQorICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luLCBCbG9ja1NpZ25hdHVyZSBy
ZXN1bHQsIFJlc3VsdExpc3QgcmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sq
IGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCiAgICAgICAgICAg
ICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKICAgICAgICAgICAgICwgY29udGludWF0aW9uKGNv
bnRpbnVhdGlvbikKICAgICAgICAgICAgICwgc3BlY2lhbChzcGVjaWFsKQogICAgICAgICAgICAg
LCByZXN1bHRzKHJlc3VsdFRtcHMpCiAgICAgICAgICAgICAsIHJldHVyblR5cGUocmVzdWx0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKKyAgICAgICAgfQor
CisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHJlc3VsdCwg
UmVzdWx0TGlzdCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uLCB1bnNpZ25lZCB0cnlTdGFydCwgdW5zaWduZWQgdHJ5RGVwdGgpCisgICAgICAgICAg
ICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKKyAgICAgICAgICAgICwgY29udGludWF0aW9uKGNv
bnRpbnVhdGlvbikKKyAgICAgICAgICAgICwgc3BlY2lhbChudWxscHRyKQorICAgICAgICAgICAg
LCByZXN1bHRzKHJlc3VsdFRtcHMpCisgICAgICAgICAgICAsIHJldHVyblR5cGUocmVzdWx0KQor
ICAgICAgICAgICAgLCBtX3RyeVN0YXJ0KHRyeVN0YXJ0KQorICAgICAgICAgICAgLCBtX3RyeUNh
dGNoRGVwdGgodHJ5RGVwdGgpCisgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIENvbnRy
b2xEYXRhKCkKQEAgLTE0OCw4ICsxNTksOCBAQCBwdWJsaWM6CiAKICAgICAgICAgc3RhdGljIGJv
b2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVHJ5KGNv
bnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6VHJ5OyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29u
dHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRy
b2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlw
ZTo6Q2F0Y2g7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9sRGF0
YSYgY29udHJvbCkgeyByZXR1cm4gaXNBbnlDYXRjaChjb250cm9sKSAmJiBjb250cm9sLmNhdGNo
S2luZCgpID09IENhdGNoS2luZDo6Q2F0Y2g7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BM
ZXZlbChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzTG9v
cChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUo
KSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25z
dCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6OkJsb2NrOyB9CkBAIC0yMjEsNiArMjMyLDU0IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiByZXR1cm5UeXBlLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9CiAKKyAgICAg
ICAgdm9pZCBjb252ZXJ0VHJ5VG9DYXRjaCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUluZGV4LCBU
eXBlZFRtcCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tUeXBlID0g
QmxvY2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5kOjpD
YXRjaDsKKyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsKKyAgICAg
ICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBjb252ZXJ0VHJ5VG9DYXRjaEFsbCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUluZGV4LCBUeXBl
ZFRtcCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChibG9ja1R5cGUo
KSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tUeXBlID0gQmxv
Y2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5kOjpDYXRj
aEFsbDsKKyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsKKyAgICAg
ICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29u
dHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBlID09IEJs
b2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5U3RhcnQ7CisgICAgICAg
IH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRy
eURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9j
a1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6
OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeUNhdGNoRGVwdGg7CisgICAgICAgIH0K
KworICAgICAgICBDYXRjaEtpbmQgY2F0Y2hLaW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAg
ICAgICAgICByZXR1cm4gbV9jYXRjaEtpbmQ7CisgICAgICAgIH0KKworICAgICAgICBUeXBlZFRt
cCBleGNlcHRpb24oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJv
bEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2V4
Y2VwdGlvbjsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNz
IEFpcklSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUgY29udHJvbEJsb2NrVHlwZTsKQEAg
LTIyOCw2ICsyODcsMTEgQEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOwog
ICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIHJldHVy
blR5cGU7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5U3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIG1f
dHJ5RW5kOworICAgICAgICB1bnNpZ25lZCBtX3RyeUNhdGNoRGVwdGg7CisgICAgICAgIENhdGNo
S2luZCBtX2NhdGNoS2luZDsKKyAgICAgICAgVHlwZWRUbXAgbV9leGNlcHRpb247CiAgICAgfTsK
IAogICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CkBAIC0yNjAsNiArMzI0LDgg
QEAgcHVibGljOgogCiAgICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENv
dW50KiwgY29uc3QgU2lnbmF0dXJlJik7CiAKKyAgICB2b2lkIGZpbmFsaXplRW50cnlwb2ludHMo
KTsKKwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhj
b25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQo
VHlwZSwgdWludDY0X3QpOwpAQCAtMzQ5LDcgKzQxNSw3IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChUeXBlZFRtcCBj
YWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwgY29uc3QgU2lnbmF0dXJl
JiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYpOwotICAg
IEIzOjpQYXRjaHBvaW50VmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9p
bnQoQmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3Vs
dHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4m
JiBleHRyYUFyZ3MgPSB7IH0pOworICAgIHN0ZDo6cGFpcjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwg
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRDYWxsUGF0
Y2hwb2ludChCYXNpY0Jsb2NrKiwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgUmVzdWx0TGlzdCYg
cmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVk
VG1wPiBleHRyYUFyZ3MgPSB7IH0pOwogCiAgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlmdChUeXBl
LCBCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBz
aGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRl
Z2VyU3ViKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlw
ZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpAQCAtMzYxLDExICs0MjcsMzAgQEAgcHVi
bGljOgogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQogICAgIHZvaWQgZGlk
UG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KIAorICAgIFRtcCBlbWl0Q2F0Y2hJbXBsKENhdGNoS2lu
ZCwgQ29udHJvbFR5cGUmLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCA9IDApOworICAgIHRlbXBs
YXRlIDxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoQjM6OlBhdGNocG9pbnRWYWx1ZSosIFZl
Y3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lQ2FwYWNpdHk+JiBhcmdzKTsKKwogICAgIGNvbnN0
IEJhZzxCMzo6UGF0Y2hwb2ludFZhbHVlKj4mIHBhdGNocG9pbnRzKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX3BhdGNocG9pbnRzOwogICAgIH0KIAorICAgIHZvaWQgYWRkU3RhY2tN
YXAodW5zaWduZWQgY2FsbFNpdGVJbmRleCwgU3RhY2tNYXAmJiBzdGFja21hcCkKKyAgICB7Cisg
ICAgICAgIG1fc3RhY2ttYXBzLmFkZChDYWxsU2l0ZUluZGV4KGNhbGxTaXRlSW5kZXgpLCBXVEZN
b3ZlKHN0YWNrbWFwKSk7CisgICAgfQorCisgICAgU3RhY2tNYXBzJiYgdGFrZVN0YWNrbWFwcygp
CisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX3N0YWNrbWFwcyk7CisgICAgfQorCisg
ICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgdGFrZUV4Y2VwdGlvbkhhbmRsZXJzKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxlcnMpOworICAg
IH0KKwogcHJpdmF0ZToKICAgICBCMzo6VHlwZSB0b0IzUmVzdWx0VHlwZShCbG9ja1NpZ25hdHVy
ZSByZXR1cm5UeXBlKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmFsaWRhdGVJbnN0KEluc3Qm
IGluc3QpCkBAIC00MTcsMTYgKzUwMiw2IEBAIHByaXZhdGU6CiAKICAgICBUbXAgbmV3VG1wKEIz
OjpCYW5rIGJhbmspCiAgICAgewotICAgICAgICBzd2l0Y2ggKGJhbmspIHsKLSAgICAgICAgY2Fz
ZSBCMzo6R1A6Ci0gICAgICAgICAgICBpZiAobV9mcmVlR1BzLnNpemUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbV9mcmVlR1BzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBCMzo6RlA6Ci0gICAgICAgICAgICBpZiAobV9mcmVlRlBzLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9mcmVlRlBzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9jb2RlLm5ld1RtcChiYW5rKTsKICAg
ICB9CiAKQEAgLTQ5Niw4ICs1NzEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgZW1pdFBhdGNocG9p
bnQoYmFzaWNCbG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDg+IHsgcmVzdWx0IH0sIFZlY3RvcjxD
b25zdHJhaW5lZFRtcD4oKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHNpemVfdCBpbmxpbmVT
aXplPgorICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6
OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQsIFZlY3RvcjxDb25zdHJhaW5lZFRt
cCwgaW5saW5lU2l6ZT4mJiBhcmdzKQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFz
aWNCbG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDg+IHsgcmVzdWx0IH0sIFdURk1vdmUoYXJncykp
OworICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHRUbXBUeXBlLCBzaXplX3Qg
aW5saW5lU2l6ZT4KLSAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxv
Y2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBjb25zdCBWZWN0b3I8UmVzdWx0VG1wVHlw
ZSwgOD4mICByZXN1bHRzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJn
cykKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQ
YXRjaHBvaW50VmFsdWUqIHBhdGNoLCBjb25zdCBWZWN0b3I8UmVzdWx0VG1wVHlwZSwgOD4mIHJl
c3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBhcmdzKQogICAgIHsK
ICAgICAgICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFsKQogICAgICAgICAgICAgbV9wYXRjaHBv
aW50U3BlY2lhbCA9IHN0YXRpY19jYXN0PEIzOjpQYXRjaHBvaW50U3BlY2lhbCo+KG1fY29kZS5h
ZGRTcGVjaWFsKG1ha2VVbmlxdWU8QjM6OlBhdGNocG9pbnRTcGVjaWFsPigpKSk7CkBAIC01NDks
NyArNjMwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlWYWx1ZSA9
IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIHRtcC50bXAuaXNHUCgpID8gQjM6Oklu
dDY0IDogQjM6OkRvdWJsZSwgMCk7CiAgICAgICAgICAgICBwYXRjaC0+YXBwZW5kKGR1bW15VmFs
dWUsIHRtcC5yZXApOwogICAgICAgICAgICAgc3dpdGNoICh0bXAucmVwLmtpbmQoKSkgewotICAg
ICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OkNvbGRBbnk6IC8vIEIzOjpWYWx1ZSBwcm9wYWdh
dGVzIENvbGRBbnkgaW5mb3JtYXRpb24gYW5kIGxhdGVyIEFpciB3aWxsIGFsbG9jYXRlIGFwcHJv
cHJpYXRlIHN0YWNrLgorICAgICAgICAgICAgLy8gQjM6OlZhbHVlIHByb3BhZ2F0ZXMgKExhdGUp
Q29sZEFueSBpbmZvcm1hdGlvbiBhbmQgbGF0ZXIgQWlyIHdpbGwgYWxsb2NhdGUgYXBwcm9wcmlh
dGUgc3RhY2suCisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6Q29sZEFueTogCisgICAg
ICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAgICAgICAgICAgICBjYXNl
IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQodG1wLnRtcCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01NTksNyArNjQyLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcCh0bXAucmVw
LnJlZygpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEIzOjpW
YWx1ZVJlcDo6U3RhY2tBcmd1bWVudDogewotICAgICAgICAgICAgICAgIEFTU0VSVCghcGF0Y2gt
PmVmZmVjdHMudGVybWluYWwpOwogICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OmNhbGxB
cmcodG1wLnJlcC5vZmZzZXRGcm9tU1AoKSk7CiAgICAgICAgICAgICAgICAgYXBwZW5kKGJhc2lj
QmxvY2ssIHRtcC50bXAuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIHRtcC50bXAsIGFyZyk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZy5jYW5SZXByZXNlbnQocGF0Y2gtPmNoaWxkKGkp
LT50eXBlKCkpKTsKQEAgLTY4OSw2ICs3NzEsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
IH0KIAorICAgIHZvaWQgZW1pdExvYWQoQjM6OkFpcjo6T3Bjb2RlIG9wLCBCMzo6VHlwZSB0eXBl
LCBUbXAgYmFzZSwgc2l6ZV90IG9mZnNldCwgVG1wIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGlm
IChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodHlwZSkpKQor
ICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OmFkZHIoYmFzZSwgb2Zmc2V0KSwgcmVzdWx0KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHRlbXAyID0gZzY0KCk7CisgICAgICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICAg
ICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwgYmFzZSwgdGVtcDIpOworICAgICAgICAgICAgYXBwZW5k
KG9wLCBBcmc6OmFkZHIodGVtcDIpLCByZXN1bHQpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBlbWl0TG9hZChUbXAgYmFzZSwgc2l6ZV90IG9mZnNldCwgVHlwZWRUbXAgcmVzdWx0KQor
ICAgIHsKKyAgICAgICAgZW1pdExvYWQobW92ZU9wRm9yVmFsdWVUeXBlKHJlc3VsdC50eXBlKCkp
LCB0b0IzVHlwZShyZXN1bHQudHlwZSgpKSwgYmFzZSwgb2Zmc2V0LCByZXN1bHQudG1wKCkpOwor
ICAgIH0KKwogICAgIHZvaWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVscGVycyYsIEV4Y2Vw
dGlvblR5cGUpOwogCiAgICAgdm9pZCBlbWl0RW50cnlUaWVyVXBDaGVjaygpOwpAQCAtNzM3LDYg
KzgzNiw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dGVyTG9vcHMubGFzdCgpOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVh
Y2hMaXZlVmFsdWUoRnVuY3Rpb24pOworCiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0
b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
bV9pbmZvOwogICAgIGNvbnN0IE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcgfTsKQEAgLTc0OCwxNiArODUwLDE1IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVp
bnQzMl90PiBtX291dGVyTG9vcHM7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBu
dWxscHRyIH07CiAgICAgQmFzaWNCbG9jayogbV9yb290QmxvY2sgeyBudWxscHRyIH07CisgICAg
QmFzaWNCbG9jayogbV9tYWluRW50cnlwb2ludFN0YXJ0IHsgbnVsbHB0ciB9OwogICAgIFZlY3Rv
cjxUeXBlZFRtcD4gbV9sb2NhbHM7CiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0
aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRo
LgogICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BS
UmVnIG1fYm91bmRzQ2hlY2tpbmdTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQUlJl
ZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVn
IG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBib29sIG1f
bWFrZXNDYWxscyB7IGZhbHNlIH07CiAKLSAgICBWZWN0b3I8VG1wLCA4PiBtX2ZyZWVHUHM7Ci0g
ICAgVmVjdG9yPFRtcCwgOD4gbV9mcmVlRlBzOwotCiAgICAgSGFzaE1hcDxCbG9ja1NpZ25hdHVy
ZSwgQjM6OlR5cGU+IG1fdHVwbGVNYXA7CiAgICAgLy8gVGhpcyBpcyBvbmx5IGZpbGxlZCBpZiB3
ZSBhcmUgZHVtcGluZyBJUi4KICAgICBCYWc8QjM6OlBhdGNocG9pbnRWYWx1ZSo+IG1fcGF0Y2hw
b2ludHM7CkBAIC03NzQsNiArODc1LDE1IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1J
bXBvcnRGdW5jdGlvbnM7CiAKICAgICBCMzo6UGF0Y2hwb2ludFNwZWNpYWwqIG1fcGF0Y2hwb2lu
dFNwZWNpYWwgeyBudWxscHRyIH07CisKKyAgICBSZWZQdHI8QjM6OkFpcjo6UHJvbG9ndWVHZW5l
cmF0b3I+IG1fcHJvbG9ndWVHZW5lcmF0b3I7CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1f
Y2F0Y2hFbnRyeXBvaW50czsKKworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fdHJ5Q2F0Y2hEZXB0
aCB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAwIH07Cisg
ICAgU3RhY2tNYXBzIG1fc3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZv
PiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAogLy8gTWVtb3J5IGFjY2Vzc2VzIGluIFdlYkFz
c2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMgdGhleSBoYXZlIHNp
Z25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KQEAgLTg0NywxMSArOTU3LDkgQEAgQWlySVJHZW5l
cmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAgICAgICBtX2NvZGUucGluUmVnaXN0
ZXIobV9ib3VuZHNDaGVja2luZ1NpemVHUFIpOwogICAgIH0KIAotICAgIG1fY29kZS5zZXROdW1F
bnRyeXBvaW50cygxKTsKLQotICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1
c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJz
WzFdIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworICAgIG1fcHJvbG9ndWVXYXNtQ29udGV4
dEdQUiA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnBy
b2xvZ3VlU2NyYXRjaEdQUnNbMV0gOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAKLSAgICBS
ZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRl
U2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgbV9wcm9sb2d1ZUdlbmVy
YXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlv
bj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgewogICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAg
ICAgIGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOwogCkBAIC04OTEsMzEgKzk5OSwzOSBA
QCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAgICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2ggPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5wcm9sb2d1ZVNjcmF0
Y2hHUFJzWzBdOwogCiAgICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkK
LSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJ
bnN0YW5jZSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5j
ZShtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHNjcmF0Y2gpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBvdmVyZmxvdzsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobmVlZFVuZGVy
Zmxvd0NoZWNrKSkKICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaCwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpKTsKLSAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihD
Q2FsbEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4
dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKSk7CisgICAg
ICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpC
ZWxvdywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fcHJvbG9ndWVXYXNtQ29udGV4
dEdQUiwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSkpOwogICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJv
d1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAm
JiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxv
dyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRv
IGJlIGNvcnJlY3QuCi0gICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KGNvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dElu
c3RhbmNlKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChtX2NhdGNoRW50cnlwb2ludHMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2ggPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5wcm9sb2d1ZVNjcmF0Y2hH
UFJzWzBdOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBz
Y3JhdGNoKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0pOwogCi0gICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgwLCBXVEZN
b3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7Ci0KICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygp
KSB7CiAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGc2NCgpOwogICAgICAgICAvLyBGSVhNRTog
V291bGQgYmUgbmljZSB0byBvbmx5IGRvIHRoaXMgaWYgd2UgdXNlIGluc3RhbmNlIHZhbHVlLgot
ICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKGNvbnRleHRJbnN0YW5jZSksIG1faW5zdGFuY2VWYWx1
ZSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAobV9wcm9sb2d1ZVdhc21Db250ZXh0R1BSKSwg
bV9pbnN0YW5jZVZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0g
eyBUbXAoY29udGV4dEluc3RhbmNlKSwgVHlwZXM6Okk2NCB9OworICAgICAgICBtX2luc3RhbmNl
VmFsdWUgPSB7IFRtcChtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpLCBUeXBlczo6STY0IH07CisK
KyAgICBhcHBlbmQoRW50cnlTd2l0Y2gpOworICAgIG1fbWFpbkVudHJ5cG9pbnRTdGFydCA9IG1f
Y29kZS5hZGRCbG9jaygpOworICAgIG1fY3VycmVudEJsb2NrID0gbV9tYWluRW50cnlwb2ludFN0
YXJ0OwogCiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwogICAgIG1fbG9jYWxzLmdyb3co
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CkBAIC05NTQsNiArMTA3MCwzNSBAQCBBaXJJUkdl
bmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAgZW1pdEVudHJ5VGllclVwQ2hl
Y2soKTsKIH0KIAordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZmluYWxpemVFbnRyeXBvaW50cygpCit7
CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSAxICsgbV9jYXRjaEVudHJ5cG9pbnRzLnNp
emUoKTsKKyAgICBtX3Byb2Muc2V0TnVtRW50cnlwb2ludHMobnVtRW50cnlwb2ludHMpOworICAg
IG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoMCwgUmVmPEIzOjpBaXI6OlByb2xvZ3Vl
R2VuZXJhdG9yPigqbV9wcm9sb2d1ZUdlbmVyYXRvcikpOworCisgICAgaWYgKG1fY2F0Y2hFbnRy
eXBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9y
PiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9s
b2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWly
OjpDb2RlJiBjb2RlKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBlbWl0Q2F0Y2hQcm9sb2d1ZVNoYXJl
ZChjb2RlLCBqaXQpOworCisgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7
CisgICAgICAgICAgICAgICAgLy8gU2hhcmVkIHByb2xvZ3VlIGV4cGVjdHMgdGhpcyBpbiB0aGlz
IHJlZ2lzdGVyIHdoZW4gZW50ZXJpbmcgdGhlIGZ1bmN0aW9uIHVzaW5nIGZhc3QgVExTLgorICAg
ICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShtX3Byb2xvZ3VlV2FzbUNv
bnRleHRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9jYXRjaEVudHJ5cG9pbnRzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgxICsgaSwgY2F0Y2hQcm9sb2d1
ZUdlbmVyYXRvci5jb3B5UmVmKCkpOworICAgIH0KKworICAgIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
ckxpc3Qgc3VjY2Vzc29yczsKKyAgICBzdWNjZXNzb3JzLmFwcGVuZChtX21haW5FbnRyeXBvaW50
U3RhcnQpOworICAgIHN1Y2Nlc3NvcnMuYXBwZW5kVmVjdG9yKG1fY2F0Y2hFbnRyeXBvaW50cyk7
CisKKyAgICBSRUxFQVNFX0FTU0VSVChudW1FbnRyeXBvaW50cyA9PSBzdWNjZXNzb3JzLnNpemUo
KSk7CisgICAgbV9yb290QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IHN1Y2Nlc3NvcnM7Cit9CisKIEIz
OjpUeXBlIEFpcklSR2VuZXJhdG9yOjp0b0IzUmVzdWx0VHlwZShCbG9ja1NpZ25hdHVyZSByZXR1
cm5UeXBlKQogewogICAgIGlmIChyZXR1cm5UeXBlLT5yZXR1cm5zVm9pZCgpKQpAQCAtMTAyNyw2
ICsxMTcyLDIxIEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRUaHJvd0V4Y2VwdGlvbigKICAg
ICB9KTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgordm9pZCBBaXJJUkdlbmVy
YXRvcjo6Zm9yRWFjaExpdmVWYWx1ZShGdW5jdGlvbiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgIGZ1bmN0aW9uKGxvY2FsKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2Vy
LT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIENvbnRy
b2xEYXRhJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29u
dHJvbERhdGE7CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29u
dHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiB0bXAgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgICAgICBm
dW5jdGlvbih0bXAudmFsdWUoKSk7CisgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRj
aChkYXRhKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uKGRhdGEuZXhjZXB0aW9uKCkpOworICAgIH0K
K30KKwogYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBj
b3VudCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHNpemVfdCBuZXdTaXplID0gbV9sb2NhbHMu
c2l6ZSgpICsgY291bnQ7CkBAIC0yOTAzLDEzICszMDYzLDkgQEAgdm9pZCBBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjawogICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hB
cmdzOwogICAgIHBhdGNoQXJncy5hcHBlbmQoY291bnRkb3duUHRyKTsKIAotICAgIGZvciAoYXV0
byYgbG9jYWwgOiBtX2xvY2FscykKLSAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5l
ZFRtcChsb2NhbCwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0gICAgZm9yICh1bnNpZ25lZCBj
b250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCku
c2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewotICAgICAgICBTdGFjayYgZXhwcmVzc2lvblN0YWNr
ID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNz
aW9uU3RhY2s7Ci0gICAgICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZXhwcmVzc2lv
blN0YWNrKQotICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh2YWx1
ZS52YWx1ZSgpLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkpKTsKLSAgICB9CisgICAgZm9yRWFjaExp
dmVWYWx1ZShbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJh
aW5lZFRtcCh0bXAsIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOworICAgIH0pOwogICAgIGZvciAo
VHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZW5jbG9zaW5nU3RhY2spCiAgICAgICAgIHBhdGNoQXJn
cy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodmFsdWUudmFsdWUoKSwgQjM6OlZhbHVlUmVwOjpDb2xk
QW55KSk7CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUgOiBuZXdTdGFjaykKQEAgLTMw
MTIsNTcgKzMxNjgsMTczIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hh
YmwKICAgICByZXR1cm4geyB9OwogfQogCi0vLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIFdhc20g
ZXhjZXB0aW9ucyBpbiB0aGUgQWlyIGdlbmVyYXRvcgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMQotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KEJs
b2NrU2lnbmF0dXJlLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgU3RhY2smKSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdT
dGFjaykgLT4gUGFydGlhbFJlc3VsdAogeworICAgICsrbV90cnlDYXRjaERlcHRoOworCisgICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgc3BsaXRT
dGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CisgICAgcmVzdWx0ID0g
Q29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShzaWduYXR1
cmUpLCBCbG9ja1R5cGU6OlRyeSwgY29udGludWF0aW9uLCArK21fY2FsbFNpdGVJbmRleCwgbV90
cnlDYXRjaERlcHRoKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlw
ZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4geyB9OworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRT
dGFjaywgZGF0YS5yZXN1bHRzKTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50Qmxv
Y2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRj
aFRvVW5yZWFjaGFibGUoZXhjZXB0aW9uSW5kZXgsIHNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7
CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25l
ZCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0JikgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGN1cnJlbnRT
dGFjaywgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAgdW5pZnlWYWx1ZXNX
aXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdHMpOworICAgIGFwcGVuZChKdW1wKTsK
KyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7Cisg
ICAgcmV0dXJuIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKIH0KIAotYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25l
ZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBl
JiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBUbXAgYnVmZmVyID0gZW1pdENhdGNoSW1w
bChDYXRjaEtpbmQ6OkNhdGNoLCBkYXRhLCBleGNlcHRpb25JbmRleCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAg
ICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgIFR5cGVkVG1wIHRt
cCA9IHRtcEZvclR5cGUodHlwZSk7CisgICAgICAgIGVtaXRMb2FkKGJ1ZmZlciwgaSAqIHNpemVv
Zih1aW50NjRfdCksIHRtcCk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHRtcCk7CisgICAgfQog
ICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9V
bnJlYWNoYWJsZShDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZW1p
dENhdGNoSW1wbChDYXRjaEtpbmQ6OkNhdGNoQWxsLCBkYXRhKTsKICAgICByZXR1cm4geyB9Owog
fQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRy
b2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorVG1wIEFpcklSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJ
bXBsKENhdGNoS2luZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwgdW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
eyB9OworICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgbV9jYXRj
aEVudHJ5cG9pbnRzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisKKyAgICBpZiAoQ29udHJvbFR5
cGU6OmlzVHJ5KGRhdGEpKSB7CisgICAgICAgIGlmIChraW5kID09IENhdGNoS2luZDo6Q2F0Y2gp
CisgICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoKCsrbV9jYWxsU2l0ZUluZGV4LCBn
NjQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRhdGEuY29udmVydFRyeVRvQ2F0Y2hB
bGwoKyttX2NhbGxTaXRlSW5kZXgsIGc2NCgpKTsKKyAgICB9CisgICAgLy8gV2UgY29udmVydCBm
cm9tICJ0cnkiIHRvICJjYXRjaCIgQ29udHJvbFR5cGUgYWJvdmUuIFRoaXMgZG9lc24ndAorICAg
IC8vIGhhcHBlbiBpZiBDb250cm9sVHlwZSBpcyBhbHJlYWR5IGEgImNhdGNoIi4gVGhpcyBjYW4g
aGFwcGVuIHdoZW4KKyAgICAvLyB3ZSBoYXZlIG11bHRpcGxlIGNhdGNoZXMgbGlrZSAidHJ5IHt9
IGNhdGNoKEEpe30gY2F0Y2goQil7fS4uLkNhdGNoQWxsKEUpe30iLgorICAgIC8vIFdlIGp1c3Qg
Y29udmVydCB0aGUgZmlyc3QgQ29udHJvbFR5cGUgdG8gYSBjYXRjaCwgdGhlbiB0aGUgb3RoZXJz
IHdpbGwKKyAgICAvLyB1c2UgaXRzIGZpZWxkcy4KKyAgICBBU1NFUlQoQ29udHJvbFR5cGU6Omlz
QW55Q2F0Y2goZGF0YSkpOworCisgICAgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUgPSBraW5kID09
IENhdGNoS2luZDo6Q2F0Y2ggPyBIYW5kbGVyVHlwZTo6Q2F0Y2ggOiBIYW5kbGVyVHlwZTo6Q2F0
Y2hBbGw7CisgICAgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyVHlwZSwgZGF0
YS50cnlTdGFydCgpLCBkYXRhLnRyeUVuZCgpLCAwLCBtX3RyeUNhdGNoRGVwdGgsIGV4Y2VwdGlv
bkluZGV4IH0pOworCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNh
Y2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1
cnJlbnRCbG9jayk7CisKKyAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKKyAgICBhdXRv
IGxvYWRGcm9tU2NyYXRjaEJ1ZmZlciA9IFsmXSAoVHlwZWRUbXAgcmVzdWx0KSB7CisgICAgICAg
IHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcjsKKyAgICAg
ICAgKytpbmRleEluQnVmZmVyOworICAgICAgICBUbXAgYnVmZmVyUHRyID0gVG1wKEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGVtaXRMb2FkKGJ1ZmZlclB0ciwgb2Zmc2V0LCByZXN1
bHQpOworICAgIH07CisgICAgZm9yRWFjaExpdmVWYWx1ZShbJl0gKFR5cGVkVG1wIHRtcCkgewor
ICAgICAgICAvLyBXZSBzZXQgb3VyIGN1cnJlbnQgQ29udHJvbEVudHJ5J3MgZXhjZXB0aW9uIGJl
bG93IGFmdGVyIHRoZSBwYXRjaHBvaW50LCBpdCdzCisgICAgICAgIC8vIG5vdCBpbiB0aGUgaW5j
b21pbmcgYnVmZmVyIG9mIGxpdmUgdmFsdWVzLgorICAgICAgICBhdXRvIHRvSWdub3JlID0gZGF0
YS5leGNlcHRpb24oKTsKKyAgICAgICAgaWYgKHRtcC50bXAoKSAhPSB0b0lnbm9yZS50bXAoKSkK
KyAgICAgICAgICAgIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih0bXApOworICAgIH0pOworCisgICAg
QjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KG1fcHJvYy5hZGRUdXBs
ZSh7IEIzOjpwb2ludGVyVHlwZSgpLCBCMzo6cG9pbnRlclR5cGUoKSB9KSk7CisgICAgcGF0Y2gt
PmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0
ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVy
TGF0ZSA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIGNs
b2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHBhdGNoLT5jbG9iYmVy
TGF0ZShjbG9iYmVyTGF0ZSk7CisgICAgcGF0Y2gtPnJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChC
Mzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHBhdGNoLT5y
ZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyKSk7CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICBqaXQubW92ZShwYXJhbXNbMl0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFn
KTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNo
YWJsZSkpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIFRtcCBleGNlcHRpb24gPSBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIFRtcCBidWZmZXIgPSBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0
Y2gsIFZlY3RvcjxUbXAsIDg+Ojpmcm9tKGV4Y2VwdGlvbiwgYnVmZmVyKSwgVmVjdG9yPENvbnN0
cmFpbmVkVG1wLCAxPjo6ZnJvbShpbnN0YW5jZVZhbHVlKCkpKTsKKyAgICBhcHBlbmQoTW92ZSwg
ZXhjZXB0aW9uLCBkYXRhLmV4Y2VwdGlvbigpKTsKKworICAgIHJldHVybiBidWZmZXI7CiB9CiAK
LWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlw
ZSYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUodGFyZ2V0LCBkYXRhKTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiB0YXJn
ZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5zaWduZWQg
dGFyZ2V0RGVwdGggPSAwOworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSkKKyAg
ICAgICAgdGFyZ2V0RGVwdGggPSB0YXJnZXQudHJ5RGVwdGgoKTsKKworICAgIG1fZXhjZXB0aW9u
SGFuZGxlcnMuYXBwZW5kKHsgSGFuZGxlclR5cGU6OkRlbGVnYXRlLCBkYXRhLnRyeVN0YXJ0KCks
ICsrbV9jYWxsU2l0ZUluZGV4LCAwLCBtX3RyeUNhdGNoRGVwdGgsIHRhcmdldERlcHRoIH0pOwog
ICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2ln
bmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgU3RhY2smKSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNl
cHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4Y2VwdGlvbkluZGV4KTsKKyAgICBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIHBh
dGNoLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3Rl
clNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisKKyAgICBWZWN0b3I8Q29uc3Ry
YWluZWRUbXAsIDg+IHBhdGNoQXJnczsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVk
VG1wKGluc3RhbmNlVmFsdWUoKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAoVG1wKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRH
UFIxKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQor
ICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGFyZ3NbaV0sIEIzOjpWYWx1
ZVJlcDo6c3RhY2tBcmd1bWVudChpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpKTsKKworICAg
IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JF
eGNlcHRpb25zKHBhdGNoLCBwYXRjaEFyZ3MpOworCisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihb
dGhpcywgZXhjZXB0aW9uSW5kZXgsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBoYW5kbGUu
Z2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOworICAgICAgICBlbWl0VGhyb3dJbXBsKGppdCwg
ZXhjZXB0aW9uSW5kZXgpOyAKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBwYXRjaCwgVG1wKCksIFdURk1vdmUocGF0Y2hBcmdzKSk7CisKICAgICByZXR1cm4g
eyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250
cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldGhy
b3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAg
QjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAg
ICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwo
KSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworCisgICAgVmVjdG9yPENv
bnN0cmFpbmVkVG1wLCAzPiBwYXRjaEFyZ3M7CisgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJh
aW5lZFRtcChpbnN0YW5jZVZhbHVlKCksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpKTsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKFRtcChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSkpKTsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGRhdGEuZXhj
ZXB0aW9uKCksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMikpKTsKKwor
ICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKHBhdGNoLCBwYXRjaEFyZ3MpOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3Io
W3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBw
YXJhbXMsIHRoaXMpOworICAgICAgICBlbWl0UmV0aHJvd0ltcGwoaml0KTsKKyAgICB9KTsKKwor
ICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVG1wKCksIFdURk1vdmUo
cGF0Y2hBcmdzKSk7CisKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0zMjA5LDcgKzM0ODEsOCBA
QCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlCiAgICAgaWYgKGRhdGEu
YmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewogICAgICAgICBhcHBlbmQoZGF0YS5zcGVj
aWFsLCBKdW1wKTsKICAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNzb3JzKG1fY3VycmVu
dEJsb2NrKTsKLSAgICB9CisgICAgfSBlbHNlIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6VHJ5IHx8IGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaCkKKyAgICAg
ICAgLS1tX3RyeUNhdGNoRGVwdGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9j
a1R5cGU6Okxvb3ApIHsKICAgICAgICAgbV9vdXRlckxvb3BzLnJlbW92ZUxhc3QoKTsKQEAgLTMy
MzMsNyArMzUwNiw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUK
ICAgICByZXR1cm4geyB9OwogfQogCi1CMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVyYXRv
cjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVk
VG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYmIHBhdGNoQXJncykKK3N0ZDo6cGFp
cjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gQWlySVJH
ZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0IFZlY3Rv
cjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzKQogewog
ICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNSZXN1bHRUeXBlKCZzaWdu
YXR1cmUpKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBA
IC0zMjU4LDggKzM1MzEsOSBAQCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVyYXRvcjo6
ZW1pCiAgICAgICAgICAgICByZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6OlZhbHVlUmVwKHZh
bHVlTG9jYXRpb24pKTsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludHMgPSBX
VEZNb3ZlKHJlc3VsdENvbnN0cmFpbnRzKTsKICAgICB9CisgICAgUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZSBleGNlcHRpb25IYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMo
cGF0Y2hwb2ludCwgcGF0Y2hBcmdzKTsKICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hw
b2ludCwgcmVzdWx0cywgV1RGTW92ZShwYXRjaEFyZ3MpKTsKLSAgICByZXR1cm4gcGF0Y2hwb2lu
dDsKKyAgICByZXR1cm4geyBwYXRjaHBvaW50LCBleGNlcHRpb25IYW5kbGUgfTsKIH0KIAogYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0
TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdApAQCAtMzI5NSwxNCArMzU2OSwxNyBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1CiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVyQmxvY2spOwogCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNocG9p
bnQoaXNXYXNtQmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAgICAgICBh
dXRvIHBhaXIgPSBlbWl0Q2FsbFBhdGNocG9pbnQoaXNXYXNtQmxvY2ssIHNpZ25hdHVyZSwgcmVz
dWx0cywgYXJncyk7CisgICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gcGFpci5maXJzdDsK
KyAgICAgICAgICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlID0gcGFpci5zZWNvbmQ7CiAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJz
IHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgogICAgICAgICAgICAgLy8g
V2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGlu
ZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRS
ZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwog
Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhh
bmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAg
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
Y2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
ICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXgg
fSk7CkBAIC0zMzIxLDEzICszNTk4LDE3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwo
dWludDMyX3QgZnUKIAogICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBqdW1wQXJn
czsKICAgICAgICAgICAgIGp1bXBBcmdzLmFwcGVuZCh7IGp1bXBEZXN0aW5hdGlvbiwgQjM6OlZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIgfSk7Ci0gICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0g
ZW1pdENhbGxQYXRjaHBvaW50KGlzRW1iZWRkZXJCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBh
cmdzLCBXVEZNb3ZlKGp1bXBBcmdzKSk7CisgICAgICAgICAgICBhdXRvIHBhaXIgPSBlbWl0Q2Fs
bFBhdGNocG9pbnQoaXNFbWJlZGRlckJsb2NrLCBzaWduYXR1cmUsIHJlc3VsdHMsIGFyZ3MsIFdU
Rk1vdmUoanVtcEFyZ3MpKTsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWlyLmZp
cnN0OworICAgICAgICAgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWlyLnNlY29uZDsKKwog
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJl
Z2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KICAgICAgICAg
ICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBz
b21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUo
UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmcpKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMs
IHRoaXMpOwogICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXJhbXMucHJvYygpLnJl
c3VsdENvdW50KHBhcmFtcy52YWx1ZSgpLT50eXBlKCkpXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFn
KTsKICAgICAgICAgICAgIH0pOwogCkBAIC0zMzM5LDEyICszNjIwLDE1IEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnUKICAgICAgICAgLy8gVGhlIGNhbGwgY291bGQg
aGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxk
IGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KICAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xv
YmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgY3Vy
cmVudEluc3RhbmNlLCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNpZ25hdHVy
ZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAgIGF1dG8gcGFpciA9IGVtaXRDYWxsUGF0Y2hwb2lu
dChtX2N1cnJlbnRCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzKTsKKyAgICAgICAgYXV0
byogcGF0Y2hwb2ludCA9IHBhaXIuZmlyc3Q7CisgICAgICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxl
ID0gcGFpci5zZWNvbmQ7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciB0aGUgc2l6ZSBy
ZWdpc3RlciBzaW5jZSB0aGUgTExJbnQgYWx3YXlzIGJvdW5kcyBjaGVja3MKICAgICAgICAgaWYg
KG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcgfHwgbV9pbmZvLm1lbW9yeS5pc1NoYXJl
ZCgpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQgeyBQ
aW5uZWRSZWdpc3RlckluZm86OmdldCgpLmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyIH0pOwot
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS5nZW5lcmF0ZShqaXQs
IHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGpp
dC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0
clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CkBAIC0zNTIzLDcgKzM4MDcsOSBAQCBhdXRv
IEFpcklSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFR5CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCiAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKHRtcEZvclR5cGUoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpKTsKIAotICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNpZ25hdHVy
ZSwgcmVzdWx0cywgYXJncywgV1RGTW92ZShleHRyYUFyZ3MpKTsKKyAgICBhdXRvIHBhaXIgPSBl
bWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJn
cywgV1RGTW92ZShleHRyYUFyZ3MpKTsKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gcGFpci5maXJz
dDsKKyAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIuc2Vjb25kOwogCiAgICAgLy8gV2Ug
bmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBt
aWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkg
YXNzdW1lIHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVj
a2luZyBzbwpAQCAtMzUzNSw2ICszODIxLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW1pdElu
ZGlyZWN0Q2FsbChUeQogCiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
ewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7
CiAgICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXJhbXMucHJvYygpLnJlc3VsdENvdW50KHBhcmFt
cy52YWx1ZSgpLT50eXBlKCkpXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICB9KTsKIApA
QCAtMzU5NSw3ICszODgyLDggQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3RpbwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtl
VW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5
cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIAotICAgIEIzOjpQcm9jZWR1
cmUgcHJvY2VkdXJlOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1cmUgPSBtYWtlVW5p
cXVlPEIzOjpQcm9jZWR1cmU+KCk7CisgICAgYXV0byYgcHJvY2VkdXJlID0gKmNvbXBpbGF0aW9u
Q29udGV4dC5wcm9jZWR1cmU7CiAgICAgQ29kZSYgY29kZSA9IHByb2NlZHVyZS5jb2RlKCk7CiAK
ICAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRTdHJlYW0mIG91dCwgQjM6
Ok9yaWdpbiBvcmlnaW4pIHsKQEAgLTM2MTUsMjUgKzM5MDMsMjcgQEAgRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJh
dG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5k
YXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZB
SUxTKHBhcnNlci5wYXJzZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmZpbmFsaXplRW50cnlwb2lu
dHMoKTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgKytpKQogICAgICAg
ICAgICAgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CiAg
ICAgfQogCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkRHVtcElSQXRFYWNoUGhh
c2UoQjM6OkFpck1vZGUpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0ZWQgcGF0
Y2hwb2ludHMiKTsKLSAgICAgICAgICAgIGZvciAoQjM6OlBhdGNocG9pbnRWYWx1ZSoqIHBhdGNo
IDogaXJHZW5lcmF0b3IucGF0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
ZGVlcER1bXAocHJvY2VkdXJlLCAqcGF0Y2gpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEIzOjpB
aXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOwotICAgICAgICBCMzo6QWlyOjpnZW5lcmF0
ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKLSAgICAgICAg
Y29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5y
ZWxlYXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAg
aWYgKFVOTElLRUxZKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzOjpBaXJNb2RlKSkpIHsKKyAg
ICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0ZWQgcGF0Y2hwb2ludHMiKTsKKyAgICAgICAgZm9yIChC
Mzo6UGF0Y2hwb2ludFZhbHVlKiogcGF0Y2ggOiBpckdlbmVyYXRvci5wYXRjaHBvaW50cygpKQor
ICAgICAgICAgICAgZGF0YUxvZ0xuKGRlZXBEdW1wKHByb2NlZHVyZSwgKnBhdGNoKSk7CiAgICAg
fQogCisgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29kZSk7CisgICAgQjM6OkFp
cjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7
CisKKyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJv
Y2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7CisgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxl
ZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwor
ICAgIHJlc3VsdC0+c3RhY2ttYXBzID0gaXJHZW5lcmF0b3IudGFrZVN0YWNrbWFwcygpOworICAg
IHJlc3VsdC0+ZXhjZXB0aW9uSGFuZGxlcnMgPSBpckdlbmVyYXRvci50YWtlRXhjZXB0aW9uSGFu
ZGxlcnMoKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUxNzgsNiArNTQ2OCwyNCBA
QCB0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAordGVtcGxhdGUgPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK1BhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGUgQWlySVJHZW5lcmF0b3I6OnByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9u
cyhCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxp
bmVDYXBhY2l0eT4mIGFyZ3MpCit7CisgICAgKyttX2NhbGxTaXRlSW5kZXg7CisgICAgaWYgKCFt
X3RyeUNhdGNoRGVwdGgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICB1bnNpZ25lZCBudW1M
aXZlVmFsdWVzID0gMDsKKyAgICBmb3JFYWNoTGl2ZVZhbHVlKFsmXSAoVG1wIHRtcCkgeworICAg
ICAgICArK251bUxpdmVWYWx1ZXM7CisgICAgICAgIGFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1w
KHRtcCwgQjM6OlZhbHVlUmVwOjpMYXRlQ29sZEFueSkpOworICAgIH0pOworCisgICAgcGF0Y2gt
PmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisKKyAgICByZXR1cm4gUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZSB7IG1fY2FsbFNpdGVJbmRleCwgbnVtTGl2ZVZhbHVlcyB9OworfQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
X0IzSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3NzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNiArNTcs
NyBAQAogI2luY2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21FeGNl
cHRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAi
V2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIgogI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2lu
Y2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtT1NSRW50cnlEYXRhLmgiCkBAIC04
NywxNiArODgsNiBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQog
fQogCi1jbGFzcyBCM0lSR2VuZXJhdG9yOwotc3RydWN0IFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUgewotICAgIHZvaWQgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYsIEIzSVJHZW5lcmF0b3IqKSBjb25zdDsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCA9ICBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0KLSAgICB1bnNpZ25lZCBtX2NhbGxTaXRlSW5kZXgg
eyBzX2ludmFsaWRDYWxsU2l0ZUluZGV4IH07Ci0gICAgdW5zaWduZWQgbV9udW1MaXZlVmFsdWVz
OwotfTsKLQogY2xhc3MgQjNJUkdlbmVyYXRvciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgRXhwcmVz
c2lvblR5cGUgPSBWYXJpYWJsZSo7CkBAIC01NzgsMjEgKzU2OSw2IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9OwogCi12
b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmdlbmVyYXRlKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIEIzSVJHZW5lcmF0
b3IqIGdlbmVyYXRvcikgY29uc3QKLXsKLSAgICBpZiAobV9jYWxsU2l0ZUluZGV4ID09IHNfaW52
YWxpZENhbGxTaXRlSW5kZXgpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0YWNrTWFwIHZhbHVl
cyhtX251bUxpdmVWYWx1ZXMpOwotICAgIHVuc2lnbmVkIHBhcmFtc09mZnNldCA9IHBhcmFtcy5z
aXplKCkgLSBtX251bUxpdmVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgY2hpbGRyZW5PZmZzZXQgPSBw
YXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4oKSAtIG1fbnVtTGl2ZVZhbHVlczsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1MaXZlVmFsdWVzOyArK2kpCi0gICAgICAgIHZhbHVl
c1tpXSA9IE9TUkVudHJ5VmFsdWUocGFyYW1zW2kgKyBwYXJhbXNPZmZzZXRdLCBwYXJhbXMudmFs
dWUoKS0+Y2hpbGQoaSArIGNoaWxkcmVuT2Zmc2V0KS0+dHlwZSgpKTsKLQotICAgIGdlbmVyYXRv
ci0+YWRkU3RhY2tNYXAobV9jYWxsU2l0ZUluZGV4LCBXVEZNb3ZlKHZhbHVlcykpOwotICAgIGpp
dC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRleCksIEND
YWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7Ci19Ci0KIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2ln
bmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNl
dHMgaW4gQjMuCiBpbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQo
VmFsdWUqJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKIHsKQEAgLTg1Nyw1NiArODMzLDEzIEBAIFZh
bHVlKiBCM0lSR2VuZXJhdG9yOjpmcmFtZVBvaW50ZXIoKQogICAgIHJldHVybiBtX2ZyYW1lUG9p
bnRlcjsKIH0KIAotc3RhdGljIHZvaWQgYnVpbGRFbnRyeUJ1ZmZlckZvckNhdGNoKFByb2JlOjpD
b250ZXh0JiBjb250ZXh0KQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5m
cDxDYWxsRnJhbWUqPigpOwotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxG
cmFtZS0+Y2FsbFNpdGVJbmRleCgpOwotICAgIE9wdGltaXppbmdKSVRDYWxsZWUqIGNhbGxlZSA9
IGJpdHdpc2VfY2FzdDxPcHRpbWl6aW5nSklUQ2FsbGVlKj4oY2FsbEZyYW1lLT5jYWxsZWUoKS5h
c1dhc21DYWxsZWUoKSk7Ci0gICAgY29uc3QgU3RhY2tNYXAmIHN0YWNrbWFwID0gY2FsbGVlLT5z
dGFja21hcChjYWxsU2l0ZUluZGV4KTsKLSAgICBWTSogdm0gPSBjb250ZXh0LmdwcjxWTSo+KEdQ
UkluZm86OnJlZ1QwKTsKLSAgICB1aW50NjRfdCogYnVmZmVyID0gdm0tPndhc21Db250ZXh0LnNj
cmF0Y2hCdWZmZXJGb3JTaXplKHN0YWNrbWFwLnNpemUoKSAqIDgpOwotICAgIGxvYWRWYWx1ZXNJ
bnRvQnVmZmVyKGNvbnRleHQsIHN0YWNrbWFwLCBidWZmZXIpOwotCi0gICAgY29udGV4dC5ncHIo
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJ1ZmZlcik7
Ci19Ci0KIHZvaWQgQjNJUkdlbmVyYXRvcjo6aW5zZXJ0RW50cnlTd2l0Y2goKQogewogICAgIG1f
cHJvYy5zZXROdW1FbnRyeXBvaW50cyhtX3Jvb3RCbG9ja3Muc2l6ZSgpKTsKIAogICAgIFJlZjxC
Mzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0
ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oW10gKENDYWxs
SGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CiAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAgICAgICBqaXQuZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGluZyBwcmVj
aXNlIGFsbG9jYXRpb25zIGluIFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVudHJ5cG9pbnRzIG1p
Z2h0IGJlIHVubmVjZXNzYXJ5Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEzCi0gICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0
aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5m
bzo6cmVnVDAsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpo
YWxmQWxpZ25tZW50KSk7Ci0gICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgR1BSSW5mbzo6cmVnVDApOwotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qw
LCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZz
ZXRPZlZNKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBhdXRvIGxvYWRlZENhc2Ug
PSBqaXQuanVtcCgpOwotCi0gICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygm
aml0KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1Nl
dDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIEdQUklu
Zm86OnJlZ1QwKTsKLQotICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOwotICAgICAg
ICB9Ci0gICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QzKTsKLQotICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxs
ZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgaml0LnN0
b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkp
KTsKLSAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMywg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLQotICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZVB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKLQotICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihSZWdpc3RlcikpLCBH
UFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkluc3RhbmNl
KCkpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFu
Y2UoR1BSSW5mbzo6cmVnVDMpOwotCi0gICAgICAgIGppdC5wcm9iZSh0YWdDRnVuY3Rpb248SklU
UHJvYmVQdHJUYWc+KGJ1aWxkRW50cnlCdWZmZXJGb3JDYXRjaCksIG51bGxwdHIpOwotCi0gICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXpl
KCkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgICAgIGVtaXRDYXRjaFByb2xvZ3VlU2hhcmVkKGNvZGUsIGppdCk7
CiAgICAgfSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9yb290QmxvY2tzLnNp
emUoKTsgKytpKQpAQCAtMjY1Miw2ICsyNTg1LDEwIEBAIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpl
bWl0Q2F0Y2hJbXBsKENhdGMKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGF0YS5jb252ZXJ0
VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlhYmxlKHBvaW50
ZXJUeXBlKCkpKTsKICAgICB9CisgICAgLy8gV2UgY29udmVydCBmcm9tICJ0cnkiIHRvICJjYXRj
aCIgQ29udHJvbFR5cGUgYWJvdmUuIFRoaXMgZG9lc24ndAorICAgIC8vIGhhcHBlbiBpZiBDb250
cm9sVHlwZSBpcyBhbHJlYWR5IGEgImNhdGNoIi4gVGhpcyBjYW4gaGFwcGVuIHdoZW4KKyAgICAv
LyB3ZSBoYXZlIG11bHRpcGxlIGNhdGNoZXMgbGlrZSAidHJ5IHt9IGNhdGNoKEEpe30gY2F0Y2go
Qil7fS4uLkNhdGNoQWxsKEUpe30iCisgICAgQVNTRVJUKENvbnRyb2xUeXBlOjppc0FueUNhdGNo
KGRhdGEpKTsKIAogICAgIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlID0ga2luZCA9PSBDYXRjaEtp
bmQ6OkNhdGNoID8gSGFuZGxlclR5cGU6OkNhdGNoIDogSGFuZGxlclR5cGU6OkNhdGNoQWxsOwog
ICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlclR5cGUsIGRhdGEudHJ5U3Rh
cnQoKSwgZGF0YS50cnlFbmQoKSwgMCwgbV90cnlDYXRjaERlcHRoLCBleGNlcHRpb25JbmRleCB9
KTsKQEAgLTI3MjIsMzAgKzI2NTksOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRocm93KHVu
c2lnbmVkIGV4CiAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJl
UGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNoKTsKICAgICBwYXRj
aC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBleGNlcHRpb25JbmRleCwgaGFuZGxlXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1l
bnRHUFIwOwogICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwotCi0g
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsKLSAgICAgICAgewot
ICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7Ci0gICAgICAgICAgICBqaXQu
YW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNr
KSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZv
b3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBhdXRvIGxvYWRlZENh
c2UgPSBqaXQuanVtcCgpOwotCi0gICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGlu
aygmaml0KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0Ojpv
ZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7
Ci0KLSAgICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKLSAgICAgICAgfQotICAgICAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3Jh
dGNoKTsKLQotICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4
Y2VwdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjMpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlv
blB0clRhZyk7Ci0gICAgICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBF
eGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRocm93KSk7Ci0g
ICAgICAgIH0pOworICAgICAgICBlbWl0VGhyb3dJbXBsKGppdCwgZXhjZXB0aW9uSW5kZXgpOyAK
ICAgICB9KTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsKIApAQCAtMjc2Mywy
OCArMjY3OCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwKICAg
ICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9y
RXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0Y2gpOwogICAgIHBhdGNoLT5zZXRHZW5lcmF0
b3IoW3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOwotICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8g
cHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpO
b25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2Nh
dGlvbjo6aGFsZkFsaWdubWVudCkpOwotICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOwotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtl
ZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0o
KSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsK
LQotICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7Ci0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFs
bG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJl
Y2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOwotCi0gICAgICAgICAgICBs
b2FkZWRDYXNlLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7Ci0KICAgICAgICAg
aGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotICAgICAgICBqaXQuZmFy
SnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7Ci0g
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbldhc21SZXRocm93KSk7Ci0gICAgICAgIH0pOworICAgICAgICBlbWl0
UmV0aHJvd0ltcGwoaml0KTsKICAgICB9KTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBh
dGNoKTsKIApAQCAtMzMyMCwyNiArMzIxNSw2IEBAIHZvaWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2lu
TWFwKENvbXBpbGF0aW8KICAgICB9CiB9CiAKLXZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBjb25zdCBDb21w
aWxhdGlvbkNvbnRleHQmIGNvbnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCi17Ci0gICAg
aWYgKCFjb250ZXh0LnByb2NlZHVyZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQg
ZW50cnlwb2ludEluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCBudW1FbnRyeXBvaW50cyA9IGNvbnRl
eHQucHJvY2VkdXJlLT5udW1FbnRyeXBvaW50cygpOwotICAgIGZvciAoY29uc3QgVW5saW5rZWRI
YW5kbGVySW5mbyYgaGFuZGxlckluZm8gOiBmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludEluZGV4IDwgbnVtRW50cnlwb2ludHMp
OwotICAgICAgICBpZiAoaGFuZGxlckluZm8ubV90eXBlID09IEhhbmRsZXJUeXBlOjpEZWxlZ2F0
ZSkgewotICAgICAgICAgICAgaGFuZGxlcnMuYXBwZW5kKHsgfSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgICsrZW50cnlwb2ludEluZGV4OwotICAgICAgICBo
YW5kbGVycy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+KGNvbnRleHQucHJvY2VkdXJlLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJ
bmRleCkpKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludEluZGV4ID09IG51
bUVudHJ5cG9pbnRzIC0gMSk7Ci19Ci0KIC8vIEN1c3RvbSB3YXNtIG9wcy4gVGhlc2UgYXJlIHRo
ZSBvbmVzIHRvbyBtZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCiAKIHZvaWQgQjNJUkdlbmVyYXRv
cjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCShyZXZpc2lvbiAyODc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1
OSw2IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogCiBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9u
TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50
cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwogCi12b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiwgY29uc3QgQ29tcGlsYXRp
b25Db250ZXh0JiwgTGlua0J1ZmZlciYpOwogdm9pZCBjb21wdXRlUENUb0NvZGVPcmlnaW5NYXAo
Q29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1ZmZlciYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cAkocmV2aXNpb24gMjg3NzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJC
UVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiV2Fz
bUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21DYWxsZWVHcm91cC5oIgogI2luY2x1ZGUgIldhc21D
YWxsZWVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIldhc21JUkdlbmVyYXRvckhlbHBlcnMuaCIKICNp
bmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3Vu
dC5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC0yMDMsOCArMjA0LDYgQEAgc3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IEJCUVBsYQogICAgIGJvb2wgZm9yY2VVc2luZ0Iz
ID0gZmFsc2U7CiAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9s
ZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3
ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAgZm9yY2VVc2luZ0IzID0g
dHJ1ZTsKLSAgICBlbHNlIGlmICghbV9tb2R1bGVJbmZvcm1hdGlvbi0+bV9mdW5jdGlvbkRvZXNO
b3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0KGZ1bmN0aW9uSW5kZXgpKQotICAgICAgICBmb3JjZVVz
aW5nQjMgPSB0cnVlOwogICAgIGVsc2UgaWYgKCFPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQog
ICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JUkdlbmVyYXRvckhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZX0IzSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCisjaW5jbHVk
ZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisj
aW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1
ZGUgIldhc21JbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0cnVjdCBQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlIHsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZvaWQgZ2Vu
ZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcywgR2VuZXJhdG9yKiBnZW5lcmF0b3IpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV9jYWxsU2l0ZUluZGV4ID09IHNfaW52YWxpZENhbGxTaXRlSW5kZXgpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgU3RhY2tNYXAgdmFsdWVzKG1fbnVtTGl2ZVZhbHVlcyk7Cisg
ICAgICAgIHVuc2lnbmVkIHBhcmFtc09mZnNldCA9IHBhcmFtcy5zaXplKCkgLSBtX251bUxpdmVW
YWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIGNoaWxkcmVuT2Zmc2V0ID0gcGFyYW1zLnZhbHVlKCkt
Pm51bUNoaWxkcmVuKCkgLSBtX251bUxpdmVWYWx1ZXM7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX251bUxpdmVWYWx1ZXM7ICsraSkKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9
IE9TUkVudHJ5VmFsdWUocGFyYW1zW2kgKyBwYXJhbXNPZmZzZXRdLCBwYXJhbXMudmFsdWUoKS0+
Y2hpbGQoaSArIGNoaWxkcmVuT2Zmc2V0KS0+dHlwZSgpKTsKKworICAgICAgICBnZW5lcmF0b3It
PmFkZFN0YWNrTWFwKG1fY2FsbFNpdGVJbmRleCwgV1RGTW92ZSh2YWx1ZXMpKTsKKyAgICAgICAg
aml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9jYWxsU2l0ZUluZGV4KSwg
Q0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52YWxp
ZENhbGxTaXRlSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisK
KyAgICB1bnNpZ25lZCBtX2NhbGxTaXRlSW5kZXggeyBzX2ludmFsaWRDYWxsU2l0ZUluZGV4IH07
CisgICAgdW5zaWduZWQgbV9udW1MaXZlVmFsdWVzOworfTsKKworCitzdGF0aWMgaW5saW5lIHZv
aWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVu
Y3Rpb24qIGZ1bmN0aW9uLCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQsIExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgaWYgKCFjb250ZXh0LnByb2NlZHVyZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsKKyAgICB1bnNp
Z25lZCBudW1FbnRyeXBvaW50cyA9IGNvbnRleHQucHJvY2VkdXJlLT5udW1FbnRyeXBvaW50cygp
OworICAgIGZvciAoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlckluZm8gOiBmdW5j
dGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlw
b2ludEluZGV4IDwgbnVtRW50cnlwb2ludHMpOworICAgICAgICBpZiAoaGFuZGxlckluZm8ubV90
eXBlID09IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSkgeworICAgICAgICAgICAgaGFuZGxlcnMuYXBw
ZW5kKHsgfSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgICsr
ZW50cnlwb2ludEluZGV4OworICAgICAgICBoYW5kbGVycy5hcHBlbmQobGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGNvbnRleHQucHJvY2VkdXJlLT5jb2RlKCku
ZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCkpKTsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlQoZW50cnlwb2ludEluZGV4ID09IG51bUVudHJ5cG9pbnRzIC0gMSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBlbWl0UmV0aHJvd0ltcGwoQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAg
Ly8gSW5zdGFuY2UgaW4gYXJndW1lbnRHUFIwCisgICAgLy8gZnJhbWUgcG9pbnRlciBpbiBhcmd1
bWVudEdQUjEKKyAgICAvLyBleGNlcHRpb24gcG9pbnRlciBpbiBhcmd1bWVudEdQUjIKKworICAg
IEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOwor
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsKKyAgICB7CisgICAgICAg
IGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNl
QWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaCk7Cisg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBNYXJrZWRC
bG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkp
LCBzY3JhdGNoKTsKKyAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAg
ICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFByZWNpc2VBbGxvY2F0aW9uOjpvZmZz
ZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNpc2VBbGxvY2F0aW9u
OjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmpp
dCk7CisgICAgfQorICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHNjcmF0Y2gpOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soW2Nh
bGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRocm93KSk7
CisgICAgfSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbWl0VGhyb3dJbXBsKENDYWxsSGVs
cGVycyYgaml0LCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCkKK3sKKyAgICAvLyBJbnN0YW5jZSBp
biBhcmd1bWVudEdQUjAKKyAgICAvLyBmcmFtZSBwb2ludGVyIGluIGFyZ3VtZW50R1BSMQorICAg
IC8vIGFyZ3VtZW50cyB0byB0aGUgZXhjZXB0aW9uIG9mZiBvZiBzdGFjayBwb2ludGVyCisKKyAg
ICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsK
KyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgeworICAgICAg
ICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVs
cGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lz
ZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOwor
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2Vk
QmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgp
KSwgc2NyYXRjaCk7CisgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisKKyAg
ICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zm
c2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlv
bjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7CisKKyAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZq
aXQpOworICAgIH0KKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcihzY3JhdGNoKTsKKworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoZXhjZXB0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJh
dGlvblB0clRhZyk7CisgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRocm93KSk7CisgICAgfSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWlsZEVudHJ5QnVmZmVyRm9yQ2F0Y2goUHJvYmU6OkNv
bnRleHQmIGNvbnRleHQpCit7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZw
PENhbGxGcmFtZSo+KCk7CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gY2FsbEZy
YW1lLT5jYWxsU2l0ZUluZGV4KCk7CisgICAgT3B0aW1pemluZ0pJVENhbGxlZSogY2FsbGVlID0g
Yml0d2lzZV9jYXN0PE9wdGltaXppbmdKSVRDYWxsZWUqPihjYWxsRnJhbWUtPmNhbGxlZSgpLmFz
V2FzbUNhbGxlZSgpKTsKKyAgICBjb25zdCBTdGFja01hcCYgc3RhY2ttYXAgPSBjYWxsZWUtPnN0
YWNrbWFwKGNhbGxTaXRlSW5kZXgpOworICAgIFZNKiB2bSA9IGNvbnRleHQuZ3ByPFZNKj4oR1BS
SW5mbzo6cmVnVDApOworICAgIHVpbnQ2NF90KiBidWZmZXIgPSB2bS0+d2FzbUNvbnRleHQuc2Ny
YXRjaEJ1ZmZlckZvclNpemUoc3RhY2ttYXAuc2l6ZSgpICogOCk7CisgICAgbG9hZFZhbHVlc0lu
dG9CdWZmZXIoY29udGV4dCwgc3RhY2ttYXAsIGJ1ZmZlcik7CisKKyAgICBjb250ZXh0LmdwcihH
UFJJbmZvOjphcmd1bWVudEdQUjApID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYnVmZmVyKTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGVtaXRDYXRjaFByb2xvZ3VlU2hhcmVkKEIzOjpBaXI6
OkNvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIGppdC5lbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEdQUkluZm86OnJlZ1QwKTsK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGluZyBwcmVjaXNlIGFsbG9jYXRpb25zIGlu
IFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVudHJ5cG9pbnRzIG1pZ2h0IGJlIHVubmVjZXNzYXJ5
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEy
MTMKKyAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICBq
aXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tN
YXNrKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1h
cmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICBwcmVjaXNlQWxsb2Nh
dGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0
KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6
ZSgpKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsK
KyAgICB9CisgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDMpOworCisgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9y
V2FzbUNhdGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LnN0b3JlUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkpKTsKKyAgICBq
aXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QzLCBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOworCisgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNh
bGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKKworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGpp
dC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6cmVnVDMpOworCisgICAgaml0LnBy
b2JlKHRhZ0NGdW5jdGlvbjxKSVRQcm9iZVB0clRhZz4oYnVpbGRFbnRyeUJ1ZmZlckZvckNhdGNo
KSwgbnVsbHB0cik7CisKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KC1jb2RlLmZyYW1lU2l6ZSgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyODc3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksOSArNTU5LDYgQEAgc3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdAogICAgIFJFTEVBU0VfQVNTRVJUKHVzZWRCdWZm
ZXIuY2FwYWNpdHkoKSA9PSBvbGRDYXBhY2l0eSk7CiAgICAgKnRocmVhZFNwZWNpZmljID0gV1RG
TW92ZSh1c2VkQnVmZmVyKTsKIAotICAgIGlmICghbV91c2VzRXhjZXB0aW9ucykKLSAgICAgICAg
bV9pbmZvLm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5xdWlja1NldChtX2Z1bmN0aW9u
SW5kZXgpOwotCiAgICAgcmV0dXJuIFdURk1vdmUobV9jb2RlQmxvY2spOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24u
aAkocmV2aXNpb24gMjg3NzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZUluZm9ybWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNiBAQCBzdHJ1
Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkCiAKICAgICBCaXRWZWN0b3IgbV9k
ZWNsYXJlZEZ1bmN0aW9uczsKICAgICBCaXRWZWN0b3IgbV9kZWNsYXJlZEV4Y2VwdGlvbnM7Ci0g
ICAgQml0VmVjdG9yIG1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9uczsKICAgICBtdXRhYmxl
IEJpdFZlY3RvciBtX3JlZmVyZW5jZWRGdW5jdGlvbnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyODc3NjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIKKyNpbmNs
dWRlICJXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9u
LmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5UGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9TUkVu
dHJ5UGxhbi5jcHAJKHJldmlzaW9uIDI4Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21JUkdlbmVyYXRvckhlbHBl
cnMuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIKICNpbmNsdWRlICJXYXNtTmFt
ZVNlY3Rpb24uaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAJ
KHJldmlzaW9uIDI4Nzc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDYgQEAgYXV0byBT
dHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaQogICAgIG1fZnVuY3Rpb25Db3VudCA9
IGZ1bmN0aW9uQ291bnQ7CiAgICAgbV9mdW5jdGlvbkluZGV4ID0gMDsKICAgICBtX2NvZGVPZmZz
ZXQgPSBtX29mZnNldDsKLSAgICBtX2luZm8tPm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9u
cy5lbnN1cmVTaXplKGZ1bmN0aW9uQ291bnQpOwogCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihm
dW5jdGlvbkNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNv
ZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZnVuY3Rpb25Db3VudCk7CiAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNpemUo
KSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5jdGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhlIGRl
Y2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448622</attachid>
            <date>2022-01-07 12:56:27 -0800</date>
            <delta_ts>2022-01-07 17:58:16 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>77703</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3NzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDIyLTAxLTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBzdXBwb3J0IGZvciBXYXNtIGV4Y2VwdGlvbnMgaW4gdGhlIEFpciBnZW5lcmF0b3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vODQxMzI4NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgdG8gQWlyIGZv
ciBXYXNtIGV4Y2VwdGlvbnMuIFRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBpcyB2ZXJ5IHNp
bWlsYXIgdG8gaG93IHdlIGltcGxlbWVudCBpdCBpbiB0aGUgQjMgV2FzbSB0aWVyLiBUaGlzIHBh
dGNoCisgICAgICAgIHNoYXJlcyBjb2RlIHdpdGggdGhlIEIzIHRpZXIgd2hlcmUgaXQgY2FuLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIHdoZXJlIHlvdSB0
aGUgZWFybHkgY2xvYmJlcmVkIHJlZ2lzdGVycworICAgICAgICBvZiBhIHBhdGNocG9pbnQgY291
bGQgcHJldmVudCB0aGUgcHJpb3IgaW5zdHJ1Y3Rpb24gZnJvbSByZWdpc3RlciBhbGxvY2F0aW5n
LgorICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBoYXZlIHRoZSBpbnN0cnVjdGlvbnMgSTEs
IEkyLiBXaGVyZSBJMiBjbG9iYmVycyB0aGUKKyAgICAgICAgZW50aXJlIHJlZ2lzdGVyIGZpbGUu
IEl0IGRvZXNuJ3QgbWVhbiBJMSBzaG91bGRuJ3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorICAgICAg
ICByZWdpc3RlcnMuIEluc3RlYWQsIHRoZSBjbG9iYmVyIHNob3VsZCBvY2N1ciBhZnRlciBJMSBl
eGVjdXRlcy4gVGhpcyBwYXRjaAorICAgICAgICBmaXhlcyB0aGUgaXNzdWUuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGIz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXJh
dGUpOgorICAgICAgICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpDb250cm9sRGF0YSk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNUcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQ2F0Y2gpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmNvbnZlcnRU
cnlUb0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xE
YXRhOjpjb252ZXJ0VHJ5VG9DYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3RhcnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnRyeUVuZCBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5RGVwdGggY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2lu
ZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6ZXhjZXB0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmVtaXRDYWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRTdGFja01hcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjp0YWtl
U3RhY2ttYXBzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnRha2VFeGNl
cHRpb25IYW5kbGVycyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpuZXdU
bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdFBhdGNocG9pbnQp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZmluYWxpemVFbnRyeXBvaW50cyk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpmb3JFYWNoTGl2ZVZhbHVlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2spOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZENhdGNoQWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGREZWxlZ2F0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkVGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkUmV0aHJvdyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRF
bmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUFpcik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlv
bnMpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjppbnNlcnRFbnRyeVN3aXRjaCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlOjpnZW5lcmF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
OmJ1aWxkRW50cnlCdWZmZXJGb3JDYXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
OmNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAg
ICogd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpnZW5lcmF0ZSBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6ZW1pdFJldGhyb3dJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW1pdFRo
cm93SW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OmJ1aWxkRW50cnlCdWZmZXJGb3JDYXRjaCk6
CisgICAgICAgIChKU0M6Oldhc206OmVtaXRDYXRjaFByb2xvZ3VlU2hhcmVkKToKKyAgICAgICAg
KiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRp
b24uaDoKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKiB3YXNtL1dh
c21PU1JFbnRyeVBsYW4uY3BwOgorICAgICAgICAqIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VDb2RlU2VjdGlv
blNpemUpOgorCiAyMDIyLTAxLTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgog
CiAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyBuZWVkcyB0byBoYW5kbGUg
dHVwbGVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg3NzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkU2NUEx
RTI3NjgyNzcxMDAyQjRDMEEgLyogQjNFc3RpbWF0ZVN0YXRpY0V4ZWN1dGlvbkNvdW50cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFNjVBMUIyNzY4
Mjc2MDAwMkI0QzBBIC8qIEIzRXN0aW1hdGVTdGF0aWNFeGVjdXRpb25Db3VudHMuaCAqLzsgfTsK
IAkJNTJFRUQ3OTQyNDkyQjg3MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4
MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIw
ODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0Mg
LyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgfTsKKwkJNTJGREFCQzMyNzg4MDc2
QjAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRkRBQkMyMjc4ODA3NjkwMEMxNUI1OSAvKiBX
YXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0
NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNl
My1tbS5tbSAqLzsgfTsKIAkJNTMwQTY2QkExRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3Vy
Y2U0LW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTMwQTY2QjgxRkEzRTc3RTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tICovOyB9Owog
CQk1MzBBNjZCQjFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTUtbW0ubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCNTFGQTNFNzdE
MDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTUtbW0ubW0gKi87IH07CkBAIC0zNzYwLDYgKzM3NjEs
NyBAQAogCQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUMxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHBhdGggPSBqcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MkZEQUJDMjI3ODgwNzY5MDBDMTVCNTkgLyogV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzMDA3NDBDMjJERDZGNjYwMEI5QUNCMyAvKiBKU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmluYWxpemF0aW9uUmVnaXN0cnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzBBNjM0MDFGQTNFMzFDMDAyNkE1NDUg
LyogU291cmNlc0NvY29hLnR4dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTb3VyY2VzQ29jb2Eu
dHh0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzBBNjM0MTFGQTNFMzFEMDAyNkE1
NDUgLyogU291cmNlcy50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU291cmNlcy50eHQ7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzA1LDYgKzczMDcsNyBAQAogCQkJCUUzODM1
MDA5MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggKi8sCiAJCQkJMTQ4NTIxRDUyNkVB
RUJERjAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5jcHAgKi8sCiAJCQkJMTQ4NTIxRDcyNkVB
RUJGRTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5oICovLAorCQkJCTUyRkRBQkMyMjc4ODA3
NjkwMEMxNUI1OSAvKiBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggKi8sCiAJCQkJQUQ4RkYzOTYx
RUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5jcHAgKi8sCiAJCQkJQUQ4RkYzOTUx
RUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovLAogCQkJCUFENUMzNkRFMUY2
OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuY3BwICovLApAQCAtMTExNjAsNiArMTExNjMs
NyBAQAogCQkJCUUzQTMyQkM3MUZDODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTM5M0FERDgxRkU3MDJEMDAwMjJENjgxIC8qIFdlYWtNYXBJbXBsSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdl
YWtNYXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRkRBQkMzMjc4ODA3NkIwMEMx
NUI1OSAvKiBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Mzk5
MzBDODIyQUQzQjlBMDA1MUNERTIgLyogV2Vha09iamVjdFJlZkNvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MzlCRkJBRTIyQUQzQzNBMDAyM0Y0QzAgLyogV2Vha09iamVjdFJlZlBy
b3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGQTExNEVFMUFDQzAwRDZENUQ0IC8q
IFdlYWtTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwCShyZXZpc2lvbiAyODc3MzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRH
ZW5lcmF0ZUNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxMiwxNiArNjEyLDE4IEBAIHZvaWQgR2Vu
ZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2VuZXIKICAgICAgICAgICAgIH0pOwogCiAgICAg
ICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyZWRSZWdpc3RlcnM7CisgICAgICAgICAgICBSZWdp
c3RlclNldCBlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnM7CiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpOwog
ICAgICAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoIHx8IChuZXh0SW5z
dCAmJiBuZXh0SW5zdC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY2xvYmJlcmVkUmVnaXN0ZXJzLm1lcmdlKGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmtpbmQub3Bjb2Rl
ID09IFBhdGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkUmVnaXN0ZXJzLm1l
cmdlKG5leHRJbnN0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVhcmx5TmV4dENsb2JiZXJlZFJlZ2lzdGVycy5tZXJnZShuZXh0SW5zdC0+ZXh0
cmFFYXJseUNsb2JiZXJlZFJlZ3MoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVk
UmVnaXN0ZXJzLmZpbHRlcihtX2FsbG93ZWRSZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAg
ICBjbG9iYmVyZWRSZWdpc3RlcnMuZXhjbHVkZShtX25hbWVkRGVmZFJlZ3MpOworICAgICAgICAg
ICAgICAgICAgICBlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnMuZmlsdGVyKG1fYWxsb3dlZFJl
Z2lzdGVycyk7CiAKICAgICAgICAgICAgICAgICAgICAgbV9uYW1lZERlZmRSZWdzLm1lcmdlKGNs
b2JiZXJlZFJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzM5LDMwICs3NDEsMTUg
QEAgdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpnZW5lcgogICAgICAgICAgICAg
ICAgIGluc3QucmVwb3J0VXNlZFJlZ2lzdGVycyhyZWdpc3RlclNldCk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmIChpbnN0LmlzVGVybWluYWwoKSAmJiBibG9jay0+bnVtU3VjY2Vz
c29ycygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgd2Ugc3BpbGwgZXZlcnl0
aGluZyBiZXR3ZWVuIGJsb2NrIGJvdW5kYXJpZXMuIEhvd2V2ZXIsIHdlIGhhdmUgYSBzbWFsbAot
ICAgICAgICAgICAgICAgIC8vIGhldXJpc3RpYyB0byBwYXNzIGFsb25nIHJlZ2lzdGVyIHN0YXRl
LiBXZSBzaG91bGQgZXZlbnR1YWxseSBtYWtlIHRoaXMgYmV0dGVyLgotICAgICAgICAgICAgICAg
IC8vIFdoYXQgd2UgZG8gbm93IGlzIGlmIHdlIGhhdmUgYSBzdWNjZXNzb3Igd2l0aCBhIHNpbmds
ZSBwcmVkZWNlc3NvciAodXMpLCBhbmQgd2UKLSAgICAgICAgICAgICAgICAvLyBoYXZlbid0IHll
dCBnZW5lcmF0ZWQgY29kZSBmb3IgaXQsIHdlIGdpdmUgaXQgb3VyIHJlZ2lzdGVyIHN0YXRlLiBJ
ZiBhbGwgb3VyIHN1Y2Nlc3NvcnMKLSAgICAgICAgICAgICAgICAvLyBjYW4gdGFrZSBvbiBvdXIg
cmVnaXN0ZXIgc3RhdGUsIHdlIGRvbid0IGZsdXNoIGF0IHRoZSBlbmQgb2YgdGhpcyBibG9jay4K
LQotICAgICAgICAgICAgICAgIGJvb2wgZXZlcnlTdWNjZXNzb3JHZXRzT3VyUmVnaXN0ZXJTdGF0
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yQmxvY2soaSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChzdWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEgJiYgIWNvbnRleHQuYmxv
Y2tMYWJlbHNbc3VjY2Vzc29yXS0+aXNTZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRBbGxvY2F0aW9uTWFwW3N1Y2Nlc3Nvcl0gPSBjdXJyZW50QWxsb2NhdGlvbjsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZXZlcnlTdWNjZXNz
b3JHZXRzT3VyUmVnaXN0ZXJTdGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoIWV2ZXJ5U3VjY2Vzc29yR2V0c091clJlZ2lzdGVyU3RhdGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbV9saXZlbmVzcy0+bGl2ZUF0VGFpbChi
bG9jaykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSAmJiBpc0Rp
c2FsbG93ZWRSZWdpc3Rlcih0bXAucmVnKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlZyByZWcgPSBtX21hcFt0
bXBdLnJlZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaCh0bXAsIHJlZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gY2xvYmJlciA9IFsmXSAoY29u
c3QgUmVnaXN0ZXJTZXQmIHNldCkgeworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHNl
dCkgeworICAgICAgICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChjdXJyZW50QWxsb2NhdGlvbltyZWddID09IHRtcCk7CisgICAgICAgICAgICAg
ICAgICAgIG1fYXZhaWxhYmxlUmVnc1t0bXAuYmFuaygpXS5zZXQocmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKSA9IFRtcCgpOworICAgICAgICAg
ICAgICAgICAgICBtX21hcFt0bXBdLnJlZyA9IFJlZygpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGlmICghaW5zdC5pc1Rl
cm1pbmFsKCkpIHsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcDsKQEAg
LTc3MCwxNSArNzU3LDQxIEBAIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Z2Vu
ZXIKICAgICAgICAgICAgICAgICAgICAganVtcCA9IGluc3QuZ2VuZXJhdGUoKm1faml0LCBjb250
ZXh0KTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGp1bXAsICFqdW1wLmlzU2V0KCkp
OwogCi0gICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogY2xvYmJlcmVkUmVnaXN0ZXJzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnRBbGxvY2F0aW9uW3JlZ10gPT0gdG1wKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCldLnNldChyZWcpOwotICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRBbGxvY2F0aW9uLT5hdChyZWcpID0gVG1wKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fbWFwW3RtcF0ucmVnID0gUmVnKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFsbG9jTmFtZWQoZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICBjbG9iYmVyKGNsb2JiZXJlZFJlZ2lzdGVycyk7CisgICAgICAgICAg
ICAgICAgY2xvYmJlcihlYXJseU5leHRDbG9iYmVyZWRSZWdpc3RlcnMpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobmVlZHNUb0dlbmVyYXRlKTsKKworICAg
ICAgICAgICAgICAgIGNsb2JiZXIoY2xvYmJlcmVkUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZWFybHlOZXh0Q2xvYmJlcmVkUmVnaXN0ZXJzLmlzRW1wdHkoKSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBCeSBkZWZhdWx0LCB3ZSBzcGlsbCBldmVyeXRoaW5nIGJldHdlZW4gYmxvY2sgYm91
bmRhcmllcy4gSG93ZXZlciwgd2UgaGF2ZSBhIHNtYWxsCisgICAgICAgICAgICAgICAgICAgIC8v
IGhldXJpc3RpYyB0byBwYXNzIGFsb25nIHJlZ2lzdGVyIHN0YXRlLiBXZSBzaG91bGQgZXZlbnR1
YWxseSBtYWtlIHRoaXMgYmV0dGVyLgorICAgICAgICAgICAgICAgICAgICAvLyBXaGF0IHdlIGRv
IG5vdyBpcyBpZiB3ZSBoYXZlIGEgc3VjY2Vzc29yIHdpdGggYSBzaW5nbGUgcHJlZGVjZXNzb3Ig
KHVzKSwgYW5kIHdlCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmVuJ3QgeWV0IGdlbmVyYXRl
ZCBjb2RlIGZvciBpdCwgd2UgZ2l2ZSBpdCBvdXIgcmVnaXN0ZXIgc3RhdGUuIElmIGFsbCBvdXIg
c3VjY2Vzc29ycworICAgICAgICAgICAgICAgICAgICAvLyBjYW4gdGFrZSBvbiBvdXIgcmVnaXN0
ZXIgc3RhdGUsIHdlIGRvbid0IGZsdXNoIGF0IHRoZSBlbmQgb2YgdGhpcyBibG9jay4KKworCisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZXZlcnlTdWNjZXNzb3JHZXRzT3VyUmVnaXN0ZXJTdGF0
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEgJiYg
IWNvbnRleHQuYmxvY2tMYWJlbHNbc3VjY2Vzc29yXS0+aXNTZXQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50QWxsb2NhdGlvbk1hcFtzdWNjZXNzb3JdID0gY3VycmVudEFs
bG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXZlcnlTdWNjZXNzb3JHZXRzT3VyUmVnaXN0ZXJTdGF0ZSA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghZXZlcnlTdWNj
ZXNzb3JHZXRzT3VyUmVnaXN0ZXJTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChUbXAgdG1wIDogbV9saXZlbmVzcy0+bGl2ZUF0VGFpbChibG9jaykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgaXNEaXNhbGxvd2VkUmVnaXN0ZXIo
dG1wLnJlZygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlZyByZWcgPSBtX21hcFt0bXBdLnJlZykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2godG1wLCByZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gSnVtcCAmJiBi
bG9jay0+c3VjY2Vzc29yQmxvY2soMCkgPT0gbV9jb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQog
ICAgICAgICAgICAgICAgICAgICBuZWVkc1RvR2VuZXJhdGUgPSBmYWxzZTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyODc3MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUg
Ildhc21Db250ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAj
aW5jbHVkZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbUlSR2VuZXJhdG9y
SGVscGVycy5oIgogI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21NZW1v
cnkuaCIKICNpbmNsdWRlICJXYXNtT1NSRW50cnlEYXRhLmgiCkBAIC0xMzIsMTQgKzEzMywyNCBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwg
OD47CiAKICAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewotICAgICAgICBDb250cm9sRGF0YShCMzo6
T3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBSZXN1bHRMaXN0IHJlc3VsdFRt
cHMsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIEJhc2ljQmxvY2sq
IHNwZWNpYWwgPSBudWxscHRyKQorICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luLCBCbG9j
a1NpZ25hdHVyZSByZXN1bHQsIFJlc3VsdExpc3QgcmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5cGUs
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIp
CiAgICAgICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKICAgICAgICAgICAgICwgY29u
dGludWF0aW9uKGNvbnRpbnVhdGlvbikKICAgICAgICAgICAgICwgc3BlY2lhbChzcGVjaWFsKQog
ICAgICAgICAgICAgLCByZXN1bHRzKHJlc3VsdFRtcHMpCiAgICAgICAgICAgICAsIHJldHVyblR5
cGUocmVzdWx0KQogICAgICAgICB7Ci0gICAgICAgICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsK
KyAgICAgICAgfQorCisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4sIEJsb2NrU2lnbmF0
dXJlIHJlc3VsdCwgUmVzdWx0TGlzdCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNC
bG9jayogY29udGludWF0aW9uLCB1bnNpZ25lZCB0cnlTdGFydCwgdW5zaWduZWQgdHJ5RGVwdGgp
CisgICAgICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKKyAgICAgICAgICAgICwgY29u
dGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgICwgc3BlY2lhbChudWxscHRyKQor
ICAgICAgICAgICAgLCByZXN1bHRzKHJlc3VsdFRtcHMpCisgICAgICAgICAgICAsIHJldHVyblR5
cGUocmVzdWx0KQorICAgICAgICAgICAgLCBtX3RyeVN0YXJ0KHRyeVN0YXJ0KQorICAgICAgICAg
ICAgLCBtX3RyeUNhdGNoRGVwdGgodHJ5RGVwdGgpCisgICAgICAgIHsKICAgICAgICAgfQogCiAg
ICAgICAgIENvbnRyb2xEYXRhKCkKQEAgLTE0OCw4ICsxNTksOCBAQCBwdWJsaWM6CiAKICAgICAg
ICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4g
Y29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CiAgICAgICAgIHN0YXRpYyBi
b29sIGlzVHJ5KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJs
b2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VHJ5OyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlzQ2F0
Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBl
KCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNo
KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25z
dCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gaXNBbnlDYXRjaChjb250cm9sKSAmJiBj
b250cm9sLmNhdGNoS2luZCgpID09IENhdGNoS2luZDo6Q2F0Y2g7IH0KICAgICAgICAgc3RhdGlj
IGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29u
dHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9CiAgICAgICAgIHN0YXRp
YyBib29sIGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJv
bC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0KICAgICAgICAgc3RhdGljIGJvb2wg
aXNCbG9jayhjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9CkBAIC0yMjEsNiArMjMyLDU0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5yZXR1cm5UeXBlKGkpOwogICAgICAg
ICB9CiAKKyAgICAgICAgdm9pZCBjb252ZXJ0VHJ5VG9DYXRjaCh1bnNpZ25lZCB0cnlFbmRDYWxs
U2l0ZUluZGV4LCBUeXBlZFRtcCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9s
QmxvY2tUeXBlID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0g
Q2F0Y2hLaW5kOjpDYXRjaDsKKyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJ
bmRleDsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBjb252ZXJ0VHJ5VG9DYXRjaEFsbCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0
ZUluZGV4LCBUeXBlZFRtcCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9sQmxv
Y2tUeXBlID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0
Y2hLaW5kOjpDYXRjaEFsbDsKKyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJ
bmRleDsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisK
KyAgICAgICAgdW5zaWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxv
Y2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5U3Rh
cnQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNh
dGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQorCisgICAgICAg
IHVuc2lnbmVkIHRyeURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9
PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeUNhdGNoRGVwdGg7
CisgICAgICAgIH0KKworICAgICAgICBDYXRjaEtpbmQgY2F0Y2hLaW5kKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpD
YXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9jYXRjaEtpbmQ7CisgICAgICAgIH0KKworICAg
ICAgICBUeXBlZFRtcCBleGNlcHRpb24oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2V4Y2VwdGlvbjsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUgY29udHJvbEJs
b2NrVHlwZTsKQEAgLTIyOCw2ICsyODcsMTEgQEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2Nr
KiBzcGVjaWFsOwogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CiAgICAgICAgIEJsb2NrU2ln
bmF0dXJlIHJldHVyblR5cGU7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5U3RhcnQ7CisgICAgICAg
IHVuc2lnbmVkIG1fdHJ5RW5kOworICAgICAgICB1bnNpZ25lZCBtX3RyeUNhdGNoRGVwdGg7Cisg
ICAgICAgIENhdGNoS2luZCBtX2NhdGNoS2luZDsKKyAgICAgICAgVHlwZWRUbXAgbV9leGNlcHRp
b247CiAgICAgfTsKIAogICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CkBAIC0y
NjAsNiArMzI0LDggQEAgcHVibGljOgogCiAgICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIFRpZXJVcENvdW50KiwgY29uc3QgU2lnbmF0dXJlJik7CiAKKyAgICB2b2lkIGZpbmFsaXpl
RW50cnlwb2ludHMoKTsKKwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUg
YWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwpAQCAtMzQ5LDcgKzQxNSw3IEBAIHB1YmxpYzoK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3Vs
dHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxl
KCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2Fs
bChUeXBlZFRtcCBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwgY29u
c3QgU2lnbmF0dXJlJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0
TGlzdCYpOwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0
Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3Vs
dExpc3QmIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25z
dHJhaW5lZFRtcD4mJiBleHRyYUFyZ3MgPSB7IH0pOworICAgIHN0ZDo6cGFpcjxCMzo6UGF0Y2hw
b2ludFZhbHVlKiwgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJO
IGVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3Qg
UmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9y
PENvbnN0cmFpbmVkVG1wPiBleHRyYUFyZ3MgPSB7IH0pOwogCiAgICAgUGFydGlhbFJlc3VsdCBh
ZGRTaGlmdChUeXBlLCBCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHBy
ZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJl
c3VsdCBhZGRJbnRlZ2VyU3ViKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBF
eHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpAQCAtMzYxLDExICs0
MjcsMzAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQog
ICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KIAorICAgIFRtcCBlbWl0Q2F0Y2hJ
bXBsKENhdGNoS2luZCwgQ29udHJvbFR5cGUmLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCA9IDAp
OworICAgIHRlbXBsYXRlIDxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoQjM6OlBhdGNocG9p
bnRWYWx1ZSosIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lQ2FwYWNpdHk+JiBhcmdzKTsK
KwogICAgIGNvbnN0IEJhZzxCMzo6UGF0Y2hwb2ludFZhbHVlKj4mIHBhdGNocG9pbnRzKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3BhdGNocG9pbnRzOwogICAgIH0KIAorICAgIHZv
aWQgYWRkU3RhY2tNYXAodW5zaWduZWQgY2FsbFNpdGVJbmRleCwgU3RhY2tNYXAmJiBzdGFja21h
cCkKKyAgICB7CisgICAgICAgIG1fc3RhY2ttYXBzLmFkZChDYWxsU2l0ZUluZGV4KGNhbGxTaXRl
SW5kZXgpLCBXVEZNb3ZlKHN0YWNrbWFwKSk7CisgICAgfQorCisgICAgU3RhY2tNYXBzJiYgdGFr
ZVN0YWNrbWFwcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX3N0YWNrbWFwcyk7
CisgICAgfQorCisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgdGFrZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFu
ZGxlcnMpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBCMzo6VHlwZSB0b0IzUmVzdWx0VHlwZShC
bG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmFsaWRh
dGVJbnN0KEluc3QmIGluc3QpCkBAIC00MTcsMTYgKzUwMiw2IEBAIHByaXZhdGU6CiAKICAgICBU
bXAgbmV3VG1wKEIzOjpCYW5rIGJhbmspCiAgICAgewotICAgICAgICBzd2l0Y2ggKGJhbmspIHsK
LSAgICAgICAgY2FzZSBCMzo6R1A6Ci0gICAgICAgICAgICBpZiAobV9mcmVlR1BzLnNpemUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9mcmVlR1BzLnRha2VMYXN0KCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBCMzo6RlA6Ci0gICAgICAgICAgICBpZiAobV9mcmVlRlBz
LnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9mcmVlRlBzLnRha2VMYXN0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9jb2RlLm5ld1Rt
cChiYW5rKTsKICAgICB9CiAKQEAgLTQ5Niw4ICs1NzEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
ZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDg+IHsgcmVzdWx0
IH0sIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4oKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHNp
emVfdCBpbmxpbmVTaXplPgorICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFz
aWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQsIFZlY3RvcjxD
b25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBhcmdzKQorICAgIHsKKyAgICAgICAgZW1pdFBh
dGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDg+IHsgcmVzdWx0IH0sIFdU
Rk1vdmUoYXJncykpOworICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHRUbXBU
eXBlLCBzaXplX3QgaW5saW5lU2l6ZT4KLSAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxv
Y2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBjb25zdCBWZWN0b3I8
UmVzdWx0VG1wVHlwZSwgOD4mICByZXN1bHRzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGlu
ZVNpemU+JiYgYXJncykKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2lj
QmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBjb25zdCBWZWN0b3I8UmVzdWx0VG1w
VHlwZSwgOD4mIHJlc3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBh
cmdzKQogICAgIHsKICAgICAgICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFsKQogICAgICAgICAg
ICAgbV9wYXRjaHBvaW50U3BlY2lhbCA9IHN0YXRpY19jYXN0PEIzOjpQYXRjaHBvaW50U3BlY2lh
bCo+KG1fY29kZS5hZGRTcGVjaWFsKG1ha2VVbmlxdWU8QjM6OlBhdGNocG9pbnRTcGVjaWFsPigp
KSk7CkBAIC01NDksNyArNjMwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEIzOjpWYWx1ZSog
ZHVtbXlWYWx1ZSA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIHRtcC50bXAuaXNH
UCgpID8gQjM6OkludDY0IDogQjM6OkRvdWJsZSwgMCk7CiAgICAgICAgICAgICBwYXRjaC0+YXBw
ZW5kKGR1bW15VmFsdWUsIHRtcC5yZXApOwogICAgICAgICAgICAgc3dpdGNoICh0bXAucmVwLmtp
bmQoKSkgewotICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OkNvbGRBbnk6IC8vIEIzOjpW
YWx1ZSBwcm9wYWdhdGVzIENvbGRBbnkgaW5mb3JtYXRpb24gYW5kIGxhdGVyIEFpciB3aWxsIGFs
bG9jYXRlIGFwcHJvcHJpYXRlIHN0YWNrLgorICAgICAgICAgICAgLy8gQjM6OlZhbHVlIHByb3Bh
Z2F0ZXMgKExhdGUpQ29sZEFueSBpbmZvcm1hdGlvbiBhbmQgbGF0ZXIgQWlyIHdpbGwgYWxsb2Nh
dGUgYXBwcm9wcmlhdGUgc3RhY2suCisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6Q29s
ZEFueTogCisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAgICAg
ICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICAgICAgICAg
IGluc3QuYXJncy5hcHBlbmQodG1wLnRtcCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01
NTksNyArNjQyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
KFRtcCh0bXAucmVwLnJlZygpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIEIzOjpWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDogewotICAgICAgICAgICAgICAgIEFT
U0VSVCghcGF0Y2gtPmVmZmVjdHMudGVybWluYWwpOwogICAgICAgICAgICAgICAgIEFyZyBhcmcg
PSBBcmc6OmNhbGxBcmcodG1wLnJlcC5vZmZzZXRGcm9tU1AoKSk7CiAgICAgICAgICAgICAgICAg
YXBwZW5kKGJhc2ljQmxvY2ssIHRtcC50bXAuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIHRt
cC50bXAsIGFyZyk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZy5jYW5SZXByZXNlbnQocGF0
Y2gtPmNoaWxkKGkpLT50eXBlKCkpKTsKQEAgLTY4OSw2ICs3NzEsMjMgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgZW1pdExvYWQoQjM6OkFpcjo6T3Bjb2RlIG9wLCBC
Mzo6VHlwZSB0eXBlLCBUbXAgYmFzZSwgc2l6ZV90IG9mZnNldCwgVG1wIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5
cGUodHlwZSkpKQorICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OmFkZHIoYmFzZSwgb2Zmc2V0
KSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHRlbXAyID0gZzY0
KCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIp
OworICAgICAgICAgICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwgYmFzZSwgdGVtcDIpOworICAgICAg
ICAgICAgYXBwZW5kKG9wLCBBcmc6OmFkZHIodGVtcDIpLCByZXN1bHQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdm9pZCBlbWl0TG9hZChUbXAgYmFzZSwgc2l6ZV90IG9mZnNldCwgVHlwZWRU
bXAgcmVzdWx0KQorICAgIHsKKyAgICAgICAgZW1pdExvYWQobW92ZU9wRm9yVmFsdWVUeXBlKHJl
c3VsdC50eXBlKCkpLCB0b0IzVHlwZShyZXN1bHQudHlwZSgpKSwgYmFzZSwgb2Zmc2V0LCByZXN1
bHQudG1wKCkpOworICAgIH0KKwogICAgIHZvaWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVs
cGVycyYsIEV4Y2VwdGlvblR5cGUpOwogCiAgICAgdm9pZCBlbWl0RW50cnlUaWVyVXBDaGVjaygp
OwpAQCAtNzM3LDYgKzgzNiw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dGVyTG9v
cHMubGFzdCgpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAg
ICB2b2lkIGZvckVhY2hMaXZlVmFsdWUoRnVuY3Rpb24pOworCiAgICAgRnVuY3Rpb25QYXJzZXI8
QWlySVJHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsKICAgICBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgbV9pbmZvOwogICAgIGNvbnN0IE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKQEAgLTc0OCwxNiArODUwLDE1IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPHVpbnQzMl90PiBtX291dGVyTG9vcHM7CiAgICAgQmFzaWNCbG9jayogbV9jdXJy
ZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgQmFzaWNCbG9jayogbV9yb290QmxvY2sgeyBudWxs
cHRyIH07CisgICAgQmFzaWNCbG9jayogbV9tYWluRW50cnlwb2ludFN0YXJ0IHsgbnVsbHB0ciB9
OwogICAgIFZlY3RvcjxUeXBlZFRtcD4gbV9sb2NhbHM7CiAgICAgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2Fs
bCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUg
cGF0Y2hlZCB3aXRoLgogICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVn
IH07CiAgICAgR1BSUmVnIG1fYm91bmRzQ2hlY2tpbmdTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9
OwogICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgR1BSUmVnIG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUiB7IEludmFsaWRHUFJSZWcgfTsK
ICAgICBib29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CiAKLSAgICBWZWN0b3I8VG1wLCA4PiBt
X2ZyZWVHUHM7Ci0gICAgVmVjdG9yPFRtcCwgOD4gbV9mcmVlRlBzOwotCiAgICAgSGFzaE1hcDxC
bG9ja1NpZ25hdHVyZSwgQjM6OlR5cGU+IG1fdHVwbGVNYXA7CiAgICAgLy8gVGhpcyBpcyBvbmx5
IGZpbGxlZCBpZiB3ZSBhcmUgZHVtcGluZyBJUi4KICAgICBCYWc8QjM6OlBhdGNocG9pbnRWYWx1
ZSo+IG1fcGF0Y2hwb2ludHM7CkBAIC03NzQsNiArODc1LDE1IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnM7CiAKICAgICBCMzo6UGF0Y2hwb2ludFNwZWNpYWwq
IG1fcGF0Y2hwb2ludFNwZWNpYWwgeyBudWxscHRyIH07CisKKyAgICBSZWZQdHI8QjM6OkFpcjo6
UHJvbG9ndWVHZW5lcmF0b3I+IG1fcHJvbG9ndWVHZW5lcmF0b3I7CisKKyAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IG1fY2F0Y2hFbnRyeXBvaW50czsKKworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1f
dHJ5Q2F0Y2hEZXB0aCB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5k
ZXggeyAwIH07CisgICAgU3RhY2tNYXBzIG1fc3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtl
ZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAogLy8gTWVtb3J5IGFjY2Vz
c2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMg
dGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KQEAgLTg0NywxMSArOTU3LDkg
QEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZAogICAgICAgICBtX2Nv
ZGUucGluUmVnaXN0ZXIobV9ib3VuZHNDaGVja2luZ1NpemVHUFIpOwogICAgIH0KIAotICAgIG1f
Y29kZS5zZXROdW1FbnRyeXBvaW50cygxKTsKLQotICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2Ug
PSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5wcm9sb2d1
ZVNjcmF0Y2hHUFJzWzFdIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworICAgIG1fcHJvbG9n
dWVXYXNtQ29udGV4dEdQUiA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQUnNbMV0gOiBtX3dhc21Db250ZXh0SW5zdGFuY2VH
UFI7CiAKLSAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJh
dG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9u
PihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgbV9w
cm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5l
cmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29k
ZSkgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CiAgICAgICAgIGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOwogCkBAIC04OTEs
MzEgKzk5OSwzOSBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAg
ICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5w
cm9sb2d1ZVNjcmF0Y2hHUFJzWzBdOwogCiAgICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3Rh
bmNlKGNvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNv
bnRleHRJbnN0YW5jZShtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpOwogCiAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHNjcmF0Y2gpOwogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBvdmVyZmxvdzsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkobmVlZFVuZGVyZmxvd0NoZWNrKSkKICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBw
ZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaCwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0
LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0
KCkpKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0Nh
bGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fcHJvbG9n
dWVXYXNtQ29udGV4dEdQUiwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSkp
OwogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVy
ZmxvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9u
KCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5z
dGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBObyBvdmVyZmxvdyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0
aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3QuCi0gICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRX
YXNtQ29udGV4dEluc3RhbmNlKG1fcHJvbG9ndWVXYXNtQ29udGV4dEdQUik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChtX2NhdGNoRW50cnlwb2ludHMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5wcm9s
b2d1ZVNjcmF0Y2hHUFJzWzBdOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIsIEluc3RhbmNlOjpvZmZzZXRP
Zk93bmVyKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNo
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0pOwogCi0gICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlw
b2ludCgwLCBXVEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7Ci0KICAgICBpZiAoQ29udGV4dDo6
dXNlRmFzdFRMUygpKSB7CiAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGc2NCgpOwogICAgICAg
ICAvLyBGSVhNRTogV291bGQgYmUgbmljZSB0byBvbmx5IGRvIHRoaXMgaWYgd2UgdXNlIGluc3Rh
bmNlIHZhbHVlLgotICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKGNvbnRleHRJbnN0YW5jZSksIG1f
aW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAobV9wcm9sb2d1ZVdhc21D
b250ZXh0R1BSKSwgbV9pbnN0YW5jZVZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9pbnN0
YW5jZVZhbHVlID0geyBUbXAoY29udGV4dEluc3RhbmNlKSwgVHlwZXM6Okk2NCB9OworICAgICAg
ICBtX2luc3RhbmNlVmFsdWUgPSB7IFRtcChtX3Byb2xvZ3VlV2FzbUNvbnRleHRHUFIpLCBUeXBl
czo6STY0IH07CisKKyAgICBhcHBlbmQoRW50cnlTd2l0Y2gpOworICAgIG1fbWFpbkVudHJ5cG9p
bnRTdGFydCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIG1fY3VycmVudEJsb2NrID0gbV9tYWlu
RW50cnlwb2ludFN0YXJ0OwogCiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwogICAgIG1f
bG9jYWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CkBAIC05NTQsNiArMTA3MCwz
NSBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAgZW1pdEVu
dHJ5VGllclVwQ2hlY2soKTsKIH0KIAordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZmluYWxpemVFbnRy
eXBvaW50cygpCit7CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSAxICsgbV9jYXRjaEVu
dHJ5cG9pbnRzLnNpemUoKTsKKyAgICBtX3Byb2Muc2V0TnVtRW50cnlwb2ludHMobnVtRW50cnlw
b2ludHMpOworICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoMCwgUmVmPEIzOjpB
aXI6OlByb2xvZ3VlR2VuZXJhdG9yPigqbV9wcm9sb2d1ZUdlbmVyYXRvcikpOworCisgICAgaWYg
KG1fY2F0Y2hFbnRyeXBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgUmVmPEIzOjpBaXI6OlByb2xv
Z3VlR2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxC
Mzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbdGhpc10gKENDYWxsSGVscGVycyYg
aml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBlbWl0Q2F0Y2hQ
cm9sb2d1ZVNoYXJlZChjb2RlLCBqaXQpOworCisgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNl
RmFzdFRMUygpKSB7CisgICAgICAgICAgICAgICAgLy8gU2hhcmVkIHByb2xvZ3VlIGV4cGVjdHMg
dGhpcyBpbiB0aGlzIHJlZ2lzdGVyIHdoZW4gZW50ZXJpbmcgdGhlIGZ1bmN0aW9uIHVzaW5nIGZh
c3QgVExTLgorICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShtX3By
b2xvZ3VlV2FzbUNvbnRleHRHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYXRjaEVudHJ5cG9pbnRzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgxICsgaSwg
Y2F0Y2hQcm9sb2d1ZUdlbmVyYXRvci5jb3B5UmVmKCkpOworICAgIH0KKworICAgIEJhc2ljQmxv
Y2s6OlN1Y2Nlc3Nvckxpc3Qgc3VjY2Vzc29yczsKKyAgICBzdWNjZXNzb3JzLmFwcGVuZChtX21h
aW5FbnRyeXBvaW50U3RhcnQpOworICAgIHN1Y2Nlc3NvcnMuYXBwZW5kVmVjdG9yKG1fY2F0Y2hF
bnRyeXBvaW50cyk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChudW1FbnRyeXBvaW50cyA9PSBzdWNj
ZXNzb3JzLnNpemUoKSk7CisgICAgbV9yb290QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IHN1Y2Nlc3Nv
cnM7Cit9CisKIEIzOjpUeXBlIEFpcklSR2VuZXJhdG9yOjp0b0IzUmVzdWx0VHlwZShCbG9ja1Np
Z25hdHVyZSByZXR1cm5UeXBlKQogewogICAgIGlmIChyZXR1cm5UeXBlLT5yZXR1cm5zVm9pZCgp
KQpAQCAtMTAyNyw2ICsxMTcyLDIxIEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRUaHJvd0V4
Y2VwdGlvbigKICAgICB9KTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgordm9p
ZCBBaXJJUkdlbmVyYXRvcjo6Zm9yRWFjaExpdmVWYWx1ZShGdW5jdGlvbiBmdW5jdGlvbikKK3sK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgIGZ1bmN0aW9u
KGxvY2FsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRl
eCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7Cisg
ICAgICAgIENvbnRyb2xEYXRhJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRy
b2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBt
X3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjazsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0bXAgOiBleHByZXNzaW9uU3RhY2spCisg
ICAgICAgICAgICBmdW5jdGlvbih0bXAudmFsdWUoKSk7CisgICAgICAgIGlmIChDb250cm9sVHlw
ZTo6aXNBbnlDYXRjaChkYXRhKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uKGRhdGEuZXhjZXB0aW9u
KCkpOworICAgIH0KK30KKwogYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBl
LCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHNpemVfdCBuZXdTaXpl
ID0gbV9sb2NhbHMuc2l6ZSgpICsgY291bnQ7CkBAIC0yOTAzLDEzICszMDYzLDkgQEAgdm9pZCBB
aXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjawogICAgIFZlY3RvcjxDb25zdHJhaW5l
ZFRtcD4gcGF0Y2hBcmdzOwogICAgIHBhdGNoQXJncy5hcHBlbmQoY291bnRkb3duUHRyKTsKIAot
ICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKLSAgICAgICAgcGF0Y2hBcmdzLmFwcGVu
ZChDb25zdHJhaW5lZFRtcChsb2NhbCwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29u
dHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewotICAgICAgICBTdGFjayYgZXhw
cmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2s7Ci0gICAgICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVl
IDogZXhwcmVzc2lvblN0YWNrKQotICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJh
aW5lZFRtcCh2YWx1ZS52YWx1ZSgpLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkpKTsKLSAgICB9Cisg
ICAgZm9yRWFjaExpdmVWYWx1ZShbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgcGF0Y2hBcmdzLmFw
cGVuZChDb25zdHJhaW5lZFRtcCh0bXAsIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOworICAgIH0p
OwogICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZW5jbG9zaW5nU3RhY2spCiAgICAg
ICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodmFsdWUudmFsdWUoKSwgQjM6OlZh
bHVlUmVwOjpDb2xkQW55KSk7CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUgOiBuZXdT
dGFjaykKQEAgLTMwMTIsNTcgKzMxNjgsMTczIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVs
c2VUb1VucmVhY2hhYmwKICAgICByZXR1cm4geyB9OwogfQogCi0vLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIFdhc20gZXhjZXB0aW9ucyBpbiB0aGUgQWlyIGdlbmVyYXRvcgotLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMQotYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgU3RhY2smKSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQs
IFN0YWNrJiBuZXdTdGFjaykgLT4gUGFydGlhbFJlc3VsdAogeworICAgICsrbV90cnlDYXRjaERl
cHRoOworCisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7Cisg
ICAgcmVzdWx0ID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25h
dHVyZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OlRyeSwgY29udGludWF0aW9uLCArK21fY2FsbFNp
dGVJbmRleCwgbV90cnlDYXRjaERlcHRoKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2sm
LCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OworICAgIHVuaWZ5VmFsdWVzV2l0aEJs
b2NrKGN1cnJlbnRTdGFjaywgZGF0YS5yZXN1bHRzKTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAg
bV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOworICAgIHJl
dHVybiBhZGRDYXRjaFRvVW5yZWFjaGFibGUoZXhjZXB0aW9uSW5kZXgsIHNpZ25hdHVyZSwgZGF0
YSwgcmVzdWx0cyk7CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNo
YWJsZSh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0
JikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3Rh
Y2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdHMpOworICAgIGFw
cGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRp
bnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKIH0K
IAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNo
YWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBUbXAgYnVmZmVyID0g
ZW1pdENhdGNoSW1wbChDYXRjaEtpbmQ6OkNhdGNoLCBkYXRhLCBleGNlcHRpb25JbmRleCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsr
aSkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAg
IFR5cGVkVG1wIHRtcCA9IHRtcEZvclR5cGUodHlwZSk7CisgICAgICAgIGVtaXRMb2FkKGJ1ZmZl
ciwgaSAqIHNpemVvZih1aW50NjRfdCksIHRtcCk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHRt
cCk7CisgICAgfQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYg
ZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgZW1pdENhdGNoSW1wbChDYXRjaEtpbmQ6OkNhdGNoQWxsLCBkYXRhKTsKICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9s
VHlwZSYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorVG1wIEFpcklSR2VuZXJhdG9y
OjplbWl0Q2F0Y2hJbXBsKENhdGNoS2luZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwgdW5zaWdu
ZWQgZXhjZXB0aW9uSW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4geyB9OworICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgbV9jYXRjaEVudHJ5cG9pbnRzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisKKyAgICBp
ZiAoQ29udHJvbFR5cGU6OmlzVHJ5KGRhdGEpKSB7CisgICAgICAgIGlmIChraW5kID09IENhdGNo
S2luZDo6Q2F0Y2gpCisgICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoKCsrbV9jYWxs
U2l0ZUluZGV4LCBnNjQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRhdGEuY29udmVy
dFRyeVRvQ2F0Y2hBbGwoKyttX2NhbGxTaXRlSW5kZXgsIGc2NCgpKTsKKyAgICB9CisgICAgLy8g
V2UgY29udmVydCBmcm9tICJ0cnkiIHRvICJjYXRjaCIgQ29udHJvbFR5cGUgYWJvdmUuIFRoaXMg
ZG9lc24ndAorICAgIC8vIGhhcHBlbiBpZiBDb250cm9sVHlwZSBpcyBhbHJlYWR5IGEgImNhdGNo
Ii4gVGhpcyBjYW4gaGFwcGVuIHdoZW4KKyAgICAvLyB3ZSBoYXZlIG11bHRpcGxlIGNhdGNoZXMg
bGlrZSAidHJ5IHt9IGNhdGNoKEEpe30gY2F0Y2goQil7fS4uLkNhdGNoQWxsKEUpe30iLgorICAg
IC8vIFdlIGp1c3QgY29udmVydCB0aGUgZmlyc3QgQ29udHJvbFR5cGUgdG8gYSBjYXRjaCwgdGhl
biB0aGUgb3RoZXJzIHdpbGwKKyAgICAvLyB1c2UgaXRzIGZpZWxkcy4KKyAgICBBU1NFUlQoQ29u
dHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpOworCisgICAgSGFuZGxlclR5cGUgaGFuZGxlclR5
cGUgPSBraW5kID09IENhdGNoS2luZDo6Q2F0Y2ggPyBIYW5kbGVyVHlwZTo6Q2F0Y2ggOiBIYW5k
bGVyVHlwZTo6Q2F0Y2hBbGw7CisgICAgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBoYW5k
bGVyVHlwZSwgZGF0YS50cnlTdGFydCgpLCBkYXRhLnRyeUVuZCgpLCAwLCBtX3RyeUNhdGNoRGVw
dGgsIGV4Y2VwdGlvbkluZGV4IH0pOworCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3Rh
dGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VW
YWx1ZSgpLCBtX2N1cnJlbnRCbG9jayk7CisKKyAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0g
MDsKKyAgICBhdXRvIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlciA9IFsmXSAoVHlwZWRUbXAgcmVzdWx0
KSB7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1
ZmZlcjsKKyAgICAgICAgKytpbmRleEluQnVmZmVyOworICAgICAgICBUbXAgYnVmZmVyUHRyID0g
VG1wKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGVtaXRMb2FkKGJ1ZmZlclB0ciwg
b2Zmc2V0LCByZXN1bHQpOworICAgIH07CisgICAgZm9yRWFjaExpdmVWYWx1ZShbJl0gKFR5cGVk
VG1wIHRtcCkgeworICAgICAgICAvLyBXZSBzZXQgb3VyIGN1cnJlbnQgQ29udHJvbEVudHJ5J3Mg
ZXhjZXB0aW9uIGJlbG93IGFmdGVyIHRoZSBwYXRjaHBvaW50LCBpdCdzCisgICAgICAgIC8vIG5v
dCBpbiB0aGUgaW5jb21pbmcgYnVmZmVyIG9mIGxpdmUgdmFsdWVzLgorICAgICAgICBhdXRvIHRv
SWdub3JlID0gZGF0YS5leGNlcHRpb24oKTsKKyAgICAgICAgaWYgKHRtcC50bXAoKSAhPSB0b0ln
bm9yZS50bXAoKSkKKyAgICAgICAgICAgIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih0bXApOworICAg
IH0pOworCisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KG1f
cHJvYy5hZGRUdXBsZSh7IEIzOjpwb2ludGVyVHlwZSgpLCBCMzo6cG9pbnRlclR5cGUoKSB9KSk7
CisgICAgcGF0Y2gtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisgICAgcGF0Y2gtPmNs
b2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3Rl
clNldCBjbG9iYmVyTGF0ZSA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2Fs
bCgpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHBh
dGNoLT5jbG9iYmVyTGF0ZShjbG9iYmVyTGF0ZSk7CisgICAgcGF0Y2gtPnJlc3VsdENvbnN0cmFp
bnRzLmFwcGVuZChCMzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
ICAgIHBhdGNoLT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6OlZhbHVlUmVwOjpyZWcoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICBqaXQubW92ZShwYXJhbXNbMl0uZ3ByKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNl
cHRpb25JZkNhdGNoYWJsZSkpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIFRtcCBleGNl
cHRpb24gPSBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIFRtcCBidWZmZXIgPSBU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJl
bnRCbG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDg+Ojpmcm9tKGV4Y2VwdGlvbiwgYnVmZmVyKSwg
VmVjdG9yPENvbnN0cmFpbmVkVG1wLCAxPjo6ZnJvbShpbnN0YW5jZVZhbHVlKCkpKTsKKyAgICBh
cHBlbmQoTW92ZSwgZXhjZXB0aW9uLCBkYXRhLmV4Y2VwdGlvbigpKTsKKworICAgIHJldHVybiBi
dWZmZXI7CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJs
ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUm
IGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUodGFyZ2V0LCBkYXRhKTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRy
b2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgdW5zaWduZWQgdGFyZ2V0RGVwdGggPSAwOworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnko
dGFyZ2V0KSkKKyAgICAgICAgdGFyZ2V0RGVwdGggPSB0YXJnZXQudHJ5RGVwdGgoKTsKKworICAg
IG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgSGFuZGxlclR5cGU6OkRlbGVnYXRlLCBkYXRh
LnRyeVN0YXJ0KCksICsrbV9jYWxsU2l0ZUluZGV4LCAwLCBtX3RyeUNhdGNoRGVwdGgsIHRhcmdl
dERlcHRoIH0pOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+Jiwg
U3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1
bnNpZ25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3Rh
Y2smKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4Y2VwdGlvbkluZGV4
KTsKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZv
aWQpOworICAgIHBhdGNoLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBwYXRjaC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisKKyAgICBW
ZWN0b3I8Q29uc3RyYWluZWRUbXAsIDg+IHBhdGNoQXJnczsKKyAgICBwYXRjaEFyZ3MuYXBwZW5k
KENvbnN0cmFpbmVkVG1wKGluc3RhbmNlVmFsdWUoKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSkpOworICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAo
VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5m
bzo6YXJndW1lbnRHUFIxKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNp
emUoKTsgKytpKQorICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGFyZ3Nb
aV0sIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpKTsKKworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBh
dGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNoLCBwYXRjaEFyZ3MpOworCisgICAgcGF0Y2gtPnNl
dEdlbmVyYXRvcihbdGhpcywgZXhjZXB0aW9uSW5kZXgsIGhhbmRsZV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOworICAgICAgICBlbWl0VGhy
b3dJbXBsKGppdCwgZXhjZXB0aW9uSW5kZXgpOyAKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBv
aW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVG1wKCksIFdURk1vdmUocGF0Y2hBcmdzKSk7CisK
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXRocm93KHVu
c2lnbmVkLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIz
OjpWb2lkKTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3Rl
cnNGb3JKU0NhbGwoKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworCisg
ICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCAzPiBwYXRjaEFyZ3M7CisgICAgcGF0Y2hBcmdzLmFw
cGVuZChDb25zdHJhaW5lZFRtcChpbnN0YW5jZVZhbHVlKCksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVk
VG1wKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQ
UkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKyAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVk
VG1wKGRhdGEuZXhjZXB0aW9uKCksIEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50
R1BSMikpKTsKKworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFy
ZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNoLCBwYXRjaEFyZ3MpOworICAgIHBhdGNoLT5z
ZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBoYW5kbGUuZ2Vu
ZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOworICAgICAgICBlbWl0UmV0aHJvd0ltcGwoaml0KTsK
KyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVG1w
KCksIFdURk1vdmUocGF0Y2hBcmdzKSk7CisKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0zMjA5
LDcgKzM0ODEsOCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlCiAg
ICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewogICAgICAgICBhcHBl
bmQoZGF0YS5zcGVjaWFsLCBKdW1wKTsKICAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNz
b3JzKG1fY3VycmVudEJsb2NrKTsKLSAgICB9CisgICAgfSBlbHNlIGlmIChkYXRhLmJsb2NrVHlw
ZSgpID09IEJsb2NrVHlwZTo6VHJ5IHx8IGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpD
YXRjaCkKKyAgICAgICAgLS1tX3RyeUNhdGNoRGVwdGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApIHsKICAgICAgICAgbV9vdXRlckxvb3BzLnJlbW92ZUxh
c3QoKTsKQEAgLTMyMzMsNyArMzUwNiw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUKICAgICByZXR1cm4geyB9OwogfQogCi1CMzo6UGF0Y2hwb2ludFZhbHVlKiBB
aXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3Qg
VmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYmIHBhdGNoQXJn
cykKK3N0ZDo6cGFpcjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZT4gQWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9j
aywgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMs
IGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0
Y2hBcmdzKQogewogICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNSZXN1
bHRUeXBlKCZzaWduYXR1cmUpKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CkBAIC0zMjU4LDggKzM1MzEsOSBAQCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJ
UkdlbmVyYXRvcjo6ZW1pCiAgICAgICAgICAgICByZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6
OlZhbHVlUmVwKHZhbHVlTG9jYXRpb24pKTsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29u
c3RyYWludHMgPSBXVEZNb3ZlKHJlc3VsdENvbnN0cmFpbnRzKTsKICAgICB9CisgICAgUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZSBleGNlcHRpb25IYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZv
ckV4Y2VwdGlvbnMocGF0Y2hwb2ludCwgcGF0Y2hBcmdzKTsKICAgICBlbWl0UGF0Y2hwb2ludChi
bG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0cywgV1RGTW92ZShwYXRjaEFyZ3MpKTsKLSAgICByZXR1
cm4gcGF0Y2hwb2ludDsKKyAgICByZXR1cm4geyBwYXRjaHBvaW50LCBleGNlcHRpb25IYW5kbGUg
fTsKIH0KIAogYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdApAQCAtMzI5NSwxNCAr
MzU2OSwxNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1CiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVy
QmxvY2spOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0
Q2FsbFBhdGNocG9pbnQoaXNXYXNtQmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncyk7Cisg
ICAgICAgICAgICBhdXRvIHBhaXIgPSBlbWl0Q2FsbFBhdGNocG9pbnQoaXNXYXNtQmxvY2ssIHNp
Z25hdHVyZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0g
cGFpci5maXJzdDsKKyAgICAgICAgICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlID0gcGFpci5zZWNv
bmQ7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5u
ZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgogICAg
ICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5n
IHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
TGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZykpOwogCi0gICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbkhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5l
YXJDYWxsKCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1
bmN0aW9uSW5kZXggfSk7CkBAIC0zMzIxLDEzICszNTk4LDE3IEBAIGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZENhbGwodWludDMyX3QgZnUKIAogICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVk
VG1wPiBqdW1wQXJnczsKICAgICAgICAgICAgIGp1bXBBcmdzLmFwcGVuZCh7IGp1bXBEZXN0aW5h
dGlvbiwgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIgfSk7Ci0gICAgICAgICAgICBhdXRvKiBw
YXRjaHBvaW50ID0gZW1pdENhbGxQYXRjaHBvaW50KGlzRW1iZWRkZXJCbG9jaywgc2lnbmF0dXJl
LCByZXN1bHRzLCBhcmdzLCBXVEZNb3ZlKGp1bXBBcmdzKSk7CisgICAgICAgICAgICBhdXRvIHBh
aXIgPSBlbWl0Q2FsbFBhdGNocG9pbnQoaXNFbWJlZGRlckJsb2NrLCBzaWduYXR1cmUsIHJlc3Vs
dHMsIGFyZ3MsIFdURk1vdmUoanVtcEFyZ3MpKTsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9p
bnQgPSBwYWlyLmZpcnN0OworICAgICAgICAgICAgYXV0byBleGNlcHRpb25IYW5kbGUgPSBwYWly
LnNlY29uZDsKKwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRp
YWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5j
ZS4KICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUg
Y2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUuZ2VuZXJhdGUo
aml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXJh
bXMucHJvYygpLnJlc3VsdENvdW50KHBhcmFtcy52YWx1ZSgpLT50eXBlKCkpXS5ncHIoKSwgV2Fz
bUVudHJ5UHRyVGFnKTsKICAgICAgICAgICAgIH0pOwogCkBAIC0zMzM5LDEyICszNjIwLDE1IEBA
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnUKICAgICAgICAgLy8gVGhl
IGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFu
ZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KICAgICAgICAgcmVzdG9yZVdl
YkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZv
Lm1lbW9yeSwgY3VycmVudEluc3RhbmNlLCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50Qmxv
Y2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncyk7CisgICAgICAgIGF1dG8gcGFpciA9IGVtaXRD
YWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzKTsK
KyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IHBhaXIuZmlyc3Q7CisgICAgICAgIGF1dG8gZXhj
ZXB0aW9uSGFuZGxlID0gcGFpci5zZWNvbmQ7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJl
ciB0aGUgc2l6ZSByZWdpc3RlciBzaW5jZSB0aGUgTExJbnQgYWx3YXlzIGJvdW5kcyBjaGVja3MK
ICAgICAgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcgfHwgbV9pbmZvLm1l
bW9yeS5pc1NoYXJlZCgpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVn
aXN0ZXJTZXQgeyBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLmJvdW5kc0NoZWNraW5nU2l6ZVJl
Z2lzdGVyIH0pOwotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS5n
ZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9u
SW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CkBAIC0zNTIzLDcgKzM4
MDcsOSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFR5CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCiAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKHRtcEZvclR5cGUoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpKTsK
IAotICAgIGF1dG8qIHBhdGNocG9pbnQgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50Qmxv
Y2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncywgV1RGTW92ZShleHRyYUFyZ3MpKTsKKyAgICBh
dXRvIHBhaXIgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHNpZ25hdHVyZSwg
cmVzdWx0cywgYXJncywgV1RGTW92ZShleHRyYUFyZ3MpKTsKKyAgICBhdXRvKiBwYXRjaHBvaW50
ID0gcGFpci5maXJzdDsKKyAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZSA9IHBhaXIuc2Vjb25kOwog
CiAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVy
cyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KICAgICAvLyBXZSBwZXNz
aW1pc3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlz
IGJvdW5kcyBjaGVja2luZyBzbwpAQCAtMzUzNSw2ICszODIxLDcgQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChUeQogCiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS5nZW5lcmF0ZShqaXQsIHBh
cmFtcywgdGhpcyk7CiAgICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXJhbXMucHJvYygpLnJlc3Vs
dENvdW50KHBhcmFtcy52YWx1ZSgpLT50eXBlKCkpXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsK
ICAgICB9KTsKIApAQCAtMzU5NSw3ICszODgyLDggQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3RpbwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9p
bnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRl
eHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIAotICAg
IEIzOjpQcm9jZWR1cmUgcHJvY2VkdXJlOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1
cmUgPSBtYWtlVW5pcXVlPEIzOjpQcm9jZWR1cmU+KCk7CisgICAgYXV0byYgcHJvY2VkdXJlID0g
KmNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1cmU7CiAgICAgQ29kZSYgY29kZSA9IHByb2NlZHVy
ZS5jb2RlKCk7CiAKICAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRTdHJl
YW0mIG91dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKQEAgLTM2MTUsMjUgKzM5MDMsMjcgQEAgRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogICAgIEZ1bmN0aW9uUGFyc2Vy
PEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgp
LCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmZpbmFs
aXplRW50cnlwb2ludHMoKTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsg
KytpKQogICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpLT5hZGRQcmVkZWNlc3Nv
cihibG9jayk7CiAgICAgfQogCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkRHVt
cElSQXRFYWNoUGhhc2UoQjM6OkFpck1vZGUpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJH
ZW5lcmF0ZWQgcGF0Y2hwb2ludHMiKTsKLSAgICAgICAgICAgIGZvciAoQjM6OlBhdGNocG9pbnRW
YWx1ZSoqIHBhdGNoIDogaXJHZW5lcmF0b3IucGF0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oZGVlcER1bXAocHJvY2VkdXJlLCAqcGF0Y2gpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOwotICAgICAgICBCMzo6
QWlyOjpnZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklU
KTsKLSAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9
IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9p
bnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRM
aXN0KCk7CisgICAgaWYgKFVOTElLRUxZKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzOjpBaXJN
b2RlKSkpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0ZWQgcGF0Y2hwb2ludHMiKTsKKyAg
ICAgICAgZm9yIChCMzo6UGF0Y2hwb2ludFZhbHVlKiogcGF0Y2ggOiBpckdlbmVyYXRvci5wYXRj
aHBvaW50cygpKQorICAgICAgICAgICAgZGF0YUxvZ0xuKGRlZXBEdW1wKHByb2NlZHVyZSwgKnBh
dGNoKSk7CiAgICAgfQogCisgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29kZSk7
CisgICAgQjM6OkFpcjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50
cnlwb2ludEpJVCk7CisKKyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXBy
b2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7CisgICAgcmVzdWx0LT5lbnRy
eXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zm
c2V0TGlzdCgpOworICAgIHJlc3VsdC0+c3RhY2ttYXBzID0gaXJHZW5lcmF0b3IudGFrZVN0YWNr
bWFwcygpOworICAgIHJlc3VsdC0+ZXhjZXB0aW9uSGFuZGxlcnMgPSBpckdlbmVyYXRvci50YWtl
RXhjZXB0aW9uSGFuZGxlcnMoKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUxNzgs
NiArNTQ2OCwyNCBAQCB0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAordGVtcGxhdGUgPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK1Bh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUgQWlySVJHZW5lcmF0b3I6OnByZXBhcmVQYXRjaHBvaW50
Rm9yRXhjZXB0aW9ucyhCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVmVjdG9yPENvbnN0cmFp
bmVkVG1wLCBpbmxpbmVDYXBhY2l0eT4mIGFyZ3MpCit7CisgICAgKyttX2NhbGxTaXRlSW5kZXg7
CisgICAgaWYgKCFtX3RyeUNhdGNoRGVwdGgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICB1
bnNpZ25lZCBudW1MaXZlVmFsdWVzID0gMDsKKyAgICBmb3JFYWNoTGl2ZVZhbHVlKFsmXSAoVG1w
IHRtcCkgeworICAgICAgICArK251bUxpdmVWYWx1ZXM7CisgICAgICAgIGFyZ3MuYXBwZW5kKENv
bnN0cmFpbmVkVG1wKHRtcCwgQjM6OlZhbHVlUmVwOjpMYXRlQ29sZEFueSkpOworICAgIH0pOwor
CisgICAgcGF0Y2gtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisKKyAgICByZXR1cm4g
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7IG1fY2FsbFNpdGVJbmRleCwgbnVtTGl2ZVZhbHVl
cyB9OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZX0IzSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg3NzM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgogI2luY2x1
ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgi
CisjaW5jbHVkZSAiV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIgogI2luY2x1ZGUgIldhc21JbnN0
YW5jZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtT1NSRW50cnlE
YXRhLmgiCkBAIC04NywxNiArODgsNiBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwogfQogfQogCi1jbGFzcyBCM0lSR2VuZXJhdG9yOwotc3RydWN0IFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUgewotICAgIHZvaWQgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIEIzSVJHZW5lcmF0b3IqKSBjb25zdDsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCA9ICBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0KLSAgICB1bnNpZ25lZCBtX2Nh
bGxTaXRlSW5kZXggeyBzX2ludmFsaWRDYWxsU2l0ZUluZGV4IH07Ci0gICAgdW5zaWduZWQgbV9u
dW1MaXZlVmFsdWVzOwotfTsKLQogY2xhc3MgQjNJUkdlbmVyYXRvciB7CiBwdWJsaWM6CiAgICAg
dXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWYXJpYWJsZSo7CkBAIC01NzgsMjEgKzU2OSw2IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxl
cnM7CiB9OwogCi12b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmdlbmVyYXRlKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMs
IEIzSVJHZW5lcmF0b3IqIGdlbmVyYXRvcikgY29uc3QKLXsKLSAgICBpZiAobV9jYWxsU2l0ZUlu
ZGV4ID09IHNfaW52YWxpZENhbGxTaXRlSW5kZXgpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0
YWNrTWFwIHZhbHVlcyhtX251bUxpdmVWYWx1ZXMpOwotICAgIHVuc2lnbmVkIHBhcmFtc09mZnNl
dCA9IHBhcmFtcy5zaXplKCkgLSBtX251bUxpdmVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgY2hpbGRy
ZW5PZmZzZXQgPSBwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4oKSAtIG1fbnVtTGl2ZVZhbHVl
czsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1MaXZlVmFsdWVzOyArK2kpCi0g
ICAgICAgIHZhbHVlc1tpXSA9IE9TUkVudHJ5VmFsdWUocGFyYW1zW2kgKyBwYXJhbXNPZmZzZXRd
LCBwYXJhbXMudmFsdWUoKS0+Y2hpbGQoaSArIGNoaWxkcmVuT2Zmc2V0KS0+dHlwZSgpKTsKLQot
ICAgIGdlbmVyYXRvci0+YWRkU3RhY2tNYXAobV9jYWxsU2l0ZUluZGV4LCBXVEZNb3ZlKHZhbHVl
cykpOwotICAgIGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNp
dGVJbmRleCksIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSk7Ci19Ci0KIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJs
eSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQg
MzItYml0IG9mZnNldHMgaW4gQjMuCiBpbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRl
clBsdXNPZmZzZXQoVmFsdWUqJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKIHsKQEAgLTg1Nyw1NiAr
ODMzLDEzIEBAIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpmcmFtZVBvaW50ZXIoKQogICAgIHJldHVy
biBtX2ZyYW1lUG9pbnRlcjsKIH0KIAotc3RhdGljIHZvaWQgYnVpbGRFbnRyeUJ1ZmZlckZvckNh
dGNoKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpOwotICAgIE9wdGltaXppbmdKSVRDYWxs
ZWUqIGNhbGxlZSA9IGJpdHdpc2VfY2FzdDxPcHRpbWl6aW5nSklUQ2FsbGVlKj4oY2FsbEZyYW1l
LT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKSk7Ci0gICAgY29uc3QgU3RhY2tNYXAmIHN0YWNrbWFw
ID0gY2FsbGVlLT5zdGFja21hcChjYWxsU2l0ZUluZGV4KTsKLSAgICBWTSogdm0gPSBjb250ZXh0
LmdwcjxWTSo+KEdQUkluZm86OnJlZ1QwKTsKLSAgICB1aW50NjRfdCogYnVmZmVyID0gdm0tPndh
c21Db250ZXh0LnNjcmF0Y2hCdWZmZXJGb3JTaXplKHN0YWNrbWFwLnNpemUoKSAqIDgpOwotICAg
IGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRleHQsIHN0YWNrbWFwLCBidWZmZXIpOwotCi0gICAg
Y29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGJ1ZmZlcik7Ci19Ci0KIHZvaWQgQjNJUkdlbmVyYXRvcjo6aW5zZXJ0RW50cnlTd2l0Y2go
KQogewogICAgIG1fcHJvYy5zZXROdW1FbnRyeXBvaW50cyhtX3Jvb3RCbG9ja3Muc2l6ZSgpKTsK
IAogICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gY2F0Y2hQcm9sb2d1ZUdlbmVy
YXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlv
bj4oW10gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CiAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAg
ICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBI
YW5kbGluZyBwcmVjaXNlIGFsbG9jYXRpb25zIGluIFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVu
dHJ5cG9pbnRzIG1pZ2h0IGJlIHVubmVjZXNzYXJ5Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEzCi0gICAgICAgICAgICBhdXRvIHBy
ZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VB
bGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7Ci0gICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QwLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6
Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBhdXRv
IGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOwotCi0gICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlv
bkNhc2UubGluaygmaml0KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1Nl
dCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNp
emUoKSksIEdQUkluZm86OnJlZ1QwKTsKLQotICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZq
aXQpOwotICAgICAgICB9Ci0gICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QzKTsK
LQotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKLSAg
ICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNh
dGNoT2Zmc2V0KCkpKTsKLSAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJ
bmZvOjpyZWdUMywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLQotICAgICAgICBqaXQubG9hZDY0
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5z
dG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
KTsKLQotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihS
ZWdpc3RlcikpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZkluc3RhbmNlKCkpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgIGppdC5zdG9yZVdhc21D
b250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6cmVnVDMpOwotCi0gICAgICAgIGppdC5wcm9iZSh0YWdD
RnVuY3Rpb248SklUUHJvYmVQdHJUYWc+KGJ1aWxkRW50cnlCdWZmZXJGb3JDYXRjaCksIG51bGxw
dHIpOwotCi0gICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNv
ZGUuZnJhbWVTaXplKCkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGVtaXRDYXRjaFByb2xvZ3VlU2hhcmVk
KGNvZGUsIGppdCk7CiAgICAgfSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9y
b290QmxvY2tzLnNpemUoKTsgKytpKQpAQCAtMjY1Miw2ICsyNTg1LDEwIEBAIFZhbHVlKiBCM0lS
R2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENhdGMKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZh
cmlhYmxlKHBvaW50ZXJUeXBlKCkpKTsKICAgICB9CisgICAgLy8gV2UgY29udmVydCBmcm9tICJ0
cnkiIHRvICJjYXRjaCIgQ29udHJvbFR5cGUgYWJvdmUuIFRoaXMgZG9lc24ndAorICAgIC8vIGhh
cHBlbiBpZiBDb250cm9sVHlwZSBpcyBhbHJlYWR5IGEgImNhdGNoIi4gVGhpcyBjYW4gaGFwcGVu
IHdoZW4KKyAgICAvLyB3ZSBoYXZlIG11bHRpcGxlIGNhdGNoZXMgbGlrZSAidHJ5IHt9IGNhdGNo
KEEpe30gY2F0Y2goQil7fS4uLkNhdGNoQWxsKEUpe30iCisgICAgQVNTRVJUKENvbnRyb2xUeXBl
Ojppc0FueUNhdGNoKGRhdGEpKTsKIAogICAgIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlID0ga2lu
ZCA9PSBDYXRjaEtpbmQ6OkNhdGNoID8gSGFuZGxlclR5cGU6OkNhdGNoIDogSGFuZGxlclR5cGU6
OkNhdGNoQWxsOwogICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlclR5cGUs
IGRhdGEudHJ5U3RhcnQoKSwgZGF0YS50cnlFbmQoKSwgMCwgbV90cnlDYXRjaERlcHRoLCBleGNl
cHRpb25JbmRleCB9KTsKQEAgLTI3MjIsMzAgKzI2NTksOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZFRocm93KHVuc2lnbmVkIGV4CiAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5k
bGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNo
KTsKICAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBleGNlcHRpb25JbmRleCwgaGFuZGxl
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uQXJndW1lbnRHUFIwOwogICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMs
IHRoaXMpOwotCi0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjphcmd1bWVudEdQUjAsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsK
LSAgICAgICAgewotICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQu
YnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7Ci0gICAg
ICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9j
azo6YmxvY2tNYXNrKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFy
a2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBh
dXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOwotCi0gICAgICAgICAgICBwcmVjaXNlQWxsb2Nh
dGlvbkNhc2UubGluaygmaml0KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkg
KyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgp
KSwgc2NyYXRjaCk7Ci0KLSAgICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKLSAgICAg
ICAgfQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihzY3JhdGNoKTsKLQotICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKGV4Y2VwdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICAg
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjMpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5j
YWxsKE9wZXJhdGlvblB0clRhZyk7Ci0gICAgICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKLSAgICAgICAgaml0LmFkZExpbmtU
YXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2Fz
bVRocm93KSk7Ci0gICAgICAgIH0pOworICAgICAgICBlbWl0VGhyb3dJbXBsKGppdCwgZXhjZXB0
aW9uSW5kZXgpOyAKICAgICB9KTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsK
IApAQCAtMjc2MywyOCArMjY3OCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1
bnNpZ25lZCwKICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQ
YXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0Y2gpOwogICAgIHBhdGNo
LT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgIEdQUlJl
ZyBzY3JhdGNoID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOwotICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQ
cmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOwotICAgICAgICAgICAgaml0LmFuZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNj
cmF0Y2gpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6
Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0g
aml0Lmp1bXAoKTsKLQotICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmpp
dCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0
T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOwotCi0g
ICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7
Ci0KICAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotICAg
ICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7Ci0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRocm93KSk7Ci0gICAgICAgIH0pOwor
ICAgICAgICBlbWl0UmV0aHJvd0ltcGwoaml0KTsKICAgICB9KTsKICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kKHBhdGNoKTsKIApAQCAtMzMyMCwyNiArMzIxNSw2IEBAIHZvaWQgY29tcHV0ZVBD
VG9Db2RlT3JpZ2luTWFwKENvbXBpbGF0aW8KICAgICB9CiB9CiAKLXZvaWQgY29tcHV0ZUV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9u
LCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpCi17Ci0gICAgaWYgKCFjb250ZXh0LnByb2NlZHVyZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCBudW1FbnRyeXBv
aW50cyA9IGNvbnRleHQucHJvY2VkdXJlLT5udW1FbnRyeXBvaW50cygpOwotICAgIGZvciAoY29u
c3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlckluZm8gOiBmdW5jdGlvbi0+ZXhjZXB0aW9u
SGFuZGxlcnMpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludEluZGV4IDwgbnVt
RW50cnlwb2ludHMpOwotICAgICAgICBpZiAoaGFuZGxlckluZm8ubV90eXBlID09IEhhbmRsZXJU
eXBlOjpEZWxlZ2F0ZSkgewotICAgICAgICAgICAgaGFuZGxlcnMuYXBwZW5kKHsgfSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgICsrZW50cnlwb2ludEluZGV4
OwotICAgICAgICBoYW5kbGVycy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+KGNvbnRleHQucHJvY2VkdXJlLT5jb2RlKCkuZW50cnlwb2ludExhYmVs
KGVudHJ5cG9pbnRJbmRleCkpKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2lu
dEluZGV4ID09IG51bUVudHJ5cG9pbnRzIC0gMSk7Ci19Ci0KIC8vIEN1c3RvbSB3YXNtIG9wcy4g
VGhlc2UgYXJlIHRoZSBvbmVzIHRvbyBtZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCiAKIHZvaWQg
QjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9u
LCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCShyZXZpc2lvbiAyODc3MzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw3ICs1OSw2IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogCiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25h
dHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUs
IENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcElu
ZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwogCi12b2lkIGNvbXB1dGVF
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiwgY29u
c3QgQ29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1ZmZlciYpOwogdm9pZCBjb21wdXRlUENUb0Nv
ZGVPcmlnaW5NYXAoQ29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1ZmZlciYpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjg3NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAj
aW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21DYWxsZWVHcm91cC5oIgogI2lu
Y2x1ZGUgIldhc21DYWxsZWVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIldhc21JUkdlbmVyYXRvckhl
bHBlcnMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldh
c21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC0yMDMsOCArMjA0
LDYgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IEJCUVBsYQogICAgIGJvb2wg
Zm9yY2VVc2luZ0IzID0gZmFsc2U7CiAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWly
TW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+
PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAgZm9y
Y2VVc2luZ0IzID0gdHJ1ZTsKLSAgICBlbHNlIGlmICghbV9tb2R1bGVJbmZvcm1hdGlvbi0+bV9m
dW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0KGZ1bmN0aW9uSW5kZXgpKQotICAg
ICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogICAgIGVsc2UgaWYgKCFPcHRpb25zOjp3YXNtQkJR
VXNlc0FpcigpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JUkdlbmVyYXRv
ckhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZX0IzSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFZhbHVl
LmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4
dC5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21PcGVyYXRpb25z
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0cnVjdCBQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlIHsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yPgor
ICAgIHZvaWQgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcywgR2VuZXJhdG9yKiBnZW5lcmF0b3IpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAobV9jYWxsU2l0ZUluZGV4ID09IHNfaW52YWxpZENhbGxTaXRlSW5kZXgp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgU3RhY2tNYXAgdmFsdWVzKG1fbnVtTGl2
ZVZhbHVlcyk7CisgICAgICAgIHVuc2lnbmVkIHBhcmFtc09mZnNldCA9IHBhcmFtcy5zaXplKCkg
LSBtX251bUxpdmVWYWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIGNoaWxkcmVuT2Zmc2V0ID0gcGFy
YW1zLnZhbHVlKCktPm51bUNoaWxkcmVuKCkgLSBtX251bUxpdmVWYWx1ZXM7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUxpdmVWYWx1ZXM7ICsraSkKKyAgICAgICAgICAg
IHZhbHVlc1tpXSA9IE9TUkVudHJ5VmFsdWUocGFyYW1zW2kgKyBwYXJhbXNPZmZzZXRdLCBwYXJh
bXMudmFsdWUoKS0+Y2hpbGQoaSArIGNoaWxkcmVuT2Zmc2V0KS0+dHlwZSgpKTsKKworICAgICAg
ICBnZW5lcmF0b3ItPmFkZFN0YWNrTWFwKG1fY2FsbFNpdGVJbmRleCwgV1RGTW92ZSh2YWx1ZXMp
KTsKKyAgICAgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9jYWxs
U2l0ZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIHNfaW52YWxpZENhbGxTaXRlSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCk7CisKKyAgICB1bnNpZ25lZCBtX2NhbGxTaXRlSW5kZXggeyBzX2ludmFsaWRDYWxs
U2l0ZUluZGV4IH07CisgICAgdW5zaWduZWQgbV9udW1MaXZlVmFsdWVzOworfTsKKworCitzdGF0
aWMgaW5saW5lIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVjdG9yPENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMsIGNvbnN0
IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQmIGNv
bnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgaWYgKCFjb250ZXh0LnByb2Nl
ZHVyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0g
MDsKKyAgICB1bnNpZ25lZCBudW1FbnRyeXBvaW50cyA9IGNvbnRleHQucHJvY2VkdXJlLT5udW1F
bnRyeXBvaW50cygpOworICAgIGZvciAoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxl
ckluZm8gOiBmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZW50cnlwb2ludEluZGV4IDwgbnVtRW50cnlwb2ludHMpOworICAgICAgICBpZiAoaGFu
ZGxlckluZm8ubV90eXBlID09IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSkgeworICAgICAgICAgICAg
aGFuZGxlcnMuYXBwZW5kKHsgfSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgICsrZW50cnlwb2ludEluZGV4OworICAgICAgICBoYW5kbGVycy5hcHBlbmQobGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGNvbnRleHQucHJvY2Vk
dXJlLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCkpKTsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludEluZGV4ID09IG51bUVudHJ5cG9pbnRzIC0gMSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbWl0UmV0aHJvd0ltcGwoQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgLy8gSW5zdGFuY2UgaW4gYXJndW1lbnRHUFIwCisgICAgLy8gZnJhbWUgcG9p
bnRlciBpbiBhcmd1bWVudEdQUjEKKyAgICAvLyBleGNlcHRpb24gcG9pbnRlciBpbiBhcmd1bWVu
dEdQUjIKKworICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJn
dW1lbnRHUFIwOworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsKKyAg
ICB7CisgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQ
dHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICBqaXQuYW5k
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwg
c2NyYXRjaCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3Jh
dGNoLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpv
ZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1
bXAoKTsKKworICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFByZWNpc2VBbGxv
Y2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNp
c2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAgICAgICBsb2FkZWRD
YXNlLmxpbmsoJmppdCk7CisgICAgfQorICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5mYXJKdW1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICBqaXQuYWRk
TGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldh
c21SZXRocm93KSk7CisgICAgfSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbWl0VGhyb3dJ
bXBsKENDYWxsSGVscGVycyYgaml0LCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCkKK3sKKyAgICAv
LyBJbnN0YW5jZSBpbiBhcmd1bWVudEdQUjAKKyAgICAvLyBmcmFtZSBwb2ludGVyIGluIGFyZ3Vt
ZW50R1BSMQorICAgIC8vIGFyZ3VtZW50cyB0byB0aGUgZXhjZXB0aW9uIG9mZiBvZiBzdGFjayBw
b2ludGVyCisKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFy
Z3VtZW50R1BSMDsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7Cisg
ICAgeworICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0
UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgaml0LmFu
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayks
IHNjcmF0Y2gpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2Ny
YXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6
b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7CisgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5q
dW1wKCk7CisKKyAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxs
b2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVj
aXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7CisKKyAgICAgICAgbG9hZGVk
Q2FzZS5saW5rKCZqaXQpOworICAgIH0KKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3JhdGNoKTsKKworICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoZXhjZXB0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjIpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgIGppdC5hZGRMaW5rVGFzayhb
Y2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRocm93KSk7
CisgICAgfSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWlsZEVudHJ5QnVmZmVyRm9yQ2F0
Y2goUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CisgICAgT3B0aW1pemluZ0pJVENhbGxl
ZSogY2FsbGVlID0gYml0d2lzZV9jYXN0PE9wdGltaXppbmdKSVRDYWxsZWUqPihjYWxsRnJhbWUt
PmNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsKKyAgICBjb25zdCBTdGFja01hcCYgc3RhY2ttYXAg
PSBjYWxsZWUtPnN0YWNrbWFwKGNhbGxTaXRlSW5kZXgpOworICAgIFZNKiB2bSA9IGNvbnRleHQu
Z3ByPFZNKj4oR1BSSW5mbzo6cmVnVDApOworICAgIHVpbnQ2NF90KiBidWZmZXIgPSB2bS0+d2Fz
bUNvbnRleHQuc2NyYXRjaEJ1ZmZlckZvclNpemUoc3RhY2ttYXAuc2l6ZSgpICogOCk7CisgICAg
bG9hZFZhbHVlc0ludG9CdWZmZXIoY29udGV4dCwgc3RhY2ttYXAsIGJ1ZmZlcik7CisKKyAgICBj
b250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oYnVmZmVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVtaXRDYXRjaFByb2xvZ3VlU2hh
cmVkKEIzOjpBaXI6OkNvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIGppdC5l
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGluZyBwcmVjaXNlIGFs
bG9jYXRpb25zIGluIFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVudHJ5cG9pbnRzIG1pZ2h0IGJl
IHVubmVjZXNzYXJ5CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzEyMTMKKyAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQu
YnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkp
OworICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRC
bG9jazo6YmxvY2tNYXNrKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE1hcmtlZEJsb2NrOjpvZmZzZXRP
ZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICBw
cmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zm
c2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlv
bjo6aGVhZGVyU2l6ZSgpKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgIGxvYWRlZENhc2Uu
bGluaygmaml0KTsKKyAgICB9CisgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDMpOwor
CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBW
TTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0
KCkpKTsKKyAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QzLCBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpOworCisgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKKworICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OnJlZ1Qz
KTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwgR1BSSW5mbzo6cmVn
VDMpOworICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6cmVnVDMpOwor
CisgICAgaml0LnByb2JlKHRhZ0NGdW5jdGlvbjxKSVRQcm9iZVB0clRhZz4oYnVpbGRFbnRyeUJ1
ZmZlckZvckNhdGNoKSwgbnVsbHB0cik7CisKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAyODc3MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksOSArNTU5LDYgQEAg
c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdAogICAgIFJFTEVBU0VfQVNT
RVJUKHVzZWRCdWZmZXIuY2FwYWNpdHkoKSA9PSBvbGRDYXBhY2l0eSk7CiAgICAgKnRocmVhZFNw
ZWNpZmljID0gV1RGTW92ZSh1c2VkQnVmZmVyKTsKIAotICAgIGlmICghbV91c2VzRXhjZXB0aW9u
cykKLSAgICAgICAgbV9pbmZvLm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5xdWlja1Nl
dChtX2Z1bmN0aW9uSW5kZXgpOwotCiAgICAgcmV0dXJuIFdURk1vdmUobV9jb2RlQmxvY2spOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
SW5mb3JtYXRpb24uaAkocmV2aXNpb24gMjg3NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsx
MTksNiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkCiAKICAgICBC
aXRWZWN0b3IgbV9kZWNsYXJlZEZ1bmN0aW9uczsKICAgICBCaXRWZWN0b3IgbV9kZWNsYXJlZEV4
Y2VwdGlvbnM7Ci0gICAgQml0VmVjdG9yIG1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9uczsK
ICAgICBtdXRhYmxlIEJpdFZlY3RvciBtX3JlZmVyZW5jZWRGdW5jdGlvbnM7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAy
ODc3MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0
cnkuaCIKKyNpbmNsdWRlICJXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgiCiAjaW5jbHVkZSAiV2Fz
bU5hbWVTZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNs
dWRlIDx3dGYvRGF0YUxvZy5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9TUkVudHJ5UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9TUkVudHJ5UGxhbi5jcHAJKHJldmlzaW9uIDI4NzczOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIldhc21CM0lS
R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21JUkdl
bmVyYXRvckhlbHBlcnMuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIKICNpbmNs
dWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5o
IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWlu
Z1BhcnNlci5jcHAJKHJldmlzaW9uIDI4NzczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3
LDYgQEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaQogICAgIG1fZnVu
Y3Rpb25Db3VudCA9IGZ1bmN0aW9uQ291bnQ7CiAgICAgbV9mdW5jdGlvbkluZGV4ID0gMDsKICAg
ICBtX2NvZGVPZmZzZXQgPSBtX29mZnNldDsKLSAgICBtX2luZm8tPm1fZnVuY3Rpb25Eb2VzTm90
VXNlRXhjZXB0aW9ucy5lbnN1cmVTaXplKGZ1bmN0aW9uQ291bnQpOwogCiAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZnVuY3Rpb25Db3Vu
dCk7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ICE9IG1faW5mby0+ZnVu
Y3Rpb25zLnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5jdGlvbkNvdW50LCAiIGV4
Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlv
bnMuc2l6ZSgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>