<?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>233992</bug_id>
          
          <creation_ts>2021-12-08 00:17:14 -0800</creation_ts>
          <short_desc>[RISCV64] Add MacroAssemblerRISCV64 implementations for trivial general-purpose-register operations</short_desc>
          <delta_ts>2022-03-11 05:33:46 -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>New Bugs</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>
          
          <blocked>237775</blocked>
    
    <blocked>234223</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pmatos</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1821446</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2021-12-08 00:17:14 -0800</bug_when>
    <thetext>[RISCV64] Add MacroAssemblerRISCV64 implementations for trivial general-purpose-register operations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821447</commentid>
    <comment_count>1</comment_count>
      <attachid>446323</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2021-12-08 00:18:03 -0800</bug_when>
    <thetext>Created attachment 446323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821523</commentid>
    <comment_count>2</comment_count>
      <attachid>446354</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2021-12-08 06:10:03 -0800</bug_when>
    <thetext>Created attachment 446354
Patch

Also include the getEffectiveAddress() implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823398</commentid>
    <comment_count>3</comment_count>
      <attachid>446354</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-12 23:12:02 -0800</bug_when>
    <thetext>Comment on attachment 446354
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823401</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-12 23:19:44 -0800</bug_when>
    <thetext>Committed r286935 (245161@main): &lt;https://commits.webkit.org/245161@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 446354.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823402</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-12 23:20:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/86398533&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446323</attachid>
            <date>2021-12-08 00:18:03 -0800</date>
            <delta_ts>2021-12-08 06:09:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233992-20211208091801.patch</filename>
            <type>text/plain</type>
            <size>50558</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YzM3ZDdiNzVmMjY1ZjM3ZDYwMjZjNmRlNTFiNTU1M2NkNmQ1ZThkLi4zODRiMjNmYTgzOTY0NTYy
ZGUwYmQzNWQxY2IxMGM1ZjI1NTlkYjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAyMS0xMi0wOCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW1JJU0NWNjRdIEFkZCBNYWNyb0Fzc2VtYmxlclJJU0NWNjQgaW1wbGVt
ZW50YXRpb25zIGZvciB0cml2aWFsIGdlbmVyYWwtcHVycG9zZS1yZWdpc3RlciBvcGVyYXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM5OTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW1w
bGVtZW50YXRpb25zIGZvciB0aGUgdHJpdmlhbCBnZW5lcmFsLXB1cnBvc2UtcmVnaXN0ZXIgb3Bl
cmF0aW9ucworICAgICAgICBpbiBNYWNyb0Fzc2VtYmxlclJJU0NWNjQuIFRoaXMgY292ZXJzIG5v
bi1wYXRjaGFibGUgbG9hZHMgYW5kIHN0b3JlcywKKyAgICAgICAgc2hpZnRzLCBsb2dpY2FsIG9w
ZXJhdGlvbnMsIHplcm8tIGFuZCBzaWduLWV4dGVuc2lvbnMsIG1vdmVzIGFuZCBzd2FwcywKKyAg
ICAgICAgc3RhY2sgb3BlcmF0aW9ucyBhcyB3ZWxsIGFzIG1pc2NlbGxhbmVvdXMgb3BlcmF0aW9u
cyBsaWtlIGFib3J0cywKKyAgICAgICAgYnJlYWtwb2ludHMgYW5kIG5vcHMuCisKKyAgICAgICAg
VGhlIGxvYWRJbW1lZGlhdGUgaGVscGVyIG1ldGhvZHMgYXJlIGFkZGVkIHRvIGhhbmRsZSBsb2Fk
aW5nIG9mCisgICAgICAgIGRpZmZlcmVudCB0eXBlcyBvZiBpbW1lZGlhdGUgdmFsdWVzLiBUaGlz
IHNob3VsZCByZXBsYWNlIG1vdmUoKSBjYWxscworICAgICAgICB3aGVuIGEgc2lnbi1leHRlbmRl
ZCBpbW1lZGlhdGUgbG9hZCBpcyBkZXNpcmVkLCB3aGVyZWFzIG1vdmUoKSBmb3IKKyAgICAgICAg
YSAzMi1iaXQgaW1tZWRpYXRlIGlzIGV4cGVjdGVkIHRvIHBlcmZvcm0gbm8gc2lnbiBleHRlbnNp
b24uCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJSSVNDVjY0Lmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6YWRkMzIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmFkZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJSSVNDVjY0OjpzdWIzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6
bXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmxzaGlmdDMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpsc2hpZnQ2NCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6cnNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnJzaGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJSSVNDVjY0Ojp1cnNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJ
U0NWNjQ6OnVyc2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6
bG9hZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmxvYWQ4U2lnbmVk
RXh0ZW5kVG8zMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6bG9hZDE2
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpsb2FkMTZVbmFsaWduZWQp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmxvYWQxNlNpZ25lZEV4dGVu
ZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmxvYWQzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6bG9hZDMyV2l0aFVuYWxpZ25lZEhh
bGZXb3Jkcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6bG9hZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpsb2FkUGFpcjMyKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpzdG9yZTgpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnN0b3JlMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclJJU0NWNjQ6OnN0b3JlMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NW
NjQ6OnN0b3JlNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnN0b3Jl
UGFpcjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojp6ZXJvRXh0ZW5k
OFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6Onplcm9FeHRlbmQx
NlRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6Onplcm9FeHRlbmQz
MlRvV29yZCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6c2lnbkV4dGVu
ZDhUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpzaWduRXh0ZW5k
MTZUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpzaWduRXh0ZW5k
MzJUb1B0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6YW5kMzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmFuZDY0KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpvcjgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclJJU0NWNjQ6Om9yMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6
Om9yMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6Om9yNjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnhvcjMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojp4b3I2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyUklTQ1Y2NDo6bm90MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6
Om5vdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpuZWczMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6bmVnNjQpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6Om1vdmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclJJU0NWNjQ6OnN3YXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6
OnB1c2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnB1c2hQYWlyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpwb3ApOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnBvcFBhaXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclJJU0NWNjQ6OmFib3J0V2l0aFJlYXNvbik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyUklTQ1Y2NDo6YnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
UklTQ1Y2NDo6bm9wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpsb2Fk
SW1tZWRpYXRlKToKKwogMjAyMS0xMi0wNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBUeXBlZEFycmF5IHByb3RvdHlwZSBzZXQgc2hvdWxkIGdvIGRvd24gdGhl
IGZhc3QgcGF0aCB3aGVuIHVzaW5nIG5vbiBjbGFtcGVkIGludGVnZXIgdHlwZXMgb2YgdGhlIHNh
bWUgYnl0ZSBzaXplCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyUklTQ1Y2NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclJJU0NWNjQuaAppbmRleCA3YjBhMWM0NTgwNWIzODZkZmFjODgzNjQw
NzIyZTM0MzU3M2NlNTFkLi5iMzNjNGY2MzVlNDI2N2UwYzBhNzYzMWNiZmNhZTllYjU4NmVhOWU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyUklTQ1Y2NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJSSVNDVjY0LmgKQEAgLTE4NCw3ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0K
IAogICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhPigpOwotICAgICAgICBtb3ZlKGltbSwg
dGVtcC5kYXRhKCkpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOwog
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR3SW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3AyKTsKICAg
ICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKICAgICB9CkBAIC0xOTIs
NyArMTkyLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgQWJz
b2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxE
YXRhLCBNZW1vcnk+KCk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRy
KSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihh
ZGRyZXNzLm1fcHRyKSwgdGVtcC5tZW1vcnkoKSk7CiAgICAgICAgIGlmIChJbW06OmlzVmFsaWQ8
SW1tOjpJVHlwZT4oaW1tLm1fdmFsdWUpKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd0lu
c24odGVtcC5kYXRhKCksIHRlbXAubWVtb3J5KCksIEltbTo6STwwPigpKTsKICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGlJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLmRhdGEoKSwgSW1tOjpJKGlt
bS5tX3ZhbHVlKSk7CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAog
ICAgICAgICBtX2Fzc2VtYmxlci5sd0luc24odGVtcC5tZW1vcnkoKSwgdGVtcC5tZW1vcnkoKSwg
SW1tOjpJPDA+KCkpOwotICAgICAgICBtb3ZlKGltbSwgdGVtcC5kYXRhKCkpOworICAgICAgICBs
b2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOwogICAgICAgICBtX2Fzc2VtYmxlci5hZGRJ
bnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCB0ZW1wLmRhdGEoKSk7CiAKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAg
ICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9y
eSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHRlbXAubWVtb3J5KCksIHRlbXAuZGF0
YSgpLCBJbW06OlM8MD4oKSk7CiAgICAgfQogCkBAIC0yMjAsNyArMjIwLDcgQEAgcHVibGljOgog
ICAgICAgICB9CiAKICAgICAgICAgbV9hc3NlbWJsZXIubHdJbnNuKHRlbXAubWVtb3J5KCksIHJl
c29sdXRpb24uYmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7Ci0gICAgICAgIG1vdmUo
aW1tLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEo
KSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZEluc24odGVtcC5kYXRhKCksIHRlbXAubWVtb3J5
KCksIHRlbXAuZGF0YSgpKTsKIAogICAgICAgICByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3Mo
YWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CkBAIC0yNTksNyArMjU5LDcgQEAgcHVibGljOgogICAg
ICAgICB9CiAKICAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YT4oKTsKLSAgICAgICAgbW92
ZShpbW0sIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAuZGF0
YSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkSW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3Ay
KTsKICAgICB9CiAKQEAgLTI3NiwxNCArMjc2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAg
ICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7Ci0gICAgICAgIG1vdmUoaW1tLCB0ZW1w
LmRhdGEoKSk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZEluc24oZGVzdCwgdGVtcC5kYXRhKCksIG9wMik7CiAgICAgfQog
CiAgICAgdm9pZCBhZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGEsIE1lbW9yeT4oKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsK
KyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1w
Lm1lbW9yeSgpKTsKIAogICAgICAgICBpZiAoSW1tOjppc1ZhbGlkPEltbTo6SVR5cGU+KGltbS5t
X3ZhbHVlKSkgewogICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKHRlbXAuZGF0YSgpLCB0
ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7CkBAIC0yOTMsMTAgKzI5MywxMCBAQCBwdWJsaWM6
CiAgICAgICAgIH0KIAogICAgICAgICBtX2Fzc2VtYmxlci5sZEluc24odGVtcC5tZW1vcnkoKSwg
dGVtcC5tZW1vcnkoKSwgSW1tOjpJPDA+KCkpOwotICAgICAgICBtb3ZlKGltbSwgdGVtcC5kYXRh
KCkpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOwogICAgICAgICBt
X2Fzc2VtYmxlci5hZGRJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLmRhdGEoKSwgdGVtcC5tZW1vcnko
KSk7CiAKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1l
bW9yeSgpKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9w
dHIpLCB0ZW1wLm1lbW9yeSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc2RJbnNuKHRlbXAubWVt
b3J5KCksIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7CiAgICAgfQogCkBAIC0zMTIsNyArMzEy
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
bW92ZShpbW0sIHRlbXAubWVtb3J5KCkpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVt
cC5tZW1vcnkoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZEluc24odGVtcC5kYXRhKCksIHRl
bXAubWVtb3J5KCksIHRlbXAuZGF0YSgpKTsKIAogICAgICAgICByZXNvbHV0aW9uID0gcmVzb2x2
ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CkBAIC0zMjIsNyArMzIyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkNjQoQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKICAgICB7CiAgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPE1lbW9yeT4oKTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAg
ICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1l
bW9yeSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKHRlbXAubWVtb3J5KCksIHRlbXAu
bWVtb3J5KCksIEltbTo6STwwPigpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkSW5zbihkZXN0
LCB0ZW1wLm1lbW9yeSgpLCBkZXN0KTsKICAgICB9CkBAIC0zNTksNyArMzU5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJl
c3MpCiAgICAgewogICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgdGVtcC5tZW1vcnkoKSk7
CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgdGVt
cC5tZW1vcnkoKSk7CiAKICAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPigtaW1t
Lm1fdmFsdWUpKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd0luc24odGVtcC5kYXRhKCks
IHRlbXAubWVtb3J5KCksIEltbTo6STwwPigpKTsKQEAgLTM2OSwxMCArMzY5LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgfQogCiAgICAgICAgIG1fYXNzZW1ibGVyLmx3SW5zbih0ZW1wLm1lbW9yeSgp
LCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7Ci0gICAgICAgIG1vdmUoaW1tLCB0ZW1wLmRh
dGEoKSk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnN1YndJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCB0ZW1wLmRh
dGEoKSk7CiAKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1w
Lm1lbW9yeSgpKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3Mu
bV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHRlbXAu
bWVtb3J5KCksIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7CiAgICAgfQogCkBAIC0zODgsNyAr
Mzg4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgbW92ZShpbW0sIHRlbXAubWVtb3J5KCkpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwg
dGVtcC5tZW1vcnkoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YndJbnNuKHRlbXAuZGF0YSgp
LCB0ZW1wLmRhdGEoKSwgdGVtcC5tZW1vcnkoKSk7CiAKICAgICAgICAgcmVzb2x1dGlvbiA9IHJl
c29sdmVBZGRyZXNzKGFkZHJlc3MsIHRlbXAubWVtb3J5KCkpOwpAQCAtNDQ4LDcgKzQ0OCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIG11bDMyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgcmhz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRh
PigpOwotICAgICAgICBtb3ZlKGltbSwgdGVtcC5kYXRhKCkpOworICAgICAgICBsb2FkSW1tZWRp
YXRlKGltbSwgdGVtcC5kYXRhKCkpOwogICAgICAgICBtX2Fzc2VtYmxlci5tdWx3SW5zbihkZXN0
LCB0ZW1wLmRhdGEoKSwgcmhzKTsKICAgICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMy
PihkZXN0KTsKICAgICB9CkBAIC00NjMsNzAgKzQ2MywxMDQwIEBAIHB1YmxpYzoKICAgICAgICAg
bV9hc3NlbWJsZXIubXVsSW5zbihkZXN0LCBsaHMsIHJocyk7CiAgICAgfQogCi0gICAgTUFDUk9f
QVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGFuZDMyKTsKLSAgICBNQUNS
T19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QoYW5kNjQpOworICAgIE1B
Q1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChjb3VudExlYWRpbmda
ZXJvczMyKTsKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRI
T0QoY291bnRMZWFkaW5nWmVyb3M2NCk7CisgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVN
UExBVEVEX05PT1BfTUVUSE9EKGNvdW50VHJhaWxpbmdaZXJvczMyKTsKKyAgICBNQUNST19BU1NF
TUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QoY291bnRUcmFpbGluZ1plcm9zNjQp
OworCisgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGJ5
dGVTd2FwMTYpOworICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01F
VEhPRChieXRlU3dhcDMyKTsKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURf
Tk9PUF9NRVRIT0QoYnl0ZVN3YXA2NCk7CisKKyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQg
c2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxzaGlmdDMyKGRl
c3QsIHNoaWZ0QW1vdW50LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zbGx3SW5zbihkZXN0LCBzcmMsIHNoaWZ0QW1vdW50KTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGxzaGlmdDMyKFRydXN0ZWRJbW0zMiBzaGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbHNoaWZ0MzIoZGVzdCwgc2hpZnRBbW91bnQsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbGl3SW5zbihk
ZXN0LCBzcmMsIHVpbnQzMl90KGltbS5tX3ZhbHVlICYgKCgxIDw8IDUpIC0gMSkpKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IGxzaGlmdDY0KFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGxzaGlmdDY0KGRlc3QsIHNoaWZ0QW1vdW50LCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGxzaGlmdDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zbGxJbnNuKGRlc3Qs
IHNyYywgc2hpZnRBbW91bnQpOworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsc2hpZnQ2
NChkZXN0LCBzaGlmdEFtb3VudCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQ2NChS
ZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc2xsaUluc24oZGVzdCwgc3JjLCB1aW50MzJfdChpbW0ubV92
YWx1ZSAmICgoMSA8PCA2KSAtIDEpKSk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihSZWdp
c3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICByc2hp
ZnQzMihkZXN0LCBzaGlmdEFtb3VudCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBzaGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Jhd0luc24oZGVzdCwgc3JjLCBzaGlmdEFt
b3VudCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCByc2hpZnQzMihUcnVzdGVkSW1tMzIgc2hpZnRBbW91bnQsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKGRlc3QsIHNoaWZ0QW1vdW50LCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1t
MzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zcmFp
d0luc24oZGVzdCwgc3JjLCB1aW50MzJfdChpbW0ubV92YWx1ZSAmICgoMSA8PCA1KSAtIDEpKSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCByc2hpZnQ2NChSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICByc2hpZnQ2NChkZXN0LCBzaGlmdEFtb3VudCwgZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCByc2hpZnQ2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBzaGlmdEFt
b3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3JhSW5z
bihkZXN0LCBzcmMsIHNoaWZ0QW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDY0KFRy
dXN0ZWRJbW0zMiBzaGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
cnNoaWZ0NjQoZGVzdCwgc2hpZnRBbW91bnQsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcnNo
aWZ0NjQoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNyYWlJbnNuKGRlc3QsIHNyYywgdWludDMyX3Qo
aW1tLm1fdmFsdWUgJiAoKDEgPDwgNikgLSAxKSkpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlm
dDMyKFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIHVyc2hpZnQzMihkZXN0LCBzaGlmdEFtb3VudCwgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCB1cnNoaWZ0MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNybHdJbnNuKGRlc3QsIHNy
Yywgc2hpZnRBbW91bnQpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMiBzaGlmdEFtb3Vu
dCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDMyKGRlc3QsIHNoaWZ0
QW1vdW50LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHVyc2hpZnQzMihSZWdpc3RlcklEIHNy
YywgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3JsaXdJbnNuKGRlc3QsIHNyYywgdWludDMyX3QoaW1tLm1fdmFsdWUgJiAoKDEg
PDwgNSkgLSAxKSkpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdDY0KFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHVyc2hpZnQ2NChkZXN0LCBzaGlmdEFtb3Vu
dCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0NjQoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnNybEluc24oZGVzdCwgc3JjLCBzaGlmdEFtb3VudCk7CisgICAgfQorCisgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICB1cnNoaWZ0NjQoZGVzdCwgc2hpZnRBbW91bnQsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgdXJzaGlmdDY0KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgaW1t
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zcmxpSW5zbihk
ZXN0LCBzcmMsIHVpbnQzMl90KGltbS5tX3ZhbHVlICYgKCgxIDw8IDYpIC0gMSkpKTsKKyAgICB9
CisKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qocm90
YXRlUmlnaHQzMik7CisgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1Bf
TUVUSE9EKHJvdGF0ZVJpZ2h0NjQpOworCisgICAgdm9pZCBsb2FkOChBZGRyZXNzIGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29s
dmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxidUluc24oZGVzdCwgcmVzb2x1dGlvbi5iYXNlLCBJbW06OkkocmVzb2x1dGlvbi5vZmZz
ZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ4KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVz
cyhhZGRyZXNzLCBsYXp5VGVtcDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5sYnVJ
bnNuKGRlc3QsIHJlc29sdXRpb24uYmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7Cisg
ICAgfQorCisgICAgdm9pZCBsb2FkOChjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAg
IGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxidUluc24oZGVzdCwgdGVtcC5tZW1vcnkoKSwgSW1tOjpJPDA+
KCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDhTaWduZWRFeHRlbmRUbzMyKEFkZHJlc3MgYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0g
cmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgbGF6eVRlbXA8TWVtb3J5PigpKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGJJbnNuKGRlc3QsIHJlc29sdXRpb24uYmFzZSwgSW1tOjpJKHJlc29sdXRpb24u
b2Zmc2V0KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7Cisg
ICAgfQorCisgICAgdm9pZCBsb2FkOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29s
dmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxiSW5zbihkZXN0LCByZXNvbHV0aW9uLmJhc2UsIEltbTo6SShyZXNvbHV0aW9uLm9mZnNl
dCkpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgbG9hZDhTaWduZWRFeHRlbmRUbzMyKGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPE1lbW9yeT4o
KTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCB0ZW1wLm1l
bW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGJJbnNuKGRlc3QsIHRlbXAubWVtb3J5KCks
IEltbTo6STwwPigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFk
ZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxodUluc24o
ZGVzdCwgcmVzb2x1dGlvbi5iYXNlLCBJbW06OkkocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGxvYWQxNihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywg
bGF6eVRlbXA8TWVtb3J5PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGh1SW5zbihkZXN0LCBy
ZXNvbHV0aW9uLmJhc2UsIEltbTo6SShyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAg
IHZvaWQgbG9hZDE2KGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVk
aWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGh1SW5zbihkZXN0LCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7CisgICAg
fQorCisgICAgdm9pZCBsb2FkMTZVbmFsaWduZWQoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBsb2FkMTYoYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCBsb2FkMTZVbmFsaWduZWQoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQxNihhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRy
ZXNzLCBsYXp5VGVtcDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5saEluc24oZGVz
dCwgcmVzb2x1dGlvbi5iYXNlLCBJbW06OkkocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWQxNlNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3Ms
IGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxoSW5zbihkZXN0LCBy
ZXNvbHV0aW9uLmJhc2UsIEltbTo6SShyZXNvbHV0aW9uLm9mZnNldCkpOworICAgICAgICBtX2Fz
c2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDE2
U2lnbmVkRXh0ZW5kVG8zMihjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAgIGxvYWRJ
bW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxoSW5zbihkZXN0LCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBsb2FkMzIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCBsYXp5VGVtcDxN
ZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5sd3VJbnNuKGRlc3QsIHJlc29sdXRpb24u
YmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
MzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1
dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4o
KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3dUluc24oZGVzdCwgcmVzb2x1dGlvbi5iYXNlLCBJ
bW06OkkocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihjb25z
dCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhdXRvIHRl
bXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0
cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3dUluc24o
ZGVzdCwgdGVtcC5tZW1vcnkoKSwgSW1tOjpJPDA+KCkpOworICAgIH0KKworICAgIHZvaWQgbG9h
ZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgbG9hZDY0KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgbGF6eVRlbXA8
TWVtb3J5PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKGRlc3QsIHJlc29sdXRpb24u
YmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
NjQoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1
dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4o
KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkSW5zbihkZXN0LCByZXNvbHV0aW9uLmJhc2UsIElt
bTo6SShyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KGNvbnN0
IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gdGVt
cCA9IHRlbXBzPE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRy
KGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKGRl
c3QsIHRlbXAubWVtb3J5KCksIEltbTo6STwwPigpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRQ
YWlyMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdDEsIFJlZ2lzdGVySUQgZGVzdDIp
CisgICAgeworICAgICAgICBsb2FkUGFpcjMyKHNyYywgVHJ1c3RlZEltbTMyKDApLCBkZXN0MSwg
ZGVzdDIpOworICAgIH0KKworICAgIHZvaWQgbG9hZFBhaXIzMihSZWdpc3RlcklEIHNyYywgVHJ1
c3RlZEltbTMyIG9mZnNldCwgUmVnaXN0ZXJJRCBkZXN0MSwgUmVnaXN0ZXJJRCBkZXN0MikKKyAg
ICB7CisgICAgICAgIEFTU0VSVChkZXN0MSAhPSBkZXN0Mik7CisgICAgICAgIGlmIChzcmMgPT0g
ZGVzdDEpIHsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHNyYywgb2Zmc2V0Lm1fdmFsdWUg
KyA0KSwgZGVzdDIpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Moc3JjLCBvZmZzZXQubV92
YWx1ZSksIGRlc3QxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHNyYywgb2Zmc2V0Lm1fdmFsdWUpLCBkZXN0MSk7CisgICAgICAgICAgICBsb2FkMzIoQWRk
cmVzcyhzcmMsIG9mZnNldC5tX3ZhbHVlICsgNCksIGRlc3QyKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgc3RvcmU4KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCBsYXp5
VGVtcDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zYkluc24ocmVzb2x1dGlvbi5i
YXNlLCBzcmMsIEltbTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQg
c3RvcmU4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IGF1dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9y
eT4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNiSW5zbihyZXNvbHV0aW9uLmJhc2UsIHNyYywg
SW1tOjpTKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTgoUmVn
aXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRvIHRl
bXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0
cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNiSW5zbih0
ZW1wLm1lbW9yeSgpLCBzcmMsIEltbTo6UzwwPigpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
OChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRv
IHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIFJlZ2lzdGVySUQgaW1tUmVn
aXN0ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOworICAgICAgICBUcnVzdGVkSW1tMzIgaW1t
OChpbnQ4X3QoaW1tLm1fdmFsdWUpKTsKKyAgICAgICAgaWYgKCEhaW1tOC5tX3ZhbHVlKSB7Cisg
ICAgICAgICAgICBsb2FkSW1tZWRpYXRlKGltbTgsIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgICAg
IGltbVJlZ2lzdGVyID0gdGVtcC5kYXRhKCk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJl
c29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc2JJbnNuKHJlc29sdXRpb24uYmFzZSwgaW1tUmVnaXN0ZXIsIEltbTo6
UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmU4KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0g
dGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0g
UklTQ1Y2NFJlZ2lzdGVyczo6emVybzsKKyAgICAgICAgVHJ1c3RlZEltbTMyIGltbTgoaW50OF90
KGltbS5tX3ZhbHVlKSk7CisgICAgICAgIGlmICghIWltbTgubV92YWx1ZSkgeworICAgICAgICAg
ICAgbG9hZEltbWVkaWF0ZShpbW04LCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdp
c3RlciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXNvbHV0aW9u
ID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnNiSW5zbihyZXNvbHV0aW9uLmJhc2UsIGltbVJlZ2lzdGVyLCBJbW06OlMocmVzb2x1
dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlOChUcnVzdGVkSW1tMzIgaW1t
LCBjb25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8
TWVtb3J5LCBEYXRhPigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0gUklTQ1Y2
NFJlZ2lzdGVyczo6emVybzsKKyAgICAgICAgVHJ1c3RlZEltbTMyIGltbTgoaW50OF90KGltbS5t
X3ZhbHVlKSk7CisgICAgICAgIGlmICghIWltbTgubV92YWx1ZSkgeworICAgICAgICAgICAgbG9h
ZEltbWVkaWF0ZShpbW04LCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdpc3RlciA9
IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVk
SW1tUHRyKGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2JJ
bnNuKHRlbXAubWVtb3J5KCksIGltbVJlZ2lzdGVyLCBJbW06OlM8MD4oKSk7CisgICAgfQorCisg
ICAgdm9pZCBzdG9yZTE2KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCBsYXp5VGVt
cDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zaEluc24ocmVzb2x1dGlvbi5iYXNl
LCBzcmMsIEltbTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3Rv
cmUxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBh
dXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCBsYXp5VGVtcDxNZW1vcnk+
KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zaEluc24ocmVzb2x1dGlvbi5iYXNlLCBzcmMsIElt
bTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUxNihSZWdp
c3RlcklEIHNyYywgY29uc3Qgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8gdGVt
cCA9IHRlbXBzPE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRy
KGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hJbnNuKHRl
bXAubWVtb3J5KCksIHNyYywgSW1tOjpTPDA+KCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUx
NihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRv
IHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIFJlZ2lzdGVySUQgaW1tUmVn
aXN0ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOworICAgICAgICBUcnVzdGVkSW1tMzIgaW1t
MTYoaW50MTZfdChpbW0ubV92YWx1ZSkpOworICAgICAgICBpZiAoISFpbW0xNi5tX3ZhbHVlKSB7
CisgICAgICAgICAgICBsb2FkSW1tZWRpYXRlKGltbTE2LCB0ZW1wLmRhdGEoKSk7CisgICAgICAg
ICAgICBpbW1SZWdpc3RlciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnNoSW5zbihyZXNvbHV0aW9uLmJhc2UsIGltbVJlZ2lzdGVyLCBJ
bW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMTYoVHJ1
c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRvIHRl
bXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIFJlZ2lzdGVySUQgaW1tUmVnaXN0
ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOworICAgICAgICBUcnVzdGVkSW1tMzIgaW1tMTYo
aW50MTZfdChpbW0ubV92YWx1ZSkpOworICAgICAgICBpZiAoISFpbW0xNi5tX3ZhbHVlKSB7Cisg
ICAgICAgICAgICBsb2FkSW1tZWRpYXRlKGltbTE2LCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAg
ICBpbW1SZWdpc3RlciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBy
ZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgbGF6eVRlbXA8TWVtb3J5PigpKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc2hJbnNuKHJlc29sdXRpb24uYmFzZSwgaW1tUmVnaXN0ZXIs
IEltbTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUxNihU
cnVzdGVkSW1tMzIgaW1tLCBjb25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0
byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJl
Z2lzdGVyID0gUklTQ1Y2NFJlZ2lzdGVyczo6emVybzsKKyAgICAgICAgVHJ1c3RlZEltbTMyIGlt
bTE2KGludDE2X3QoaW1tLm1fdmFsdWUpKTsKKyAgICAgICAgaWYgKCEhaW1tMTYubV92YWx1ZSkg
eworICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0xNiwgdGVtcC5kYXRhKCkpOworICAgICAg
ICAgICAgaW1tUmVnaXN0ZXIgPSB0ZW1wLmRhdGEoKTsKKyAgICAgICAgfQorCisgICAgICAgIGxv
YWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnNoSW5zbih0ZW1wLm1lbW9yeSgpLCBpbW1SZWdpc3RlciwgSW1tOjpT
PDA+KCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJl
c3MoYWRkcmVzcywgbGF6eVRlbXA8TWVtb3J5PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3dJ
bnNuKHJlc29sdXRpb24uYmFzZSwgc3JjLCBJbW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAg
ICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVz
cywgbGF6eVRlbXA8TWVtb3J5PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHJlc29s
dXRpb24uYmFzZSwgc3JjLCBJbW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAgIGxvYWRJbW1l
ZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnN3SW5zbih0ZW1wLm1lbW9yeSgpLCBzcmMsIEltbTo6UzwwPigpKTsKKyAgICB9
CisKKyAgICB2b2lkIHN0b3JlMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAg
ICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0gUklTQ1Y2NFJlZ2lzdGVyczo6emVybzsKKyAgICAg
ICAgaWYgKCEhaW1tLm1fdmFsdWUpIHsKKyAgICAgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0
ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdpc3RlciA9IHRlbXAuZGF0YSgpOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVz
cywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3SW5zbihyZXNvbHV0aW9u
LmJhc2UsIGltbVJlZ2lzdGVyLCBJbW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9CisK
KyAgICB2b2lkIHN0b3JlMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAg
IFJlZ2lzdGVySUQgaW1tUmVnaXN0ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOworICAgICAg
ICBpZiAoISFpbW0ubV92YWx1ZSkgeworICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRl
bXAuZGF0YSgpKTsKKyAgICAgICAgICAgIGltbVJlZ2lzdGVyID0gdGVtcC5kYXRhKCk7CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNz
LCBsYXp5VGVtcDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zd0luc24ocmVzb2x1
dGlvbi5iYXNlLCBpbW1SZWdpc3RlciwgSW1tOjpTKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAg
fQorCisgICAgdm9pZCBzdG9yZTMyKFRydXN0ZWRJbW0zMiBpbW0sIGNvbnN0IHZvaWQqIGFkZHJl
c3MpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7Cisg
ICAgICAgIFJlZ2lzdGVySUQgaW1tUmVnaXN0ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOwor
ICAgICAgICBpZiAoISFpbW0ubV92YWx1ZSkgeworICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShp
bW0sIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgICAgIGltbVJlZ2lzdGVyID0gdGVtcC5kYXRhKCk7
CisgICAgICAgIH0KKworICAgICAgICBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIoYWRkcmVz
cyksIHRlbXAubWVtb3J5KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zd0luc24odGVtcC5tZW1v
cnkoKSwgaW1tUmVnaXN0ZXIsIEltbTo6UzwwPigpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
NjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8g
cmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLnNkSW5zbihyZXNvbHV0aW9uLmJhc2UsIHNyYywgSW1tOjpT
KHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVy
SUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlv
biA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLnNkSW5zbihyZXNvbHV0aW9uLmJhc2UsIHNyYywgSW1tOjpTKHJlc29sdXRp
b24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBj
b25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8TWVt
b3J5PigpOworICAgICAgICBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIHRl
bXAubWVtb3J5KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zZEluc24odGVtcC5tZW1vcnkoKSwg
c3JjLCBJbW06OlM8MD4oKSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTY0KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBz
PERhdGEsIE1lbW9yeT4oKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBpbW1SZWdpc3RlciA9IFJJU0NW
NjRSZWdpc3RlcnM6Onplcm87CisgICAgICAgIGlmICghIWltbS5tX3ZhbHVlKSB7CisgICAgICAg
ICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubWFza1JlZ2lzdGVyPDMyPih0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdp
c3RlciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXNvbHV0aW9u
ID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnNkSW5zbihyZXNvbHV0aW9uLmJhc2UsIGltbVJlZ2lzdGVyLCBJbW06OlMocmVzb2x1
dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoVHJ1c3RlZEltbTY0IGlt
bSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0
YSwgTWVtb3J5PigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0gUklTQ1Y2NFJl
Z2lzdGVyczo6emVybzsKKyAgICAgICAgaWYgKCEhaW1tLm1fdmFsdWUpIHsKKyAgICAgICAgICAg
IGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdpc3Rl
ciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0g
cmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnNkSW5zbihyZXNvbHV0aW9uLmJhc2UsIGltbVJlZ2lzdGVyLCBJbW06OlMocmVzb2x1dGlv
bi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoVHJ1c3RlZEltbTY0IGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRh
LCBNZW1vcnk+KCk7CisgICAgICAgIFJlZ2lzdGVySUQgaW1tUmVnaXN0ZXIgPSBSSVNDVjY0UmVn
aXN0ZXJzOjp6ZXJvOworICAgICAgICBpZiAoISFpbW0ubV92YWx1ZSkgeworICAgICAgICAgICAg
bG9hZEltbWVkaWF0ZShpbW0sIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgICAgIGltbVJlZ2lzdGVy
ID0gdGVtcC5kYXRhKCk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSBy
ZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc2RJbnNuKHJlc29sdXRpb24uYmFzZSwgaW1tUmVnaXN0ZXIsIEltbTo6UyhyZXNvbHV0aW9u
Lm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChUcnVzdGVkSW1tNjQgaW1tLCBj
b25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0
YSwgTWVtb3J5PigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0gUklTQ1Y2NFJl
Z2lzdGVyczo6emVybzsKKyAgICAgICAgaWYgKCEhaW1tLm1fdmFsdWUpIHsKKyAgICAgICAgICAg
IGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdpc3Rl
ciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVz
dGVkSW1tUHRyKGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c2RJbnNuKHRlbXAubWVtb3J5KCksIGltbVJlZ2lzdGVyLCBJbW06OlM8MD4oKSk7CisgICAgfQor
CisgICAgdm9pZCBzdG9yZVBhaXIzMihSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmVQYWlyMzIoc3JjMSwgc3JjMiwg
ZGVzdCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlUGFpcjMyKFJl
Z2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBSZWdpc3RlcklEIGRlc3QsIFRydXN0ZWRJ
bW0zMiBvZmZzZXQpCisgICAgeworICAgICAgICBzdG9yZTMyKHNyYzEsIEFkZHJlc3MoZGVzdCwg
b2Zmc2V0Lm1fdmFsdWUpKTsKKyAgICAgICAgc3RvcmUzMihzcmMyLCBBZGRyZXNzKGRlc3QsIG9m
ZnNldC5tX3ZhbHVlICsgNCkpOworICAgIH0KKworICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0
X1RFTVBMQVRFRF9OT09QX01FVEhPRF9XSVRIX1JFVFVSTihsb2FkNjRXaXRoQWRkcmVzc09mZnNl
dFBhdGNoLCBEYXRhTGFiZWwzMik7CisgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExB
VEVEX05PT1BfTUVUSE9EX1dJVEhfUkVUVVJOKGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNl
dFBhdGNoLCBEYXRhTGFiZWxDb21wYWN0KTsKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9U
RU1QTEFURURfTk9PUF9NRVRIT0RfV0lUSF9SRVRVUk4oc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2gsIERhdGFMYWJlbDMyKTsKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFU
RURfTk9PUF9NRVRIT0RfV0lUSF9SRVRVUk4oc3RvcmVQdHJXaXRoUGF0Y2gsIERhdGFMYWJlbFB0
cik7CisKKyAgICB2b2lkIHplcm9FeHRlbmQ4VG8zMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2xsaUluc248NTY+KGRlc3QsIHNy
Yyk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNybGlJbnNuPDU2PihkZXN0LCBkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIHplcm9FeHRlbmQxNlRvMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbGlJbnNuPDQ4PihkZXN0LCBzcmMp
OworICAgICAgICBtX2Fzc2VtYmxlci5zcmxpSW5zbjw0OD4oZGVzdCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCB6ZXJvRXh0ZW5kMzJUb1dvcmQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbGlJbnNuPDMyPihkZXN0LCBzcmMp
OworICAgICAgICBtX2Fzc2VtYmxlci5zcmxpSW5zbjwzMj4oZGVzdCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBzaWduRXh0ZW5kOFRvMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbGlJbnNuPDU2PihkZXN0LCBzcmMpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5zcmFpSW5zbjwyND4oZGVzdCwgZGVzdCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnNybGlJbnNuPDMyPihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNp
Z25FeHRlbmQxNlRvMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnNsbGlJbnNuPDQ4PihkZXN0LCBzcmMpOworICAgICAgICBtX2Fz
c2VtYmxlci5zcmFpSW5zbjwxNj4oZGVzdCwgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNy
bGlJbnNuPDMyPihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNpZ25FeHRlbmQzMlRv
UHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hZGRpd0luc24oZGVzdCwgc3JjLCBJbW06Okk8MD4oKSk7CisgICAgfQorCisgICAg
dm9pZCBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBhbmQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgYW5kMzIoc3JjLCBkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKFJlZ2lz
dGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYW5kSW5zbihkZXN0LCBvcDEsIG9wMik7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihUcnVz
dGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhbmQzMihpbW0s
IGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghSW1t
Ojppc1ZhbGlkPEltbTo6SVR5cGU+KGltbS5tX3ZhbHVlKSkgeworICAgICAgICAgICAgYXV0byB0
ZW1wID0gdGVtcHM8RGF0YT4oKTsKKyAgICAgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1w
LmRhdGEoKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRJbnNuKGRlc3QsIHRlbXAuZGF0
YSgpLCBvcDIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGlJ
bnNuKGRlc3QsIG9wMiwgSW1tOjpJKGltbS5tX3ZhbHVlKSk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRl
bXBzPERhdGEsIE1lbW9yeT4oKTsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFk
ZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3SW5z
bih0ZW1wLmRhdGEoKSwgcmVzb2x1dGlvbi5iYXNlLCBJbW06OkkocmVzb2x1dGlvbi5vZmZzZXQp
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kSW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgZGVzdCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCBhbmQ2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgYW5kNjQoc3JjLCBkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KFJl
Z2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kSW5zbihkZXN0LCBvcDEsIG9wMik7CisgICAgfQorCisgICAg
dm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBhbmQ2NChpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoVHJ1
c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGlmIChJbW06OmlzVmFsaWQ8SW1tOjpJVHlwZT4oaW1tLm1fdmFsdWUpKSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRpSW5zbihkZXN0LCBvcDIsIEltbTo6SShpbW0ubV92YWx1
ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0ZW1w
ID0gdGVtcHM8RGF0YT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAuZGF0YSgp
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kSW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3AyKTsK
KyAgICB9CisKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGFuZDY0KGltbSwgZGVzdCwgZGVzdCk7CisgICAgfQogCi0gICAg
TUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGNvdW50TGVhZGlu
Z1plcm9zMzIpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01F
VEhPRChjb3VudExlYWRpbmdaZXJvczY0KTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9U
RU1QTEFURURfTk9PUF9NRVRIT0QoY291bnRUcmFpbGluZ1plcm9zMzIpOwotICAgIE1BQ1JPX0FT
U0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChjb3VudFRyYWlsaW5nWmVyb3M2
NCk7CisgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIG9wMiwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBl
PihpbW0ubV92YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGlJbnNuKGRlc3Qs
IG9wMiwgSW1tOjpJKGltbS5tX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChi
eXRlU3dhcDE2KTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9N
RVRIT0QoYnl0ZVN3YXAzMik7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVE
X05PT1BfTUVUSE9EKGJ5dGVTd2FwNjQpOworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRh
PigpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOworICAgICAgICBt
X2Fzc2VtYmxlci5hbmRJbnNuKGRlc3QsIHRlbXAuZGF0YSgpLCBvcDIpOworICAgIH0KKworICAg
IHZvaWQgYW5kNjQoVHJ1c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGludHB0cl90IHZhbHVlID0gaW1tLmFzSW50cHRyKCk7CisgICAgICAgIGlmIGNvbnN0
ZXhwciAoc2l6ZW9mKGludHB0cl90KSA9PSBzaXplb2YoaW50NjRfdCkpCisgICAgICAgICAgICBh
bmQ2NChUcnVzdGVkSW1tNjQoaW50NjRfdCh2YWx1ZSkpLCBkZXN0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKGludDMyX3QodmFsdWUpKSwgZGVzdCk7Cisg
ICAgfQogCi0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9E
KGxzaGlmdDMyKTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9N
RVRIT0QobHNoaWZ0NjQpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9O
T09QX01FVEhPRChyc2hpZnQzMik7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExB
VEVEX05PT1BfTUVUSE9EKHJzaGlmdDY0KTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9U
RU1QTEFURURfTk9PUF9NRVRIT0QodXJzaGlmdDMyKTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklT
Q1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QodXJzaGlmdDY0KTsKKyAgICB2b2lkIG9yOChSZWdp
c3RlcklEIHNyYywgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRv
IHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1
c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxiSW5zbih0ZW1wLmRhdGEoKSwgdGVtcC5tZW1vcnkoKSwgSW1tOjpJPDA+KCkpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5vckluc24odGVtcC5kYXRhKCksIHNyYywgdGVtcC5kYXRhKCkp
OworICAgICAgICBtX2Fzc2VtYmxlci5zYkluc24odGVtcC5tZW1vcnkoKSwgdGVtcC5kYXRhKCks
IEltbTo6UzwwPigpKTsKKyAgICB9CiAKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1Q
TEFURURfTk9PUF9NRVRIT0Qocm90YXRlUmlnaHQzMik7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJ
U0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKHJvdGF0ZVJpZ2h0NjQpOworICAgIHZvaWQgb3I4
KFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBsb2FkSW1tZWRp
YXRlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHRlbXAubWVtb3J5KCkpOworICAgICAg
ICBtX2Fzc2VtYmxlci5sYkluc24odGVtcC5kYXRhKCksIHRlbXAubWVtb3J5KCksIEltbTo6STww
PigpKTsKKworICAgICAgICBpZiAoSW1tOjppc1ZhbGlkPEltbTo6SVR5cGU+KGltbS5tX3ZhbHVl
KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JpSW5zbih0ZW1wLmRhdGEoKSwgdGVtcC5k
YXRhKCksIEltbTo6SShpbW0ubV92YWx1ZSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2JJ
bnNuKHRlbXAubWVtb3J5KCksIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5tZW1vcnkoKSk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5vckluc24odGVtcC5kYXRhKCksIHRlbXAuZGF0YSgpLCB0
ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihh
ZGRyZXNzLm1fcHRyKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
Ykluc24odGVtcC5tZW1vcnkoKSwgdGVtcC5kYXRhKCksIEltbTo6UzwwPigpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgb3IxNihSZWdpc3RlcklEIHNyYywgQWJzb2x1dGVBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+
KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwg
dGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxoSW5zbih0ZW1wLmRhdGEoKSwg
dGVtcC5tZW1vcnkoKSwgSW1tOjpJPDA+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5vckluc24o
dGVtcC5kYXRhKCksIHNyYywgdGVtcC5kYXRhKCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zaElu
c24odGVtcC5tZW1vcnkoKSwgdGVtcC5kYXRhKCksIEltbTo6UzwwPigpKTsKKyAgICB9CiAKLSAg
ICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QobG9hZDgpOwot
ICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChsb2FkOFNp
Z25lZEV4dGVuZFRvMzIpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9O
T09QX01FVEhPRChsb2FkMTYpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRF
RF9OT09QX01FVEhPRChsb2FkMTZVbmFsaWduZWQpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVND
VjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChsb2FkMTZTaWduZWRFeHRlbmRUbzMyKTsKLSAgICBN
QUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QobG9hZDMyKTsKLSAg
ICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QobG9hZDMyV2l0
aFVuYWxpZ25lZEhhbGZXb3Jkcyk7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExB
VEVEX05PT1BfTUVUSE9EKGxvYWQ2NCk7CisgICAgdm9pZCBvcjE2KFRydXN0ZWRJbW0zMiBpbW0s
IEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVt
cHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIo
YWRkcmVzcy5tX3B0ciksIHRlbXAubWVtb3J5KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5saElu
c24odGVtcC5kYXRhKCksIHRlbXAubWVtb3J5KCksIEltbTo6STwwPigpKTsKIAotICAgIE1BQ1JP
X0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChzdG9yZTgpOwotICAgIE1B
Q1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChzdG9yZTE2KTsKLSAg
ICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qoc3RvcmUzMik7
Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKHN0b3Jl
NjQpOworICAgICAgICBpZiAoSW1tOjppc1ZhbGlkPEltbTo6SVR5cGU+KGltbS5tX3ZhbHVlKSkg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JpSW5zbih0ZW1wLmRhdGEoKSwgdGVtcC5kYXRh
KCksIEltbTo6SShpbW0ubV92YWx1ZSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2hJbnNu
KHRlbXAubWVtb3J5KCksIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5tZW1vcnkoKSk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5vckluc24odGVtcC5kYXRhKCksIHRlbXAuZGF0YSgpLCB0ZW1w
Lm1lbW9yeSgpKTsKKyAgICAgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zaElu
c24odGVtcC5tZW1vcnkoKSwgdGVtcC5kYXRhKCksIEltbTo6UzwwPigpKTsKKyAgICAgICAgfQor
ICAgIH0KIAotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhP
RCh6ZXJvRXh0ZW5kOFRvMzIpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRF
RF9OT09QX01FVEhPRCh6ZXJvRXh0ZW5kMTZUbzMyKTsKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG9yMzIoc3JjLCBkZXN0LCBk
ZXN0KTsKKyAgICB9CiAKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9P
UF9NRVRIT0Qoc2lnbkV4dGVuZDhUbzMyKTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9U
RU1QTEFURURfTk9PUF9NRVRIT0Qoc2lnbkV4dGVuZDE2VG8zMik7Ci0gICAgTUFDUk9fQVNTRU1C
TEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKHNpZ25FeHRlbmQzMlRvUHRyKTsKLSAg
ICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QoemVyb0V4dGVu
ZDMyVG9Xb3JkKTsKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3Ay
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vckluc24oZGVz
dCwgb3AxLCBvcDIpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3Qp
OworICAgIH0KIAotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01F
VEhPRF9XSVRIX1JFVFVSTihsb2FkNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoLCBEYXRhTGFiZWwz
Mik7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EX1dJ
VEhfUkVUVVJOKGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoLCBEYXRhTGFiZWxD
b21wYWN0KTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRI
T0RfV0lUSF9SRVRVUk4oc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gsIERhdGFMYWJlbDMy
KTsKKyAgICB2b2lkIG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgb3IzMihpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3Iz
MihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPihpbW0ubV92YWx1ZSkpIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaUluc24oZGVzdCwgb3AyLCBJbW06OkkoaW1tLm1f
dmFsdWUpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRlbXAgPSB0
ZW1wczxEYXRhPigpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5vckluc24oZGVzdCwgdGVtcC5kYXRhKCksIG9wMik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBvcjMyKFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGEsIE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZElt
bWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubHdJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCBJbW06
Okk8MD4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ySW5zbih0ZW1wLmRhdGEoKSwgc3JjLCB0
ZW1wLmRhdGEoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3SW5zbih0ZW1wLm1lbW9yeSgpLCB0
ZW1wLmRhdGEoKSwgSW1tOjpTPDA+KCkpOworICAgIH0KKworICAgIHZvaWQgb3IzMihUcnVzdGVk
SW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8g
dGVtcCA9IHRlbXBzPERhdGEsIE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVz
dGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubHdJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7CisK
KyAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPihpbW0ubV92YWx1ZSkpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaUluc24odGVtcC5kYXRhKCksIHRlbXAuZGF0YSgpLCBJ
bW06OkkoaW1tLm1fdmFsdWUpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3SW5zbih0ZW1w
Lm1lbW9yeSgpLCB0ZW1wLmRhdGEoKSwgSW1tOjpTPDA+KCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAubWVtb3J5KCkpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIub3JJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLmRhdGEoKSwgdGVtcC5tZW1v
cnkoKSk7CisgICAgICAgICAgICBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5t
X3B0ciksIHRlbXAubWVtb3J5KCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHRl
bXAubWVtb3J5KCksIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBh
dXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCB0ZW1wLm1lbW9yeSgpKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubHdJbnNuKHRlbXAuZGF0YSgpLCByZXNvbHV0aW9uLmJhc2Us
IEltbTo6SShyZXNvbHV0aW9uLm9mZnNldCkpOworCisgICAgICAgIGlmIChJbW06OmlzVmFsaWQ8
SW1tOjpJVHlwZT4oaW1tLm1fdmFsdWUpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcmlJ
bnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCBJbW06OkkoaW1tLm1fdmFsdWUpKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnN3SW5zbihyZXNvbHV0aW9uLmJhc2UsIHRlbXAuZGF0YSgp
LCBJbW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm9ySW5zbih0ZW1wLmRhdGEoKSwgdGVtcC5kYXRhKCksIHRlbXAubWVtb3J5KCkpOwor
ICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIHRlbXAubWVt
b3J5KCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHJlc29sdXRpb24uYmFzZSwg
dGVtcC5kYXRhKCksIEltbTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBvcjY0KHNyYywgZGVzdCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjY0
KFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIub3JJbnNuKGRlc3QsIG9wMSwgb3AyKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgb3I2NChpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3I2NChUcnVz
dGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPihpbW0ubV92YWx1ZSkpIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm9yaUluc24oZGVzdCwgb3AyLCBJbW06OkkoaW1tLm1fdmFsdWUp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdGVtcCA9
IHRlbXBzPERhdGE+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm9ySW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3AyKTsKKyAg
ICB9CisKKyAgICB2b2lkIG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgb3I2NChpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
b3I2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPihpbW0ubV92YWx1ZSkp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaUluc24oZGVzdCwgb3AyLCBJbW06OkkoaW1t
Lm1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1w
LmRhdGEoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ySW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwg
b3AyKTsKKyAgICB9CisKKworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIHhvcjMyKHNyYywgZGVzdCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVzdCwgb3AxLCBv
cDIpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgeG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgeG9yMzIoaW1tLCBkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhv
cjMyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBpZiAoSW1tOjppc1ZhbGlkPEltbTo6SVR5cGU+KGltbS5tX3ZhbHVlKSkg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaUluc24oZGVzdCwgb3AyLCBJbW06OkkoaW1t
Lm1fdmFsdWUpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVz
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIE1BQ1JPX0FTU0VNQkxF
Ul9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChvcjgpOwotICAgIE1BQ1JPX0FTU0VNQkxF
Ul9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChvcjE2KTsKLSAgICBNQUNST19BU1NFTUJM
RVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qob3IzMik7Ci0gICAgTUFDUk9fQVNTRU1C
TEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKG9yNjQpOworICAgICAgICBhdXRvIHRl
bXAgPSB0ZW1wczxEYXRhPigpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRh
KCkpOworICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGRlc3QsIHRlbXAuZGF0YSgpLCBvcDIp
OworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3QpOworICAgIH0KKwor
ICAgIHZvaWQgeG9yMzIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIGF1dG8g
cmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIHRlbXAubWVtb3J5KCkpOworICAg
ICAgICBtX2Fzc2VtYmxlci5sd0luc24odGVtcC5kYXRhKCksIHJlc29sdXRpb24uYmFzZSwgSW1t
OjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVz
dCwgdGVtcC5kYXRhKCksIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8
MzI+KGRlc3QpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHhvcjY0KHNyYywgZGVzdCwgZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCB4b3I2NChSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVzdCwgb3Ax
LCBvcDIpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgeG9yNjQoaW1tLCBkZXN0LCBkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgb3AyLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoSW1tOjppc1ZhbGlkPEltbTo6SVR5cGU+
KGltbS5tX3ZhbHVlKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaUluc24oZGVzdCwg
b3AyLCBJbW06OkkoaW1tLm1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7CisgICAgICAgIGxvYWRJbW1l
ZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVz
dCwgdGVtcC5kYXRhKCksIG9wMik7CisgICAgfQorCisgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1t
NjQgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB4b3I2NChpbW0sIGRlc3Qs
IGRlc3QpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0
ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChJbW06OmlzVmFs
aWQ8SW1tOjpJVHlwZT4oaW1tLm1fdmFsdWUpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54
b3JpSW5zbihkZXN0LCBvcDIsIEltbTo6SShpbW0ubV92YWx1ZSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YT4oKTsKKyAg
ICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIueG9ySW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3AyKTsKKyAgICB9CisKKyAgICB2b2lkIHhv
cjY0KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYXV0
byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBhdXRvIHJlc29sdXRpb24g
PSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubGRJbnNuKHRlbXAuZGF0YSgpLCByZXNvbHV0aW9uLmJhc2UsIEltbTo6SShyZXNvbHV0
aW9uLm9mZnNldCkpOworICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGRlc3QsIHRlbXAuZGF0
YSgpLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1v
cnk+KCk7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3Ms
IHRlbXAubWVtb3J5KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5sZEluc24odGVtcC5kYXRhKCks
IHJlc29sdXRpb24uYmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnhvckluc24odGVtcC5kYXRhKCksIHNyYywgdGVtcC5kYXRhKCkpOworICAgICAg
ICBtX2Fzc2VtYmxlci5zZEluc24ocmVzb2x1dGlvbi5iYXNlLCB0ZW1wLmRhdGEoKSwgSW1tOjpT
KHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBub3QzMihSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBub3QzMihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54b3JpSW5zbihkZXN0LCBzcmMsIEltbTo6STwtMT4oKSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBu
b3Q2NChSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBub3Q2NChkZXN0LCBkZXN0KTsK
KyAgICB9CisKKyAgICB2b2lkIG5vdDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JpSW5zbihkZXN0LCBzcmMsIEltbTo6STwt
MT4oKSk7CisgICAgfQogCi0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05P
T1BfTUVUSE9EKHhvcjMyKTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURf
Tk9PUF9NRVRIT0QoeG9yNjQpOworICAgIHZvaWQgbmVnMzIoUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbmVnMzIoZGVzdCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBuZWczMihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc3Vid0luc24oZGVzdCwgUklTQ1Y2NFJlZ2lzdGVyczo6emVybywgc3JjKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG5l
ZzY0KFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG5lZzY0KGRlc3QsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgbmVnNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Ykluc24oZGVzdCwgUklTQ1Y2NFJlZ2lzdGVy
czo6emVybywgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGlJbnNuKGRlc3Qs
IHNyYywgSW1tOjpJPDA+KCkpOworICAgIH0KKworICAgIHZvaWQgbW92ZShUcnVzdGVkSW1tMzIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwg
ZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCBtb3ZlKFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCBkZXN0KTsKKyAgICB9CiAKLSAgICBNQUNS
T19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qobm90MzIpOwotICAgIE1B
Q1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChub3Q2NCk7CisgICAg
dm9pZCBtb3ZlKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkSW1tZWRpYXRlKGltbSwgZGVzdCk7CisgICAgfQogCi0gICAgTUFDUk9fQVNTRU1C
TEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKG5lZzMyKTsKLSAgICBNQUNST19BU1NF
TUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QobmVnNjQpOworICAgIHZvaWQgc3dh
cChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMikKKyAgICB7CisgICAgICAgIGF1dG8g
dGVtcCA9IHRlbXBzPERhdGE+KCk7CisgICAgICAgIG1vdmUocmVnMSwgdGVtcC5kYXRhKCkpOwor
ICAgICAgICBtb3ZlKHJlZzIsIHJlZzEpOworICAgICAgICBtb3ZlKHRlbXAuZGF0YSgpLCByZWcy
KTsKKyAgICB9CiAKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9N
RVRIT0QobW92ZSk7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1Bf
TUVUSE9EKHN3YXApOworICAgIHZvaWQgc3dhcChGUFJlZ2lzdGVySUQsIEZQUmVnaXN0ZXJJRCkK
KyAgICB7CisgICAgICAgIC8vIFRPRE8KKyAgICB9CiAKICAgICBNQUNST19BU1NFTUJMRVJfUklT
Q1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QobW92ZVplcm9Ub0RvdWJsZSk7CiAgICAgTUFDUk9f
QVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKG1vdmVGbG9hdFRvMzIpOwpA
QCAtNzE0LDIwICsxNjg0LDY0IEBAIHB1YmxpYzoKICAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2
NF9URU1QTEFURURfTk9PUF9NRVRIT0QodHJ1bmNhdGVEb3VibGVUb0ludDY0KTsKICAgICBNQUNS
T19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QodHJ1bmNhdGVEb3VibGVU
b1VpbnQ2NCk7CiAKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9N
RVRIT0QocHVzaCk7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1Bf
TUVUSE9EKHB1c2hQYWlyKTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURf
Tk9PUF9NRVRIT0QocHVzaFRvU2F2ZSk7CisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaUluc24oUklTQ1Y2NFJlZ2lzdGVyczo6c3As
IFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBJbW06Okk8LTg+KCkpOworICAgICAgICBtX2Fzc2VtYmxl
ci5zZEluc24oUklTQ1Y2NFJlZ2lzdGVyczo6c3AsIHNyYywgSW1tOjpTPDA+KCkpOworICAgIH0K
KworICAgIHZvaWQgcHVzaChUcnVzdGVkSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgYXV0byB0
ZW1wID0gdGVtcHM8RGF0YT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAuZGF0
YSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaUluc24oUklTQ1Y2NFJlZ2lzdGVyczo6c3As
IFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBJbW06Okk8LTg+KCkpOworICAgICAgICBtX2Fzc2VtYmxl
ci5zZEluc24oUklTQ1Y2NFJlZ2lzdGVyczo6c3AsIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7
CisgICAgfQogCi0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVU
SE9EKHBvcCk7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVU
SE9EKHBvcFBhaXIpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09Q
X01FVEhPRChwb3BUb1Jlc3RvcmUpOworICAgIHZvaWQgcHVzaFBhaXIoUmVnaXN0ZXJJRCBzcmMx
LCBSZWdpc3RlcklEIHNyYzIpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRpSW5zbihS
SVNDVjY0UmVnaXN0ZXJzOjpzcCwgUklTQ1Y2NFJlZ2lzdGVyczo6c3AsIEltbTo6STwtMTY+KCkp
OworICAgICAgICBtX2Fzc2VtYmxlci5zZEluc24oUklTQ1Y2NFJlZ2lzdGVyczo6c3AsIHNyYzEs
IEltbTo6UzwwPigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2RJbnNuKFJJU0NWNjRSZWdpc3Rl
cnM6OnNwLCBzcmMyLCBJbW06OlM8OD4oKSk7CisgICAgfQogCi0gICAgTUFDUk9fQVNTRU1CTEVS
X1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGFib3J0V2l0aFJlYXNvbik7CisgICAgdm9p
ZCBwb3AoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNu
KGRlc3QsIFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBJbW06Okk8MD4oKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGlJbnNuKFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBSSVNDVjY0UmVnaXN0ZXJzOjpz
cCwgSW1tOjpJPDg+KCkpOworICAgIH0KIAotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RF
TVBMQVRFRF9OT09QX01FVEhPRF9XSVRIX1JFVFVSTihzdG9yZVB0cldpdGhQYXRjaCwgRGF0YUxh
YmVsUHRyKTsKKyAgICB2b2lkIHBvcFBhaXIoUmVnaXN0ZXJJRCBkZXN0MSwgUmVnaXN0ZXJJRCBk
ZXN0MikKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkSW5zbihkZXN0MSwgUklTQ1Y2NFJl
Z2lzdGVyczo6c3AsIEltbTo6STwwPigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKGRl
c3QyLCBSSVNDVjY0UmVnaXN0ZXJzOjpzcCwgSW1tOjpJPDg+KCkpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRpSW5zbihSSVNDVjY0UmVnaXN0ZXJzOjpzcCwgUklTQ1Y2NFJlZ2lzdGVyczo6c3As
IEltbTo6STwxNj4oKSk7CisgICAgfQorCisgICAgdm9pZCBhYm9ydFdpdGhSZWFzb24oQWJvcnRS
ZWFzb24gcmVhc29uKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YT4oKTsK
KyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tMzIocmVhc29uKSwgdGVtcC5kYXRhKCkp
OworICAgICAgICBtX2Fzc2VtYmxlci5lYnJlYWtJbnNuKCk7CisgICAgfQorCisgICAgdm9pZCBh
Ym9ydFdpdGhSZWFzb24oQWJvcnRSZWFzb24gcmVhc29uLCBpbnRwdHJfdCBtaXNjKQorICAgIHsK
KyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBsb2Fk
SW1tZWRpYXRlKFRydXN0ZWRJbW0zMihyZWFzb24pLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIGxv
YWRJbW1lZGlhdGUoVHJ1c3RlZEltbTY0KG1pc2MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuZWJyZWFrSW5zbigpOworICAgIH0KKworICAgIHZvaWQgYnJlYWtwb2ludCh1
aW50MTZfdCA9IDB4YzQ3MSkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVicmVha0luc24o
KTsKKyAgICB9CiAKLSAgICB2b2lkIGJyZWFrcG9pbnQodWludDE2X3QgPSAweGM0NzEpIHsgfQot
ICAgIHZvaWQgbm9wKCkgeyB9CisgICAgdm9pZCBub3AoKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkaUluc24oUklTQ1Y2NFJlZ2lzdGVyczo6emVybywgUklTQ1Y2NFJlZ2lzdGVyczo6
emVybywgSW1tOjpJPDA+KCkpOworICAgIH0KIAogICAgIHZvaWQgbWVtb3J5RmVuY2UoKSB7IH0K
ICAgICB2b2lkIHN0b3JlRmVuY2UoKSB7IH0KQEAgLTc3Nyw2ICsxNzkxLDI1IEBAIHByaXZhdGU6
CiAgICAgICAgIHN0YXRpYyBKVHlwZSBKKCkgeyByZXR1cm4gSlR5cGU6OnY8SlR5cGUsIHZhbHVl
PigpOyB9CiAgICAgfTsKIAorICAgIHZvaWQgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tMzIgaW1t
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSSVNDVjY0QXNzZW1ibGVyOjpJbW1l
ZGlhdGVMb2FkZXIoaW1tLm1fdmFsdWUpLm1vdmVJbnRvKG1fYXNzZW1ibGVyLCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgUklTQ1Y2NEFzc2VtYmxlcjo6SW1tZWRpYXRlTG9hZGVy
KGltbS5tX3ZhbHVlKS5tb3ZlSW50byhtX2Fzc2VtYmxlciwgZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBpbnRwdHJfdCB2YWx1ZSA9IGltbS5hc0ludHB0cigpOworICAgICAgICBp
ZiBjb25zdGV4cHIgKHNpemVvZihpbnRwdHJfdCkgPT0gc2l6ZW9mKGludDY0X3QpKQorICAgICAg
ICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tNjQoaW50NjRfdCh2YWx1ZSkpLCBkZXN0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tMzIoaW50
MzJfdCh2YWx1ZSkpLCBkZXN0KTsKKyAgICB9CisKICAgICBzdHJ1Y3QgQWRkcmVzc1Jlc29sdXRp
b24gewogICAgICAgICBSZWdpc3RlcklEIGJhc2U7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446354</attachid>
            <date>2021-12-08 06:10:03 -0800</date>
            <delta_ts>2021-12-12 23:19:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233992-20211208151002.patch</filename>
            <type>text/plain</type>
            <size>51168</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NjUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YzM3ZDdiNzVmMjY1ZjM3ZDYwMjZjNmRlNTFiNTU1M2NkNmQ1ZThkLi4zODRiMjNmYTgzOTY0NTYy
ZGUwYmQzNWQxY2IxMGM1ZjI1NTlkYjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAyMS0xMi0wOCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW1JJU0NWNjRdIEFkZCBNYWNyb0Fzc2VtYmxlclJJU0NWNjQgaW1wbGVt
ZW50YXRpb25zIGZvciB0cml2aWFsIGdlbmVyYWwtcHVycG9zZS1yZWdpc3RlciBvcGVyYXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM5OTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW1w
bGVtZW50YXRpb25zIGZvciB0aGUgdHJpdmlhbCBnZW5lcmFsLXB1cnBvc2UtcmVnaXN0ZXIgb3Bl
cmF0aW9ucworICAgICAgICBpbiBNYWNyb0Fzc2VtYmxlclJJU0NWNjQuIFRoaXMgY292ZXJzIG5v
bi1wYXRjaGFibGUgbG9hZHMgYW5kIHN0b3JlcywKKyAgICAgICAgc2hpZnRzLCBsb2dpY2FsIG9w
ZXJhdGlvbnMsIHplcm8tIGFuZCBzaWduLWV4dGVuc2lvbnMsIG1vdmVzIGFuZCBzd2FwcywKKyAg
ICAgICAgc3RhY2sgb3BlcmF0aW9ucyBhcyB3ZWxsIGFzIG1pc2NlbGxhbmVvdXMgb3BlcmF0aW9u
cyBsaWtlIGFib3J0cywKKyAgICAgICAgYnJlYWtwb2ludHMgYW5kIG5vcHMuCisKKyAgICAgICAg
VGhlIGxvYWRJbW1lZGlhdGUgaGVscGVyIG1ldGhvZHMgYXJlIGFkZGVkIHRvIGhhbmRsZSBsb2Fk
aW5nIG9mCisgICAgICAgIGRpZmZlcmVudCB0eXBlcyBvZiBpbW1lZGlhdGUgdmFsdWVzLiBUaGlz
IHNob3VsZCByZXBsYWNlIG1vdmUoKSBjYWxscworICAgICAgICB3aGVuIGEgc2lnbi1leHRlbmRl
ZCBpbW1lZGlhdGUgbG9hZCBpcyBkZXNpcmVkLCB3aGVyZWFzIG1vdmUoKSBmb3IKKyAgICAgICAg
YSAzMi1iaXQgaW1tZWRpYXRlIGlzIGV4cGVjdGVkIHRvIHBlcmZvcm0gbm8gc2lnbiBleHRlbnNp
b24uCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJSSVNDVjY0Lmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6YWRkMzIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmFkZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJSSVNDVjY0OjpzdWIzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6
bXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmxzaGlmdDMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpsc2hpZnQ2NCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6cnNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnJzaGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJSSVNDVjY0Ojp1cnNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJ
U0NWNjQ6OnVyc2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6
bG9hZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmxvYWQ4U2lnbmVk
RXh0ZW5kVG8zMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6bG9hZDE2
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpsb2FkMTZVbmFsaWduZWQp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmxvYWQxNlNpZ25lZEV4dGVu
ZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmxvYWQzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6bG9hZDMyV2l0aFVuYWxpZ25lZEhh
bGZXb3Jkcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6bG9hZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpsb2FkUGFpcjMyKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpzdG9yZTgpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnN0b3JlMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclJJU0NWNjQ6OnN0b3JlMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NW
NjQ6OnN0b3JlNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnN0b3Jl
UGFpcjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojp6ZXJvRXh0ZW5k
OFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6Onplcm9FeHRlbmQx
NlRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6Onplcm9FeHRlbmQz
MlRvV29yZCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6c2lnbkV4dGVu
ZDhUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpzaWduRXh0ZW5k
MTZUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpzaWduRXh0ZW5k
MzJUb1B0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6YW5kMzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmFuZDY0KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpvcjgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclJJU0NWNjQ6Om9yMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6
Om9yMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6Om9yNjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnhvcjMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojp4b3I2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyUklTQ1Y2NDo6bm90MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6
Om5vdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpuZWczMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6bmVnNjQpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6Om1vdmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclJJU0NWNjQ6OnN3YXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6
OnB1c2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnB1c2hQYWlyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpwb3ApOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnBvcFBhaXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclJJU0NWNjQ6OmFib3J0V2l0aFJlYXNvbik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyUklTQ1Y2NDo6YnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
UklTQ1Y2NDo6bm9wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0Ojpsb2Fk
SW1tZWRpYXRlKToKKwogMjAyMS0xMi0wNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBUeXBlZEFycmF5IHByb3RvdHlwZSBzZXQgc2hvdWxkIGdvIGRvd24gdGhl
IGZhc3QgcGF0aCB3aGVuIHVzaW5nIG5vbiBjbGFtcGVkIGludGVnZXIgdHlwZXMgb2YgdGhlIHNh
bWUgYnl0ZSBzaXplCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyUklTQ1Y2NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclJJU0NWNjQuaAppbmRleCA3YjBhMWM0NTgwNWIzODZkZmFjODgzNjQw
NzIyZTM0MzU3M2NlNTFkLi5hZGNiNGJlNmUxMDE2MGYyMzBlZTM0OGIwODY4YTI3YWI0YmRiMzZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyUklTQ1Y2NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJSSVNDVjY0LmgKQEAgLTE4NCw3ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0K
IAogICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhPigpOwotICAgICAgICBtb3ZlKGltbSwg
dGVtcC5kYXRhKCkpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOwog
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR3SW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3AyKTsKICAg
ICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKICAgICB9CkBAIC0xOTIs
NyArMTkyLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgQWJz
b2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxE
YXRhLCBNZW1vcnk+KCk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRy
KSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihh
ZGRyZXNzLm1fcHRyKSwgdGVtcC5tZW1vcnkoKSk7CiAgICAgICAgIGlmIChJbW06OmlzVmFsaWQ8
SW1tOjpJVHlwZT4oaW1tLm1fdmFsdWUpKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd0lu
c24odGVtcC5kYXRhKCksIHRlbXAubWVtb3J5KCksIEltbTo6STwwPigpKTsKICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGlJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLmRhdGEoKSwgSW1tOjpJKGlt
bS5tX3ZhbHVlKSk7CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAog
ICAgICAgICBtX2Fzc2VtYmxlci5sd0luc24odGVtcC5tZW1vcnkoKSwgdGVtcC5tZW1vcnkoKSwg
SW1tOjpJPDA+KCkpOwotICAgICAgICBtb3ZlKGltbSwgdGVtcC5kYXRhKCkpOworICAgICAgICBs
b2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOwogICAgICAgICBtX2Fzc2VtYmxlci5hZGRJ
bnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCB0ZW1wLmRhdGEoKSk7CiAKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAg
ICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9y
eSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHRlbXAubWVtb3J5KCksIHRlbXAuZGF0
YSgpLCBJbW06OlM8MD4oKSk7CiAgICAgfQogCkBAIC0yMjAsNyArMjIwLDcgQEAgcHVibGljOgog
ICAgICAgICB9CiAKICAgICAgICAgbV9hc3NlbWJsZXIubHdJbnNuKHRlbXAubWVtb3J5KCksIHJl
c29sdXRpb24uYmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7Ci0gICAgICAgIG1vdmUo
aW1tLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEo
KSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZEluc24odGVtcC5kYXRhKCksIHRlbXAubWVtb3J5
KCksIHRlbXAuZGF0YSgpKTsKIAogICAgICAgICByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3Mo
YWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CkBAIC0yNTksNyArMjU5LDcgQEAgcHVibGljOgogICAg
ICAgICB9CiAKICAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YT4oKTsKLSAgICAgICAgbW92
ZShpbW0sIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAuZGF0
YSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkSW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3Ay
KTsKICAgICB9CiAKQEAgLTI3NiwxNCArMjc2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAg
ICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7Ci0gICAgICAgIG1vdmUoaW1tLCB0ZW1w
LmRhdGEoKSk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZEluc24oZGVzdCwgdGVtcC5kYXRhKCksIG9wMik7CiAgICAgfQog
CiAgICAgdm9pZCBhZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGEsIE1lbW9yeT4oKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsK
KyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1w
Lm1lbW9yeSgpKTsKIAogICAgICAgICBpZiAoSW1tOjppc1ZhbGlkPEltbTo6SVR5cGU+KGltbS5t
X3ZhbHVlKSkgewogICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKHRlbXAuZGF0YSgpLCB0
ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7CkBAIC0yOTMsMTAgKzI5MywxMCBAQCBwdWJsaWM6
CiAgICAgICAgIH0KIAogICAgICAgICBtX2Fzc2VtYmxlci5sZEluc24odGVtcC5tZW1vcnkoKSwg
dGVtcC5tZW1vcnkoKSwgSW1tOjpJPDA+KCkpOwotICAgICAgICBtb3ZlKGltbSwgdGVtcC5kYXRh
KCkpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOwogICAgICAgICBt
X2Fzc2VtYmxlci5hZGRJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLmRhdGEoKSwgdGVtcC5tZW1vcnko
KSk7CiAKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1l
bW9yeSgpKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9w
dHIpLCB0ZW1wLm1lbW9yeSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc2RJbnNuKHRlbXAubWVt
b3J5KCksIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7CiAgICAgfQogCkBAIC0zMTIsNyArMzEy
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
bW92ZShpbW0sIHRlbXAubWVtb3J5KCkpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVt
cC5tZW1vcnkoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZEluc24odGVtcC5kYXRhKCksIHRl
bXAubWVtb3J5KCksIHRlbXAuZGF0YSgpKTsKIAogICAgICAgICByZXNvbHV0aW9uID0gcmVzb2x2
ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CkBAIC0zMjIsNyArMzIyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkNjQoQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKICAgICB7CiAgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPE1lbW9yeT4oKTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAg
ICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1l
bW9yeSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKHRlbXAubWVtb3J5KCksIHRlbXAu
bWVtb3J5KCksIEltbTo6STwwPigpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkSW5zbihkZXN0
LCB0ZW1wLm1lbW9yeSgpLCBkZXN0KTsKICAgICB9CkBAIC0zNTksNyArMzU5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJl
c3MpCiAgICAgewogICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgdGVtcC5tZW1vcnkoKSk7
CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgdGVt
cC5tZW1vcnkoKSk7CiAKICAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPigtaW1t
Lm1fdmFsdWUpKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd0luc24odGVtcC5kYXRhKCks
IHRlbXAubWVtb3J5KCksIEltbTo6STwwPigpKTsKQEAgLTM2OSwxMCArMzY5LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgfQogCiAgICAgICAgIG1fYXNzZW1ibGVyLmx3SW5zbih0ZW1wLm1lbW9yeSgp
LCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7Ci0gICAgICAgIG1vdmUoaW1tLCB0ZW1wLmRh
dGEoKSk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnN1YndJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCB0ZW1wLmRh
dGEoKSk7CiAKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1w
Lm1lbW9yeSgpKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3Mu
bV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHRlbXAu
bWVtb3J5KCksIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7CiAgICAgfQogCkBAIC0zODgsNyAr
Mzg4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgbW92ZShpbW0sIHRlbXAubWVtb3J5KCkpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwg
dGVtcC5tZW1vcnkoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YndJbnNuKHRlbXAuZGF0YSgp
LCB0ZW1wLmRhdGEoKSwgdGVtcC5tZW1vcnkoKSk7CiAKICAgICAgICAgcmVzb2x1dGlvbiA9IHJl
c29sdmVBZGRyZXNzKGFkZHJlc3MsIHRlbXAubWVtb3J5KCkpOwpAQCAtNDQ4LDcgKzQ0OCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIG11bDMyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgcmhz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRh
PigpOwotICAgICAgICBtb3ZlKGltbSwgdGVtcC5kYXRhKCkpOworICAgICAgICBsb2FkSW1tZWRp
YXRlKGltbSwgdGVtcC5kYXRhKCkpOwogICAgICAgICBtX2Fzc2VtYmxlci5tdWx3SW5zbihkZXN0
LCB0ZW1wLmRhdGEoKSwgcmhzKTsKICAgICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMy
PihkZXN0KTsKICAgICB9CkBAIC00NjMsNzAgKzQ2MywxMDQwIEBAIHB1YmxpYzoKICAgICAgICAg
bV9hc3NlbWJsZXIubXVsSW5zbihkZXN0LCBsaHMsIHJocyk7CiAgICAgfQogCi0gICAgTUFDUk9f
QVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGFuZDMyKTsKLSAgICBNQUNS
T19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QoYW5kNjQpOworICAgIE1B
Q1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChjb3VudExlYWRpbmda
ZXJvczMyKTsKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRI
T0QoY291bnRMZWFkaW5nWmVyb3M2NCk7CisgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVN
UExBVEVEX05PT1BfTUVUSE9EKGNvdW50VHJhaWxpbmdaZXJvczMyKTsKKyAgICBNQUNST19BU1NF
TUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QoY291bnRUcmFpbGluZ1plcm9zNjQp
OworCisgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGJ5
dGVTd2FwMTYpOworICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01F
VEhPRChieXRlU3dhcDMyKTsKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURf
Tk9PUF9NRVRIT0QoYnl0ZVN3YXA2NCk7CisKKyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQg
c2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxzaGlmdDMyKGRl
c3QsIHNoaWZ0QW1vdW50LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zbGx3SW5zbihkZXN0LCBzcmMsIHNoaWZ0QW1vdW50KTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGxzaGlmdDMyKFRydXN0ZWRJbW0zMiBzaGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbHNoaWZ0MzIoZGVzdCwgc2hpZnRBbW91bnQsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbGl3SW5zbihk
ZXN0LCBzcmMsIHVpbnQzMl90KGltbS5tX3ZhbHVlICYgKCgxIDw8IDUpIC0gMSkpKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IGxzaGlmdDY0KFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGxzaGlmdDY0KGRlc3QsIHNoaWZ0QW1vdW50LCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGxzaGlmdDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zbGxJbnNuKGRlc3Qs
IHNyYywgc2hpZnRBbW91bnQpOworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsc2hpZnQ2
NChkZXN0LCBzaGlmdEFtb3VudCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQ2NChS
ZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc2xsaUluc24oZGVzdCwgc3JjLCB1aW50MzJfdChpbW0ubV92
YWx1ZSAmICgoMSA8PCA2KSAtIDEpKSk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihSZWdp
c3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICByc2hp
ZnQzMihkZXN0LCBzaGlmdEFtb3VudCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBzaGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Jhd0luc24oZGVzdCwgc3JjLCBzaGlmdEFt
b3VudCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCByc2hpZnQzMihUcnVzdGVkSW1tMzIgc2hpZnRBbW91bnQsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKGRlc3QsIHNoaWZ0QW1vdW50LCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1t
MzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zcmFp
d0luc24oZGVzdCwgc3JjLCB1aW50MzJfdChpbW0ubV92YWx1ZSAmICgoMSA8PCA1KSAtIDEpKSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCByc2hpZnQ2NChSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICByc2hpZnQ2NChkZXN0LCBzaGlmdEFtb3VudCwgZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCByc2hpZnQ2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBzaGlmdEFt
b3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3JhSW5z
bihkZXN0LCBzcmMsIHNoaWZ0QW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDY0KFRy
dXN0ZWRJbW0zMiBzaGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
cnNoaWZ0NjQoZGVzdCwgc2hpZnRBbW91bnQsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcnNo
aWZ0NjQoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNyYWlJbnNuKGRlc3QsIHNyYywgdWludDMyX3Qo
aW1tLm1fdmFsdWUgJiAoKDEgPDwgNikgLSAxKSkpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlm
dDMyKFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIHVyc2hpZnQzMihkZXN0LCBzaGlmdEFtb3VudCwgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCB1cnNoaWZ0MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNybHdJbnNuKGRlc3QsIHNy
Yywgc2hpZnRBbW91bnQpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMiBzaGlmdEFtb3Vu
dCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDMyKGRlc3QsIHNoaWZ0
QW1vdW50LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHVyc2hpZnQzMihSZWdpc3RlcklEIHNy
YywgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3JsaXdJbnNuKGRlc3QsIHNyYywgdWludDMyX3QoaW1tLm1fdmFsdWUgJiAoKDEg
PDwgNSkgLSAxKSkpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdDY0KFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHVyc2hpZnQ2NChkZXN0LCBzaGlmdEFtb3Vu
dCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0NjQoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnNybEluc24oZGVzdCwgc3JjLCBzaGlmdEFtb3VudCk7CisgICAgfQorCisgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICB1cnNoaWZ0NjQoZGVzdCwgc2hpZnRBbW91bnQsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgdXJzaGlmdDY0KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgaW1t
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zcmxpSW5zbihk
ZXN0LCBzcmMsIHVpbnQzMl90KGltbS5tX3ZhbHVlICYgKCgxIDw8IDYpIC0gMSkpKTsKKyAgICB9
CisKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qocm90
YXRlUmlnaHQzMik7CisgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1Bf
TUVUSE9EKHJvdGF0ZVJpZ2h0NjQpOworCisgICAgdm9pZCBsb2FkOChBZGRyZXNzIGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29s
dmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxidUluc24oZGVzdCwgcmVzb2x1dGlvbi5iYXNlLCBJbW06OkkocmVzb2x1dGlvbi5vZmZz
ZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ4KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVz
cyhhZGRyZXNzLCBsYXp5VGVtcDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5sYnVJ
bnNuKGRlc3QsIHJlc29sdXRpb24uYmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7Cisg
ICAgfQorCisgICAgdm9pZCBsb2FkOChjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAg
IGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxidUluc24oZGVzdCwgdGVtcC5tZW1vcnkoKSwgSW1tOjpJPDA+
KCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDhTaWduZWRFeHRlbmRUbzMyKEFkZHJlc3MgYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0g
cmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgbGF6eVRlbXA8TWVtb3J5PigpKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGJJbnNuKGRlc3QsIHJlc29sdXRpb24uYmFzZSwgSW1tOjpJKHJlc29sdXRpb24u
b2Zmc2V0KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7Cisg
ICAgfQorCisgICAgdm9pZCBsb2FkOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29s
dmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxiSW5zbihkZXN0LCByZXNvbHV0aW9uLmJhc2UsIEltbTo6SShyZXNvbHV0aW9uLm9mZnNl
dCkpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgbG9hZDhTaWduZWRFeHRlbmRUbzMyKGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPE1lbW9yeT4o
KTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCB0ZW1wLm1l
bW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGJJbnNuKGRlc3QsIHRlbXAubWVtb3J5KCks
IEltbTo6STwwPigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFk
ZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxodUluc24o
ZGVzdCwgcmVzb2x1dGlvbi5iYXNlLCBJbW06OkkocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGxvYWQxNihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywg
bGF6eVRlbXA8TWVtb3J5PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGh1SW5zbihkZXN0LCBy
ZXNvbHV0aW9uLmJhc2UsIEltbTo6SShyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAg
IHZvaWQgbG9hZDE2KGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVk
aWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGh1SW5zbihkZXN0LCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7CisgICAg
fQorCisgICAgdm9pZCBsb2FkMTZVbmFsaWduZWQoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBsb2FkMTYoYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCBsb2FkMTZVbmFsaWduZWQoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQxNihhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRy
ZXNzLCBsYXp5VGVtcDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5saEluc24oZGVz
dCwgcmVzb2x1dGlvbi5iYXNlLCBJbW06OkkocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWQxNlNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3Ms
IGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxoSW5zbihkZXN0LCBy
ZXNvbHV0aW9uLmJhc2UsIEltbTo6SShyZXNvbHV0aW9uLm9mZnNldCkpOworICAgICAgICBtX2Fz
c2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDE2
U2lnbmVkRXh0ZW5kVG8zMihjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAgIGxvYWRJ
bW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxoSW5zbihkZXN0LCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBsb2FkMzIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCBsYXp5VGVtcDxN
ZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5sd3VJbnNuKGRlc3QsIHJlc29sdXRpb24u
YmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
MzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1
dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4o
KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3dUluc24oZGVzdCwgcmVzb2x1dGlvbi5iYXNlLCBJ
bW06OkkocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihjb25z
dCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhdXRvIHRl
bXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0
cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3dUluc24o
ZGVzdCwgdGVtcC5tZW1vcnkoKSwgSW1tOjpJPDA+KCkpOworICAgIH0KKworICAgIHZvaWQgbG9h
ZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgbG9hZDY0KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgbGF6eVRlbXA8
TWVtb3J5PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKGRlc3QsIHJlc29sdXRpb24u
YmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
NjQoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1
dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4o
KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkSW5zbihkZXN0LCByZXNvbHV0aW9uLmJhc2UsIElt
bTo6SShyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDY0KGNvbnN0
IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gdGVt
cCA9IHRlbXBzPE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRy
KGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKGRl
c3QsIHRlbXAubWVtb3J5KCksIEltbTo6STwwPigpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRQ
YWlyMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdDEsIFJlZ2lzdGVySUQgZGVzdDIp
CisgICAgeworICAgICAgICBsb2FkUGFpcjMyKHNyYywgVHJ1c3RlZEltbTMyKDApLCBkZXN0MSwg
ZGVzdDIpOworICAgIH0KKworICAgIHZvaWQgbG9hZFBhaXIzMihSZWdpc3RlcklEIHNyYywgVHJ1
c3RlZEltbTMyIG9mZnNldCwgUmVnaXN0ZXJJRCBkZXN0MSwgUmVnaXN0ZXJJRCBkZXN0MikKKyAg
ICB7CisgICAgICAgIEFTU0VSVChkZXN0MSAhPSBkZXN0Mik7CisgICAgICAgIGlmIChzcmMgPT0g
ZGVzdDEpIHsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHNyYywgb2Zmc2V0Lm1fdmFsdWUg
KyA0KSwgZGVzdDIpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Moc3JjLCBvZmZzZXQubV92
YWx1ZSksIGRlc3QxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHNyYywgb2Zmc2V0Lm1fdmFsdWUpLCBkZXN0MSk7CisgICAgICAgICAgICBsb2FkMzIoQWRk
cmVzcyhzcmMsIG9mZnNldC5tX3ZhbHVlICsgNCksIGRlc3QyKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgc3RvcmU4KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCBsYXp5
VGVtcDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zYkluc24ocmVzb2x1dGlvbi5i
YXNlLCBzcmMsIEltbTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQg
c3RvcmU4KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAg
IGF1dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9y
eT4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNiSW5zbihyZXNvbHV0aW9uLmJhc2UsIHNyYywg
SW1tOjpTKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTgoUmVn
aXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRvIHRl
bXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0
cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNiSW5zbih0
ZW1wLm1lbW9yeSgpLCBzcmMsIEltbTo6UzwwPigpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
OChUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRv
IHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIFJlZ2lzdGVySUQgaW1tUmVn
aXN0ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOworICAgICAgICBUcnVzdGVkSW1tMzIgaW1t
OChpbnQ4X3QoaW1tLm1fdmFsdWUpKTsKKyAgICAgICAgaWYgKCEhaW1tOC5tX3ZhbHVlKSB7Cisg
ICAgICAgICAgICBsb2FkSW1tZWRpYXRlKGltbTgsIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgICAg
IGltbVJlZ2lzdGVyID0gdGVtcC5kYXRhKCk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJl
c29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc2JJbnNuKHJlc29sdXRpb24uYmFzZSwgaW1tUmVnaXN0ZXIsIEltbTo6
UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmU4KFRydXN0ZWRJ
bW0zMiBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0g
dGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0g
UklTQ1Y2NFJlZ2lzdGVyczo6emVybzsKKyAgICAgICAgVHJ1c3RlZEltbTMyIGltbTgoaW50OF90
KGltbS5tX3ZhbHVlKSk7CisgICAgICAgIGlmICghIWltbTgubV92YWx1ZSkgeworICAgICAgICAg
ICAgbG9hZEltbWVkaWF0ZShpbW04LCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdp
c3RlciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXNvbHV0aW9u
ID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnNiSW5zbihyZXNvbHV0aW9uLmJhc2UsIGltbVJlZ2lzdGVyLCBJbW06OlMocmVzb2x1
dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlOChUcnVzdGVkSW1tMzIgaW1t
LCBjb25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8
TWVtb3J5LCBEYXRhPigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0gUklTQ1Y2
NFJlZ2lzdGVyczo6emVybzsKKyAgICAgICAgVHJ1c3RlZEltbTMyIGltbTgoaW50OF90KGltbS5t
X3ZhbHVlKSk7CisgICAgICAgIGlmICghIWltbTgubV92YWx1ZSkgeworICAgICAgICAgICAgbG9h
ZEltbWVkaWF0ZShpbW04LCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdpc3RlciA9
IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVk
SW1tUHRyKGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2JJ
bnNuKHRlbXAubWVtb3J5KCksIGltbVJlZ2lzdGVyLCBJbW06OlM8MD4oKSk7CisgICAgfQorCisg
ICAgdm9pZCBzdG9yZTE2KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCBsYXp5VGVt
cDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zaEluc24ocmVzb2x1dGlvbi5iYXNl
LCBzcmMsIEltbTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3Rv
cmUxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBh
dXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCBsYXp5VGVtcDxNZW1vcnk+
KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zaEluc24ocmVzb2x1dGlvbi5iYXNlLCBzcmMsIElt
bTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUxNihSZWdp
c3RlcklEIHNyYywgY29uc3Qgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8gdGVt
cCA9IHRlbXBzPE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRy
KGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hJbnNuKHRl
bXAubWVtb3J5KCksIHNyYywgSW1tOjpTPDA+KCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUx
NihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRv
IHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIFJlZ2lzdGVySUQgaW1tUmVn
aXN0ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOworICAgICAgICBUcnVzdGVkSW1tMzIgaW1t
MTYoaW50MTZfdChpbW0ubV92YWx1ZSkpOworICAgICAgICBpZiAoISFpbW0xNi5tX3ZhbHVlKSB7
CisgICAgICAgICAgICBsb2FkSW1tZWRpYXRlKGltbTE2LCB0ZW1wLmRhdGEoKSk7CisgICAgICAg
ICAgICBpbW1SZWdpc3RlciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnNoSW5zbihyZXNvbHV0aW9uLmJhc2UsIGltbVJlZ2lzdGVyLCBJ
bW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMTYoVHJ1
c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRvIHRl
bXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIFJlZ2lzdGVySUQgaW1tUmVnaXN0
ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOworICAgICAgICBUcnVzdGVkSW1tMzIgaW1tMTYo
aW50MTZfdChpbW0ubV92YWx1ZSkpOworICAgICAgICBpZiAoISFpbW0xNi5tX3ZhbHVlKSB7Cisg
ICAgICAgICAgICBsb2FkSW1tZWRpYXRlKGltbTE2LCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAg
ICBpbW1SZWdpc3RlciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBy
ZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgbGF6eVRlbXA8TWVtb3J5PigpKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc2hJbnNuKHJlc29sdXRpb24uYmFzZSwgaW1tUmVnaXN0ZXIs
IEltbTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUxNihU
cnVzdGVkSW1tMzIgaW1tLCBjb25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0
byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJl
Z2lzdGVyID0gUklTQ1Y2NFJlZ2lzdGVyczo6emVybzsKKyAgICAgICAgVHJ1c3RlZEltbTMyIGlt
bTE2KGludDE2X3QoaW1tLm1fdmFsdWUpKTsKKyAgICAgICAgaWYgKCEhaW1tMTYubV92YWx1ZSkg
eworICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0xNiwgdGVtcC5kYXRhKCkpOworICAgICAg
ICAgICAgaW1tUmVnaXN0ZXIgPSB0ZW1wLmRhdGEoKTsKKyAgICAgICAgfQorCisgICAgICAgIGxv
YWRJbW1lZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnNoSW5zbih0ZW1wLm1lbW9yeSgpLCBpbW1SZWdpc3RlciwgSW1tOjpT
PDA+KCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJl
c3MoYWRkcmVzcywgbGF6eVRlbXA8TWVtb3J5PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3dJ
bnNuKHJlc29sdXRpb24uYmFzZSwgc3JjLCBJbW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAg
ICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVz
cywgbGF6eVRlbXA8TWVtb3J5PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHJlc29s
dXRpb24uYmFzZSwgc3JjLCBJbW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIGNvbnN0IHZvaWQqIGFkZHJlc3MpCisgICAg
eworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxNZW1vcnk+KCk7CisgICAgICAgIGxvYWRJbW1l
ZGlhdGUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnN3SW5zbih0ZW1wLm1lbW9yeSgpLCBzcmMsIEltbTo6UzwwPigpKTsKKyAgICB9
CisKKyAgICB2b2lkIHN0b3JlMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAg
ICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0gUklTQ1Y2NFJlZ2lzdGVyczo6emVybzsKKyAgICAg
ICAgaWYgKCEhaW1tLm1fdmFsdWUpIHsKKyAgICAgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0
ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdpc3RlciA9IHRlbXAuZGF0YSgpOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVz
cywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3SW5zbihyZXNvbHV0aW9u
LmJhc2UsIGltbVJlZ2lzdGVyLCBJbW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICB9CisK
KyAgICB2b2lkIHN0b3JlMzIoVHJ1c3RlZEltbTMyIGltbSwgQmFzZUluZGV4IGFkZHJlc3MpCisg
ICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAg
IFJlZ2lzdGVySUQgaW1tUmVnaXN0ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOworICAgICAg
ICBpZiAoISFpbW0ubV92YWx1ZSkgeworICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRl
bXAuZGF0YSgpKTsKKyAgICAgICAgICAgIGltbVJlZ2lzdGVyID0gdGVtcC5kYXRhKCk7CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNz
LCBsYXp5VGVtcDxNZW1vcnk+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zd0luc24ocmVzb2x1
dGlvbi5iYXNlLCBpbW1SZWdpc3RlciwgSW1tOjpTKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAg
fQorCisgICAgdm9pZCBzdG9yZTMyKFRydXN0ZWRJbW0zMiBpbW0sIGNvbnN0IHZvaWQqIGFkZHJl
c3MpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7Cisg
ICAgICAgIFJlZ2lzdGVySUQgaW1tUmVnaXN0ZXIgPSBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvOwor
ICAgICAgICBpZiAoISFpbW0ubV92YWx1ZSkgeworICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShp
bW0sIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgICAgIGltbVJlZ2lzdGVyID0gdGVtcC5kYXRhKCk7
CisgICAgICAgIH0KKworICAgICAgICBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIoYWRkcmVz
cyksIHRlbXAubWVtb3J5KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zd0luc24odGVtcC5tZW1v
cnkoKSwgaW1tUmVnaXN0ZXIsIEltbTo6UzwwPigpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
NjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8g
cmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLnNkSW5zbihyZXNvbHV0aW9uLmJhc2UsIHNyYywgSW1tOjpT
KHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVy
SUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x1dGlv
biA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIGxhenlUZW1wPE1lbW9yeT4oKSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLnNkSW5zbihyZXNvbHV0aW9uLmJhc2UsIHNyYywgSW1tOjpTKHJlc29sdXRp
b24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBj
b25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8TWVt
b3J5PigpOworICAgICAgICBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIHRl
bXAubWVtb3J5KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5zZEluc24odGVtcC5tZW1vcnkoKSwg
c3JjLCBJbW06OlM8MD4oKSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTY0KFRydXN0ZWRJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBz
PERhdGEsIE1lbW9yeT4oKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBpbW1SZWdpc3RlciA9IFJJU0NW
NjRSZWdpc3RlcnM6Onplcm87CisgICAgICAgIGlmICghIWltbS5tX3ZhbHVlKSB7CisgICAgICAg
ICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubWFza1JlZ2lzdGVyPDMyPih0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdp
c3RlciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXNvbHV0aW9u
ID0gcmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnNkSW5zbihyZXNvbHV0aW9uLmJhc2UsIGltbVJlZ2lzdGVyLCBJbW06OlMocmVzb2x1
dGlvbi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoVHJ1c3RlZEltbTY0IGlt
bSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0
YSwgTWVtb3J5PigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0gUklTQ1Y2NFJl
Z2lzdGVyczo6emVybzsKKyAgICAgICAgaWYgKCEhaW1tLm1fdmFsdWUpIHsKKyAgICAgICAgICAg
IGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdpc3Rl
ciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0g
cmVzb2x2ZUFkZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnNkSW5zbihyZXNvbHV0aW9uLmJhc2UsIGltbVJlZ2lzdGVyLCBJbW06OlMocmVzb2x1dGlv
bi5vZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlNjQoVHJ1c3RlZEltbTY0IGltbSwg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRh
LCBNZW1vcnk+KCk7CisgICAgICAgIFJlZ2lzdGVySUQgaW1tUmVnaXN0ZXIgPSBSSVNDVjY0UmVn
aXN0ZXJzOjp6ZXJvOworICAgICAgICBpZiAoISFpbW0ubV92YWx1ZSkgeworICAgICAgICAgICAg
bG9hZEltbWVkaWF0ZShpbW0sIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgICAgIGltbVJlZ2lzdGVy
ID0gdGVtcC5kYXRhKCk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSBy
ZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc2RJbnNuKHJlc29sdXRpb24uYmFzZSwgaW1tUmVnaXN0ZXIsIEltbTo6UyhyZXNvbHV0aW9u
Lm9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmU2NChUcnVzdGVkSW1tNjQgaW1tLCBj
b25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0
YSwgTWVtb3J5PigpOworICAgICAgICBSZWdpc3RlcklEIGltbVJlZ2lzdGVyID0gUklTQ1Y2NFJl
Z2lzdGVyczo6emVybzsKKyAgICAgICAgaWYgKCEhaW1tLm1fdmFsdWUpIHsKKyAgICAgICAgICAg
IGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgICAgICBpbW1SZWdpc3Rl
ciA9IHRlbXAuZGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVz
dGVkSW1tUHRyKGFkZHJlc3MpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c2RJbnNuKHRlbXAubWVtb3J5KCksIGltbVJlZ2lzdGVyLCBJbW06OlM8MD4oKSk7CisgICAgfQor
CisgICAgdm9pZCBzdG9yZVBhaXIzMihSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3RvcmVQYWlyMzIoc3JjMSwgc3JjMiwg
ZGVzdCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlUGFpcjMyKFJl
Z2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBSZWdpc3RlcklEIGRlc3QsIFRydXN0ZWRJ
bW0zMiBvZmZzZXQpCisgICAgeworICAgICAgICBzdG9yZTMyKHNyYzEsIEFkZHJlc3MoZGVzdCwg
b2Zmc2V0Lm1fdmFsdWUpKTsKKyAgICAgICAgc3RvcmUzMihzcmMyLCBBZGRyZXNzKGRlc3QsIG9m
ZnNldC5tX3ZhbHVlICsgNCkpOworICAgIH0KKworICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0
X1RFTVBMQVRFRF9OT09QX01FVEhPRF9XSVRIX1JFVFVSTihsb2FkNjRXaXRoQWRkcmVzc09mZnNl
dFBhdGNoLCBEYXRhTGFiZWwzMik7CisgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExB
VEVEX05PT1BfTUVUSE9EX1dJVEhfUkVUVVJOKGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNl
dFBhdGNoLCBEYXRhTGFiZWxDb21wYWN0KTsKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9U
RU1QTEFURURfTk9PUF9NRVRIT0RfV0lUSF9SRVRVUk4oc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2gsIERhdGFMYWJlbDMyKTsKKyAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFU
RURfTk9PUF9NRVRIT0RfV0lUSF9SRVRVUk4oc3RvcmVQdHJXaXRoUGF0Y2gsIERhdGFMYWJlbFB0
cik7CisKKyAgICB2b2lkIHplcm9FeHRlbmQ4VG8zMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2xsaUluc248NTY+KGRlc3QsIHNy
Yyk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNybGlJbnNuPDU2PihkZXN0LCBkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIHplcm9FeHRlbmQxNlRvMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbGlJbnNuPDQ4PihkZXN0LCBzcmMp
OworICAgICAgICBtX2Fzc2VtYmxlci5zcmxpSW5zbjw0OD4oZGVzdCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCB6ZXJvRXh0ZW5kMzJUb1dvcmQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbGlJbnNuPDMyPihkZXN0LCBzcmMp
OworICAgICAgICBtX2Fzc2VtYmxlci5zcmxpSW5zbjwzMj4oZGVzdCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBzaWduRXh0ZW5kOFRvMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbGlJbnNuPDU2PihkZXN0LCBzcmMpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5zcmFpSW5zbjwyND4oZGVzdCwgZGVzdCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnNybGlJbnNuPDMyPihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNp
Z25FeHRlbmQxNlRvMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnNsbGlJbnNuPDQ4PihkZXN0LCBzcmMpOworICAgICAgICBtX2Fz
c2VtYmxlci5zcmFpSW5zbjwxNj4oZGVzdCwgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNy
bGlJbnNuPDMyPihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNpZ25FeHRlbmQzMlRv
UHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hZGRpd0luc24oZGVzdCwgc3JjLCBJbW06Okk8MD4oKSk7CisgICAgfQorCisgICAg
dm9pZCBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBhbmQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgYW5kMzIoc3JjLCBkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKFJlZ2lz
dGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYW5kSW5zbihkZXN0LCBvcDEsIG9wMik7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihUcnVz
dGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhbmQzMihpbW0s
IGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghSW1t
Ojppc1ZhbGlkPEltbTo6SVR5cGU+KGltbS5tX3ZhbHVlKSkgeworICAgICAgICAgICAgYXV0byB0
ZW1wID0gdGVtcHM8RGF0YT4oKTsKKyAgICAgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1w
LmRhdGEoKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRJbnNuKGRlc3QsIHRlbXAuZGF0
YSgpLCBvcDIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGlJ
bnNuKGRlc3QsIG9wMiwgSW1tOjpJKGltbS5tX3ZhbHVlKSk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRl
bXBzPERhdGEsIE1lbW9yeT4oKTsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFk
ZHJlc3MoYWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3SW5z
bih0ZW1wLmRhdGEoKSwgcmVzb2x1dGlvbi5iYXNlLCBJbW06OkkocmVzb2x1dGlvbi5vZmZzZXQp
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kSW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgZGVzdCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCBhbmQ2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgYW5kNjQoc3JjLCBkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KFJl
Z2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kSW5zbihkZXN0LCBvcDEsIG9wMik7CisgICAgfQorCisgICAg
dm9pZCBhbmQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBhbmQ2NChpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoVHJ1
c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGlmIChJbW06OmlzVmFsaWQ8SW1tOjpJVHlwZT4oaW1tLm1fdmFsdWUpKSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRpSW5zbihkZXN0LCBvcDIsIEltbTo6SShpbW0ubV92YWx1
ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0ZW1w
ID0gdGVtcHM8RGF0YT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAuZGF0YSgp
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kSW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3AyKTsK
KyAgICB9CisKKyAgICB2b2lkIGFuZDY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGFuZDY0KGltbSwgZGVzdCwgZGVzdCk7CisgICAgfQogCi0gICAg
TUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGNvdW50TGVhZGlu
Z1plcm9zMzIpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01F
VEhPRChjb3VudExlYWRpbmdaZXJvczY0KTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9U
RU1QTEFURURfTk9PUF9NRVRIT0QoY291bnRUcmFpbGluZ1plcm9zMzIpOwotICAgIE1BQ1JPX0FT
U0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChjb3VudFRyYWlsaW5nWmVyb3M2
NCk7CisgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIG9wMiwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBl
PihpbW0ubV92YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGlJbnNuKGRlc3Qs
IG9wMiwgSW1tOjpJKGltbS5tX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChi
eXRlU3dhcDE2KTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9N
RVRIT0QoYnl0ZVN3YXAzMik7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVE
X05PT1BfTUVUSE9EKGJ5dGVTd2FwNjQpOworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRh
PigpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOworICAgICAgICBt
X2Fzc2VtYmxlci5hbmRJbnNuKGRlc3QsIHRlbXAuZGF0YSgpLCBvcDIpOworICAgIH0KIAotICAg
IE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChsc2hpZnQzMik7
Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGxzaGlm
dDY0KTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qo
cnNoaWZ0MzIpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01F
VEhPRChyc2hpZnQ2NCk7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05P
T1BfTUVUSE9EKHVyc2hpZnQzMik7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExB
VEVEX05PT1BfTUVUSE9EKHVyc2hpZnQ2NCk7CisgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tUHRy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaW50cHRyX3QgdmFsdWUgPSBp
bW0uYXNJbnRwdHIoKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzaXplb2YoaW50cHRyX3QpID09
IHNpemVvZihpbnQ2NF90KSkKKyAgICAgICAgICAgIGFuZDY0KFRydXN0ZWRJbW02NChpbnQ2NF90
KHZhbHVlKSksIGRlc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhbmQ2NChUcnVzdGVk
SW1tMzIoaW50MzJfdCh2YWx1ZSkpLCBkZXN0KTsKKyAgICB9CiAKLSAgICBNQUNST19BU1NFTUJM
RVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qocm90YXRlUmlnaHQzMik7Ci0gICAgTUFD
Uk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKHJvdGF0ZVJpZ2h0NjQp
OworICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGEsIE1lbW9yeT4oKTsKKyAgICAg
ICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9y
eSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGJJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9y
eSgpLCBJbW06Okk8MD4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ySW5zbih0ZW1wLmRhdGEo
KSwgc3JjLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNiSW5zbih0ZW1wLm1l
bW9yeSgpLCB0ZW1wLmRhdGEoKSwgSW1tOjpTPDA+KCkpOworICAgIH0KIAotICAgIE1BQ1JPX0FT
U0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChsb2FkOCk7Ci0gICAgTUFDUk9f
QVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGxvYWQ4U2lnbmVkRXh0ZW5k
VG8zMik7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9E
KGxvYWQxNik7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVU
SE9EKGxvYWQxNlVuYWxpZ25lZCk7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExB
VEVEX05PT1BfTUVUSE9EKGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIpOwotICAgIE1BQ1JPX0FTU0VN
QkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChsb2FkMzIpOwotICAgIE1BQ1JPX0FT
U0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChsb2FkMzJXaXRoVW5hbGlnbmVk
SGFsZldvcmRzKTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9N
RVRIT0QobG9hZDY0KTsKKyAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGEsIE1l
bW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9w
dHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGJJbnNuKHRlbXAuZGF0
YSgpLCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7CiAKLSAgICBNQUNST19BU1NFTUJMRVJf
UklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qoc3RvcmU4KTsKLSAgICBNQUNST19BU1NFTUJM
RVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qoc3RvcmUxNik7Ci0gICAgTUFDUk9fQVNT
RU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKHN0b3JlMzIpOwotICAgIE1BQ1JP
X0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChzdG9yZTY0KTsKKyAgICAg
ICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPihpbW0ubV92YWx1ZSkpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm9yaUluc24odGVtcC5kYXRhKCksIHRlbXAuZGF0YSgpLCBJbW06Okko
aW1tLm1fdmFsdWUpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNiSW5zbih0ZW1wLm1lbW9y
eSgpLCB0ZW1wLmRhdGEoKSwgSW1tOjpTPDA+KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAubWVtb3J5KCkpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIub3JJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLmRhdGEoKSwgdGVtcC5tZW1vcnkoKSk7
CisgICAgICAgICAgICBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciks
IHRlbXAubWVtb3J5KCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2JJbnNuKHRlbXAubWVt
b3J5KCksIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QoemVyb0V4dGVu
ZDhUbzMyKTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRI
T0QoemVyb0V4dGVuZDE2VG8zMik7CisgICAgdm9pZCBvcjE2KFJlZ2lzdGVySUQgc3JjLCBBYnNv
bHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERh
dGEsIE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJl
c3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGhJbnNuKHRl
bXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm9ySW5zbih0ZW1wLmRhdGEoKSwgc3JjLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnNoSW5zbih0ZW1wLm1lbW9yeSgpLCB0ZW1wLmRhdGEoKSwgSW1tOjpTPDA+KCkpOwor
ICAgIH0KIAotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhP
RChzaWduRXh0ZW5kOFRvMzIpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRF
RF9OT09QX01FVEhPRChzaWduRXh0ZW5kMTZUbzMyKTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklT
Q1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qoc2lnbkV4dGVuZDMyVG9QdHIpOwotICAgIE1BQ1JP
X0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRCh6ZXJvRXh0ZW5kMzJUb1dv
cmQpOworICAgIHZvaWQgb3IxNihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGEsIE1lbW9yeT4oKTsK
KyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1w
Lm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGhJbnNuKHRlbXAuZGF0YSgpLCB0ZW1w
Lm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7CiAKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9U
RU1QTEFURURfTk9PUF9NRVRIT0RfV0lUSF9SRVRVUk4obG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaCwgRGF0YUxhYmVsMzIpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRF
RF9OT09QX01FVEhPRF9XSVRIX1JFVFVSTihsb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQ
YXRjaCwgRGF0YUxhYmVsQ29tcGFjdCk7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVN
UExBVEVEX05PT1BfTUVUSE9EX1dJVEhfUkVUVVJOKHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBh
dGNoLCBEYXRhTGFiZWwzMik7CisgICAgICAgIGlmIChJbW06OmlzVmFsaWQ8SW1tOjpJVHlwZT4o
aW1tLm1fdmFsdWUpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcmlJbnNuKHRlbXAuZGF0
YSgpLCB0ZW1wLmRhdGEoKSwgSW1tOjpJKGltbS5tX3ZhbHVlKSk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zaEluc24odGVtcC5tZW1vcnkoKSwgdGVtcC5kYXRhKCksIEltbTo6UzwwPigpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLm1l
bW9yeSgpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9ySW5zbih0ZW1wLmRhdGEoKSwgdGVt
cC5kYXRhKCksIHRlbXAubWVtb3J5KCkpOworICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVz
dGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnNoSW5zbih0ZW1wLm1lbW9yeSgpLCB0ZW1wLmRhdGEoKSwgSW1tOjpTPDA+KCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBvcjMyKHNyYywgZGVzdCwgZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JJbnNuKGRlc3QsIG9wMSwg
b3AyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgb3IzMihpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3Iz
MihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPihpbW0ubV92YWx1ZSkpIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaUluc24oZGVzdCwgb3AyLCBJbW06OkkoaW1tLm1f
dmFsdWUpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRlbXAgPSB0
ZW1wczxEYXRhPigpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5vckluc24oZGVzdCwgdGVtcC5kYXRhKCksIG9wMik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBvcjMyKFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGEsIE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZElt
bWVkaWF0ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubHdJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCBJbW06
Okk8MD4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ySW5zbih0ZW1wLmRhdGEoKSwgc3JjLCB0
ZW1wLmRhdGEoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3SW5zbih0ZW1wLm1lbW9yeSgpLCB0
ZW1wLmRhdGEoKSwgSW1tOjpTPDA+KCkpOworICAgIH0KKworICAgIHZvaWQgb3IzMihUcnVzdGVk
SW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGF1dG8g
dGVtcCA9IHRlbXBzPERhdGEsIE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVz
dGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubHdJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCBJbW06Okk8MD4oKSk7CisK
KyAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPihpbW0ubV92YWx1ZSkpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaUluc24odGVtcC5kYXRhKCksIHRlbXAuZGF0YSgpLCBJ
bW06OkkoaW1tLm1fdmFsdWUpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3SW5zbih0ZW1w
Lm1lbW9yeSgpLCB0ZW1wLmRhdGEoKSwgSW1tOjpTPDA+KCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAubWVtb3J5KCkpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIub3JJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLmRhdGEoKSwgdGVtcC5tZW1v
cnkoKSk7CisgICAgICAgICAgICBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5t
X3B0ciksIHRlbXAubWVtb3J5KCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHRl
bXAubWVtb3J5KCksIHRlbXAuZGF0YSgpLCBJbW06OlM8MD4oKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBh
dXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCB0ZW1wLm1lbW9yeSgpKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubHdJbnNuKHRlbXAuZGF0YSgpLCByZXNvbHV0aW9uLmJhc2Us
IEltbTo6SShyZXNvbHV0aW9uLm9mZnNldCkpOworCisgICAgICAgIGlmIChJbW06OmlzVmFsaWQ8
SW1tOjpJVHlwZT4oaW1tLm1fdmFsdWUpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcmlJ
bnNuKHRlbXAuZGF0YSgpLCB0ZW1wLm1lbW9yeSgpLCBJbW06OkkoaW1tLm1fdmFsdWUpKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnN3SW5zbihyZXNvbHV0aW9uLmJhc2UsIHRlbXAuZGF0YSgp
LCBJbW06OlMocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm9ySW5zbih0ZW1wLmRhdGEoKSwgdGVtcC5kYXRhKCksIHRlbXAubWVtb3J5KCkpOwor
ICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIHRlbXAubWVt
b3J5KCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3dJbnNuKHJlc29sdXRpb24uYmFzZSwg
dGVtcC5kYXRhKCksIEltbTo6UyhyZXNvbHV0aW9uLm9mZnNldCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBvcjY0KHNyYywgZGVzdCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjY0
KFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIub3JJbnNuKGRlc3QsIG9wMSwgb3AyKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgb3I2NChpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3I2NChUcnVz
dGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPihpbW0ubV92YWx1ZSkpIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm9yaUluc24oZGVzdCwgb3AyLCBJbW06OkkoaW1tLm1fdmFsdWUp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdGVtcCA9
IHRlbXBzPERhdGE+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm9ySW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3AyKTsKKyAg
ICB9CisKKyAgICB2b2lkIG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgb3I2NChpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
b3I2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKEltbTo6aXNWYWxpZDxJbW06OklUeXBlPihpbW0ubV92YWx1ZSkp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaUluc24oZGVzdCwgb3AyLCBJbW06OkkoaW1t
Lm1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1w
LmRhdGEoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ySW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwg
b3AyKTsKKyAgICB9CisKKworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIHhvcjMyKHNyYywgZGVzdCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVzdCwgb3AxLCBv
cDIpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgeG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgeG9yMzIoaW1tLCBkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhv
cjMyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBpZiAoSW1tOjppc1ZhbGlkPEltbTo6SVR5cGU+KGltbS5tX3ZhbHVlKSkg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaUluc24oZGVzdCwgb3AyLCBJbW06OkkoaW1t
Lm1fdmFsdWUpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVz
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRlbXAg
PSB0ZW1wczxEYXRhPigpOworICAgICAgICBsb2FkSW1tZWRpYXRlKGltbSwgdGVtcC5kYXRhKCkp
OworICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGRlc3QsIHRlbXAuZGF0YSgpLCBvcDIpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgeG9yMzIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIGF1dG8gcmVz
b2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIHRlbXAubWVtb3J5KCkpOworICAgICAg
ICBtX2Fzc2VtYmxlci5sd0luc24odGVtcC5kYXRhKCksIHJlc29sdXRpb24uYmFzZSwgSW1tOjpJ
KHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVzdCwg
dGVtcC5kYXRhKCksIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5tYXNrUmVnaXN0ZXI8MzI+
KGRlc3QpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIHhvcjY0KHNyYywgZGVzdCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCB4b3I2NChSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVzdCwgb3AxLCBv
cDIpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgeG9yNjQoaW1tLCBkZXN0LCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgb3AyLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoSW1tOjppc1ZhbGlkPEltbTo6SVR5cGU+KGlt
bS5tX3ZhbHVlKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaUluc24oZGVzdCwgb3Ay
LCBJbW06OkkoaW1tLm1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7CisgICAgICAgIGxvYWRJbW1lZGlh
dGUoaW1tLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVzdCwg
dGVtcC5kYXRhKCksIG9wMik7CisgICAgfQorCisgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tNjQg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB4b3I2NChpbW0sIGRlc3QsIGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJ
RCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChJbW06OmlzVmFsaWQ8
SW1tOjpJVHlwZT4oaW1tLm1fdmFsdWUpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Jp
SW5zbihkZXN0LCBvcDIsIEltbTo6SShpbW0ubV92YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YT4oKTsKKyAgICAg
ICAgbG9hZEltbWVkaWF0ZShpbW0sIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
eG9ySW5zbihkZXN0LCB0ZW1wLmRhdGEoKSwgb3AyKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0
KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYXV0byB0
ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBhdXRvIHJlc29sdXRpb24gPSBy
ZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCB0ZW1wLm1lbW9yeSgpKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubGRJbnNuKHRlbXAuZGF0YSgpLCByZXNvbHV0aW9uLmJhc2UsIEltbTo6SShyZXNvbHV0aW9u
Lm9mZnNldCkpOworICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGRlc3QsIHRlbXAuZGF0YSgp
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhLCBNZW1vcnk+
KCk7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVBZGRyZXNzKGFkZHJlc3MsIHRl
bXAubWVtb3J5KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5sZEluc24odGVtcC5kYXRhKCksIHJl
c29sdXRpb24uYmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0KSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnhvckluc24odGVtcC5kYXRhKCksIHNyYywgdGVtcC5kYXRhKCkpOworICAgICAgICBt
X2Fzc2VtYmxlci5zZEluc24ocmVzb2x1dGlvbi5iYXNlLCB0ZW1wLmRhdGEoKSwgSW1tOjpTKHJl
c29sdXRpb24ub2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBub3QzMihSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBub3QzMihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IG5vdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci54b3JpSW5zbihkZXN0LCBzcmMsIEltbTo6STwtMT4oKSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1hc2tSZWdpc3RlcjwzMj4oZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBub3Q2
NChSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBub3Q2NChkZXN0LCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIG5vdDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JpSW5zbihkZXN0LCBzcmMsIEltbTo6STwtMT4o
KSk7CisgICAgfQorCisgICAgdm9pZCBuZWczMihSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBuZWczMihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG5lZzMyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJ3
SW5zbihkZXN0LCBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvLCBzcmMpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5tYXNrUmVnaXN0ZXI8MzI+KGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbmVnNjQoUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbmVnNjQoZGVzdCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBuZWc2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3ViSW5zbihkZXN0LCBSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJv
LCBzcmMpOworICAgIH0KIAotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9O
T09QX01FVEhPRChvcjgpOwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9O
T09QX01FVEhPRChvcjE2KTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURf
Tk9PUF9NRVRIT0Qob3IzMik7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVE
X05PT1BfTUVUSE9EKG9yNjQpOworICAgIHZvaWQgbW92ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaUluc24oZGVzdCwgc3Jj
LCBJbW06Okk8MD4oKSk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKFRydXN0ZWRJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCBkZXN0
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubWFza1JlZ2lzdGVyPDMyPihkZXN0KTsKKyAgICB9CiAK
LSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QoeG9yMzIp
OwotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRCh4b3I2
NCk7CisgICAgdm9pZCBtb3ZlKFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCBkZXN0KTsKKyAgICB9CiAKLSAgICBNQUNS
T19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qobm90MzIpOwotICAgIE1B
Q1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChub3Q2NCk7CisgICAg
dm9pZCBtb3ZlKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkSW1tZWRpYXRlKGltbSwgZGVzdCk7CisgICAgfQogCi0gICAgTUFDUk9fQVNTRU1C
TEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKG5lZzMyKTsKLSAgICBNQUNST19BU1NF
TUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QobmVnNjQpOworICAgIHZvaWQgc3dh
cChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMikKKyAgICB7CisgICAgICAgIGF1dG8g
dGVtcCA9IHRlbXBzPERhdGE+KCk7CisgICAgICAgIG1vdmUocmVnMSwgdGVtcC5kYXRhKCkpOwor
ICAgICAgICBtb3ZlKHJlZzIsIHJlZzEpOworICAgICAgICBtb3ZlKHRlbXAuZGF0YSgpLCByZWcy
KTsKKyAgICB9CiAKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9N
RVRIT0QobW92ZSk7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1Bf
TUVUSE9EKHN3YXApOworICAgIHZvaWQgc3dhcChGUFJlZ2lzdGVySUQsIEZQUmVnaXN0ZXJJRCkK
KyAgICB7CisgICAgICAgIC8vIFRPRE8KKyAgICB9CiAKICAgICBNQUNST19BU1NFTUJMRVJfUklT
Q1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QobW92ZVplcm9Ub0RvdWJsZSk7CiAgICAgTUFDUk9f
QVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKG1vdmVGbG9hdFRvMzIpOwpA
QCAtNjQ4LDcgKzE2MTgsMTEgQEAgcHVibGljOgogICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0
X1RFTVBMQVRFRF9OT09QX01FVEhPRF9XSVRIX1JFVFVSTihjYWxsLCBDYWxsKTsKICAgICBNQUNS
T19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QoY2FsbE9wZXJhdGlvbik7
CiAKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QoZ2V0
RWZmZWN0aXZlQWRkcmVzcyk7CisgICAgdm9pZCBnZXRFZmZlY3RpdmVBZGRyZXNzKEJhc2VJbmRl
eCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhdXRvIHJlc29sdXRp
b24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCBsYXp5VGVtcDxNZW1vcnk+KCkpOworICAgICAg
ICBtX2Fzc2VtYmxlci5hZGRpSW5zbihkZXN0LCByZXNvbHV0aW9uLmJhc2UsIEltbTo6SShyZXNv
bHV0aW9uLm9mZnNldCkpOworICAgIH0KIAogICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RF
TVBMQVRFRF9OT09QX01FVEhPRChsb2FkRmxvYXQpOwogICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVND
VjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChsb2FkRG91YmxlKTsKQEAgLTcxNCwyMCArMTY4OCw2
NCBAQCBwdWJsaWM6CiAgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1Bf
TUVUSE9EKHRydW5jYXRlRG91YmxlVG9JbnQ2NCk7CiAgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NW
NjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKHRydW5jYXRlRG91YmxlVG9VaW50NjQpOwogCi0gICAg
TUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKHB1c2gpOwotICAg
IE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChwdXNoUGFpcik7
Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKHB1c2hU
b1NhdmUpOworICAgIHZvaWQgcHVzaChSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFkZGlJbnNuKFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBSSVNDVjY0UmVnaXN0ZXJz
OjpzcCwgSW1tOjpJPC04PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2RJbnNuKFJJU0NWNjRS
ZWdpc3RlcnM6OnNwLCBzcmMsIEltbTo6UzwwPigpKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2go
VHJ1c3RlZEltbTMyIGltbSkKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGE+
KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1tLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFkZGlJbnNuKFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBSSVNDVjY0UmVnaXN0ZXJz
OjpzcCwgSW1tOjpJPC04PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2RJbnNuKFJJU0NWNjRS
ZWdpc3RlcnM6OnNwLCB0ZW1wLmRhdGEoKSwgSW1tOjpTPDA+KCkpOworICAgIH0KIAotICAgIE1B
Q1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChwb3ApOwotICAgIE1B
Q1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChwb3BQYWlyKTsKLSAg
ICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0QocG9wVG9SZXN0
b3JlKTsKKyAgICB2b2lkIHB1c2hQYWlyKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMy
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaUluc24oUklTQ1Y2NFJlZ2lzdGVyczo6
c3AsIFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBJbW06Okk8LTE2PigpKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc2RJbnNuKFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBzcmMxLCBJbW06OlM8MD4oKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnNkSW5zbihSSVNDVjY0UmVnaXN0ZXJzOjpzcCwgc3JjMiwgSW1t
OjpTPDg+KCkpOworICAgIH0KIAotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRF
RF9OT09QX01FVEhPRChhYm9ydFdpdGhSZWFzb24pOworICAgIHZvaWQgcG9wKFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkSW5zbihkZXN0LCBSSVNDVjY0UmVn
aXN0ZXJzOjpzcCwgSW1tOjpJPDA+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRpSW5zbihS
SVNDVjY0UmVnaXN0ZXJzOjpzcCwgUklTQ1Y2NFJlZ2lzdGVyczo6c3AsIEltbTo6STw4PigpKTsK
KyAgICB9CiAKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRI
T0RfV0lUSF9SRVRVUk4oc3RvcmVQdHJXaXRoUGF0Y2gsIERhdGFMYWJlbFB0cik7CisgICAgdm9p
ZCBwb3BQYWlyKFJlZ2lzdGVySUQgZGVzdDEsIFJlZ2lzdGVySUQgZGVzdDIpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5sZEluc24oZGVzdDEsIFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBJbW06
Okk8MD4oKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkSW5zbihkZXN0MiwgUklTQ1Y2NFJlZ2lz
dGVyczo6c3AsIEltbTo6STw4PigpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaUluc24oUklT
Q1Y2NFJlZ2lzdGVyczo6c3AsIFJJU0NWNjRSZWdpc3RlcnM6OnNwLCBJbW06Okk8MTY+KCkpOwor
ICAgIH0KKworICAgIHZvaWQgYWJvcnRXaXRoUmVhc29uKEFib3J0UmVhc29uIHJlYXNvbikKKyAg
ICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7CisgICAgICAgIGxvYWRJbW1l
ZGlhdGUoVHJ1c3RlZEltbTMyKHJlYXNvbiksIHRlbXAuZGF0YSgpKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZWJyZWFrSW5zbigpOworICAgIH0KKworICAgIHZvaWQgYWJvcnRXaXRoUmVhc29uKEFi
b3J0UmVhc29uIHJlYXNvbiwgaW50cHRyX3QgbWlzYykKKyAgICB7CisgICAgICAgIGF1dG8gdGVt
cCA9IHRlbXBzPERhdGEsIE1lbW9yeT4oKTsKKyAgICAgICAgbG9hZEltbWVkaWF0ZShUcnVzdGVk
SW1tMzIocmVhc29uKSwgdGVtcC5kYXRhKCkpOworICAgICAgICBsb2FkSW1tZWRpYXRlKFRydXN0
ZWRJbW02NChtaXNjKSwgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVicmVh
a0luc24oKTsKKyAgICB9CisKKyAgICB2b2lkIGJyZWFrcG9pbnQodWludDE2X3QgPSAweGM0NzEp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lYnJlYWtJbnNuKCk7CisgICAgfQogCi0gICAg
dm9pZCBicmVha3BvaW50KHVpbnQxNl90ID0gMHhjNDcxKSB7IH0KLSAgICB2b2lkIG5vcCgpIHsg
fQorICAgIHZvaWQgbm9wKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGlJbnNuKFJJ
U0NWNjRSZWdpc3RlcnM6Onplcm8sIFJJU0NWNjRSZWdpc3RlcnM6Onplcm8sIEltbTo6STwwPigp
KTsKKyAgICB9CiAKICAgICB2b2lkIG1lbW9yeUZlbmNlKCkgeyB9CiAgICAgdm9pZCBzdG9yZUZl
bmNlKCkgeyB9CkBAIC03NzcsNiArMTc5NSwyNSBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWMg
SlR5cGUgSigpIHsgcmV0dXJuIEpUeXBlOjp2PEpUeXBlLCB2YWx1ZT4oKTsgfQogICAgIH07CiAK
KyAgICB2b2lkIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUklTQ1Y2NEFzc2VtYmxlcjo6SW1tZWRpYXRlTG9hZGVyKGltbS5t
X3ZhbHVlKS5tb3ZlSW50byhtX2Fzc2VtYmxlciwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBs
b2FkSW1tZWRpYXRlKFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIFJJU0NWNjRBc3NlbWJsZXI6OkltbWVkaWF0ZUxvYWRlcihpbW0ubV92YWx1ZSkubW92
ZUludG8obV9hc3NlbWJsZXIsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZEltbWVkaWF0
ZShUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaW50
cHRyX3QgdmFsdWUgPSBpbW0uYXNJbnRwdHIoKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzaXpl
b2YoaW50cHRyX3QpID09IHNpemVvZihpbnQ2NF90KSkKKyAgICAgICAgICAgIGxvYWRJbW1lZGlh
dGUoVHJ1c3RlZEltbTY0KGludDY0X3QodmFsdWUpKSwgZGVzdCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGxvYWRJbW1lZGlhdGUoVHJ1c3RlZEltbTMyKGludDMyX3QodmFsdWUpKSwgZGVz
dCk7CisgICAgfQorCiAgICAgc3RydWN0IEFkZHJlc3NSZXNvbHV0aW9uIHsKICAgICAgICAgUmVn
aXN0ZXJJRCBiYXNlOwogICAgICAgICBpbnQzMl90IG9mZnNldDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>