<?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>78956</bug_id>
          
          <creation_ts>2012-02-18 00:17:58 -0800</creation_ts>
          <short_desc>DFGPropagator.cpp has too many things</short_desc>
          <delta_ts>2012-02-18 12:08:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>559743</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-18 00:17:58 -0800</bug_when>
    <thetext>It&apos;s a bunch of completely separate phases with no relationship to each other.

The DFG should have some common and somewhat sensible framework for having phases instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559746</commentid>
    <comment_count>1</comment_count>
      <attachid>127698</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-18 00:35:58 -0800</bug_when>
    <thetext>Created attachment 127698
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559747</commentid>
    <comment_count>2</comment_count>
      <attachid>127698</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-18 00:45:28 -0800</bug_when>
    <thetext>Comment on attachment 127698
the patch

Attachment 127698 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11539737</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559749</commentid>
    <comment_count>3</comment_count>
      <attachid>127699</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-18 00:48:53 -0800</bug_when>
    <thetext>Created attachment 127699
the patch

Fixed typo in cmakefiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559785</commentid>
    <comment_count>4</comment_count>
      <attachid>127699</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-02-18 10:47:15 -0800</bug_when>
    <thetext>Comment on attachment 127699
the patch

Refactor all the things!!!! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559802</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-18 12:08:24 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/108166</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127698</attachid>
            <date>2012-02-18 00:35:58 -0800</date>
            <delta_ts>2012-02-18 00:48:53 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>phases_patch_1.diff</filename>
            <type>text/plain</type>
            <size>179065</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA4MTU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEyLTAyLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHUHJvcGFnYXRvci5jcHAgaGFzIHRvbyBtYW55IHRoaW5ncworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg5NTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIHRoZSBub3Rpb24gb2Yg
YSBERkc6OlBoYXNlLiBSZW1vdmVkIERGRzo6UHJvcGFnYXRvciwgYW5kIHRvb2sgaXRzCisgICAg
ICAgIHZhcmlvdXMgdGhpbmdzIGFuZCBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGZpbGVzLiBUaGVz
ZSBuZXcgcGhhc2VzIGZvbGxvdworICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gIkRGRzxu
YW1lPlBoYXNlIiB3aGVyZSA8bmFtZT4gaXMgYSBub3VuLiBUaGV5IGFyZQorICAgICAgICBjYWxs
ZWQgdmlhIGZ1bmN0aW9ucyBvZiB0aGUgZm9ybSAicGVyZm9ybTxuYW1lPiIuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFz
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3Jt
QXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2UpOgorICAgICAgICAqIGRmZy9ERkdBcml0aE5vZGVGbGFn
c0luZmVyZW5jZVBoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcv
REZHQ0ZBUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6cGVyZm9ybUNGQSk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmg6IEFkZGVkLgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNTRSk6CisgICAgICAgICogZGZn
L0RGR0NTRVBoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
RHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
UGhhc2U6OmJlZ2luUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlBoYXNlOjplbmRQaGFzZSk6
CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKFBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6UGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OlBoYXNlOjp+UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlBoYXNlOjpnbG9i
YWxEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6Y29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpQaGFzZTo6cHJvZmlsZWRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6UGhh
c2U6OmJlZ2luUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlBoYXNlOjplbmRQaGFzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6cnVuUGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZH
UHJvcGFnYXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24pOgorICAgICAgICAqIGRmZy9E
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChERkcp
OgorCiAyMDEyLTAyLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgREZHOjpHcmFwaCBzaG91bGQgaGF2ZSByZWZlcmVuY2VzIHRvIEpTR2xvYmFsRGF0YSwgdGhl
IENvZGVCbG9jayBiZWluZyBjb21waWxlZCwgYW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDgxNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEwICs1NSwxMyBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCiAK
ICAgICBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKKyAgICBkZmcvREZHQXJpdGhOb2RlRmxhZ3NJ
bmZlcmVuY2VQaGFzZS5jcHAKICAgICBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAogICAgIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKICAgICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorICAg
IGRmZy9DRkdDRkFQaGFzZS5jcHAKICAgICBkZmcvREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuY3Bw
CisgICAgZGZnL0RGR0NTRVBoYXNlLmNwcAogICAgIGRmZy9ERkdEcml2ZXIuY3BwCiAgICAgZGZn
L0RGR0dyYXBoLmNwcAogICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTY4LDEyICs3MSwx
NCBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIzMl82NC5jcHAKICAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCiAgICAgZGZnL0RG
R09wZXJhdGlvbnMuY3BwCi0gICAgZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCisgICAgZGZnL0RGR1Bo
YXNlLmNwcAorICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKICAgICBk
ZmcvREZHUmVwYXRjaC5jcHAKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCiAgICAgZGZnL0RGR1RodW5rcy5jcHAKKyAgICBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmNwcAogCiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAKICAgICBoZWFwL0RG
R0NvZGVCbG9ja3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gMTA4MTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFz
ZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZl
cmVuY2VQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVs
cGVycy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oIFwKQEAgLTE0
NCw5ICsxNDYsMTMgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNl
LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRlBSSW5mby5oIFwKQEAgLTE3MCw4ICsxNzYsMTAgQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRvci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bo
YXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaCBcCkBAIC0xODMsNiArMTkxLDggQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3Mu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBo
YXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkocmV2aXNpb24gMTA4MTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTg0LDkgKzg0LDEyIEBAIFNPVVJDRVMgKz0gXAogICAgIGRl
YnVnZ2VyL0RlYnVnZ2VyLmNwcCBcCiAgICAgZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwIFwKICAg
ICBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBcCisgICAgZGZnL0RGR0FyaXRoTm9kZUZsYWdz
SW5mZXJlbmNlUGhhc2UuY3BwIFwKICAgICBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIFwKICAg
ICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBcCisgICAgZGZnL0RGR0NGQVBoYXNlLmNwcCBcCiAg
ICAgZGZnL0RGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmNwcCBcCisgICAgZGZnL0RGR0NTRVBoYXNl
LmNwcCBcCiAgICAgZGZnL0RGR0RyaXZlci5jcHAgXAogICAgIGRmZy9ERkdHcmFwaC5jcHAgXAog
ICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAgXApAQCAtOTYsMTIgKzk5LDE0IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwIFwKICAgICBkZmcvREZHT1NSRXhp
dENvbXBpbGVyNjQuY3BwIFwKICAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwIFwK
LSAgICBkZmcvREZHUHJvcGFnYXRvci5jcHAgXAorICAgIGRmZy9ERkdQaGFzZS5jcHAgXAorICAg
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgXAogICAgIGRmZy9ERkdSZXBh
dGNoLmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBcCiAgICAgZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAg
XAogICAgIGRmZy9ERkdUaHVua3MuY3BwIFwKKyAgICBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmNwcCBcCiAgICAgaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5jcHAgXAogICAg
IGludGVycHJldGVyL0NhbGxGcmFtZS5jcHAgXAogICAgIGludGVycHJldGVyL0ludGVycHJldGVy
LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA4MTU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw5ICsxMjYsNyBAQAogCQkwRkM4MTUw
QjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2
MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CiAJCTBGQzgxNTE1MTQwNTExOUIw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0
cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYwMENG
QTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07Ci0JCTBGRDNDODI1MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9y
LmNwcCAqLzsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKLQkJMEZEM0M4MjcxNDExNUQ0
RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQx
MTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKIAkJMEZENTJBQUUxNDMwMzVBMDAw
MjZEQzlGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZENTJBQUMxNDMwMzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTIxMTQx
NzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5jcHAgKi87IH07CkBAIC0xNDMsNiArMTQxLDE4IEBACiAJCTBGRDgyRjRC
MTQyODA2QTEwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9w
dGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDgg
LyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRkZDOTU1MTRFRjkwOUEwMEM3MjUzMiAvKiBERkdB
cml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZDOTQ5MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdBcml0
aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmNwcCAqLzsgfTsKKwkJMEZGRkM5NTYxNEVGOTA5QzAw
QzcyNTMyIC8qIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZDOTRBMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMy
IC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRkZDOTRCMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgKi87
IH07CisJCTBGRkZDOTU4MTRFRjkwQTIwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NEMxNEVGOTA5NTAw
QzcyNTMyIC8qIERGR0NGQVBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZD
OTREMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi87IH07CisJCTBGRkZDOTVB
MTRFRjkwQTkwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NT
RVBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZDOTRGMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdQaGFzZS5jcHAgKi87IH07CisJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBE
RkdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGRkM5NUQxNEVGOTBCMzAwQzcyNTMy
IC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgKi87IH07CisJCTBGRkZDOTVFMTRFRjkw
QjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NTIxNEVGOTA5NTAwQzcy
NTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGRkM5NUYxNEVGOTBCQjAwQzcyNTMy
IC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGQzk1MzE0RUY5MDk1MDBDNzI1MzIg
LyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZGRkM5
NjAxNEVGOTBCRDAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NTQx
NEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3
MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxs
b2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlF
MTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VD
MjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpT
QVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTk0NCw4ICs5NTQsNiBAQAogCQkwRkM4MTUx
NDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVlRhYmxlU3BlY3RydW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RG
R0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVE
MEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuY3Bw
OyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wYWdhdG9yLmg7IHBhdGggPSBkZmcvREZH
UHJvcGFnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1MkFBQzE0MzAz
NTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVuaW9uRmluZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0
MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5jcHA7IHBhdGggPSBkZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3
MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuaDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MCw2ICs5NjgsMTggQEAKIAkJMEZE
ODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZGRkM5NDkxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJl
bmNlUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJp
dGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQXJpdGhOb2RlRmxh
Z3NJbmZlcmVuY2VQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkZD
OTRBMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyaXRoTm9kZUZsYWdzSW5mZXJl
bmNlUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkZDOTRCMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdDRkFQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdDRkFQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ0ZBUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkZGQzk0QzE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0ZBUGhhc2UuaDsgcGF0aCA9
IGRmZy9ERkdDRkFQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZGQzk0
RDE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ1NFUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NTRVBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRkM5NEUxNEVGOTA5NTAwQzcy
NTMyIC8qIERGR0NTRVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0NTRVBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ1NFUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkZDOTUwMTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZG
Qzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZGQzk1MzE0RUY5MDk1MDBDNzI1MzIgLyogREZH
VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA7IHBh
dGggPSBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1
YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdW
aXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9z
aXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAw
Q0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTIxLDYg
KzI1NDEsOCBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkZGQzk0OTE0RUY5MDk1MDBD
NzI1MzIgLyogREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHAgKi8sCisJCQkJMEZG
RkM5NEExNEVGOTA5NTAwQzcyNTMyIC8qIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2Uu
aCAqLywKIAkJCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5j
cHAgKi8sCiAJCQkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUu
aCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
ICovLApAQCAtMjUzMSw2ICsyNTUzLDEwIEBACiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJB
RDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKIAkJCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNE
QjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8sCisJCQkJMEZGRkM5NEIxNEVGOTA5NTAwQzcyNTMy
IC8qIERGR0NGQVBoYXNlLmNwcCAqLywKKwkJCQkwRkZGQzk0QzE0RUY5MDk1MDBDNzI1MzIgLyog
REZHQ0ZBUGhhc2UuaCAqLywKKwkJCQkwRkZGQzk0RDE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NF
UGhhc2UuY3BwICovLAorCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFz
ZS5oICovLAogCQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMu
Y3BwICovLAogCQkJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMu
aCAqLywKIAkJCQkwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi8sCkBA
IC0yNTU5LDggKzI1ODUsMTAgQEAKIAkJCQkwRkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdENvbXBpbGVyLmggKi8sCiAJCQkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8qIERG
R09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCAqLywKIAkJCQkwRkMwOTc3MDE0NjkzQUVGMDBDRjI0
NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwICovLAotCQkJCTBGRDNDODIzMTQxMTVEMUEw
MEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLywKLQkJCQkwRkQzQzgyNDE0MTE1RDIyMDBG
RDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovLAorCQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdQaGFzZS5jcHAgKi8sCisJCQkJMEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERG
R1BoYXNlLmggKi8sCisJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIg
LyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhE
RjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCiAJCQkJODZCQjA5QkUxMzhFMzgx
QjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovLAogCQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2
NzAyRiAvKiBERkdSZXBhdGNoLmggKi8sCkBAIC0yNTcyLDYgKzI2MDAsOCBAQAogCQkJCTBGQzA5
NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2
QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKIAkJCQkwRjYyMDE3MjE0M0ZDRDJGMDA2
OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCisJCQkJMEZGRkM5NTMxNEVGOTA5
NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgKi8sCisJ
CQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjg2Miw3ICsyODkyLDYgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlD
OTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2Rjcw
MENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc3MTE0Njkz
QUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RkQzQzgyNzE0MTE1RDRGMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZCQjA5QzExMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUNBM0ZBMTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJv
YXJkLmggaW4gSGVhZGVycyAqLywKQEAgLTMyMjksNiArMzI1OCwxMiBAQAogCQkJCTBGOUZDOEM0
MTRFMUI2MDAwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNCRTJDQUUxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZGRkM5NTYxNEVGOTA5QzAwQzcyNTMyIC8qIERGR0FyaXRoTm9kZUZs
YWdzSW5mZXJlbmNlUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkZDOTU4MTRFRjkwQTIw
MEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGRkM5NUExNEVG
OTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZGQzk1
QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkZD
OTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZGRkM5NjAxNEVGOTBCRDAwQzcyNTMyIC8qIERGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5NzIwOTExNEVC
ODMxNTAwRkVCMUI3IC8qIFBhc3NXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTM1OTcsNyArMzYzMiw2IEBA
CiAJCQkJMEZDMDk3OTIxNDZBNkY3MzAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc3NjE0Njk0M0IwMDBDRjI0NDIgLyogREZHT1NSRXhp
dENvbXBpbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAw
Q0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBG
RDNDODI1MTQxMTVENDAwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RUM5REQyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyogREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTM3ODIsNiArMzgxNiwx
MiBAQAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkM4RDAxNEU2MTJEODAwRDUyQUUwIC8qIERhdGFMb2cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGRkM5NTUxNEVGOTA5
QTAwQzcyNTMyIC8qIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyogREZH
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGRkM5NUQxNEVGOTBCMzAwQzcyNTMyIC8q
IERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RkZDOTVGMTRFRjkwQkIwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTm9kZUZsYWdz
SW5mZXJlbmNlUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1Bo
YXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXJpdGhO
b2RlRmxhZ3NJbmZlcmVuY2VQaGFzZTogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBBcml0
aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShn
cmFwaCwgImFyaXRobWV0aWMgbm9kZSBmbGFncyBpbmZlcmVuY2UiKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBydW4oKQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBVcCBoZXJlIHdlIHN0YXJ0IHdpdGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3Vz
cGVjdCB0aGF0IHRvIGJlCisgICAgICAgICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCisgICAgICAg
ICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAgICAgICB9IHdo
aWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBpc05vdE5l
Z1plcm8oTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghbV9ncmFwaC5p
c051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJ
bmRleCk7CisgICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNOb3RaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgewor
ICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1i
ZXJDb25zdGFudChub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZShO
b2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUu
b3A7CisgICAgICAgIEFyaXRoTm9kZUZsYWdzIGZsYWdzID0gMDsKKyAgICAgICAgCisgICAgICAg
IGlmIChub2RlLmhhc0FyaXRoTm9kZUZsYWdzKCkpCisgICAgICAgICAgICBmbGFncyA9IG5vZGUu
cmF3QXJpdGhOb2RlRmxhZ3MoKTsKKyAgICAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICAlcyBAJXU6ICVzICIsIEdyYXBo
OjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCwgYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhmbGFn
cykpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBmbGFncyAmPSBOb2RlVXNlZEFzTWFzazsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgY2Fz
ZSBCaXRBbmQ6CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAg
ICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNh
c2UgQml0VVJTaGlmdDogeworICAgICAgICAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBhcmUgcGVy
ZmVjdGx5IGhhcHB5IHdpdGggdHJ1bmNhdGVkIGludGVnZXJzLAorICAgICAgICAgICAgLy8gc28g
d2UgZG9uJ3Qgd2FudCB0byBwcm9wYWdhdGUgYW55dGhpbmcuCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRo
Tm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDogewor
ICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlz
Tm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgICAgIGZsYWdz
ICY9IH5Ob2RlTmVlZHNOZWdaZXJvOworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VBcml0aE5v
ZGVGbGFncyhmbGFncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIGlmIChpc05vdFplcm8o
bm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdFplcm8obm9kZS5jaGlsZDIoKS5pbmRleCgp
KSkKKyAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
QXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTXVsOgorICAg
ICAgICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICAvLyBBcyBzb29uIGFzIGEgbXVsdGlw
bHkgaGFwcGVucywgd2UgY2FuIGVhc2lseSBlbmQgdXAgaW4gdGhlIHBhcnQKKyAgICAgICAgICAg
IC8vIG9mIHRoZSBkb3VibGUgZG9tYWluIHdoZXJlIHRoZSBwb2ludCBhdCB3aGljaCB5b3UgZG8g
dHJ1bmNhdGlvbgorICAgICAgICAgICAgLy8gY2FuIGNoYW5nZSB0aGUgb3V0Y29tZS4gU28sIEFy
aXRoTXVsIGFsd2F5cyBjaGVja3MgZm9yIG92ZXJmbG93CisgICAgICAgICAgICAvLyBubyBtYXR0
ZXIgd2hhdCwgYW5kIGFsd2F5cyBmb3JjZXMgaXRzIGlucHV0cyB0byBjaGVjayBhcyB3ZWxsLgor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9k
ZU5lZWRzTmVnWmVybzsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0
aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICAgICAgZmxhZ3MgfD0gTm9k
ZVVzZWRBc051bWJlcjsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0
aEFiczogeworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJl
ciB8IE5vZGVOZWVkc05lZ1plcm8pOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVy
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUFy
aXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyB8IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
TmVlZHNOZWdaZXJvKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVy
bzsKKyAgICAgICAgICAgIGlmIChvcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8
IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgICAgIGlm
ICghbm9kZS5jaGlsZDIoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxh
Z3MoZmxhZ3MpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQzKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiJXNcbiIsIGNoYW5nZWQgPyAiQ0hB
TkdFRCIgOiAiIik7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFu
Z2VkOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUZvcndhcmQoKQorICAgIHsKKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2co
IlByb3BhZ2F0aW5nIGFyaXRobWV0aWMgbm9kZSBmbGFncyBmb3J3YXJkIFsldV1cbiIsICsrbV9j
b3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGls
ZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBw
cm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHByb3BhZ2F0ZUJhY2t3YXJkKCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCJQcm9wYWdhdGluZyBhcml0aG1ldGljIG5v
ZGUgZmxhZ3MgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBm
b3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4LS0gPiAw
OykKKyAgICAgICAgICAgIHByb3BhZ2F0ZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBib29sIG1fY2hhbmdl
ZDsKK307CisKK3ZvaWQgcGVyZm9ybUFyaXRoTm9kZUZsYWdzSW5mZXJlbmNlKEdyYXBoJiBncmFw
aCkKK3sKKyAgICBydW5QaGFzZTxBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlPihncmFwaCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTm9kZUZsYWdz
SW5mZXJlbmNlUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFz
ZV9oCisjZGVmaW5lIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2VfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gRGV0ZXJtaW5lIHdoaWNo
IGFyaXRobWV0aWMgbm9kZXMnIHJlc3VsdHMgYXJlIG9ubHkgdXNlZCBpbiBhIGNvbnRleHQgdGhh
dAorLy8gdHJ1bmNhdGVzIHRvIGludGVnZXIgYW55d2F5LiBUaGlzIGlzIGdyZWF0IGZvciBvcHRp
bWl6aW5nIGF3YXkgY2hlY2tzIGZvcgorLy8gb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIHplcm8uIE5C
IHRoZSB3YXkgdGhpcyBwaGFzZSBpbnRlZ3JhdGVzIGludG8gdGhlIHJlc3QKKy8vIG9mIHRoZSBE
RkcgbWFrZXMgaXQgbm9uLW9wdGlvbmFsLiBJbnN0ZWFkIG9mIHByb3ZpbmcgdGhhdCBhIG5vZGUg
aXMgb25seQorLy8gdXNlZCBpbiBpbnRlZ2VyIGNvbnRleHQsIGl0IGFjdHVhbGx5IGRvZXMgdGhl
IG9wcG9zaXRlOiBmaW5kcyBub2RlcyB0aGF0CisvLyBhcmUgdXNlZCBpbiBub24taW50ZWdlciBj
b250ZXh0cy4gSGVuY2UgZmFpbGluZyB0byBydW4gdGhpcyBwaGFzZSB3aWxsIG1ha2UKKy8vIHRo
ZSBjb21waWxlciBhc3N1bWUgdGhhdCBhbGwgbm9kZXMgYXJlIGp1c3QgdXNlZCBhcyBpbnRlZ2Vy
cyEKKwordm9pZCBwZXJmb3JtQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2UoR3JhcGgmKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRzo6UGhhc2UKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZV9oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ0ZBUGhhc2UuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgorI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDRkFQaGFzZTogcHVibGljIFBoYXNlIHsKK3B1
YmxpYzoKKyAgICBDRkFQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJjb250cm9sIGZsb3cgYW5hbHlzaXMiKQorICAgICAgICAsIG1fc3RhdGUoZ3JhcGgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHBzZXVkby13b3JrbGlzdC1iYXNl
ZCBmb3J3YXJkIENGQSwgZXhjZXB0IHRoYXQgdGhlIHZpc2l0IG9yZGVyCisgICAgICAgIC8vIG9m
IGJsb2NrcyBpcyB0aGUgYnl0ZWNvZGUgcHJvZ3JhbSBvcmRlciAod2hpY2ggaXMgbmVhcmx5IHRv
cG9sb2dpY2FsKSwgYW5kCisgICAgICAgIC8vIGluc3RlYWQgb2YgYSB3b3JrbGlzdCB3ZSBqdXN0
IHdhbGsgYWxsIGJhc2ljIGJsb2NrcyBjaGVja2luZyBpZiBjZmFTaG91bGRSZXZpc2l0CisgICAg
ICAgIC8vIGlzIHNldCB0byB0cnVlLiBUaGlzIGlzIGxpa2VseSB0byBiYWxhbmNlIHRoZSBlZmZp
Y2llbmN5IHByb3BlcnRpZXMgb2YgYm90aAorICAgICAgICAvLyB3b3JrbGlzdC1iYXNlZCBhbmQg
Zm9yd2FyZCBmaXhwb2ludC1iYXNlZCBhcHByb2FjaGVzLiBMaWtlIGEgd29ya2xpc3QtYmFzZWQK
KyAgICAgICAgLy8gYXBwcm9hY2gsIGl0IHdvbid0IHZpc2l0IGNvZGUgaWYgaXQncyBtZWFuaW5n
bGVzcyB0byBkbyBzbyAobm90aGluZyBjaGFuZ2VkIGF0CisgICAgICAgIC8vIHRoZSBoZWFkIG9m
IHRoZSBibG9jayBvciB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgbm90IGJlZW4gdmlzaXRlZCkuIExp
a2UgYSBmb3J3YXJkCisgICAgICAgIC8vIGZpeHBvaW50LWJhc2VkIGFwcHJvYWNoLCBpdCBoYXMg
YSBoaWdoIHByb2JhYmlsaXR5IG9mIG9ubHkgdmlzaXRpbmcgYSBibG9jaworICAgICAgICAvLyBh
ZnRlciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5IGxvb3BzIHdpbGwg
Y2F1c2UgdGhpcyBhbmFseXNpcyB0bworICAgICAgICAvLyByZXZpc2l0IGJsb2NrcywgYW5kIHRo
ZSBhbW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9vcCBkZXB0aC4KKyAg
ICAgICAgCisgICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUobV9ncmFwaCk7CisgICAg
ICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHBlcmZvcm1Gb3J3YXJkQ0ZBKCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2stPmNmYVNo
b3VsZFJldmlzaXQpCisgICAgICAgICAgICByZXR1cm47CisjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICBCbG9jayAjJXUgKGJjIyV1
KTpcbiIsIGJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKKyNlbmRpZgorICAgICAg
ICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CisjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICAgICBoZWFkIHZhcnM6ICIp
OworICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgV1RGOjpkYXRhRmls
ZSgpKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyNlbmRpZgorICAgICAgICBmb3IgKE5vZGVJ
bmRleCBub2RlSW5kZXggPSBibG9jay0+YmVnaW47IG5vZGVJbmRleCA8IGJsb2NrLT5lbmQ7ICsr
bm9kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICVzIEAl
dTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgpOwor
ICAgICAgICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICBk
YXRhTG9nKCJcbiIpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZXhlY3V0ZShu
b2RlSW5kZXgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICAgICB0
YWlsIHJlZ3M6ICIpOworICAgICAgICBtX3N0YXRlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAg
ICAgICAgZGF0YUxvZygiXG4iKTsKKyNlbmRpZgorICAgICAgICBtX2NoYW5nZWQgfD0gbV9zdGF0
ZS5lbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3RhdGU6Ok1lcmdlVG9TdWNjZXNzb3JzKTsKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAg
ICAgIHRhaWwgdmFyczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRU
YWlsLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworI2VuZGlmCisg
ICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybUZvcndhcmRDRkEoKQorICAgIHsKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIkNGQSBb
JXVdXG4iLCArK21fY291bnQpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
KQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKGJsb2NrKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOwor
fTsKKwordm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJiBncmFwaCkKK3sKKyAgICBydW5QaGFzZTxDRkFQ
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDRkFQaGFzZV9oCisjZGVmaW5l
IERGR0NGQVBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3Jh
cGg7CisKKy8vIEdsb2JhbCBjb250cm9sIGZsb3cgYW5hbHlzaXMuIFRoaXMgcGhhc2UgdHJhbnNm
b3JtcyB0aGUgY29tYmluYXRpb24gb2YgdHlwZQorLy8gcHJlZGljdGlvbnMgYW5kIHR5cGUgZ3Vh
cmRzIGludG8gdHlwZSBwcm9vZnMsIGFuZCBmbG93cyB0aGVtIGdsb2JhbGx5IHdpdGhpbgorLy8g
dGhlIGNvZGUgYmxvY2suIEl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgaWRlbnRpZnlpbmcgZGVh
ZCBjb2RlLCBhbmQgaW4gdGhlCisvLyBmdXR1cmUgc2hvdWxkIGJlIHVzZWQgYXMgYSBob29rIGZv
ciBjb25zdGFudCBwcm9wYWdhdGlvbi4KKwordm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJik7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHQ0ZBUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENTRVBoYXNlOiBwdWJsaWMgUGhhc2Ugewor
cHVibGljOgorICAgIENTRVBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFw
aCwgImNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIikKKyAgICB7CisgICAgICAgIC8v
IFJlcGxhY2VtZW50cyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgbG9jYWwgY29tbW9uIHN1YmV4cHJl
c3Npb24gZWxpbWluYXRpb24uCisgICAgICAgIG1fcmVwbGFjZW1lbnRzLnJlc2l6ZShtX2dyYXBo
LnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9n
cmFwaC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcmVwbGFjZW1lbnRzW2ldID0gTm9Ob2Rl
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IExhc3ROb2RlSWQ7
ICsraSkKKyAgICAgICAgICAgIG1fbGFzdFNlZW5baV0gPSBOb05vZGU7CisgICAgfQorICAgIAor
ICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBi
bG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrKQorICAgICAgICAgICAgcGVy
Zm9ybUJsb2NrQ1NFKCptX2dyYXBoLm1fYmxvY2tzW2Jsb2NrXSk7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICAKKyAgICBOb2RlSW5kZXggY2Fub25pY2FsaXplKE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgeworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgIAorICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhd
Lm9wID09IFZhbHVlVG9JbnQzMikKKyAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9k
ZUluZGV4XS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5vZGVJ
bmRleDsKKyAgICB9CisgICAgTm9kZUluZGV4IGNhbm9uaWNhbGl6ZShOb2RlVXNlIG5vZGVVc2Up
CisgICAgeworICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5vZGVVc2UuaW5kZXhVbmNoZWNr
ZWQoKSk7CisgICAgfQorICAgIAorICAgIC8vIENvbXB1dGVzIHdoZXJlIHRoZSBzZWFyY2ggZm9y
IGEgY2FuZGlkYXRlIGZvciBDU0Ugc2hvdWxkIHN0YXJ0LiBEb24ndCBjYWxsCisgICAgLy8gdGhp
cyBkaXJlY3RseTsgY2FsbCBzdGFydEluZGV4KCkgaW5zdGVhZCBhcyBpdCBkb2VzIGxvZ2dpbmcg
aW4gZGVidWcgbW9kZS4KKyAgICBOb2RlSW5kZXggY29tcHV0ZVN0YXJ0SW5kZXhGb3JDaGlsZHJl
bihOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
bGltaXQgPSAzMDA7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBtX3N0YXJ0
OworICAgICAgICBpZiAobV9jb21waWxlSW5kZXggLSBzdGFydCA+IGxpbWl0KQorICAgICAgICAg
ICAgc3RhcnQgPSBtX2NvbXBpbGVJbmRleCAtIGxpbWl0OworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKHN0YXJ0ID49IG1fc3RhcnQpOworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IGNoaWxk
ID0gY2Fub25pY2FsaXplKGNoaWxkMSk7CisgICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisg
ICAgICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgICAgIAorICAgICAgICBpZiAoc3RhcnQgPCBj
aGlsZCkKKyAgICAgICAgICAgIHN0YXJ0ID0gY2hpbGQ7CisgICAgICAgIAorICAgICAgICBjaGls
ZCA9IGNhbm9uaWNhbGl6ZShjaGlsZDIpOworICAgICAgICBpZiAoY2hpbGQgPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0IDwg
Y2hpbGQpCisgICAgICAgICAgICBzdGFydCA9IGNoaWxkOworICAgICAgICAKKyAgICAgICAgY2hp
bGQgPSBjYW5vbmljYWxpemUoY2hpbGQzKTsKKyAgICAgICAgaWYgKGNoaWxkID09IE5vTm9kZSkK
KyAgICAgICAgICAgIHJldHVybiBzdGFydDsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGFydCA8
IGNoaWxkKQorICAgICAgICAgICAgc3RhcnQgPSBjaGlsZDsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBzdGFydDsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IHN0YXJ0SW5kZXhGb3JDaGls
ZHJlbihOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHJl
c3VsdCA9IGNvbXB1dGVTdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxLCBjaGlsZDIsIGNoaWxk
Myk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBk
YXRhTG9nKCIgIGxvb2tiYWNrICV1OiAiLCByZXN1bHQpOworI2VuZGlmCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBzdGFydEluZGV4KCkKKyAgICB7
CisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAg
cmV0dXJuIHN0YXJ0SW5kZXhGb3JDaGlsZHJlbigKKyAgICAgICAgICAgIG5vZGUuY2hpbGQxKCku
aW5kZXhVbmNoZWNrZWQoKSwKKyAgICAgICAgICAgIG5vZGUuY2hpbGQyKCkuaW5kZXhVbmNoZWNr
ZWQoKSwKKyAgICAgICAgICAgIG5vZGUuY2hpbGQzKCkuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBlbmRJbmRleEZvclB1cmVDU0UoKQorICAgIHsKKyAgICAg
ICAgTm9kZUluZGV4IHJlc3VsdCA9IG1fbGFzdFNlZW5bbV9ncmFwaFttX2NvbXBpbGVJbmRleF0u
b3AgJiBOb2RlSWRNYXNrXTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOb05vZGUpCisgICAgICAg
ICAgICByZXN1bHQgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQrKzsKKyAg
ICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2NvbXBpbGVJbmRleCk7CisjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgIGxpbWl0ICV1OiAi
LCByZXN1bHQpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIE5vZGVJbmRleCBwdXJlQ1NFKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBOb2RlSW5k
ZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBOb2RlSW5k
ZXggY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpOworICAgICAgICBOb2RlSW5k
ZXggY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQzKCkpOworICAgICAgICAKKyAgICAg
ICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBmb3IgKE5vZGVJbmRl
eCBpbmRleCA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAg
ICAgICAgICBOb2RlJiBvdGhlck5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIGlm
IChub2RlLm9wICE9IG90aGVyTm9kZS5vcCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJl
KCkgIT0gb3RoZXJOb2RlLmFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXggb3RoZXJD
aGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgaWYg
KG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAg
ICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6
ZShvdGhlck5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9O
b2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChvdGhl
ckNoaWxkICE9IGNoaWxkMikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQz
KCkpOworICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMykK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0
dXJuIGluZGV4OworICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKKyAgICB7CisgICAg
ICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5wcmVkaWN0aW9uKCk7CisgICAgICAgIHJldHVybiBpc051bWJlclByZWRpY3Rpb24obGVmdCkg
JiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBsb2dp
Y2FsTm90SXNQdXJlKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
cmV0dXJuIGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgIXByZWRpY3Rpb247Cisg
ICAgfQorICAgIAorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KQorICAgICAgICAgICAgJiYgKChub2RlLm9wID09IFB1dEJ5VmFsIHx8IG5vZGUub3AgPT0gUHV0
QnlWYWxBbGlhcykKKyAgICAgICAgICAgICAgICA/IGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVBy
ZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAg
ICAgICAgOiBpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOworICAgICAgICBpZiAobm9kZS5vcCAmIE5vZGVDbG9iYmVyc1dvcmxkKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghKG5vZGUub3AgJiBOb2RlTWlnaHRD
bG9iYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6
CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRl
cjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgorICAgICAgICBjYXNlIENvbXBhcmVF
cToKKyAgICAgICAgICAgIHJldHVybiAhaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSk7CisgICAg
ICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICAgICAgICAgIHJldHVybiAhbG9naWNhbE5vdElzUHVy
ZShub2RlKTsKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHJldHVybiAhYnlW
YWxJc1B1cmUobm9kZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21lIG9kZGl0
eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBoYXZlIENT
RSBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGVJbmRl
eCBpbXB1cmVDU0UoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDEg
PSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIg
PSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSk7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDMg
PSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDMoKSk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5k
ZXggc3RhcnQgPSBzdGFydEluZGV4KCk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0g
bV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAgICAgIE5vZGUmIG90
aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gb3Ro
ZXJOb2RlLm9wCisgICAgICAgICAgICAgICAgJiYgbm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBh
cmUoKSA9PSBvdGhlck5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJlKCkpIHsKKyAgICAgICAg
ICAgICAgICBOb2RlSW5kZXggb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hp
bGQxKCkpOworICAgICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChvdGhlckNo
aWxkID09IGNoaWxkMSkgeworICAgICAgICAgICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25p
Y2FsaXplKG90aGVyTm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvdGhl
ckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gY2hpbGQyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGls
ZDMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gY2hpbGQzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGlu
ZGV4KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9hZEVsaW1pbmF0
aW9uKHVuc2lnbmVkIHZhck51bWJlciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbigpOwor
ICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4g
c3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgorICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBj
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2Jq
ZWN0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJsb2NrKCktPmdsb2JhbE9i
amVjdEZvcihub2RlLmNvZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9Cisg
ICAgCisgICAgTm9kZUluZGV4IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGls
ZDEsIE5vZGVJbmRleCBjaGlsZDIpCisgICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBz
dGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxLCBjaGlsZDIpOworICAgICAgICBmb3IgKE5vZGVJ
bmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICAgICAgaWYg
KCFieVZhbElzUHVyZShub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAg
ICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQx
ICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBtdXN0IGFzc3VtZSB0aGF0IHRoZSBQdXRCeVZhbCB3aWxsIGNsb2Ji
ZXIgdGhlIGxvY2F0aW9uIHdlJ3JlIGdldHRpbmcgZnJvbS4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgY2FuIGRvIGJldHRlcjsgaWYgd2Uga25vdyB0aGF0IHRoZSBQdXRCeVZhbCBpcyBh
Y2Nlc3NpbmcgYW4gYXJyYXkgb2YgYQorICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCB0eXBl
IHRoYW4gdGhlIEdldEJ5VmFsLCB0aGVuIHdlIGtub3cgdGhhdCB0aGV5IHdvbid0IGNsb2JiZXIg
ZWFjaCBvdGhlci4KKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAg
ICAgICAgICAgIC8vIEdldEJ5VmFsIGN1cnJlbnRseSBhbHdheXMgc3BlY3VsYXRlcyB0aGF0IGl0
J3MgYWNjZXNzaW5nIGFuCisgICAgICAgICAgICAgICAgLy8gYXJyYXkgd2l0aCBhbiBpbnRlZ2Vy
IGluZGV4LCB3aGljaCBtZWFucyB0aGF0IGl0J3MgaW1wb3NzaWJsZQorICAgICAgICAgICAgICAg
IC8vIGZvciBhIHN0cnVjdHVyZSBjaGFuZ2Ugb3IgYSBwdXQgdG8gcHJvcGVydHkgc3RvcmFnZSB0
byBhZmZlY3QKKyAgICAgICAgICAgICAgICAvLyB0aGUgR2V0QnlWYWwuCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAgICAgICAgICAv
LyBBIHB1c2ggY2Fubm90IGFmZmVjdCBwcmV2aW91c2x5IGV4aXN0aW5nIGVsZW1lbnRzIGluIHRo
ZSBhcnJheS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorCisgICAgYm9vbCBj
aGVja0Z1bmN0aW9uRWxpbWluYXRpb24oSlNGdW5jdGlvbiogZnVuY3Rpb24sIE5vZGVJbmRleCBj
aGlsZDEpCisgICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hp
bGRyZW4oY2hpbGQxKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBlbmRJbmRleEZv
clB1cmVDU0UoKTsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gQ2hlY2tGdW5jdGlv
biAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmZ1bmN0aW9uKCkgPT0gZnVuY3Rp
b24pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRp
b24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIE5vZGVJbmRleCBjaGlsZDEpCisg
ICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hp
bGQxKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5k
ZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQor
ICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9mKG5vZGUuc3Ry
dWN0dXJlU2V0KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQorICAg
ICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICAv
LyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgICAgICAgICBp
ZiAoYnlWYWxJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlW
YWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9y
IGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBOb2RlSW5kZXggZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFy
dCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOworICAgICAgICBmb3IgKE5vZGVJbmRl
eCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZp
ZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5jaGlsZDIoKSA9PSBjaGlsZDEpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZS5jaGlsZDMoKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIC8v
IENoYW5naW5nIHRoZSBzdHJ1Y3R1cmUgY2Fubm90IGNoYW5nZSB0aGUgb3V0Y29tZSBvZiBhIHBy
b3BlcnR5IGdldC4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
CisgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBh
cnJheSB3aXRoIGFuCisgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4g
aXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQorICAgICAgICAgICAg
ICAgICAgICAvLyBjaGFuZ2UuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3Js
ZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldFByb3BlcnR5U3RvcmFnZUxvYWRF
bGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0
YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CisgICAgICAgIGZvciAoTm9kZUlu
ZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCkgeworICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmU6CisgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBwdXR0aW5n
IHRvIHRoZSBzdG9yYWdlIGNhbm5vdAorICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcHJv
cGVydHkgc3RvcmFnZSBwb2ludGVyLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKKyAgICAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNj
ZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KKyAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBp
bmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCisg
ICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChj
bG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgIH0KKworICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIGJvb2wgaGFzSW50ZWdl
ckluZGV4UHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0
SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9
IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAg
ICAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogeworICAgICAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
LnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBib29sIG5vZGVIYXNJbnRlZ2VySW5kZXhQ
cmVkaWN0aW9uID0gISghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJl
ZGljdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYm
IGhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPT0gbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rp
b24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAg
ICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIC8vIENoYW5naW5n
IHRoZSBzdHJ1Y3R1cmUgb3IgcHV0dGluZyB0byB0aGUgc3RvcmFnZSBjYW5ub3QKKyAgICAgICAg
ICAgICAgICAvLyBjaGFuZ2UgdGhlIHByb3BlcnR5IHN0b3JhZ2UgcG9pbnRlci4KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKKyAgICAgICAgICAgICAgICAvLyBQdXRCeVZhbEFsaWFzIGNhbid0IGNoYW5nZSB0
aGUgaW5kZXhlZCBzdG9yYWdlIHBvaW50ZXIKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICAgICAg
aWYgKGlzRml4ZWRJbmRleGVkU3RvcmFnZU9iamVjdFByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkpICYmIGJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworCisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
IH0KKyAgICAKKyAgICBOb2RlSW5kZXggZ2V0U2NvcGVDaGFpbkxvYWRFbGltaW5hdGlvbih1bnNp
Z25lZCBkZXB0aCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhG
b3JDaGlsZHJlbigpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IGVuZEluZGV4Rm9y
UHVyZUNTRSgpOyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRTY29wZUNoYWlu
CisgICAgICAgICAgICAgICAgJiYgbm9kZS5zY29wZUNoYWluRGVwdGgoKSA9PSBkZXB0aCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGVVc2Um
IGNoaWxkLCBib29sIGFkZFJlZiA9IHRydWUpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiB0
aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgorICAgICAgICBpZiAoIWNoaWxkKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMg
YW55IHJlcGxhY2VtZW50LgorICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQgPSBtX3JlcGxh
Y2VtZW50c1tjaGlsZC5pbmRleCgpXTsKKyAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9k
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGNoaWxkLnNldEluZGV4
KHJlcGxhY2VtZW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkg
YSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90CisgICAg
ICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KKyAgICAgICAgQVNTRVJUKG1fcmVwbGFjZW1lbnRz
W2NoaWxkLmluZGV4KCldID09IE5vTm9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoYWRkUmVm
KQorICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0UmVwbGFjZW1lbnQoTm9kZUluZGV4IHJlcGxhY2VtZW50KQorICAgIHsKKyAgICAgICAg
aWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIC8vIEJlIHNhZmUuIERvbid0IHRyeSB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBp
ZiB0aGUgcHJlZGljdGlvbnMgZG9uJ3QKKyAgICAgICAgLy8gYWdyZWUuCisgICAgICAgIGlmICht
X2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgIT0gbV9ncmFwaFtyZXBsYWNlbWVu
dF0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAgIFJl
cGxhY2luZyBAJXUgLT4gQCV1IiwgbV9jb21waWxlSW5kZXgsIHJlcGxhY2VtZW50KTsKKyNlbmRp
ZgorICAgICAgICAKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
OworICAgICAgICBub2RlLm9wID0gUGhhbnRvbTsKKyAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgx
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5hdGUg
YWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgorICAgICAgICBtX3JlcGxhY2VtZW50c1ttX2Nv
bXBpbGVJbmRleF0gPSByZXBsYWNlbWVudDsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbGltaW5h
dGUoKQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisg
ICAgICAgIGRhdGFMb2coIiAgIEVsaW1pbmF0aW5nIEAldSIsIG1fY29tcGlsZUluZGV4KTsKKyNl
bmRpZgorICAgICAgICAKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdOworICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOworICAgICAgICBBU1NF
UlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7CisgICAgICAgIG5vZGUub3AgPSBQaGFudG9tOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUmIG5vZGUpCisgICAgeworICAg
ICAgICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS5zaG91bGRHZW5lcmF0ZSgpOworCisgICAg
ICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0
Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAg
ICBwZXJmb3JtU3Vic3RpdHV0aW9uKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0s
IHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBlcmZvcm1T
dWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzaG91
bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRy
ZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKCFzaG91bGRHZW5lcmF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9n
KCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3Ap
LCBtX2NvbXBpbGVJbmRleCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRo
ZXJlIGFyZSBzb21lIG5vZGVzIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGRvbid0IENTRSBldmVuIHRo
b3VnaCB3ZQorICAgICAgICAvLyBwcm9iYWJseSBjb3VsZCwgbGlrZSBTdHJDYXQgYW5kIFRvUHJp
bWl0aXZlLiBUaGF0J3MgYmVjYXVzZSB0aGVyZSBpcyBubworICAgICAgICAvLyBldmlkZW5jZSB0
aGF0IGRvaW5nIENTRSBvbiB0aGVzZSBub2RlcyB3b3VsZCByZXN1bHQgaW4gYSBwZXJmb3JtYW5j
ZQorICAgICAgICAvLyBwcm9ncmVzc2lvbi4gSGVuY2UgY29uc2lkZXJpbmcgdGhlc2Ugbm9kZXMg
aW4gQ1NFIHdvdWxkIGp1c3QgbWVhbiB0aGF0IHRoaXMKKyAgICAgICAgLy8gY29kZSBkb2VzIG1v
cmUgd29yayB3aXRoIG5vIHdpbi4gT2YgY291cnNlLCB3ZSBtYXkgd2FudCB0byByZWNvbnNpZGVy
IHRoaXMsCisgICAgICAgIC8vIHNpbmNlIFN0ckNhdCBpcyB0cml2aWFsbHkgQ1NFLWFibGUuIEl0
J3Mgbm90IHRyaXZpYWxseSBkb2FibGUgZm9yCisgICAgICAgIC8vIFRvUHJpbWl0aXZlLCBidXQg
d2UgY291bGQgY2hhbmdlIHRoYXQgd2l0aCBzb21lIHNwZWN1bGF0aW9ucyBpZiB3ZSByZWFsbHkK
KyAgICAgICAgLy8gbmVlZGVkIHRvLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoIChub2RlLm9w
KSB7CisgICAgICAgIAorICAgICAgICAvLyBIYW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5v
ZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4KKyAgICAgICAgY2FzZSBCaXRBbmQ6Cisg
ICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJp
dFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlm
dDoKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAg
ICAgY2FzZSBBcml0aE11bDoKKyAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgY2FzZSBB
cml0aERpdjoKKyAgICAgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgY2FzZSBBcml0aE1pbjoK
KyAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAg
IGNhc2UgR2V0Qnl0ZUFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldEludDhBcnJheUxlbmd0
aDoKKyAgICAgICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldElu
dDMyQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0VWludDhBcnJheUxlbmd0aDoKKyAgICAg
ICAgY2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRVaW50
MTZBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDoKKyAgICAg
ICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0RmxvYXQ2NEFy
cmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgY2FzZSBHZXRTdHJp
bmdMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QXJyYXlM
ZW5ndGg6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChpbXB1cmVDU0Uobm9kZSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZUNoYWlu
OgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0U2NvcGVDaGFpbkxvYWRFbGltaW5hdGlv
bihub2RlLnNjb3BlQ2hhaW5EZXB0aCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9uYWxseSBwdXJlOiB0aGVzZSBhcmUg
cHVyZSwgYW5kIGNhbgorICAgICAgICAvLyBiZSBDU0UnZCwgc28gbG9uZyBhcyB0aGUgcHJlZGlj
dGlvbiBpcyB0aGUgb25lIHdlIHdhbnQuCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAg
IGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgorICAg
ICAgICBjYXNlIENvbXBhcmVFcTogeworICAgICAgICAgICAgaWYgKGlzUHJlZGljdGVkTnVtZXJp
Y2FsKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXgg
PSBwdXJlQ1NFKG5vZGUpOworICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ICE9
IE5vTm9kZSAmJiBpc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhd
KSkKKyAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDogeworICAgICAgICAgICAgaWYgKGxvZ2ljYWxO
b3RJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJ
bmRleCA9IHB1cmVDU0Uobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5k
ZXggIT0gTm9Ob2RlICYmIGxvZ2ljYWxOb3RJc1B1cmUobV9ncmFwaFtyZXBsYWNlbWVudEluZGV4
XSkpCisgICAgICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50SW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFjY2Vzc2VzLiBUaGVzZSBhcmUg
bm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKKyAgICAgICAgLy8gb3B0aW1pemUgdGhl
bSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMgYXJlIG1ldC4KKyAgICAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJM
b2FkRWxpbWluYXRpb24obm9kZS52YXJOdW1iZXIoKSwgY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihub2RlLmNvZGVPcmlnaW4pKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5v
ZGUpKQorICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0
aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAg
ICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9u
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSAhPSBOb05vZGUp
CisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IFB1dEJ5VmFsQWxpYXM7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAg
ICAgICAgaWYgKGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0
KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAg
ICAgICAgICBpZiAoY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKG5vZGUuZnVuY3Rpb24oKSwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rp
b24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGJv
b2wgbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPSAhKCEoYmFzZVByZWRpY3Rpb24gJiBQ
cmVkaWN0SW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEo
KS5pbmRleCgpLCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlv
bihub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNl
dExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbV9sYXN0U2Vlbltub2RlLm9wICYgTm9kZUlkTWFza10gPSBt
X2NvbXBpbGVJbmRleDsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIGRhdGFMb2coIlxuIik7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgdm9pZCBw
ZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayYgYmxvY2spCisgICAgeworICAgICAgICBtX3N0YXJ0
ID0gYmxvY2suYmVnaW47CisgICAgICAgIE5vZGVJbmRleCBlbmQgPSBibG9jay5lbmQ7CisgICAg
ICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX3N0YXJ0OyBtX2NvbXBpbGVJbmRleCA8IGVuZDsg
KyttX2NvbXBpbGVJbmRleCkKKyAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdKTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG1fc3RhcnQ7CisgICAg
Tm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIFZlY3RvcjxOb2RlSW5kZXgsIDE2PiBtX3Jl
cGxhY2VtZW50czsKKyAgICBGaXhlZEFycmF5PE5vZGVJbmRleCwgTGFzdE5vZGVJZD4gbV9sYXN0
U2VlbjsKK307CisKK3ZvaWQgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCit7CisgICAgcnVuUGhh
c2U8Q1NFUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NTRVBoYXNl
X2gKKyNkZWZpbmUgREZHQ1NFUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitjbGFzcyBHcmFwaDsKKworLy8gQmxvY2stbG9jYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxp
bWluYXRpb24uIFRoaXMgaXMgYW4gb3B0aW9uYWwgcGhhc2UsIGJ1dAorLy8gaXQgaXMgcmF0aGVy
IHByb2ZpdGFibGUuIEl0IGhhcyBmYWlybHkgYWNjdXJhdGUgaGVhcCBtb2RlbGluZyBhbmQgd2ls
bCBtYXRjaAorLy8gYSB3aWRlIHJhbmdlIG9mIHN1YmV4cHJlc3Npb24gc2ltaWxhcml0aWVzLiBJ
dCdzIGtub3duIHRvIHByb2R1Y2UgYmlnIHdpbnMKKy8vIG9uIGEgZmV3IGJlbmNobWFya3MsIGFu
ZCBpcyByZWxhdGl2ZWx5IGNoZWFwIHRvIHJ1bi4KKwordm9pZCBwZXJmb3JtQ1NFKEdyYXBoJik7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHQ1NFUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxMDgxNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEzIEBA
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0FyaXRoTm9kZUZsYWdzSW5m
ZXJlbmNlUGhhc2UuaCIKICNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgorI2luY2x1ZGUg
IkRGR0NGQVBoYXNlLmgiCisjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdK
SVRDb21waWxlci5oIgotI2luY2x1ZGUgIkRGR1Byb3BhZ2F0b3IuaCIKKyNpbmNsdWRlICJERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
QEAgLTUzLDggKzU3LDEyIEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGls
ZU0KICAgICAKICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQogICAgICAg
ICBkZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoKTsKLSAgICAKLSAgICBwcm9wYWdhdGUoZGZnKTsK
KworICAgIHBlcmZvcm1Bcml0aE5vZGVGbGFnc0luZmVyZW5jZShkZmcpOworICAgIHBlcmZvcm1Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgcGVy
Zm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtQ0ZBKGRmZyk7
CiAgICAgCiAgICAgSklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZGZnKTsKICAgICBpZiAoY29tcGls
ZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKK3ZvaWQgUGhhc2U6OmJlZ2luUGhhc2UoKQoreworICAgIGRhdGFMb2coIkJlZ2lu
bmluZyBERkcgcGhhc2UgJXMuXG4iLCBtX25hbWUpOworfQorCit2b2lkIFBoYXNlOjplbmRQaGFz
ZSgpCit7CisgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgJXM6XG4iLCBtX25hbWUpOworICAgIG1f
Z3JhcGguZHVtcChtX2NvZGVCbG9jayk7Cit9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUGhhc2VfaAor
I2RlZmluZSBERkdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQaGFzZSB7
CitwdWJsaWM6CisgICAgUGhhc2UoR3JhcGgmIGdyYXBoLCBjb25zdCBjaGFyKiBuYW1lKQorICAg
ICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgeworICAg
ICAgICBiZWdpblBoYXNlKCk7CisgICAgfQorICAgIAorICAgIH5QaGFzZSgpCisgICAgeworICAg
ICAgICBlbmRQaGFzZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBFYWNoIHBoYXNlIG11c3QgaGF2
ZSBhIHJ1bigpIG1ldGhvZC4KKyAgICAKK3Byb3RlY3RlZDoKKyAgICAvLyBUaGluZ3MgeW91IG5l
ZWQgdG8gaGF2ZSBhIERGRyBjb21waWxlciBwaGFzZS4KKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAg
ICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dyYXBoLm1fZ2xv
YmFsRGF0YTsgfQorICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9ncmFwaC5t
X2NvZGVCbG9jazsgfQorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIHsgcmV0dXJuIG1f
Z3JhcGgubV9wcm9maWxlZEJsb2NrOyB9CisgICAgCisgICAgY29uc3QgY2hhciogbV9uYW1lOwor
ICAgIAorcHJpdmF0ZToKKyAgICAvLyBDYWxsIHRoZXNlIGhvb2tzIHdoZW4gc3RhcnRpbmcgYW5k
IGZpbmlzaGluZy4KKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisg
ICAgdm9pZCBiZWdpblBoYXNlKCk7CisgICAgdm9pZCBlbmRQaGFzZSgpOworI2Vsc2UgLy8gREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgIHZvaWQgYmVnaW5QaGFzZSgp
IHsgfQorICAgIHZvaWQgZW5kUGhhc2UoKSB7IH0KKyNlbmRpZiAvLyBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQaGFzZVR5cGU+
Cit2b2lkIHJ1blBoYXNlKEdyYXBoJiBncmFwaCkKK3sKKyAgICBQaGFzZVR5cGUgcGhhc2UoZ3Jh
cGgpOworICAgIHBoYXNlLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1BoYXNlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTogcHVibGljIFBoYXNl
IHsKK3B1YmxpYzoKKyAgICBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwcmVkaWN0aW9uIHByb3BhZ2F0aW9uIikKKyAgICB7
CisgICAgfQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBtX2NvdW50ID0gMDsKKyNlbmRpZgorICAg
ICAgICAvLyBUd28gc3RhZ2UgcHJvY2VzczogZmlyc3QgcHJvcGFnYXRlIHByZWRpY3Rpb25zLCB0
aGVuIHByb3BhZ2F0ZSB3aGlsZSBkb2luZyBkb3VibGUgdm90aW5nLgorICAgICAgICAKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3Ro
IHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2Rl
LgorICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2No
YW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhlIGxpa2VsaWhvb2QgdGhhdCBwYXRo
b2xvZ2ljYWwgY29kZSB3aWxsCisgICAgICAgICAgICAvLyBjYXVzZSBzbG93bmVzcy4gTG9vcHMg
KGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJhY2t3YXJkIGZsb3cuCisgICAgICAg
ICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2VzOiAoMSkgaXQgZGV0ZWN0cyBpZiB0
aGUgZm9yd2FyZCBmaXhwb2ludAorICAgICAgICAgICAgLy8gZm91bmQgYSBzb3VuZCBzb2x1dGlv
biBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZsb3cuCisgICAgICAgICAgICBtX2No
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUJhY2t3YXJkKCk7CisgICAgICAg
IH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAg
ICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGRvUm91bmRPZkRvdWJsZVZvdGluZygp
OworICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2No
YW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZG9Sb3VuZE9mRG91YmxlVm90aW5nKCk7
CisgICAgICAgICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2No
YW5nZWQpOworICAgICAgICAKKyAgICAgICAgZml4dXAoKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIGJvb2wgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAg
eworICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gc2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3ZSBrbm93
IHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIGNoYW5nZQorICAgICAgICAvLyBvdXIg
bWluZHMgYWJvdXQgd2hhdCB0aGUgcHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhlcmUgaXMg
bm8gc2VtYW50aWMKKyAgICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRpY3Rpb24o
KSBhbmQgbWVyZ2VQcmVkaWN0aW9uKCkgb3RoZXIgdGhhbiB0aGUKKyAgICAgICAgLy8gaW5jcmVh
c2VkIGNoZWNraW5nIHRvIHZhbGlkYXRlIHRoaXMgcHJvcGVydHkuCisgICAgICAgIEFTU0VSVCht
X2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0gUHJlZGljdE5vbmUgfHwgbV9n
cmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IHByZWRpY3Rpb24pOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJlZGlj
dGlvbik7CisgICAgfQorICAgIAorICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBw
cm9wYWdhdGUoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgTm9kZVR5cGUg
b3AgPSBub2RlLm9wOworCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQorICAgICAgICBkYXRhTG9nKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2Nv
bXBpbGVJbmRleCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEpTQ29u
c3RhbnQ6CisgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6IHsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gc2V0UHJlZGljdGlvbihwcmVkaWN0aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpT
Q29uc3RhbnQobV9jb21waWxlSW5kZXgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQorICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QobV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgY2Fz
ZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIGNhc2UgQml0UlNoaWZ0Ogor
ICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAg
ICBjYXNlIFZhbHVlVG9JbnQzMjogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7
CisgICAgICAgICAgICBpZiAobm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKQorICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckNvZGVBdDogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGlj
dEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBB
cml0aE1vZDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW50
MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSAmJiBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
UHJlZGljdERvdWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAg
ICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkp
KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihQcmVkaWN0SW50MzIp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBWYWx1ZUFkZDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0RG91
YmxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEobGVmdCAmIFByZWRpY3ROdW1iZXIp
IHx8ICEocmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBs
ZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBudW1iZXIu
CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RT
dHJpbmcpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMyIHwgUHJl
ZGljdERvdWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJp
dGhTdWI6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVk
aWN0RG91YmxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDoKKyAgICAgICAgY2FzZSBBcml0
aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aERpdjogewor
ICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5w
cmVkaWN0aW9uKCk7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChsZWZ0ICYmIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9u
KG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGljdERvdWJs
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhTcXJ0OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24oUHJlZGljdERvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKKyAgICAgICAgICAg
IFByZWRpY3RlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIGlmIChjaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChub2RlQ2Fu
U3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGlj
dERvdWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBDb21w
YXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2Ug
Q29tcGFyZUVxOgorICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgY2FzZSBJ
bnN0YW5jZU9mOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGlj
dEJvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAgIGlmIChub2RlLmdldEhlYXBQcmVk
aWN0aW9uKCkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9k
ZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jaygp
LT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSA9PSBnbG9iYWxEYXRhKCkucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8g
cHJlZGljdGlvbiBmcm9tIHZhbHVlIHByb2ZpbGVzLCBjaGVjayBpZiB3ZSBtaWdodCBiZQorICAg
ICAgICAgICAgICAgIC8vIGFibGUgdG8gaW5mZXIgdGhlIHR5cGUgb3Vyc2VsdmVzLgorICAgICAg
ICAgICAgICAgIGJvb2wgaXNBcnJheSA9IGlzQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBib29sIGlzU3RyaW5nID0g
aXNTdHJpbmdQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsK
KyAgICAgICAgICAgICAgICBib29sIGlzQnl0ZUFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBib29sIGlzSW50
OEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXko
KTsKKyAgICAgICAgICAgICAgICBib29sIGlzSW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpOworICAgICAgICAgICAgICAgIGJvb2wg
aXNJbnQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQz
MkFycmF5KCk7CisgICAgICAgICAgICAgICAgYm9vbCBpc1VpbnQ4QXJyYXkgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKTsKKyAgICAgICAgICAgICAg
ICBib29sIGlzVWludDhDbGFtcGVkQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCk7CisgICAgICAgICAgICAgICAgYm9vbCBpc1Vp
bnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZB
cnJheSgpOworICAgICAgICAgICAgICAgIGJvb2wgaXNVaW50MzJBcnJheSA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKTsKKyAgICAgICAgICAgICAg
ICBib29sIGlzRmxvYXQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVGbG9hdDMyQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBib29sIGlzRmxvYXQ2NEFycmF5
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSB8fCBpc1N0cmluZyB8fCBpc0J5dGVBcnJheSB8
fCBpc0ludDhBcnJheSB8fCBpc0ludDE2QXJyYXkgfHwgaXNJbnQzMkFycmF5IHx8IGlzVWludDhB
cnJheSB8fCBpc1VpbnQ4Q2xhbXBlZEFycmF5IHx8IGlzVWludDE2QXJyYXkgfHwgaXNVaW50MzJB
cnJheSB8fCBpc0Zsb2F0MzJBcnJheSB8fCBpc0Zsb2F0NjRBcnJheSkKKyAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGljdEludDMyKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBHZXRCeUlkRmx1c2g6CisgICAgICAgICAgICBpZiAobm9kZS5nZXRIZWFwUHJlZGlj
dGlvbigpKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUu
Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpIHx8IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkgfHwgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkKKyAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldFByb3BlcnR5
U3RvcmFnZTogCisgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogeworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPdGhlcik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAg
ICAgICAgICAgIGlmIChub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBD
YWxsOgorICAgICAgICBjYXNlIENvbnN0cnVjdDogeworICAgICAgICAgICAgaWYgKG5vZGUuZ2V0
SGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHByZWRpY3Rpb24gJiB+UHJlZGljdE9iamVjdE1hc2spIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHJlZGljdGlvbiAmPSBQcmVkaWN0T2JqZWN0TWFzazsKKyAgICAgICAgICAgICAgICAg
ICAgcHJlZGljdGlvbiA9IG1lcmdlUHJlZGljdGlvbnMocHJlZGljdGlvbiwgUHJlZGljdE9iamVj
dE90aGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldEds
b2JhbFZhclByZWRpY3Rpb24obm9kZS52YXJOdW1iZXIoKSk7CisgICAgICAgICAgICBpZiAocHJl
ZGljdGlvbikKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVk
aWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6CisgICAgICAgIGNhc2UgUmVzb2x2ZToK
KyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmlj
dFB1dDoKKyAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLmdldEhlYXBQcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICBpZiAocHJlZGljdGlvbikKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZUNoYWluOiB7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24oUHJlZGljdENlbGxPdGhlcik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0Q2FsbGVlOiB7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdEZ1bmN0aW9uKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDcmVh
dGVUaGlzOgorICAgICAgICBjYXNlIE5ld09iamVjdDogeworICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAg
IGNhc2UgTmV3QXJyYXlCdWZmZXI6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihQcmVkaWN0QXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIE5ld1JlZ2V4cDogeworICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAg
IGNhc2UgU3RyQ2F0OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJl
ZGljdFN0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
Y2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IGlmIChjaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24oY2hp
bGQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEknZCBsb3ZlIHRvIGZvbGQgdGhpcyBjYXNl
IGludG8gdGhlIGNhc2UgYmVsb3csIGJ1dCBJIGNhbid0LCBiZWNhdXNlCisgICAgICAgICAgICAg
ICAgICAgIC8vIHJlbW92aW5nIFByZWRpY3RPYmplY3RNYXNrIGZyb20gc29tZXRoaW5nIHRoYXQg
b25seSBoYXMgYW4gb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rpb24gYW5k
IG5vdGhpbmcgZWxzZSBtZWFucyB3ZSBoYXZlIGFuIGlsbC1mb3JtZWQgUHJlZGljdGVkVHlwZQor
ICAgICAgICAgICAgICAgICAgICAvLyAoc3Ryb25nIHByZWRpY3Qtbm9uZSkuIFRoaXMgc2hvdWxk
IGJlIGtpbGxlZCBvbmNlIHdlIHJlbW92ZSBhbGwgdHJhY2VzCisgICAgICAgICAgICAgICAgICAg
IC8vIG9mIHN0YXRpYyAoYWthIHdlYWspIHByZWRpY3Rpb25zLgorICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGNoaWxkICYgUHJlZGljdE9iamVjdE1hc2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gT2JqZWN0cyBnZXQgdHVybmVkIGludG8gc3RyaW5ncy4gU28gaWYgdGhlIGlu
cHV0IGhhcyBoaW50cyBvZiBvYmplY3RuZXNzLAorICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
b3V0cHV0IHdpbGwgaGF2ZSBoaW5zdHMgb2Ygc3RyaW5naW5lc3MuCisgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMoY2hpbGQgJiB+
UHJlZGljdE9iamVjdE1hc2ssIFByZWRpY3RTdHJpbmcpKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oY2hpbGQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldEJ5dGVB
cnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6CisgICAgICAgIGNh
c2UgR2V0SW50MTZBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRJbnQzMkFycmF5TGVuZ3Ro
OgorICAgICAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0VWlu
dDhDbGFtcGVkQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6
CisgICAgICAgIGNhc2UgR2V0VWludDMyQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0Rmxv
YXQzMkFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldEZsb2F0NjRBcnJheUxlbmd0aDoKKyAg
ICAgICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBz
aG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBp
cworICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlz
IHBoYXNlLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIC8vIFRo
ZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCisgICAg
ICAgIGNhc2UgUHV0U2NvcGVkVmFyOgorICAgICAgICBjYXNlIERGRzo6SnVtcDoKKyAgICAgICAg
Y2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgQnJlYWtwb2ludDoKKyAgICAgICAgY2FzZSBSZXR1
cm46CisgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAgY2FzZSBQaGk6Cisg
ICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhy
b3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAgIGNh
c2UgU2V0QXJndW1lbnQ6CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1dEJ5SWRE
aXJlY3Q6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgQ2hlY2tG
dW5jdGlvbjoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUaGVz
ZSBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgorICAgICAgICBj
YXNlIFBoYW50b206CisgICAgICAgIGNhc2UgSW5saW5lU3RhcnQ6CisgICAgICAgIGNhc2UgTm9w
OgorICAgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIlc1xuIiwgcHJlZGljdGlvblRvU3Ry
aW5nKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOworI2VuZGlmCisgICAg
ICAgIAorICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBwcm9wYWdhdGVGb3J3YXJkKCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBm
b3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yIChtX2NvbXBp
bGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxl
SW5kZXgpCisgICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUJhY2t3YXJkKCkKKyAgICB7CisjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCJQcm9w
YWdhdGluZyBwcmVkaWN0aW9ucyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOworI2VuZGlm
CisgICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsgbV9jb21waWxl
SW5kZXgtLSA+IDA7KQorICAgICAgICAgICAgcHJvcGFnYXRlKG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdKTsKKyAgICB9CisKKyAgICB2b2lkIHZvdGUoTm9kZVVzZSBub2RlVXNlLCBWYXJpYWJsZUFj
Y2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3QpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhb
bm9kZVVzZV0ub3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGNhc2Ug
VUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICBub2RlVXNlID0gbV9ncmFwaFtub2RlVXNlXS5j
aGlsZDEoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoW25vZGVV
c2VdLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAgbV9ncmFwaFtub2RlVXNlXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZvdGUo
Tm9kZSYgbm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90KQorICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmly
c3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAg
ICAgIHZvdGUobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFub2Rl
LmNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2b3RlKG5vZGUuY2hpbGQx
KCksIGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICBpZiAo
IW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZvdGUobm9kZS5j
aGlsZDMoKSwgYmFsbG90KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVW
b3RpbmcoKQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIGRhdGFMb2coIlZvdGluZyBvbiBkb3VibGUgdXNlcyBvZiBsb2NhbHMgWyV1XVxu
IiwgbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Z3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3RlcygpOworICAgICAg
ICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21waWxlSW5kZXggPCBtX2dyYXBoLnNpemUo
KTsgKyttX2NvbXBpbGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAg
ICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAg
ICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhOjpC
YWxsb3QgYmFsbG90OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc051
bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KQorICAgICAg
ICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVE
b3VibGU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiYWxsb3Qg
PSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICAgICAg
dm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBcml0aE11bDoK
KyAgICAgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAgICAgICBjYXNlIEFyaXRoTWF4Ogor
ICAgICAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsK
KyAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90OworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc051bWJlclByZWRpY3Rpb24obGVmdCkg
JiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXSkgJiYg
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgICAgICBiYWxsb3Qg
PSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVEb3VibGU7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVWYWx1
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQxKCks
IGJhbGxvdCk7CisgICAgICAgICAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGE6OkJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICAgICAgaWYgKCEobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0Rh
dGE6OlZvdGVEb3VibGU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVWYWx1ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFyaXRo
U3FydDoKKyAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQxKCksIFZhcmlhYmxlQWNjZXNz
RGF0YTo6Vm90ZURvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7
CisgICAgICAgICAgICAgICAgaWYgKGlzRG91YmxlUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWYXJpYWJs
ZUFjY2Vzc0RhdGE6OlZvdGVEb3VibGUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc051
bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlv
bikpCisgICAgICAgICAgICAgICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUo
VmFyaWFibGVBY2Nlc3NEYXRhOjpWb3RlVmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICB2b3RlKG5vZGUsIFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZVZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhW2ldLmZpbmQoKS0+dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeHVwTm9kZShOb2RlJiBub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CisKKyNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAgICVzIEAldTog
IiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4KTsKKyNlbmRpZgorICAgICAgICAK
KyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAg
ICAgIGlmICghaXNJbnQzMlByZWRpY3Rpb24obV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGlj
dGlvbigpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjb2RlQmxv
Y2soKS0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgp
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGJvb2wgaXNBcnJheSA9IGlzQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJvb2wgaXNTdHJpbmcgPSBpc1N0cmluZ1By
ZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOworICAgICAgICAg
ICAgYm9vbCBpc0J5dGVBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlQnl0ZUFycmF5KCk7CisgICAgICAgICAgICBib29sIGlzSW50OEFycmF5ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKTsKKyAgICAgICAgICAgIGJv
b2wgaXNJbnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJ
bnQxNkFycmF5KCk7CisgICAgICAgICAgICBib29sIGlzSW50MzJBcnJheSA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpOworICAgICAgICAgICAgYm9v
bCBpc1VpbnQ4QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVp
bnQ4QXJyYXkoKTsKKyAgICAgICAgICAgIGJvb2wgaXNVaW50OENsYW1wZWRBcnJheSA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKTsKKyAg
ICAgICAgICAgIGJvb2wgaXNVaW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKTsKKyAgICAgICAgICAgIGJvb2wgaXNVaW50MzJBcnJh
eSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKTsK
KyAgICAgICAgICAgIGJvb2wgaXNGbG9hdDMyQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpOworICAgICAgICAgICAgYm9vbCBpc0Zsb2F0
NjRBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFy
cmF5KCk7CisgICAgICAgICAgICBpZiAoIWlzQXJyYXkgJiYgIWlzU3RyaW5nICYmICFpc0J5dGVB
cnJheSAmJiAhaXNJbnQ4QXJyYXkgJiYgIWlzSW50MTZBcnJheSAmJiAhaXNJbnQzMkFycmF5ICYm
ICFpc1VpbnQ4QXJyYXkgJiYgIWlzVWludDhDbGFtcGVkQXJyYXkgJiYgIWlzVWludDE2QXJyYXkg
JiYgIWlzVWludDMyQXJyYXkgJiYgIWlzRmxvYXQzMkFycmF5ICYmICFpc0Zsb2F0NjRBcnJheSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgQCV1IC0+ICVz
IiwgbV9jb21waWxlSW5kZXgsIGlzQXJyYXkgPyAiR2V0QXJyYXlMZW5ndGgiIDogIkdldFN0cmlu
Z0xlbmd0aCIpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoaXNBcnJheSkKKyAgICAgICAgICAg
ICAgICBub2RlLm9wID0gR2V0QXJyYXlMZW5ndGg7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N0
cmluZykKKyAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0U3RyaW5nTGVuZ3RoOworICAgICAg
ICAgICAgZWxzZSBpZiAoaXNCeXRlQXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdl
dEJ5dGVBcnJheUxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50OEFycmF5KQorICAg
ICAgICAgICAgICAgIG5vZGUub3AgPSBHZXRJbnQ4QXJyYXlMZW5ndGg7CisgICAgICAgICAgICBl
bHNlIGlmIChpc0ludDE2QXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldEludDE2
QXJyYXlMZW5ndGg7CisgICAgICAgICAgICBlbHNlIGlmIChpc0ludDMyQXJyYXkpCisgICAgICAg
ICAgICAgICAgbm9kZS5vcCA9IEdldEludDMyQXJyYXlMZW5ndGg7CisgICAgICAgICAgICBlbHNl
IGlmIChpc1VpbnQ4QXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldFVpbnQ4QXJy
YXlMZW5ndGg7CisgICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQ4Q2xhbXBlZEFycmF5KQorICAg
ICAgICAgICAgICAgIG5vZGUub3AgPSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlzVWludDE2QXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9
IEdldFVpbnQxNkFycmF5TGVuZ3RoOworICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50MzJBcnJh
eSkKKyAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0VWludDMyQXJyYXlMZW5ndGg7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc0Zsb2F0MzJBcnJheSkKKyAgICAgICAgICAgICAgICBub2RlLm9w
ID0gR2V0RmxvYXQzMkFycmF5TGVuZ3RoOworICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdDY0
QXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldEZsb2F0NjRBcnJheUxlbmd0aDsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOyAvLyBObyBsb25nZXIg
TXVzdEdlbmVyYXRlCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
YmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJl
ZGljdGlvbikgeworICAgICAgICAgICAgICAgIG5vZGUub3AgPSBOb3A7CisgICAgICAgICAgICAg
ICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOworICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihub2RlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LmNsZWFyQW5kRGVyZWZDaGlsZDMobm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZS5zZXRSZWZD
b3VudCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIGlmICghIW5vZGUuY2hpbGQz
KCkgJiYgbV9ncmFwaFtub2RlLmNoaWxkMygpXS5vcCA9PSBOb3ApCisgICAgICAgICAgICAgICAg
bm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IE5vZGVVc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBk
YXRhTG9nKCJcbiIpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQgZml4dXAoKQorICAg
IHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRh
dGFMb2coIlBlcmZvcm1pbmcgRml4dXBcbiIpOworI2VuZGlmCisgICAgICAgIGZvciAobV9jb21w
aWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGls
ZUluZGV4KQorICAgICAgICAgICAgZml4dXBOb2RlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsK
KyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIGJvb2wgbV9j
aGFuZ2VkOworCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
IHVuc2lnbmVkIG1fY291bnQ7CisjZW5kaWYKK307CisgICAgCit2b2lkIHBlcmZvcm1QcmVkaWN0
aW9uUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIHJ1blBoYXNlPFByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2VfaAorI2RlZmluZSBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQ
cm9wYWdhdGUgcHJlZGljdGlvbnMgZ2F0aGVyZWQgYXQgaGVhcCBsb2FkIHNpdGVzIGJ5IHRoZSB2
YWx1ZSBwcm9maWxlciwgYW5kCisvLyBmcm9tIHNsb3cgcGF0aCBleGVjdXRpb25zLCB0byBnZW5l
cmF0ZSBhIHByZWRpY3Rpb24gZm9yIGVhY2ggbm9kZSBpbiB0aGUgZ3JhcGguCisvLyBUaGlzIGlz
IGEgY3J1Y2lhbCBwaGFzZSBvZiBjb21waWxhdGlvbiwgc2luY2UgYmVmb3JlIHJ1bm5pbmcgdGhp
cyBwaGFzZSwgd2UKKy8vIGhhdmUgbm8gaWRlYSB3aGF0IHR5cGVzIGFueSBub2RlIChvciBtb3N0
IHZhcmlhYmxlcykgY291bGQgcG9zc2libHkgaGF2ZSwgdW5sZXNzCisvLyB0aGF0IG5vZGUgaXMg
ZWl0aGVyIGEgaGVhcCBsb2FkLCBhIGNhbGwsIGEgR2V0TG9jYWwgZm9yIGFuIGFyZ3VtZW50LCBv
ciBhbgorLy8gYXJpdGhtZXRpYyBvcCB0aGF0IGhhZCBkZWZpbml0ZWx5IHRha2VuIHNsb3cgcGF0
aC4gTW9zdCBub2RlcyAoZXZlbiBtb3N0CisvLyBhcml0aG1ldGljIG5vZGVzKSBkbyBub3QgcXVh
bGlmeSBmb3IgYW55IG9mIHRoZXNlIGNhdGVnb3JpZXMuIEJ1dCBhZnRlciBydW5uaW5nCisvLyB0
aGlzIHBoYXNlLCB3ZSdsbCBoYXZlIGZ1bGwgaW5mb3JtYXRpb24gZm9yIHRoZSBleHBlY3RlZCB0
eXBlIG9mIGVhY2ggbm9kZS4KKwordm9pZCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdy
YXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkc6OlBoYXNlCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAko
cmV2aXNpb24gMTA4MTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkRGR1Byb3BhZ2F0b3IuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVk
ZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgotI2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAi
REZHU2NvcmVCb2FyZC5oIgotI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgUHJvcGFnYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgUHJvcGFnYXRvcihHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFwaChncmFwaCkKLSAg
ICAgICAgLCBtX2dsb2JhbERhdGEoZ3JhcGgubV9nbG9iYWxEYXRhKQotICAgICAgICAsIG1fY29k
ZUJsb2NrKGdyYXBoLm1fY29kZUJsb2NrKQotICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhncmFw
aC5tX3Byb2ZpbGVkQmxvY2spCi0gICAgewotICAgICAgICAvLyBSZXBsYWNlbWVudHMgYXJlIHVz
ZWQgdG8gaW1wbGVtZW50IGxvY2FsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uLgot
ICAgICAgICBtX3JlcGxhY2VtZW50cy5yZXNpemUobV9ncmFwaC5zaXplKCkpOwotICAgICAgICAK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGguc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICBtX3JlcGxhY2VtZW50c1tpXSA9IE5vTm9kZTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBMYXN0Tm9kZUlkOyArK2kpCi0gICAgICAgICAgICBt
X2xhc3RTZWVuW2ldID0gTm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeHBvaW50KCkK
LSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwotI2VuZGlmCi0KLSAgICAgICAgcHJvcGFnYXRl
QXJpdGhOb2RlRmxhZ3MoKTsKLSAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnMoKTsKLSAgICAg
ICAgZml4dXAoKTsKLSAgICAgICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBwcm9wYWdhdGlvbiBmaXh1cDpc
biIpOwotICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwotI2VuZGlmCi0KLSAgICAg
ICAgbG9jYWxDU0UoKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgQ1NFOlxuIik7Ci0gICAgICAgIG1fZ3Jh
cGguZHVtcChtX2NvZGVCbG9jayk7Ci0jZW5kaWYKLQotICAgICAgICBhbGxvY2F0ZVZpcnR1YWxS
ZWdpc3RlcnMoKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0aW9u
OlxuIik7Ci0gICAgICAgIG1fZ3JhcGguZHVtcChtX2NvZGVCbG9jayk7Ci0jZW5kaWYKLQotICAg
ICAgICBnbG9iYWxDRkEoKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAg
ICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgcHJvcGFnYXRpb246XG4iKTsKLSAgICAgICAgbV9ncmFw
aC5kdW1wKG1fY29kZUJsb2NrKTsKLSNlbmRpZgotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAg
Ym9vbCBpc05vdE5lZ1plcm8oTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIGlm
ICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNv
bnN0YW50KG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUg
PCAwLjA7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNOb3RaZXJvKE5vZGVJbmRleCBub2RlSW5k
ZXgpCi0gICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5k
ZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gISFtX2dyYXBo
LnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKLSAgICAgICAgQXJpdGhOb2RlRmxhZ3MgZmxh
Z3MgPSAwOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzQXJpdGhOb2RlRmxhZ3MoKSkK
LSAgICAgICAgICAgIGZsYWdzID0gbm9kZS5yYXdBcml0aE5vZGVGbGFncygpOwotICAgICAgICAK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2coIiAgICVzIEAldTogJXMgIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4LCBh
cml0aE5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAg
IGZsYWdzICY9IE5vZGVVc2VkQXNNYXNrOwotICAgICAgICAKLSAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2Ug
VmFsdWVUb0ludDMyOgotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgY2FzZSBCaXRPcjoK
LSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0TFNoaWZ0OgotICAgICAgICBj
YXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7Ci0gICAgICAgICAgICAv
LyBUaGVzZSBvcGVyYXRpb25zIGFyZSBwZXJmZWN0bHkgaGFwcHkgd2l0aCB0cnVuY2F0ZWQgaW50
ZWdlcnMsCi0gICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCB3YW50IHRvIHByb3BhZ2F0ZSBhbnl0
aGluZy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBVSW50MzJUb051bWJlcjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgot
ICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgo
KSkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJn
ZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aFN1Yjogewot
ICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90
WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQotICAgICAgICAgICAgICAgIGZsYWdzICY9IH5O
b2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VBcml0aE5vZGVGbGFn
cyhmbGFncyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAg
ICAgIC8vIEFzIHNvb24gYXMgYSBtdWx0aXBseSBoYXBwZW5zLCB3ZSBjYW4gZWFzaWx5IGVuZCB1
cCBpbiB0aGUgcGFydAotICAgICAgICAgICAgLy8gb2YgdGhlIGRvdWJsZSBkb21haW4gd2hlcmUg
dGhlIHBvaW50IGF0IHdoaWNoIHlvdSBkbyB0cnVuY2F0aW9uCi0gICAgICAgICAgICAvLyBjYW4g
Y2hhbmdlIHRoZSBvdXRjb21lLiBTbywgQXJpdGhNdWwgYWx3YXlzIGNoZWNrcyBmb3Igb3ZlcmZs
b3cKLSAgICAgICAgICAgIC8vIG5vIG1hdHRlciB3aGF0LCBhbmQgYWx3YXlzIGZvcmNlcyBpdHMg
aW5wdXRzIHRvIGNoZWNrIGFzIHdlbGwuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZsYWdz
IHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3Mp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJp
dGhOb2RlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAgICBjYXNlIEFyaXRoTWF4OiB7
Ci0gICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3Mp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJp
dGhOb2RlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBmbGFncyAmPSB+
Tm9kZU5lZWRzTmVnWmVybzsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbDogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxh
Z3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VBcml0aE5vZGVGbGFn
cyhmbGFncyB8IE5vZGVVc2VkQXNOdW1iZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQzKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFz
TnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdz
IHwgTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8pOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3Mg
fCBOb2RlVXNlZEFzTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2Vk
QXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgaWYgKG9wICYgTm9kZUhh
c1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNo
aWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUFyaXRoTm9kZUZs
YWdzKGZsYWdzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFu
b2RlLmNoaWxkMSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhm
bGFncyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFub2RlLmNoaWxkMygpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VBcml0aE5vZGVGbGFn
cyhmbGFncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRh
TG9nKCIlc1xuIiwgY2hhbmdlZCA/ICJDSEFOR0VEIiA6ICIiKTsKLSNlbmRpZgotICAgICAgICAK
LSAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJv
cGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3YXJkKCkKLSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCJQcm9wYWdhdGluZyBhcml0
aG1ldGljIG5vZGUgZmxhZ3MgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwotI2VuZGlmCi0g
ICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGgu
c2l6ZSgpOyArK21fY29tcGlsZUluZGV4KQotICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2Rl
RmxhZ3MobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBy
b3BhZ2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKQotICAgIHsKLSNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIlByb3BhZ2F0aW5nIGFy
aXRobWV0aWMgbm9kZSBmbGFncyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwotI2VuZGlm
Ci0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsgbV9jb21waWxl
SW5kZXgtLSA+IDA7KQotICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MobV9ncmFw
aFttX2NvbXBpbGVJbmRleF0pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZUFyaXRo
Tm9kZUZsYWdzKCkKLSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICBtX2NvdW50ID0gMDsKLSNlbmRpZgotICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVXAg
aGVyZSB3ZSBzdGFydCB3aXRoIGEgYmFja3dhcmQgcGFzcyBiZWNhdXNlIHdlIHN1c3BlY3QgdGhh
dCB0byBiZQotICAgICAgICAgICAgLy8gbW9yZSBwcm9maXRhYmxlLgotICAgICAgICAgICAgcHJv
cGFnYXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2FyZCgpOwotICAgICAgICAgICAgaWYgKCFtX2NoYW5n
ZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3
YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOwotICAgICAgICAK
LSAgICAgICAgLy8gc2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3ZSBrbm93IHRoYXQgdGhl
cmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIGNoYW5nZQotICAgICAgICAvLyBvdXIgbWluZHMgYWJv
dXQgd2hhdCB0aGUgcHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhlcmUgaXMgbm8gc2VtYW50
aWMKLSAgICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRpY3Rpb24oKSBhbmQgbWVy
Z2VQcmVkaWN0aW9uKCkgb3RoZXIgdGhhbiB0aGUKLSAgICAgICAgLy8gaW5jcmVhc2VkIGNoZWNr
aW5nIHRvIHZhbGlkYXRlIHRoaXMgcHJvcGVydHkuCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW21f
Y29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0gUHJlZGljdE5vbmUgfHwgbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IHByZWRpY3Rpb24pOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJlZGljdGlvbik7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNS
ZXN1bHQoKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0ucHJlZGljdChwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBwcm9wYWdhdGVO
b2RlUHJlZGljdGlvbnMoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTm9k
ZVR5cGUgb3AgPSBub2RlLm9wOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3Ap
LCBtX2NvbXBpbGVJbmRleCk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNl
IEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6IHsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihwcmVkaWN0aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFs
dWVPZkpTQ29uc3RhbnQobV9jb21waWxlSW5kZXgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQotICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFNldExvY2FsOiB7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3QobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNo
aWZ0OgotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0Ogot
ICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAgIGNhc2UgQXJyYXlQ
dXNoOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKQotICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgU3Ry
aW5nQ2hhckNvZGVBdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
UHJlZGljdEludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBl
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzSW50MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSAmJiBub2Rl
Q2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQotICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oUHJlZGljdERvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsK
LSAgICAgICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihQcmVkaWN0
SW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihQcmVkaWN0TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBs
ZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rp
b24ocmlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVk
aWN0RG91YmxlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEobGVmdCAmIFByZWRpY3RO
dW1iZXIpIHx8ICEocmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBsZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBu
dW1iZXIuCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFBy
ZWRpY3RTdHJpbmcpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMy
IHwgUHJlZGljdERvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNh
c2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBy
aWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihQcmVkaWN0RG91YmxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgY2Fz
ZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0aERp
djogewotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVk
aWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSAmJiBub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQotICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGlj
dERvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdERvdWJsZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAg
ICAgICAgIFByZWRpY3RlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChjaGlsZCkgewotICAgICAgICAgICAgICAgIGlmIChu
b2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQotICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
UHJlZGljdERvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgY2Fz
ZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBjYXNl
IENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAgICAg
IGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKLSAgICAgICAg
Y2FzZSBJbnN0YW5jZU9mOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
UHJlZGljdEJvb2xlYW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGlmIChub2RlLmdldEhl
YXBQcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSA9PSBtX2dsb2JhbERh
dGEucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gcHJlZGljdGlvbiBmcm9tIHZhbHVlIHByb2ZpbGVzLCBjaGVjayBpZiB3ZSBtaWdodCBi
ZQotICAgICAgICAgICAgICAgIC8vIGFibGUgdG8gaW5mZXIgdGhlIHR5cGUgb3Vyc2VsdmVzLgot
ICAgICAgICAgICAgICAgIGJvb2wgaXNBcnJheSA9IGlzQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgICAgICBib29sIGlzU3Ry
aW5nID0gaXNTdHJpbmdQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpKTsKLSAgICAgICAgICAgICAgICBib29sIGlzQnl0ZUFycmF5ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBib29s
IGlzSW50OEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4
QXJyYXkoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzSW50MTZBcnJheSA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpOwotICAgICAgICAgICAgICAg
IGJvb2wgaXNJbnQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVJbnQzMkFycmF5KCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc1VpbnQ4QXJyYXkgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKTsKLSAgICAgICAg
ICAgICAgICBib29sIGlzVWludDhDbGFtcGVkQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCk7Ci0gICAgICAgICAgICAgICAgYm9v
bCBpc1VpbnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVV
aW50MTZBcnJheSgpOwotICAgICAgICAgICAgICAgIGJvb2wgaXNVaW50MzJBcnJheSA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKTsKLSAgICAgICAg
ICAgICAgICBib29sIGlzRmxvYXQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzRmxvYXQ2
NEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJy
YXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSB8fCBpc1N0cmluZyB8fCBpc0J5dGVB
cnJheSB8fCBpc0ludDhBcnJheSB8fCBpc0ludDE2QXJyYXkgfHwgaXNJbnQzMkFycmF5IHx8IGlz
VWludDhBcnJheSB8fCBpc1VpbnQ4Q2xhbXBlZEFycmF5IHx8IGlzVWludDE2QXJyYXkgfHwgaXNV
aW50MzJBcnJheSB8fCBpc0Zsb2F0MzJBcnJheSB8fCBpc0Zsb2F0NjRBcnJheSkKLSAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGljdEludDMyKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6Ci0gICAgICAgICAgICBpZiAobm9kZS5nZXRIZWFw
UHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpIHx8IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkgfHwgbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkKLSAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFBy
b3BlcnR5U3RvcmFnZTogCi0gICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTog
ewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPdGhlcik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6
IHsKLSAgICAgICAgICAgIGlmIChub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpCi0gICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDogewotICAgICAgICAgICAgaWYgKG5v
ZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0g
ICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHByZWRpY3Rpb24gJiB+UHJlZGljdE9iamVjdE1hc2spIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHJlZGljdGlvbiAmPSBQcmVkaWN0T2JqZWN0TWFzazsKLSAgICAgICAgICAg
ICAgICAgICAgcHJlZGljdGlvbiA9IG1lcmdlUHJlZGljdGlvbnMocHJlZGljdGlvbiwgUHJlZGlj
dE9iamVjdE90aGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0R2xv
YmFsVmFyOiB7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBo
LmdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZS52YXJOdW1iZXIoKSk7Ci0gICAgICAgICAgICBp
ZiAocHJlZGljdGlvbikKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihwcmVkaWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6Ci0gICAgICAgIGNhc2UgUmVz
b2x2ZToKLSAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKLSAgICAgICAgY2FzZSBSZXNvbHZlQmFz
ZVN0cmljdFB1dDoKLSAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7Ci0gICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLmdldEhlYXBQcmVkaWN0aW9uKCk7Ci0gICAg
ICAgICAgICBpZiAocHJlZGljdGlvbikKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihwcmVkaWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRTY29wZUNoYWluOiB7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdENlbGxPdGhlcik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0Q2FsbGVlOiB7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdEZ1bmN0aW9uKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBDcmVhdGVUaGlzOgotICAgICAgICBjYXNlIE5ld09iamVjdDogewotICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RGaW5hbE9iamVjdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3QXJyYXk6Ci0g
ICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihQcmVkaWN0QXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5ld1JlZ2V4cDogewotICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPYmplY3RPdGhlcik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0g
ICAgICAgIGNhc2UgU3RyQ2F0OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oUHJlZGljdFN0cmluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgICAgIFByZWRpY3Rl
ZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAg
ICAgICAgIGlmIChjaGlsZCkgewotICAgICAgICAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rp
b24oY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEknZCBsb3ZlIHRvIGZvbGQgdGhp
cyBjYXNlIGludG8gdGhlIGNhc2UgYmVsb3csIGJ1dCBJIGNhbid0LCBiZWNhdXNlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHJlbW92aW5nIFByZWRpY3RPYmplY3RNYXNrIGZyb20gc29tZXRoaW5n
IHRoYXQgb25seSBoYXMgYW4gb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rp
b24gYW5kIG5vdGhpbmcgZWxzZSBtZWFucyB3ZSBoYXZlIGFuIGlsbC1mb3JtZWQgUHJlZGljdGVk
VHlwZQotICAgICAgICAgICAgICAgICAgICAvLyAoc3Ryb25nIHByZWRpY3Qtbm9uZSkuIFRoaXMg
c2hvdWxkIGJlIGtpbGxlZCBvbmNlIHdlIHJlbW92ZSBhbGwgdHJhY2VzCi0gICAgICAgICAgICAg
ICAgICAgIC8vIG9mIHN0YXRpYyAoYWthIHdlYWspIHByZWRpY3Rpb25zLgotICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkICYgUHJlZGljdE9iamVjdE1hc2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gT2JqZWN0cyBnZXQgdHVybmVkIGludG8gc3RyaW5ncy4gU28gaWYg
dGhlIGlucHV0IGhhcyBoaW50cyBvZiBvYmplY3RuZXNzLAotICAgICAgICAgICAgICAgICAgICAv
LyB0aGUgb3V0cHV0IHdpbGwgaGF2ZSBoaW5zdHMgb2Ygc3RyaW5naW5lc3MuCi0gICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMoY2hp
bGQgJiB+UHJlZGljdE9iamVjdE1hc2ssIFByZWRpY3RTdHJpbmcpKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
Y2hpbGQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdl
dEJ5dGVBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6Ci0gICAg
ICAgIGNhc2UgR2V0SW50MTZBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRJbnQzMkFycmF5
TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2Ug
R2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDE2QXJyYXlM
ZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2Ug
R2V0RmxvYXQzMkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEZsb2F0NjRBcnJheUxlbmd0
aDoKLSAgICAgICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6IHsKLSAgICAgICAgICAgIC8vIFRoaXMg
bm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9u
LiBJdCBpcwotICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93
cyB0aGlzIHBoYXNlLgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAg
IC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcu
Ci0gICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICBjYXNlIERGRzo6SnVtcDoKLSAg
ICAgICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgIGNhc2UgQnJlYWtwb2ludDoKLSAgICAgICAgY2Fz
ZSBSZXR1cm46Ci0gICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKLSAgICAgICAgY2FzZSBQ
aGk6Ci0gICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIGNhc2UgVGhyb3c6Ci0gICAgICAgIGNh
c2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKLSAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6Ci0gICAg
ICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgY2FzZSBQdXRCeUlkOgotICAgICAgICBjYXNlIFB1
dEJ5SWREaXJlY3Q6Ci0gICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2Ug
Q2hlY2tGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAv
LyBUaGVzZSBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgotICAg
ICAgICBjYXNlIFBoYW50b206Ci0gICAgICAgIGNhc2UgSW5saW5lU3RhcnQ6Ci0gICAgICAgIGNh
c2UgTm9wOgotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZQotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0jaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIlc1xuIiwgcHJlZGljdGlv
blRvU3RyaW5nKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOwotI2VuZGlm
Ci0gICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKQotICAgIHsKLSNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIlByb3BhZ2F0
aW5nIHByZWRpY3Rpb25zIGZvcndhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKLSNlbmRpZgotICAg
ICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21waWxlSW5kZXggPCBtX2dyYXBoLnNp
emUoKTsgKyttX2NvbXBpbGVJbmRleCkKLSAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGVQcmVkaWN0
aW9ucyhtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJv
cGFnYXRlUHJlZGljdGlvbnNCYWNrd2FyZCgpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiUHJvcGFnYXRpbmcgcHJlZGlj
dGlvbnMgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKLSNlbmRpZgotICAgICAgICBmb3Ig
KG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4LS0gPiAwOykK
LSAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyhtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdm90ZShOb2RlVXNlIG5vZGVVc2UsIFZhcmlh
YmxlQWNjZXNzRGF0YTo6QmFsbG90IGJhbGxvdCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9n
cmFwaFtub2RlVXNlXS5vcCkgewotICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAg
Y2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgIG5vZGVVc2UgPSBtX2dyYXBoW25vZGVV
c2VdLmNoaWxkMSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhb
bm9kZVVzZV0ub3AgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBtX2dyYXBoW25vZGVVc2VdLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
dm90ZShOb2RlJiBub2RlLCBWYXJpYWJsZUFjY2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3QpCi0gICAg
ewotICAgICAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9k
ZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAg
ICAgICAgICAgdm90ZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBiYWxsb3Qp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5vZGUuY2hpbGQxKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5j
aGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7Ci0gICAgICAg
IGlmICghbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShu
b2RlLmNoaWxkMygpLCBiYWxsb3QpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGRvUm91bmRPZkRv
dWJsZVZvdGluZygpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgZGF0YUxvZygiVm90aW5nIG9uIGRvdWJsZSB1c2VzIG9mIGxvY2FscyBb
JXVdXG4iLCBtX2NvdW50KTsKLSNlbmRpZgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7Ci0g
ICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGgu
c2l6ZSgpOyArK21fY29tcGlsZUluZGV4KSB7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAg
ICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAg
ICAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
bGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rp
b24oKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGE6OkJhbGxvdCBiYWxsb3Q7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpCi0g
ICAgICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6
Vm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJh
bGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZVZhbHVlOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAg
ICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFyaXRo
TXVsOgotICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhN
YXg6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgotICAgICAgICAgICAgY2FzZSBBcml0aERp
djogewotICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmln
aHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3Q7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihs
ZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpICYmICEoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQxKCld
KSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkpCi0gICAgICAgICAgICAgICAgICAgIGJh
bGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90
ZVZhbHVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGls
ZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxv
dCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIEFyaXRoQWJzOgotICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YTo6QmFsbG90IGJhbGxvdDsKLSAgICAgICAgICAgICAgICBpZiAoIShtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBub2RlLmNhblNwZWN1
bGF0ZUludGVnZXIoKSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZhcmlhYmxlQWNj
ZXNzRGF0YTo6Vm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGJhbGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZVZhbHVlOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
QXJpdGhTcXJ0OgotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgVmFyaWFibGVB
Y2Nlc3NEYXRhOjpWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNEb3VibGVQcmVkaWN0aW9uKHByZWRpY3Rpb24p
KQotICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZh
cmlhYmxlQWNjZXNzRGF0YTo6Vm90ZURvdWJsZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
IWlzTnVtYmVyUHJlZGljdGlvbihwcmVkaWN0aW9uKSB8fCBpc0ludDMyUHJlZGljdGlvbihwcmVk
aWN0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
dm90ZShWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHZvdGUobm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpWb3RlVmFs
dWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJp
YWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT50YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9y
bWF0KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJvcGFnYXRlUHJlZGljdGlvbnMoKQotICAg
IHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIG1f
Y291bnQgPSAwOwotI2VuZGlmCi0gICAgICAgIC8vIFR3byBzdGFnZSBwcm9jZXNzOiBmaXJzdCBw
cm9wYWdhdGUgcHJlZGljdGlvbnMsIHRoZW4gcHJvcGFnYXRlIHdoaWxlIGRvaW5nIGRvdWJsZSB2
b3RpbmcuCi0gICAgICAgIAotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBp
cyBuZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCi0gICAgICAg
ICAgICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9u
c0ZvcndhcmQoKTsKLSAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlv
biByZWR1Y2VzIHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAotICAg
ICAgICAgICAgLy8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVz
KSByZXNlbWJsZSBiYWNrd2FyZCBmbG93LgotICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1
cmVzIHR3byBjYXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKLSAg
ICAgICAgICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0
cyBiYWNrd2FyZCBmbG93LgotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0JhY2t3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1f
Y2hhbmdlZCk7Ci0gICAgICAgIAotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIGRvUm91bmRPZkRvdWJsZVZvdGluZygpOwotICAgICAgICAg
ICAgcHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hh
bmdlZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKTsK
LSAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25zQmFja3dhcmQoKTsKLSAgICAgICAgfSB3
aGlsZSAobV9jaGFuZ2VkKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXh1cE5vZGUoTm9kZSYg
bm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwot
Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRh
TG9nKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7Ci0j
ZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBHZXRC
eUlkOiB7Ci0gICAgICAgICAgICBpZiAoIWlzSW50MzJQcmVkaWN0aW9uKG1fZ3JhcGhbbV9jb21w
aWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBpZiAobV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkp
ICE9IG1fZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBib29sIGlzQXJyYXkgPSBpc0FycmF5UHJlZGljdGlvbihtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzU3Ry
aW5nID0gaXNTdHJpbmdQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpKTsKLSAgICAgICAgICAgIGJvb2wgaXNCeXRlQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnNob3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0ludDhB
cnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCk7
Ci0gICAgICAgICAgICBib29sIGlzSW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0ludDMyQXJy
YXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKTsK
LSAgICAgICAgICAgIGJvb2wgaXNVaW50OEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzVWludDhDbGFt
cGVkQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xh
bXBlZEFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzVWludDE2QXJyYXkgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCk7Ci0gICAgICAgICAgICBi
b29sIGlzVWludDMyQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0
ZVVpbnQzMkFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzRmxvYXQzMkFycmF5ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKTsKLSAgICAgICAg
ICAgIGJvb2wgaXNGbG9hdDY0QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNw
ZWN1bGF0ZUZsb2F0NjRBcnJheSgpOwotICAgICAgICAgICAgaWYgKCFpc0FycmF5ICYmICFpc1N0
cmluZyAmJiAhaXNCeXRlQXJyYXkgJiYgIWlzSW50OEFycmF5ICYmICFpc0ludDE2QXJyYXkgJiYg
IWlzSW50MzJBcnJheSAmJiAhaXNVaW50OEFycmF5ICYmICFpc1VpbnQ4Q2xhbXBlZEFycmF5ICYm
ICFpc1VpbnQxNkFycmF5ICYmICFpc1VpbnQzMkFycmF5ICYmICFpc0Zsb2F0MzJBcnJheSAmJiAh
aXNGbG9hdDY0QXJyYXkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgIEAldSAtPiAlcyIsIG1fY29tcGlsZUluZGV4LCBpc0FycmF5ID8gIkdldEFycmF5TGVu
Z3RoIiA6ICJHZXRTdHJpbmdMZW5ndGgiKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGlzQXJy
YXkpCi0gICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldEFycmF5TGVuZ3RoOwotICAgICAgICAg
ICAgZWxzZSBpZiAoaXNTdHJpbmcpCi0gICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldFN0cmlu
Z0xlbmd0aDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQnl0ZUFycmF5KQotICAgICAgICAgICAg
ICAgIG5vZGUub3AgPSBHZXRCeXRlQXJyYXlMZW5ndGg7Ci0gICAgICAgICAgICBlbHNlIGlmIChp
c0ludDhBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0SW50OEFycmF5TGVuZ3Ro
OwotICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQxNkFycmF5KQotICAgICAgICAgICAgICAgIG5v
ZGUub3AgPSBHZXRJbnQxNkFycmF5TGVuZ3RoOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQz
MkFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUub3AgPSBHZXRJbnQzMkFycmF5TGVuZ3RoOwot
ICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50OEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUu
b3AgPSBHZXRVaW50OEFycmF5TGVuZ3RoOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50OENs
YW1wZWRBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0VWludDhDbGFtcGVkQXJy
YXlMZW5ndGg7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQxNkFycmF5KQotICAgICAgICAg
ICAgICAgIG5vZGUub3AgPSBHZXRVaW50MTZBcnJheUxlbmd0aDsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGlzVWludDMyQXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldFVpbnQzMkFy
cmF5TGVuZ3RoOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdDMyQXJyYXkpCi0gICAgICAg
ICAgICAgICAgbm9kZS5vcCA9IEdldEZsb2F0MzJBcnJheUxlbmd0aDsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGlzRmxvYXQ2NEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUub3AgPSBHZXRGbG9h
dDY0QXJyYXlMZW5ndGg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4
KTsgLy8gTm8gbG9uZ2VyIE11c3RHZW5lcmF0ZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAg
ICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5w
cmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIShiYXNlUHJlZGljdGlvbiAmIFByZWRpY3RJ
bnQzMikgJiYgYmFzZVByZWRpY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBub2RlLm9wID0gTm9w
OwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKLSAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7Ci0gICAgICAg
ICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQzKG5vZGUpOwotICAgICAgICAgICAg
ICAgIG5vZGUuc2V0UmVmQ291bnQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJBdDoKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAgICAgICBp
ZiAoISFub2RlLmNoaWxkMygpICYmIG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AgPT0gTm9wKQot
ICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBOb2RlVXNlKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICB2
b2lkIGZpeHVwKCkKLSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICBkYXRhTG9nKCJQZXJmb3JtaW5nIEZpeHVwXG4iKTsKLSNlbmRpZgotICAg
ICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21waWxlSW5kZXggPCBtX2dyYXBoLnNp
emUoKTsgKyttX2NvbXBpbGVJbmRleCkKLSAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21f
Y29tcGlsZUluZGV4XSk7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUo
Tm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9O
b2RlKQotICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgCi0gICAgICAgIGlmICht
X2dyYXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgbm9kZUlu
ZGV4ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgIAotICAg
ICAgICByZXR1cm4gbm9kZUluZGV4OwotICAgIH0KLSAgICBOb2RlSW5kZXggY2Fub25pY2FsaXpl
KE5vZGVVc2Ugbm9kZVVzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobm9k
ZVVzZS5pbmRleFVuY2hlY2tlZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ29tcHV0ZXMgd2hl
cmUgdGhlIHNlYXJjaCBmb3IgYSBjYW5kaWRhdGUgZm9yIENTRSBzaG91bGQgc3RhcnQuIERvbid0
IGNhbGwKLSAgICAvLyB0aGlzIGRpcmVjdGx5OyBjYWxsIHN0YXJ0SW5kZXgoKSBpbnN0ZWFkIGFz
IGl0IGRvZXMgbG9nZ2luZyBpbiBkZWJ1ZyBtb2RlLgotICAgIE5vZGVJbmRleCBjb21wdXRlU3Rh
cnRJbmRleEZvckNoaWxkcmVuKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCi0gICAgewotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBsaW1pdCA9IDMwMDsKLSAgICAgICAgCi0gICAgICAgIE5vZGVJbmRl
eCBzdGFydCA9IG1fc3RhcnQ7Ci0gICAgICAgIGlmIChtX2NvbXBpbGVJbmRleCAtIHN0YXJ0ID4g
bGltaXQpCi0gICAgICAgICAgICBzdGFydCA9IG1fY29tcGlsZUluZGV4IC0gbGltaXQ7Ci0gICAg
ICAgIAotICAgICAgICBBU1NFUlQoc3RhcnQgPj0gbV9zdGFydCk7Ci0gICAgICAgIAotICAgICAg
ICBOb2RlSW5kZXggY2hpbGQgPSBjYW5vbmljYWxpemUoY2hpbGQxKTsKLSAgICAgICAgaWYgKGNo
aWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGFydDsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzdGFydCA8IGNoaWxkKQotICAgICAgICAgICAgc3RhcnQgPSBjaGlsZDsKLSAgICAg
ICAgCi0gICAgICAgIGNoaWxkID0gY2Fub25pY2FsaXplKGNoaWxkMik7Ci0gICAgICAgIGlmIChj
aGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RhcnQ7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc3RhcnQgPCBjaGlsZCkKLSAgICAgICAgICAgIHN0YXJ0ID0gY2hpbGQ7Ci0gICAg
ICAgIAotICAgICAgICBjaGlsZCA9IGNhbm9uaWNhbGl6ZShjaGlsZDMpOwotICAgICAgICBpZiAo
Y2hpbGQgPT0gTm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0YXJ0IDwgY2hpbGQpCi0gICAgICAgICAgICBzdGFydCA9IGNoaWxkOwotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgIH0KLSAgICAKLSAgICBOb2RlSW5kZXgg
c3RhcnRJbmRleEZvckNoaWxkcmVuKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRl
eCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCi0gICAgewotICAg
ICAgICBOb2RlSW5kZXggcmVzdWx0ID0gY29tcHV0ZVN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgbG9va2JhY2sgJXU6ICIsIHJlc3VsdCk7Ci0jZW5k
aWYKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IHN0
YXJ0SW5kZXgoKQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdOwotICAgICAgICByZXR1cm4gc3RhcnRJbmRleEZvckNoaWxkcmVuKAotICAgICAgICAg
ICAgbm9kZS5jaGlsZDEoKS5pbmRleFVuY2hlY2tlZCgpLAotICAgICAgICAgICAgbm9kZS5jaGls
ZDIoKS5pbmRleFVuY2hlY2tlZCgpLAotICAgICAgICAgICAgbm9kZS5jaGlsZDMoKS5pbmRleFVu
Y2hlY2tlZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IGVuZEluZGV4Rm9yUHVyZUNT
RSgpCi0gICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0ID0gbV9sYXN0U2VlblttX2dyYXBo
W21fY29tcGlsZUluZGV4XS5vcCAmIE5vZGVJZE1hc2tdOwotICAgICAgICBpZiAocmVzdWx0ID09
IE5vTm9kZSkKLSAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJlc3VsdCsrOwotICAgICAgICBBU1NFUlQocmVzdWx0IDw9IG1fY29tcGlsZUluZGV4KTsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2coIiAgbGltaXQgJXU6ICIsIHJlc3VsdCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IHB1cmVDU0UoTm9kZSYgbm9kZSkKLSAgICB7
Ci0gICAgICAgIE5vZGVJbmRleCBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgIE5vZGVJbmRleCBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDMoKSk7
Ci0gICAgICAgIAotICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4KCk7Ci0gICAg
ICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGluZGV4LS0g
PiBzdGFydDspIHsKLSAgICAgICAgICAgIE5vZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OwotICAgICAgICAgICAgaWYgKG5vZGUub3AgIT0gb3RoZXJOb2RlLm9wKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5hcml0aE5v
ZGVGbGFnc0ZvckNvbXBhcmUoKSAhPSBvdGhlck5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJl
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQxKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNo
aWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBpZiAo
b3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAg
ICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQyKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXpl
KG90aGVyTm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05v
ZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgaWYgKG90aGVy
Q2hpbGQgIT0gY2hpbGQzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBu
b2RlKQotICAgIHsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVy
UHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpOwotICAgIH0KLSAg
ICAKLSAgICBib29sIGxvZ2ljYWxOb3RJc1B1cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpOwotICAgICAgICByZXR1cm4gaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSB8
fCAhcHJlZGljdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBu
b2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAmJiAoKG5vZGUub3AgPT0gUHV0QnlWYWwg
fHwgbm9kZS5vcCA9PSBQdXRCeVZhbEFsaWFzKQotICAgICAgICAgICAgICAgID8gaXNBY3Rpb25h
YmxlTXV0YWJsZUFycmF5UHJlZGljdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKSkKLSAgICAgICAgICAgICAgICA6IGlzQWN0aW9uYWJsZUFycmF5UHJlZGljdGlvbihtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkpOwotICAgIH0KLSAgICAKLSAgICBib29s
IGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlmIChub2RlLm9wICYgTm9kZUNs
b2JiZXJzV29ybGQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobm9k
ZS5vcCAmIE5vZGVNaWdodENsb2JiZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAg
Y2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBj
YXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAg
ICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVy
aWNhbChub2RlKTsKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgICAgICAgICAgcmV0dXJu
ICFsb2dpY2FsTm90SXNQdXJlKG5vZGUpOwotICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAg
ICAgICAgcmV0dXJuICFieVZhbElzUHVyZShub2RlKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8v
IElmIGJ5IHNvbWUgb2RkaXR5IHdlIGhpdCB0aGlzIGNhc2UgaW4gcmVsZWFzZSBidWlsZCBpdCdz
IHNhZmVyIHRvIGhhdmUgQ1NFIGFzc3VtZSB0aGUgd29yc3QuCi0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgTm9kZUluZGV4IGltcHVyZUNTRShOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMSA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMiA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMyA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMygpKTsKLSAgICAgICAg
Ci0gICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKLSAgICAgICAgZm9yIChO
b2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgewotICAg
ICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBp
ZiAobm9kZS5vcCA9PSBvdGhlck5vZGUub3AKLSAgICAgICAgICAgICAgICAmJiBub2RlLmFyaXRo
Tm9kZUZsYWdzRm9yQ29tcGFyZSgpID09IG90aGVyTm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBh
cmUoKSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2Fs
aXplKG90aGVyTm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQg
PT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAg
ICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gY2hpbGQxKSB7Ci0gICAgICAgICAgICAgICAgICAgIG90
aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBj
aGlsZDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxp
emUob3RoZXJOb2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhl
ckNoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBjaGlsZDMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBnbG9i
YWxWYXJMb2FkRWxpbWluYXRpb24odW5zaWduZWQgdmFyTnVtYmVyLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRl
eEZvckNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxl
SW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW2luZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkg
PT0gdmFyTnVtYmVyICYmIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3Jp
Z2luKSA9PSBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgot
ICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGlu
ZGV4KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Tm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRp
b24oTm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMikKLSAgICB7Ci0gICAgICAgIE5v
ZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEsIGNoaWxkMik7Ci0g
ICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBz
dGFydDspIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAg
ICAgICAgICAgICAgICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNo
aWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxk
MikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5
VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKCFieVZhbElzUHVyZShub2RlKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5j
aGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9u
aWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMo
KS5pbmRleCgpOwotICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYXNzdW1lIHRoYXQgdGhlIFB1
dEJ5VmFsIHdpbGwgY2xvYmJlciB0aGUgbG9jYXRpb24gd2UncmUgZ2V0dGluZyBmcm9tLgotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVyOyBpZiB3ZSBrbm93IHRoYXQg
dGhlIFB1dEJ5VmFsIGlzIGFjY2Vzc2luZyBhbiBhcnJheSBvZiBhCi0gICAgICAgICAgICAgICAg
Ly8gZGlmZmVyZW50IHR5cGUgdGhhbiB0aGUgR2V0QnlWYWwsIHRoZW4gd2Uga25vdyB0aGF0IHRo
ZXkgd29uJ3QgY2xvYmJlciBlYWNoIG90aGVyLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7Ci0gICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgIGNhc2UgUHV0
QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgLy8gR2V0QnlWYWwgY3VycmVudGx5IGFsd2F5cyBz
cGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4KLSAgICAgICAgICAgICAgICAvLyBhcnJh
eSB3aXRoIGFuIGludGVnZXIgaW5kZXgsIHdoaWNoIG1lYW5zIHRoYXQgaXQncyBpbXBvc3NpYmxl
Ci0gICAgICAgICAgICAgICAgLy8gZm9yIGEgc3RydWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBw
cm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAotICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZh
bC4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgot
ICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3Rp
bmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAg
ICB9Ci0KLSAgICBib29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihKU0Z1bmN0aW9uKiBmdW5j
dGlvbiwgTm9kZUluZGV4IGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBzdGFydCA9
IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOwotICAgICAgICBmb3IgKE5vZGVJbmRleCBp
bmRleCA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpbmRleC0tID4gc3RhcnQ7KSB7Ci0gICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5v
cCA9PSBDaGVja0Z1bmN0aW9uICYmIG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuZnVu
Y3Rpb24oKSA9PSBmdW5jdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBjaGVja1N0cnVj
dHVyZUxvYWRFbGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9k
ZUluZGV4IGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5k
ZXhGb3JDaGlsZHJlbihjaGlsZDEpOwotICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1f
Y29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7Ci0gICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hp
bGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5pc1N1
cGVyc2V0T2Yobm9kZS5zdHJ1Y3R1cmVTZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlu
cyhub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNl
dC5jb250YWlucyhub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1
cmUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0Ogot
ICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgYSBwcm9wZXJ0eSBjYW5ub3QgY2hhbmdlIHRoZSBz
dHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgot
ICAgICAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJy
YXkgd2l0aCBhbgotICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0
J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChp
bmRleCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQxKQotICAgIHsKLSAgICAg
ICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7Ci0gICAg
ICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFy
dDspIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAg
ICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0g
ICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBjYW5ub3QgY2hhbmdlIHRo
ZSBvdXRjb21lIG9mIGEgcHJvcGVydHkgZ2V0LgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0
J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50
ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0
dXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICBOb2RlSW5kZXggZ2V0UHJv
cGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEpCi0gICAgewotICAg
ICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxKTsKLSAg
ICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0
YXJ0OykgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgICAgICAgICBjYXNlIEdldFByb3BlcnR5U3Rv
cmFnZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGUgc3Ry
dWN0dXJlIG9yIHB1dHRpbmcgdG8gdGhlIHN0b3JhZ2UgY2Fubm90Ci0gICAgICAgICAgICAgICAg
Ly8gY2hhbmdlIHRoZSBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChieVZhbElz
UHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxh
dGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAg
ICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1
c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgfQotCi0gICAgTm9kZUluZGV4
IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxk
MSwgYm9vbCBoYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgTm9kZUlu
ZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7Ci0gICAgICAgIGZvciAo
Tm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCkgewotICAgICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OiB7Ci0gICAgICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBiYXNlUHJlZGljdGlvbiA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIGJvb2wgbm9k
ZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPSAhKCEoYmFzZVByZWRpY3Rpb24gJiBQcmVkaWN0
SW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDEoKSA9PSBjaGlsZDEgJiYgaGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9PSBub2RlSGFzSW50
ZWdlckluZGV4UHJlZGljdGlvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAg
ICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdl
IGNhbm5vdAotICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcHJvcGVydHkgc3RvcmFnZSBw
b2ludGVyLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIC8vIFB1dEJ5VmFsQWxp
YXMgY2FuJ3QgY2hhbmdlIHRoZSBpbmRleGVkIHN0b3JhZ2UgcG9pbnRlcgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoK
LSAgICAgICAgICAgICAgICBpZiAoaXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlv
bihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgJiYgYnlWYWxJc1B1cmUobm9k
ZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNsb2Ji
ZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBOb05vZGU7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBnZXRTY29wZUNoYWluTG9h
ZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGRlcHRoKQotICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHN0
YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAoTm9kZUluZGV4IGlu
ZGV4ID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGluZGV4LS0gPiBzdGFydDspIHsKLSAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9w
ID09IEdldFNjb3BlQ2hhaW4KLSAgICAgICAgICAgICAgICAmJiBub2RlLnNjb3BlQ2hhaW5EZXB0
aCgpID09IGRlcHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBlcmZvcm1TdWJz
dGl0dXRpb24oTm9kZVVzZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKLSAgICB7Ci0gICAg
ICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCi0gICAgICAg
IGlmICghY2hpbGQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAvLyBD
aGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5vZGVJbmRleCByZXBs
YWNlbWVudCA9IG1fcmVwbGFjZW1lbnRzW2NoaWxkLmluZGV4KCldOwotICAgICAgICBpZiAocmVw
bGFjZW1lbnQgPT0gTm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAg
ICAgY2hpbGQuc2V0SW5kZXgocmVwbGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhl
cmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1l
bnQgZG9lcyBub3QKLSAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NF
UlQobV9yZXBsYWNlbWVudHNbY2hpbGQuaW5kZXgoKV0gPT0gTm9Ob2RlKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChhZGRSZWYpCi0gICAgICAgICAgICBtX2dyYXBoW2NoaWxkXS5yZWYoKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzZXRSZXBsYWNlbWVudChOb2RlSW5kZXggcmVwbGFjZW1lbnQp
Ci0gICAgewotICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZv
cm0gcmVwbGFjZW1lbnRzIGlmIHRoZSBwcmVkaWN0aW9ucyBkb24ndAotICAgICAgICAvLyBhZ3Jl
ZS4KLSAgICAgICAgaWYgKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSAhPSBt
X2dyYXBoW3JlcGxhY2VtZW50XS5wcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgZGF0YUxvZygiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2NvbXBpbGVJbmRleCwgcmVw
bGFjZW1lbnQpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIG5vZGUub3AgPSBQaGFudG9tOwotICAgICAgICBu
b2RlLnNldFJlZkNvdW50KDEpOwotICAgICAgICAKLSAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3
ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCi0gICAgICAgIG1f
cmVwbGFjZW1lbnRzW21fY29tcGlsZUluZGV4XSA9IHJlcGxhY2VtZW50OwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGVsaW1pbmF0ZSgpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcgQCV1IiwgbV9j
b21waWxlSW5kZXgpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0g
MSk7Ci0gICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5lcmF0ZSgpKTsKLSAgICAgICAgbm9kZS5v
cCA9IFBoYW50b207Ci0gICAgfQotICAgIAotICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSYg
bm9kZSkKLSAgICB7Ci0gICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLnNob3VsZEdl
bmVyYXRlKCk7Ci0KLSAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgewotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsr
KQotICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91
bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRy
ZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb24obm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNob3VsZEdlbmVyYXRlKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgICAgIGRhdGFMb2coIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21f
Y29tcGlsZUluZGV4XS5vcCksIG1fY29tcGlsZUluZGV4KTsKLSNlbmRpZgotICAgICAgICAKLSAg
ICAgICAgLy8gTk9URTogdGhlcmUgYXJlIHNvbWUgbm9kZXMgdGhhdCB3ZSBkZWxpYmVyYXRlbHkg
ZG9uJ3QgQ1NFIGV2ZW4gdGhvdWdoIHdlCi0gICAgICAgIC8vIHByb2JhYmx5IGNvdWxkLCBsaWtl
IFN0ckNhdCBhbmQgVG9QcmltaXRpdmUuIFRoYXQncyBiZWNhdXNlIHRoZXJlIGlzIG5vCi0gICAg
ICAgIC8vIGV2aWRlbmNlIHRoYXQgZG9pbmcgQ1NFIG9uIHRoZXNlIG5vZGVzIHdvdWxkIHJlc3Vs
dCBpbiBhIHBlcmZvcm1hbmNlCi0gICAgICAgIC8vIHByb2dyZXNzaW9uLiBIZW5jZSBjb25zaWRl
cmluZyB0aGVzZSBub2RlcyBpbiBDU0Ugd291bGQganVzdCBtZWFuIHRoYXQgdGhpcwotICAgICAg
ICAvLyBjb2RlIGRvZXMgbW9yZSB3b3JrIHdpdGggbm8gd2luLiBPZiBjb3Vyc2UsIHdlIG1heSB3
YW50IHRvIHJlY29uc2lkZXIgdGhpcywKLSAgICAgICAgLy8gc2luY2UgU3RyQ2F0IGlzIHRyaXZp
YWxseSBDU0UtYWJsZS4gSXQncyBub3QgdHJpdmlhbGx5IGRvYWJsZSBmb3IKLSAgICAgICAgLy8g
VG9QcmltaXRpdmUsIGJ1dCB3ZSBjb3VsZCBjaGFuZ2UgdGhhdCB3aXRoIHNvbWUgc3BlY3VsYXRp
b25zIGlmIHdlIHJlYWxseQotICAgICAgICAvLyBuZWVkZWQgdG8uCi0gICAgICAgIAotICAgICAg
ICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgCi0gICAgICAgIC8vIEhhbmRsZSB0aGUgcHVy
ZSBub2Rlcy4gVGhlc2Ugbm9kZXMgbmV2ZXIgaGF2ZSBhbnkgc2lkZS1lZmZlY3RzLgotICAgICAg
ICBjYXNlIEJpdEFuZDoKLSAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6
Ci0gICAgICAgIGNhc2UgQml0UlNoaWZ0OgotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAg
ICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBjYXNl
IEFyaXRoU3ViOgotICAgICAgICBjYXNlIEFyaXRoTXVsOgotICAgICAgICBjYXNlIEFyaXRoTW9k
OgotICAgICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICBjYXNlIEFyaXRoQWJzOgotICAgICAg
ICBjYXNlIEFyaXRoTWluOgotICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICBjYXNlIEFy
aXRoU3FydDoKLSAgICAgICAgY2FzZSBHZXRCeXRlQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2Ug
R2V0SW50OEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDE2QXJyYXlMZW5ndGg6Ci0g
ICAgICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50OEFy
cmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoOgotICAg
ICAgICBjYXNlIEdldFVpbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQzMkFy
cmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEZsb2F0MzJBcnJheUxlbmd0aDoKLSAgICAgICAg
Y2FzZSBHZXRGbG9hdDY0QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0Q2FsbGVlOgotICAg
ICAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0g
ICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KHB1cmVDU0Uobm9kZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGltcHVy
ZUNTRShub2RlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEdldFNjb3BlQ2hhaW46Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRTY29wZUNo
YWluTG9hZEVsaW1pbmF0aW9uKG5vZGUuc2NvcGVDaGFpbkRlcHRoKCkpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIEhhbmRsZSBub2RlcyB0aGF0IGFyZSBjb25kaXRpb25hbGx5
IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCi0gICAgICAgIC8vIGJlIENTRSdkLCBzbyBs
b25nIGFzIHRoZSBwcmVkaWN0aW9uIGlzIHRoZSBvbmUgd2Ugd2FudC4KLSAgICAgICAgY2FzZSBW
YWx1ZUFkZDoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJl
TGVzc0VxOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVxOiB7Ci0gICAgICAgICAgICBpZiAo
aXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
cmVwbGFjZW1lbnRJbmRleCA9IHB1cmVDU0Uobm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJl
cGxhY2VtZW50SW5kZXggIT0gTm9Ob2RlICYmIGlzUHJlZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhb
cmVwbGFjZW1lbnRJbmRleF0pKQotICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChy
ZXBsYWNlbWVudEluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAg
ICAgICBpZiAobG9naWNhbE5vdElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBp
ZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbG9naWNhbE5vdElzUHVyZShtX2dyYXBo
W3JlcGxhY2VtZW50SW5kZXhdKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
cmVwbGFjZW1lbnRJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIGhlYXAgYWNj
ZXNzZXMuIFRoZXNlIGFyZSBub3QgcXVpdGUgcHVyZSwgYnV0IHdlIGNhbiBzdGlsbAotICAgICAg
ICAvLyBvcHRpbWl6ZSB0aGVtIHByb3ZpZGVkIHRoYXQgc29tZSBzdWJ0bGUgY29uZGl0aW9ucyBh
cmUgbWV0LgotICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2RlLnZhck51bWJlcigpLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICBp
ZiAoYnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0
QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigp
LmluZGV4KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlW
YWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmlu
ZGV4KCkpICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBub2RlLm9wID0gUHV0QnlWYWxBbGlh
czsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24o
bm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKLSAgICAgICAgICAg
ICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2hl
Y2tGdW5jdGlvbjoKLSAgICAgICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24obm9k
ZS5mdW5jdGlvbigpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQotICAgICAgICAgICAgICAgIGVs
aW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgUHJlZGljdGVk
VHlwZSBiYXNlUHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgYm9vbCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9ICEoIShi
YXNlUHJlZGljdGlvbiAmIFByZWRpY3RJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pOwotICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5h
dGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9u
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2V0UHJv
cGVydHlTdG9yYWdlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9y
YWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gZG8gbm90aGluZy4KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2xhc3RTZWVuW25vZGUub3Ag
JiBOb2RlSWRNYXNrXSA9IG1fY29tcGlsZUluZGV4OwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSNlbmRpZgotICAgIH0K
LSAgICAKLSAgICB2b2lkIHBlcmZvcm1CbG9ja0NTRShCYXNpY0Jsb2NrJiBibG9jaykKLSAgICB7
Ci0gICAgICAgIG1fc3RhcnQgPSBibG9jay5iZWdpbjsKLSAgICAgICAgTm9kZUluZGV4IGVuZCA9
IGJsb2NrLmVuZDsKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IG1fc3RhcnQ7IG1fY29t
cGlsZUluZGV4IDwgZW5kOyArK21fY29tcGlsZUluZGV4KQotICAgICAgICAgICAgcGVyZm9ybU5v
ZGVDU0UobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGxv
Y2FsQ1NFKCkKLSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICBkYXRhTG9nKCJQZXJmb3JtaW5nIGxvY2FsIENTRToiKTsKLSNlbmRpZgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9jaykKLSAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRSgqbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja10pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFsbG9jYXRlVmlydHVhbFJlZ2lz
dGVycygpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0
YUxvZygiUHJlc2VydmVkIHZhcnM6ICIpOwotICAgICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFy
cy5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7Ci0jZW5kaWYK
LSAgICAgICAgU2NvcmVCb2FyZCBzY29yZUJvYXJkKG1fZ3JhcGgsIG1fZ3JhcGgubV9wcmVzZXJ2
ZWRWYXJzKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzID0gbV9ncmFw
aC5tX2Jsb2Nrcy5sYXN0KCktPmVuZDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplRXhjbHVkaW5nUGhpTm9kZXM7ICsraSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbaV07Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRl
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8g
R2V0TG9jYWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBpbiB0aGUgZ3JhcGgsIHJl
ZmVyZW5jaW5nCi0gICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3IgYmxvY2tzLgotICAg
ICAgICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAvLyBG
aXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhl
bgotICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlz
IG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKLSAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0
IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAgICAgICAgICAgICAgIC8v
IFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2Rl
LgotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgp
OyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGls
ZElkeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAg
ICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgbm9kZS5zZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcmVCb2FyZC5hbGxvY2F0ZSgpKTsKLSAgICAgICAgICAgIC8vICdtdXN0R2VuZXJh
dGUnIG5vZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5IGVsZXZhdGVkLAotICAg
ICAgICAgICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgICAgICAg
ICBpZiAobm9kZS5tdXN0R2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVz
ZShpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICdtX251bUNhbGxlZVJlZ2lzdGVycycgaXMg
dGhlIG51bWJlciBvZiBsb2NhbHMgYW5kIHRlbXBvcmFyaWVzIGFsbG9jYXRlZAotICAgICAgICAv
LyBmb3IgdGhlIGZ1bmN0aW9uIChhbmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBTaW5jZSB3ZSBw
ZXJmb3JtIGEgbmV3IGFuZAotICAgICAgICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1w
b3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJlZC4KLSAgICAgICAgdW5z
aWduZWQgY2FsbGVlUmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5oaWdoV2F0ZXJtYXJrKCkgKyBtX2dy
YXBoLm1fcGFyYW1ldGVyU2xvdHM7Ci0gICAgICAgIGlmICgodW5zaWduZWQpbV9jb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJzKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwotI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiTnVtIGNhbGxlZSByZWdp
c3RlcnM6ICV1XG4iLCBjYWxsZWVSZWdpc3RlcnMpOwotI2VuZGlmCi0gICAgfQotICAgIAotICAg
IHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEFic3RyYWN0U3RhdGUmIHN0YXRlLCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgpCi0gICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghYmxvY2stPmNmYVNob3VsZFJl
dmlzaXQpCi0gICAgICAgICAgICByZXR1cm47Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICBCbG9jayAjJXUgKGJjIyV1KTpcbiIs
IGJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKLSNlbmRpZgotICAgICAgICBzdGF0
ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgICAgaGVhZCB2YXJzOiAiKTsKLSAgICAg
ICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIFdURjo6ZGF0YUZpbGUoKSk7Ci0g
ICAgICAgIGRhdGFMb2coIlxuIik7Ci0jZW5kaWYKLSAgICAgICAgZm9yIChOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2stPmJlZ2luOyBub2RlSW5kZXggPCBibG9jay0+ZW5kOyArK25vZGVJbmRl
eCkgewotICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUo
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgICAlcyBAJXU6ICIsIEdy
YXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4KTsKLSAgICAgICAg
ICAgIHN0YXRlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2coIlxu
Iik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmICghc3RhdGUuZXhlY3V0ZShub2RlSW5kZXgpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICAgICB0YWlsIHJlZ3M6ICIp
OwotICAgICAgICBzdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2co
IlxuIik7Ci0jZW5kaWYKLSAgICAgICAgbV9jaGFuZ2VkIHw9IHN0YXRlLmVuZEJhc2ljQmxvY2so
QWJzdHJhY3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nlc3NvcnMpOwotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgICAgdGFpbCB2YXJzOiAi
KTsKLSAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdFRhaWwsIFdURjo6ZGF0YUZp
bGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBwZXJmb3JtRm9yd2FyZENGQShBYnN0cmFjdFN0YXRlJiBzdGF0ZSkKLSAgICB7Ci0jaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCJD
RkEgWyV1XVxuIiwgKyttX2NvdW50KTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9jaykKLSAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NGQShzdGF0ZSwgYmxvY2spOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGdsb2JhbENGQSgpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgbV9jb3VudCA9IDA7Ci0jZW5kaWYKLSAgICAg
ICAgCi0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHBzZXVkby13b3JrbGlzdC1iYXNlZCBm
b3J3YXJkIENGQSwgZXhjZXB0IHRoYXQgdGhlIHZpc2l0IG9yZGVyCi0gICAgICAgIC8vIG9mIGJs
b2NrcyBpcyB0aGUgYnl0ZWNvZGUgcHJvZ3JhbSBvcmRlciAod2hpY2ggaXMgbmVhcmx5IHRvcG9s
b2dpY2FsKSwgYW5kCi0gICAgICAgIC8vIGluc3RlYWQgb2YgYSB3b3JrbGlzdCB3ZSBqdXN0IHdh
bGsgYWxsIGJhc2ljIGJsb2NrcyBjaGVja2luZyBpZiBjZmFTaG91bGRSZXZpc2l0Ci0gICAgICAg
IC8vIGlzIHNldCB0byB0cnVlLiBUaGlzIGlzIGxpa2VseSB0byBiYWxhbmNlIHRoZSBlZmZpY2ll
bmN5IHByb3BlcnRpZXMgb2YgYm90aAotICAgICAgICAvLyB3b3JrbGlzdC1iYXNlZCBhbmQgZm9y
d2FyZCBmaXhwb2ludC1iYXNlZCBhcHByb2FjaGVzLiBMaWtlIGEgd29ya2xpc3QtYmFzZWQKLSAg
ICAgICAgLy8gYXBwcm9hY2gsIGl0IHdvbid0IHZpc2l0IGNvZGUgaWYgaXQncyBtZWFuaW5nbGVz
cyB0byBkbyBzbyAobm90aGluZyBjaGFuZ2VkIGF0Ci0gICAgICAgIC8vIHRoZSBoZWFkIG9mIHRo
ZSBibG9jayBvciB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgbm90IGJlZW4gdmlzaXRlZCkuIExpa2Ug
YSBmb3J3YXJkCi0gICAgICAgIC8vIGZpeHBvaW50LWJhc2VkIGFwcHJvYWNoLCBpdCBoYXMgYSBo
aWdoIHByb2JhYmlsaXR5IG9mIG9ubHkgdmlzaXRpbmcgYSBibG9jawotICAgICAgICAvLyBhZnRl
ciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5IGxvb3BzIHdpbGwgY2F1
c2UgdGhpcyBhbmFseXNpcyB0bwotICAgICAgICAvLyByZXZpc2l0IGJsb2NrcywgYW5kIHRoZSBh
bW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9vcCBkZXB0aC4KLSAgICAg
ICAgCi0gICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUobV9ncmFwaCk7Ci0gICAgICAg
IAotICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fZ3JhcGgpOwotICAgICAgICAKLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwZXJm
b3JtRm9yd2FyZENGQShzdGF0ZSk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7Ci0gICAg
fQotICAgIAotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxE
YXRhOwotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0gICAgQ29kZUJsb2NrKiBtX3Byb2Zp
bGVkQmxvY2s7Ci0gICAgCi0gICAgTm9kZUluZGV4IG1fc3RhcnQ7Ci0gICAgTm9kZUluZGV4IG1f
Y29tcGlsZUluZGV4OwotICAgIAotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICB1bnNpZ25lZCBtX2NvdW50OwotI2VuZGlmCi0gICAgCi0gICAgYm9vbCBtX2No
YW5nZWQ7Ci0KLSAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV9yZXBsYWNlbWVudHM7Ci0gICAg
Rml4ZWRBcnJheTxOb2RlSW5kZXgsIExhc3ROb2RlSWQ+IG1fbGFzdFNlZW47Ci19OwotCi12b2lk
IHByb3BhZ2F0ZShHcmFwaCYgZ3JhcGgpCi17Ci0gICAgUHJvcGFnYXRvciBwcm9wYWdhdG9yKGdy
YXBoKTsKLSAgICBwcm9wYWdhdG9yLmZpeHBvaW50KCk7Ci0gICAgCi19Ci0KLX0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuaAkocmV2aXNpb24gMTA4MTU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIERGR1Byb3BhZ2F0b3JfaAotI2RlZmluZSBERkdQcm9wYWdhdG9y
X2gKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBKU0dsb2JhbERhdGE7
Ci0KLW5hbWVzcGFjZSBERkcgewotCi0vLyBQcm9wYWdhdGUgZHluYW1pYyBwcmVkaWN0aW9ucyBm
cm9tIHZhbHVlIHNvdXJjZXMgdG8gdmFyaWFibGVzLgotdm9pZCBwcm9wYWdhdGUoR3JhcGgmKTsK
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2U6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgVmlydHVhbFJlZ2lzdGVyQWxsb2Nh
dGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInZpcnR1YWwg
cmVnaXN0ZXIgYWxsb2NhdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigp
CisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygi
UHJlc2VydmVkIHZhcnM6ICIpOworICAgICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFycy5kdW1w
KFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisjZW5kaWYKKyAgICAg
ICAgU2NvcmVCb2FyZCBzY29yZUJvYXJkKG1fZ3JhcGgsIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJz
KTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzID0gbV9ncmFwaC5tX2Js
b2Nrcy5sYXN0KCktPmVuZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhj
bHVkaW5nUGhpTm9kZXM7ICsraSkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aV07CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0TG9j
YWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBpbiB0aGUgZ3JhcGgsIHJlZmVyZW5j
aW5nCisgICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3IgYmxvY2tzLgorICAgICAgICAg
ICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCwg
Y2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgorICAg
ICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUu
IFdlIGRvIHNvIGluIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEg
Y2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQorICAgICAgICAgICAgICAgIC8vIFZpcnR1
YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2RlLgorICAg
ICAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsr
KQorICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbm9kZS5zZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcmVCb2FyZC5hbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIC8vICdtdXN0R2VuZXJhdGUnIG5v
ZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5IGVsZXZhdGVkLAorICAgICAgICAg
ICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCisgICAgICAgICAgICBpZiAo
bm9kZS5tdXN0R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShpKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vICdtX251bUNhbGxlZVJlZ2lzdGVycycgaXMgdGhlIG51
bWJlciBvZiBsb2NhbHMgYW5kIHRlbXBvcmFyaWVzIGFsbG9jYXRlZAorICAgICAgICAvLyBmb3Ig
dGhlIGZ1bmN0aW9uIChhbmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBTaW5jZSB3ZSBwZXJmb3Jt
IGEgbmV3IGFuZAorICAgICAgICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3Jhcmll
cywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJlZC4KKyAgICAgICAgdW5zaWduZWQg
Y2FsbGVlUmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5oaWdoV2F0ZXJtYXJrKCkgKyBtX2dyYXBoLm1f
cGFyYW1ldGVyU2xvdHM7CisgICAgICAgIGlmICgodW5zaWduZWQpY29kZUJsb2NrKCktPm1fbnVt
Q2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJzKQorICAgICAgICAgICAgY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOworI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiTnVtIGNhbGxlZSByZWdpc3RlcnM6
ICV1XG4iLCBjYWxsZWVSZWdpc3RlcnMpOworI2VuZGlmCisgICAgfQorfTsKKwordm9pZCBwZXJm
b3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgcnVuUGhh
c2U8VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZV9oCisjZGVm
aW5lIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwor
Ly8gUHJpb3IgdG8gcnVubmluZyB0aGlzIHBoYXNlLCB3ZSBoYXZlIG5vIGlkZWEgd2hlcmUgaW4g
dGhlIGNhbGwgZnJhbWUgbm9kZXMKKy8vIHdpbGwgaGF2ZSB0aGVpciB2YWx1ZXMgc3BpbGxlZC4g
VGhpcyBwaGFzZSBmaXhlcyB0aGF0IGJ5IGdpdmluZyBlYWNoIG5vZGUKKy8vIGEgc3BpbGwgc2xv
dC4gVGhlIHNwaWxsIHNsb3QgaW5kZXggKGkuZS4gdGhlIHZpcnR1YWwgcmVnaXN0ZXIpIGlzIGFs
c28gdXNlZAorLy8gZm9yIGxvb2stdXAgdGFibGVzIGZvciB0aGUgbGluZWFyIHNjYW4gcmVnaXN0
ZXIgYWxsb2NhdG9yIHRoYXQgdGhlIGJhY2tlbmQKKy8vIHVzZXMuCisKK3ZvaWQgcGVyZm9ybVZp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2VfaAorCg==
</data>
<flag name="commit-queue"
          id="129903"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127699</attachid>
            <date>2012-02-18 00:48:53 -0800</date>
            <delta_ts>2012-02-18 10:47:15 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>phases_patch_2.diff</filename>
            <type>text/plain</type>
            <size>179065</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA4MTU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEyLTAyLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHUHJvcGFnYXRvci5jcHAgaGFzIHRvbyBtYW55IHRoaW5ncworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg5NTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIHRoZSBub3Rpb24gb2Yg
YSBERkc6OlBoYXNlLiBSZW1vdmVkIERGRzo6UHJvcGFnYXRvciwgYW5kIHRvb2sgaXRzCisgICAg
ICAgIHZhcmlvdXMgdGhpbmdzIGFuZCBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGZpbGVzLiBUaGVz
ZSBuZXcgcGhhc2VzIGZvbGxvdworICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gIkRGRzxu
YW1lPlBoYXNlIiB3aGVyZSA8bmFtZT4gaXMgYSBub3VuLiBUaGV5IGFyZQorICAgICAgICBjYWxs
ZWQgdmlhIGZ1bmN0aW9ucyBvZiB0aGUgZm9ybSAicGVyZm9ybTxuYW1lPiIuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFz
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3Jt
QXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2UpOgorICAgICAgICAqIGRmZy9ERkdBcml0aE5vZGVGbGFn
c0luZmVyZW5jZVBoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcv
REZHQ0ZBUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6cGVyZm9ybUNGQSk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmg6IEFkZGVkLgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNTRSk6CisgICAgICAgICogZGZn
L0RGR0NTRVBoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
RHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
UGhhc2U6OmJlZ2luUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlBoYXNlOjplbmRQaGFzZSk6
CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKFBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6UGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OlBoYXNlOjp+UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlBoYXNlOjpnbG9i
YWxEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6Y29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpQaGFzZTo6cHJvZmlsZWRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6UGhh
c2U6OmJlZ2luUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlBoYXNlOjplbmRQaGFzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6cnVuUGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZH
UHJvcGFnYXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24pOgorICAgICAgICAqIGRmZy9E
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChERkcp
OgorCiAyMDEyLTAyLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgREZHOjpHcmFwaCBzaG91bGQgaGF2ZSByZWZlcmVuY2VzIHRvIEpTR2xvYmFsRGF0YSwgdGhl
IENvZGVCbG9jayBiZWluZyBjb21waWxlZCwgYW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDgxNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEwICs1NSwxMyBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCiAK
ICAgICBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKKyAgICBkZmcvREZHQXJpdGhOb2RlRmxhZ3NJ
bmZlcmVuY2VQaGFzZS5jcHAKICAgICBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAogICAgIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKICAgICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorICAg
IGRmZy9ERkdDRkFQaGFzZS5jcHAKICAgICBkZmcvREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuY3Bw
CisgICAgZGZnL0RGR0NTRVBoYXNlLmNwcAogICAgIGRmZy9ERkdEcml2ZXIuY3BwCiAgICAgZGZn
L0RGR0dyYXBoLmNwcAogICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTY4LDEyICs3MSwx
NCBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIzMl82NC5jcHAKICAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCiAgICAgZGZnL0RG
R09wZXJhdGlvbnMuY3BwCi0gICAgZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCisgICAgZGZnL0RGR1Bo
YXNlLmNwcAorICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKICAgICBk
ZmcvREZHUmVwYXRjaC5jcHAKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCiAgICAgZGZnL0RGR1RodW5rcy5jcHAKKyAgICBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmNwcAogCiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAKICAgICBoZWFwL0RG
R0NvZGVCbG9ja3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gMTA4MTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFz
ZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZl
cmVuY2VQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVs
cGVycy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oIFwKQEAgLTE0
NCw5ICsxNDYsMTMgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNl
LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRlBSSW5mby5oIFwKQEAgLTE3MCw4ICsxNzYsMTAgQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRvci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bo
YXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaCBcCkBAIC0xODMsNiArMTkxLDggQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3Mu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBo
YXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkocmV2aXNpb24gMTA4MTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTg0LDkgKzg0LDEyIEBAIFNPVVJDRVMgKz0gXAogICAgIGRl
YnVnZ2VyL0RlYnVnZ2VyLmNwcCBcCiAgICAgZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwIFwKICAg
ICBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBcCisgICAgZGZnL0RGR0FyaXRoTm9kZUZsYWdz
SW5mZXJlbmNlUGhhc2UuY3BwIFwKICAgICBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIFwKICAg
ICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBcCisgICAgZGZnL0RGR0NGQVBoYXNlLmNwcCBcCiAg
ICAgZGZnL0RGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmNwcCBcCisgICAgZGZnL0RGR0NTRVBoYXNl
LmNwcCBcCiAgICAgZGZnL0RGR0RyaXZlci5jcHAgXAogICAgIGRmZy9ERkdHcmFwaC5jcHAgXAog
ICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAgXApAQCAtOTYsMTIgKzk5LDE0IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwIFwKICAgICBkZmcvREZHT1NSRXhp
dENvbXBpbGVyNjQuY3BwIFwKICAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwIFwK
LSAgICBkZmcvREZHUHJvcGFnYXRvci5jcHAgXAorICAgIGRmZy9ERkdQaGFzZS5jcHAgXAorICAg
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgXAogICAgIGRmZy9ERkdSZXBh
dGNoLmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBcCiAgICAgZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAg
XAogICAgIGRmZy9ERkdUaHVua3MuY3BwIFwKKyAgICBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmNwcCBcCiAgICAgaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5jcHAgXAogICAg
IGludGVycHJldGVyL0NhbGxGcmFtZS5jcHAgXAogICAgIGludGVycHJldGVyL0ludGVycHJldGVy
LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA4MTU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw5ICsxMjYsNyBAQAogCQkwRkM4MTUw
QjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2
MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CiAJCTBGQzgxNTE1MTQwNTExOUIw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0
cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYwMENG
QTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07Ci0JCTBGRDNDODI1MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9y
LmNwcCAqLzsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKLQkJMEZEM0M4MjcxNDExNUQ0
RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQx
MTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKIAkJMEZENTJBQUUxNDMwMzVBMDAw
MjZEQzlGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZENTJBQUMxNDMwMzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTIxMTQx
NzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5jcHAgKi87IH07CkBAIC0xNDMsNiArMTQxLDE4IEBACiAJCTBGRDgyRjRC
MTQyODA2QTEwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9w
dGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDgg
LyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRkZDOTU1MTRFRjkwOUEwMEM3MjUzMiAvKiBERkdB
cml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZDOTQ5MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdBcml0
aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmNwcCAqLzsgfTsKKwkJMEZGRkM5NTYxNEVGOTA5QzAw
QzcyNTMyIC8qIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZDOTRBMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMy
IC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRkZDOTRCMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgKi87
IH07CisJCTBGRkZDOTU4MTRFRjkwQTIwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NEMxNEVGOTA5NTAw
QzcyNTMyIC8qIERGR0NGQVBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZD
OTREMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi87IH07CisJCTBGRkZDOTVB
MTRFRjkwQTkwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NT
RVBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZDOTRGMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdQaGFzZS5jcHAgKi87IH07CisJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBE
RkdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGRkM5NUQxNEVGOTBCMzAwQzcyNTMy
IC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgKi87IH07CisJCTBGRkZDOTVFMTRFRjkw
QjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NTIxNEVGOTA5NTAwQzcy
NTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGRkM5NUYxNEVGOTBCQjAwQzcyNTMy
IC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGQzk1MzE0RUY5MDk1MDBDNzI1MzIg
LyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZGRkM5
NjAxNEVGOTBCRDAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NTQx
NEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3
MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxs
b2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlF
MTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VD
MjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpT
QVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTk0NCw4ICs5NTQsNiBAQAogCQkwRkM4MTUx
NDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVlRhYmxlU3BlY3RydW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RG
R0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVE
MEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuY3Bw
OyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wYWdhdG9yLmg7IHBhdGggPSBkZmcvREZH
UHJvcGFnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1MkFBQzE0MzAz
NTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVuaW9uRmluZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0
MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5jcHA7IHBhdGggPSBkZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3
MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuaDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MCw2ICs5NjgsMTggQEAKIAkJMEZE
ODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZGRkM5NDkxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJl
bmNlUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJp
dGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQXJpdGhOb2RlRmxh
Z3NJbmZlcmVuY2VQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkZD
OTRBMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyaXRoTm9kZUZsYWdzSW5mZXJl
bmNlUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkZDOTRCMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdDRkFQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdDRkFQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ0ZBUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkZGQzk0QzE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0ZBUGhhc2UuaDsgcGF0aCA9
IGRmZy9ERkdDRkFQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZGQzk0
RDE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ1NFUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NTRVBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRkM5NEUxNEVGOTA5NTAwQzcy
NTMyIC8qIERGR0NTRVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0NTRVBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ1NFUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkZDOTUwMTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZG
Qzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZGQzk1MzE0RUY5MDk1MDBDNzI1MzIgLyogREZH
VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA7IHBh
dGggPSBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1
YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdW
aXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9z
aXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAw
Q0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTIxLDYg
KzI1NDEsOCBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkZGQzk0OTE0RUY5MDk1MDBD
NzI1MzIgLyogREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHAgKi8sCisJCQkJMEZG
RkM5NEExNEVGOTA5NTAwQzcyNTMyIC8qIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2Uu
aCAqLywKIAkJCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5j
cHAgKi8sCiAJCQkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUu
aCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
ICovLApAQCAtMjUzMSw2ICsyNTUzLDEwIEBACiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJB
RDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKIAkJCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNE
QjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8sCisJCQkJMEZGRkM5NEIxNEVGOTA5NTAwQzcyNTMy
IC8qIERGR0NGQVBoYXNlLmNwcCAqLywKKwkJCQkwRkZGQzk0QzE0RUY5MDk1MDBDNzI1MzIgLyog
REZHQ0ZBUGhhc2UuaCAqLywKKwkJCQkwRkZGQzk0RDE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NF
UGhhc2UuY3BwICovLAorCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFz
ZS5oICovLAogCQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMu
Y3BwICovLAogCQkJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMu
aCAqLywKIAkJCQkwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi8sCkBA
IC0yNTU5LDggKzI1ODUsMTAgQEAKIAkJCQkwRkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdENvbXBpbGVyLmggKi8sCiAJCQkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8qIERG
R09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCAqLywKIAkJCQkwRkMwOTc3MDE0NjkzQUVGMDBDRjI0
NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwICovLAotCQkJCTBGRDNDODIzMTQxMTVEMUEw
MEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLywKLQkJCQkwRkQzQzgyNDE0MTE1RDIyMDBG
RDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovLAorCQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdQaGFzZS5jcHAgKi8sCisJCQkJMEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERG
R1BoYXNlLmggKi8sCisJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIg
LyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhE
RjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCiAJCQkJODZCQjA5QkUxMzhFMzgx
QjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovLAogCQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2
NzAyRiAvKiBERkdSZXBhdGNoLmggKi8sCkBAIC0yNTcyLDYgKzI2MDAsOCBAQAogCQkJCTBGQzA5
NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2
QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKIAkJCQkwRjYyMDE3MjE0M0ZDRDJGMDA2
OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCisJCQkJMEZGRkM5NTMxNEVGOTA5
NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgKi8sCisJ
CQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjg2Miw3ICsyODkyLDYgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlD
OTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2Rjcw
MENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc3MTE0Njkz
QUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RkQzQzgyNzE0MTE1RDRGMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZCQjA5QzExMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUNBM0ZBMTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJv
YXJkLmggaW4gSGVhZGVycyAqLywKQEAgLTMyMjksNiArMzI1OCwxMiBAQAogCQkJCTBGOUZDOEM0
MTRFMUI2MDAwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNCRTJDQUUxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZGRkM5NTYxNEVGOTA5QzAwQzcyNTMyIC8qIERGR0FyaXRoTm9kZUZs
YWdzSW5mZXJlbmNlUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkZDOTU4MTRFRjkwQTIw
MEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGRkM5NUExNEVG
OTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZGQzk1
QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkZD
OTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZGRkM5NjAxNEVGOTBCRDAwQzcyNTMyIC8qIERGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5NzIwOTExNEVC
ODMxNTAwRkVCMUI3IC8qIFBhc3NXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTM1OTcsNyArMzYzMiw2IEBA
CiAJCQkJMEZDMDk3OTIxNDZBNkY3MzAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc3NjE0Njk0M0IwMDBDRjI0NDIgLyogREZHT1NSRXhp
dENvbXBpbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAw
Q0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBG
RDNDODI1MTQxMTVENDAwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RUM5REQyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyogREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTM3ODIsNiArMzgxNiwx
MiBAQAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkM4RDAxNEU2MTJEODAwRDUyQUUwIC8qIERhdGFMb2cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGRkM5NTUxNEVGOTA5
QTAwQzcyNTMyIC8qIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyogREZH
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGRkM5NUQxNEVGOTBCMzAwQzcyNTMyIC8q
IERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RkZDOTVGMTRFRjkwQkIwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTm9kZUZsYWdz
SW5mZXJlbmNlUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1Bo
YXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXJpdGhO
b2RlRmxhZ3NJbmZlcmVuY2VQaGFzZTogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBBcml0
aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShn
cmFwaCwgImFyaXRobWV0aWMgbm9kZSBmbGFncyBpbmZlcmVuY2UiKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBydW4oKQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBVcCBoZXJlIHdlIHN0YXJ0IHdpdGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3Vz
cGVjdCB0aGF0IHRvIGJlCisgICAgICAgICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCisgICAgICAg
ICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAgICAgICB9IHdo
aWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBpc05vdE5l
Z1plcm8oTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghbV9ncmFwaC5p
c051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJ
bmRleCk7CisgICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNOb3RaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgewor
ICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1i
ZXJDb25zdGFudChub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZShO
b2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUu
b3A7CisgICAgICAgIEFyaXRoTm9kZUZsYWdzIGZsYWdzID0gMDsKKyAgICAgICAgCisgICAgICAg
IGlmIChub2RlLmhhc0FyaXRoTm9kZUZsYWdzKCkpCisgICAgICAgICAgICBmbGFncyA9IG5vZGUu
cmF3QXJpdGhOb2RlRmxhZ3MoKTsKKyAgICAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICAlcyBAJXU6ICVzICIsIEdyYXBo
OjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCwgYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhmbGFn
cykpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBmbGFncyAmPSBOb2RlVXNlZEFzTWFzazsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgY2Fz
ZSBCaXRBbmQ6CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAg
ICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNh
c2UgQml0VVJTaGlmdDogeworICAgICAgICAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBhcmUgcGVy
ZmVjdGx5IGhhcHB5IHdpdGggdHJ1bmNhdGVkIGludGVnZXJzLAorICAgICAgICAgICAgLy8gc28g
d2UgZG9uJ3Qgd2FudCB0byBwcm9wYWdhdGUgYW55dGhpbmcuCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRo
Tm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDogewor
ICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlz
Tm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgICAgIGZsYWdz
ICY9IH5Ob2RlTmVlZHNOZWdaZXJvOworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VBcml0aE5v
ZGVGbGFncyhmbGFncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIGlmIChpc05vdFplcm8o
bm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdFplcm8obm9kZS5jaGlsZDIoKS5pbmRleCgp
KSkKKyAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
QXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTXVsOgorICAg
ICAgICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICAvLyBBcyBzb29uIGFzIGEgbXVsdGlw
bHkgaGFwcGVucywgd2UgY2FuIGVhc2lseSBlbmQgdXAgaW4gdGhlIHBhcnQKKyAgICAgICAgICAg
IC8vIG9mIHRoZSBkb3VibGUgZG9tYWluIHdoZXJlIHRoZSBwb2ludCBhdCB3aGljaCB5b3UgZG8g
dHJ1bmNhdGlvbgorICAgICAgICAgICAgLy8gY2FuIGNoYW5nZSB0aGUgb3V0Y29tZS4gU28sIEFy
aXRoTXVsIGFsd2F5cyBjaGVja3MgZm9yIG92ZXJmbG93CisgICAgICAgICAgICAvLyBubyBtYXR0
ZXIgd2hhdCwgYW5kIGFsd2F5cyBmb3JjZXMgaXRzIGlucHV0cyB0byBjaGVjayBhcyB3ZWxsLgor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9k
ZU5lZWRzTmVnWmVybzsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0
aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICAgICAgZmxhZ3MgfD0gTm9k
ZVVzZWRBc051bWJlcjsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0
aEFiczogeworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJl
ciB8IE5vZGVOZWVkc05lZ1plcm8pOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVy
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUFy
aXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyB8IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
TmVlZHNOZWdaZXJvKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVy
bzsKKyAgICAgICAgICAgIGlmIChvcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8
IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgICAgIGlm
ICghbm9kZS5jaGlsZDIoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxh
Z3MoZmxhZ3MpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQzKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiJXNcbiIsIGNoYW5nZWQgPyAiQ0hB
TkdFRCIgOiAiIik7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFu
Z2VkOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUZvcndhcmQoKQorICAgIHsKKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2co
IlByb3BhZ2F0aW5nIGFyaXRobWV0aWMgbm9kZSBmbGFncyBmb3J3YXJkIFsldV1cbiIsICsrbV9j
b3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGls
ZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBw
cm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHByb3BhZ2F0ZUJhY2t3YXJkKCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCJQcm9wYWdhdGluZyBhcml0aG1ldGljIG5v
ZGUgZmxhZ3MgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBm
b3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4LS0gPiAw
OykKKyAgICAgICAgICAgIHByb3BhZ2F0ZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBib29sIG1fY2hhbmdl
ZDsKK307CisKK3ZvaWQgcGVyZm9ybUFyaXRoTm9kZUZsYWdzSW5mZXJlbmNlKEdyYXBoJiBncmFw
aCkKK3sKKyAgICBydW5QaGFzZTxBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlPihncmFwaCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTm9kZUZsYWdz
SW5mZXJlbmNlUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFz
ZV9oCisjZGVmaW5lIERGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2VfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gRGV0ZXJtaW5lIHdoaWNo
IGFyaXRobWV0aWMgbm9kZXMnIHJlc3VsdHMgYXJlIG9ubHkgdXNlZCBpbiBhIGNvbnRleHQgdGhh
dAorLy8gdHJ1bmNhdGVzIHRvIGludGVnZXIgYW55d2F5LiBUaGlzIGlzIGdyZWF0IGZvciBvcHRp
bWl6aW5nIGF3YXkgY2hlY2tzIGZvcgorLy8gb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIHplcm8uIE5C
IHRoZSB3YXkgdGhpcyBwaGFzZSBpbnRlZ3JhdGVzIGludG8gdGhlIHJlc3QKKy8vIG9mIHRoZSBE
RkcgbWFrZXMgaXQgbm9uLW9wdGlvbmFsLiBJbnN0ZWFkIG9mIHByb3ZpbmcgdGhhdCBhIG5vZGUg
aXMgb25seQorLy8gdXNlZCBpbiBpbnRlZ2VyIGNvbnRleHQsIGl0IGFjdHVhbGx5IGRvZXMgdGhl
IG9wcG9zaXRlOiBmaW5kcyBub2RlcyB0aGF0CisvLyBhcmUgdXNlZCBpbiBub24taW50ZWdlciBj
b250ZXh0cy4gSGVuY2UgZmFpbGluZyB0byBydW4gdGhpcyBwaGFzZSB3aWxsIG1ha2UKKy8vIHRo
ZSBjb21waWxlciBhc3N1bWUgdGhhdCBhbGwgbm9kZXMgYXJlIGp1c3QgdXNlZCBhcyBpbnRlZ2Vy
cyEKKwordm9pZCBwZXJmb3JtQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2UoR3JhcGgmKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRzo6UGhhc2UKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZV9oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ0ZBUGhhc2UuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgorI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDRkFQaGFzZTogcHVibGljIFBoYXNlIHsKK3B1
YmxpYzoKKyAgICBDRkFQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJjb250cm9sIGZsb3cgYW5hbHlzaXMiKQorICAgICAgICAsIG1fc3RhdGUoZ3JhcGgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHBzZXVkby13b3JrbGlzdC1iYXNl
ZCBmb3J3YXJkIENGQSwgZXhjZXB0IHRoYXQgdGhlIHZpc2l0IG9yZGVyCisgICAgICAgIC8vIG9m
IGJsb2NrcyBpcyB0aGUgYnl0ZWNvZGUgcHJvZ3JhbSBvcmRlciAod2hpY2ggaXMgbmVhcmx5IHRv
cG9sb2dpY2FsKSwgYW5kCisgICAgICAgIC8vIGluc3RlYWQgb2YgYSB3b3JrbGlzdCB3ZSBqdXN0
IHdhbGsgYWxsIGJhc2ljIGJsb2NrcyBjaGVja2luZyBpZiBjZmFTaG91bGRSZXZpc2l0CisgICAg
ICAgIC8vIGlzIHNldCB0byB0cnVlLiBUaGlzIGlzIGxpa2VseSB0byBiYWxhbmNlIHRoZSBlZmZp
Y2llbmN5IHByb3BlcnRpZXMgb2YgYm90aAorICAgICAgICAvLyB3b3JrbGlzdC1iYXNlZCBhbmQg
Zm9yd2FyZCBmaXhwb2ludC1iYXNlZCBhcHByb2FjaGVzLiBMaWtlIGEgd29ya2xpc3QtYmFzZWQK
KyAgICAgICAgLy8gYXBwcm9hY2gsIGl0IHdvbid0IHZpc2l0IGNvZGUgaWYgaXQncyBtZWFuaW5n
bGVzcyB0byBkbyBzbyAobm90aGluZyBjaGFuZ2VkIGF0CisgICAgICAgIC8vIHRoZSBoZWFkIG9m
IHRoZSBibG9jayBvciB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgbm90IGJlZW4gdmlzaXRlZCkuIExp
a2UgYSBmb3J3YXJkCisgICAgICAgIC8vIGZpeHBvaW50LWJhc2VkIGFwcHJvYWNoLCBpdCBoYXMg
YSBoaWdoIHByb2JhYmlsaXR5IG9mIG9ubHkgdmlzaXRpbmcgYSBibG9jaworICAgICAgICAvLyBh
ZnRlciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5IGxvb3BzIHdpbGwg
Y2F1c2UgdGhpcyBhbmFseXNpcyB0bworICAgICAgICAvLyByZXZpc2l0IGJsb2NrcywgYW5kIHRo
ZSBhbW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9vcCBkZXB0aC4KKyAg
ICAgICAgCisgICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUobV9ncmFwaCk7CisgICAg
ICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHBlcmZvcm1Gb3J3YXJkQ0ZBKCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2stPmNmYVNo
b3VsZFJldmlzaXQpCisgICAgICAgICAgICByZXR1cm47CisjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICBCbG9jayAjJXUgKGJjIyV1
KTpcbiIsIGJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKKyNlbmRpZgorICAgICAg
ICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CisjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICAgICBoZWFkIHZhcnM6ICIp
OworICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgV1RGOjpkYXRhRmls
ZSgpKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyNlbmRpZgorICAgICAgICBmb3IgKE5vZGVJ
bmRleCBub2RlSW5kZXggPSBibG9jay0+YmVnaW47IG5vZGVJbmRleCA8IGJsb2NrLT5lbmQ7ICsr
bm9kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICVzIEAl
dTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgpOwor
ICAgICAgICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICBk
YXRhTG9nKCJcbiIpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZXhlY3V0ZShu
b2RlSW5kZXgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICAgICB0
YWlsIHJlZ3M6ICIpOworICAgICAgICBtX3N0YXRlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAg
ICAgICAgZGF0YUxvZygiXG4iKTsKKyNlbmRpZgorICAgICAgICBtX2NoYW5nZWQgfD0gbV9zdGF0
ZS5lbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3RhdGU6Ok1lcmdlVG9TdWNjZXNzb3JzKTsKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAg
ICAgIHRhaWwgdmFyczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRU
YWlsLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworI2VuZGlmCisg
ICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybUZvcndhcmRDRkEoKQorICAgIHsKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIkNGQSBb
JXVdXG4iLCArK21fY291bnQpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
KQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKGJsb2NrKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOwor
fTsKKwordm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJiBncmFwaCkKK3sKKyAgICBydW5QaGFzZTxDRkFQ
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDRkFQaGFzZV9oCisjZGVmaW5l
IERGR0NGQVBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3Jh
cGg7CisKKy8vIEdsb2JhbCBjb250cm9sIGZsb3cgYW5hbHlzaXMuIFRoaXMgcGhhc2UgdHJhbnNm
b3JtcyB0aGUgY29tYmluYXRpb24gb2YgdHlwZQorLy8gcHJlZGljdGlvbnMgYW5kIHR5cGUgZ3Vh
cmRzIGludG8gdHlwZSBwcm9vZnMsIGFuZCBmbG93cyB0aGVtIGdsb2JhbGx5IHdpdGhpbgorLy8g
dGhlIGNvZGUgYmxvY2suIEl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgaWRlbnRpZnlpbmcgZGVh
ZCBjb2RlLCBhbmQgaW4gdGhlCisvLyBmdXR1cmUgc2hvdWxkIGJlIHVzZWQgYXMgYSBob29rIGZv
ciBjb25zdGFudCBwcm9wYWdhdGlvbi4KKwordm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJik7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHQ0ZBUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENTRVBoYXNlOiBwdWJsaWMgUGhhc2Ugewor
cHVibGljOgorICAgIENTRVBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFw
aCwgImNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIikKKyAgICB7CisgICAgICAgIC8v
IFJlcGxhY2VtZW50cyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgbG9jYWwgY29tbW9uIHN1YmV4cHJl
c3Npb24gZWxpbWluYXRpb24uCisgICAgICAgIG1fcmVwbGFjZW1lbnRzLnJlc2l6ZShtX2dyYXBo
LnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9n
cmFwaC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcmVwbGFjZW1lbnRzW2ldID0gTm9Ob2Rl
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IExhc3ROb2RlSWQ7
ICsraSkKKyAgICAgICAgICAgIG1fbGFzdFNlZW5baV0gPSBOb05vZGU7CisgICAgfQorICAgIAor
ICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBi
bG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrKQorICAgICAgICAgICAgcGVy
Zm9ybUJsb2NrQ1NFKCptX2dyYXBoLm1fYmxvY2tzW2Jsb2NrXSk7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICAKKyAgICBOb2RlSW5kZXggY2Fub25pY2FsaXplKE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgeworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgIAorICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhd
Lm9wID09IFZhbHVlVG9JbnQzMikKKyAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9k
ZUluZGV4XS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5vZGVJ
bmRleDsKKyAgICB9CisgICAgTm9kZUluZGV4IGNhbm9uaWNhbGl6ZShOb2RlVXNlIG5vZGVVc2Up
CisgICAgeworICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5vZGVVc2UuaW5kZXhVbmNoZWNr
ZWQoKSk7CisgICAgfQorICAgIAorICAgIC8vIENvbXB1dGVzIHdoZXJlIHRoZSBzZWFyY2ggZm9y
IGEgY2FuZGlkYXRlIGZvciBDU0Ugc2hvdWxkIHN0YXJ0LiBEb24ndCBjYWxsCisgICAgLy8gdGhp
cyBkaXJlY3RseTsgY2FsbCBzdGFydEluZGV4KCkgaW5zdGVhZCBhcyBpdCBkb2VzIGxvZ2dpbmcg
aW4gZGVidWcgbW9kZS4KKyAgICBOb2RlSW5kZXggY29tcHV0ZVN0YXJ0SW5kZXhGb3JDaGlsZHJl
bihOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
bGltaXQgPSAzMDA7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBtX3N0YXJ0
OworICAgICAgICBpZiAobV9jb21waWxlSW5kZXggLSBzdGFydCA+IGxpbWl0KQorICAgICAgICAg
ICAgc3RhcnQgPSBtX2NvbXBpbGVJbmRleCAtIGxpbWl0OworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKHN0YXJ0ID49IG1fc3RhcnQpOworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IGNoaWxk
ID0gY2Fub25pY2FsaXplKGNoaWxkMSk7CisgICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisg
ICAgICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgICAgIAorICAgICAgICBpZiAoc3RhcnQgPCBj
aGlsZCkKKyAgICAgICAgICAgIHN0YXJ0ID0gY2hpbGQ7CisgICAgICAgIAorICAgICAgICBjaGls
ZCA9IGNhbm9uaWNhbGl6ZShjaGlsZDIpOworICAgICAgICBpZiAoY2hpbGQgPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0IDwg
Y2hpbGQpCisgICAgICAgICAgICBzdGFydCA9IGNoaWxkOworICAgICAgICAKKyAgICAgICAgY2hp
bGQgPSBjYW5vbmljYWxpemUoY2hpbGQzKTsKKyAgICAgICAgaWYgKGNoaWxkID09IE5vTm9kZSkK
KyAgICAgICAgICAgIHJldHVybiBzdGFydDsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGFydCA8
IGNoaWxkKQorICAgICAgICAgICAgc3RhcnQgPSBjaGlsZDsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBzdGFydDsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IHN0YXJ0SW5kZXhGb3JDaGls
ZHJlbihOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHJl
c3VsdCA9IGNvbXB1dGVTdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxLCBjaGlsZDIsIGNoaWxk
Myk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBk
YXRhTG9nKCIgIGxvb2tiYWNrICV1OiAiLCByZXN1bHQpOworI2VuZGlmCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBzdGFydEluZGV4KCkKKyAgICB7
CisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAg
cmV0dXJuIHN0YXJ0SW5kZXhGb3JDaGlsZHJlbigKKyAgICAgICAgICAgIG5vZGUuY2hpbGQxKCku
aW5kZXhVbmNoZWNrZWQoKSwKKyAgICAgICAgICAgIG5vZGUuY2hpbGQyKCkuaW5kZXhVbmNoZWNr
ZWQoKSwKKyAgICAgICAgICAgIG5vZGUuY2hpbGQzKCkuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBlbmRJbmRleEZvclB1cmVDU0UoKQorICAgIHsKKyAgICAg
ICAgTm9kZUluZGV4IHJlc3VsdCA9IG1fbGFzdFNlZW5bbV9ncmFwaFttX2NvbXBpbGVJbmRleF0u
b3AgJiBOb2RlSWRNYXNrXTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOb05vZGUpCisgICAgICAg
ICAgICByZXN1bHQgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQrKzsKKyAg
ICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2NvbXBpbGVJbmRleCk7CisjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgIGxpbWl0ICV1OiAi
LCByZXN1bHQpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIE5vZGVJbmRleCBwdXJlQ1NFKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBOb2RlSW5k
ZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBOb2RlSW5k
ZXggY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpOworICAgICAgICBOb2RlSW5k
ZXggY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQzKCkpOworICAgICAgICAKKyAgICAg
ICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBmb3IgKE5vZGVJbmRl
eCBpbmRleCA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAg
ICAgICAgICBOb2RlJiBvdGhlck5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIGlm
IChub2RlLm9wICE9IG90aGVyTm9kZS5vcCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJl
KCkgIT0gb3RoZXJOb2RlLmFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXggb3RoZXJD
aGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgaWYg
KG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAg
ICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6
ZShvdGhlck5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9O
b2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChvdGhl
ckNoaWxkICE9IGNoaWxkMikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQz
KCkpOworICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMykK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0
dXJuIGluZGV4OworICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKKyAgICB7CisgICAg
ICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5wcmVkaWN0aW9uKCk7CisgICAgICAgIHJldHVybiBpc051bWJlclByZWRpY3Rpb24obGVmdCkg
JiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBsb2dp
Y2FsTm90SXNQdXJlKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
cmV0dXJuIGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgIXByZWRpY3Rpb247Cisg
ICAgfQorICAgIAorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KQorICAgICAgICAgICAgJiYgKChub2RlLm9wID09IFB1dEJ5VmFsIHx8IG5vZGUub3AgPT0gUHV0
QnlWYWxBbGlhcykKKyAgICAgICAgICAgICAgICA/IGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVBy
ZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAg
ICAgICAgOiBpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOworICAgICAgICBpZiAobm9kZS5vcCAmIE5vZGVDbG9iYmVyc1dvcmxkKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghKG5vZGUub3AgJiBOb2RlTWlnaHRD
bG9iYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6
CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRl
cjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgorICAgICAgICBjYXNlIENvbXBhcmVF
cToKKyAgICAgICAgICAgIHJldHVybiAhaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSk7CisgICAg
ICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICAgICAgICAgIHJldHVybiAhbG9naWNhbE5vdElzUHVy
ZShub2RlKTsKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHJldHVybiAhYnlW
YWxJc1B1cmUobm9kZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21lIG9kZGl0
eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBoYXZlIENT
RSBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGVJbmRl
eCBpbXB1cmVDU0UoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDEg
PSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIg
PSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSk7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDMg
PSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDMoKSk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5k
ZXggc3RhcnQgPSBzdGFydEluZGV4KCk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0g
bV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAgICAgIE5vZGUmIG90
aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gb3Ro
ZXJOb2RlLm9wCisgICAgICAgICAgICAgICAgJiYgbm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBh
cmUoKSA9PSBvdGhlck5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJlKCkpIHsKKyAgICAgICAg
ICAgICAgICBOb2RlSW5kZXggb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hp
bGQxKCkpOworICAgICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChvdGhlckNo
aWxkID09IGNoaWxkMSkgeworICAgICAgICAgICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25p
Y2FsaXplKG90aGVyTm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvdGhl
ckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gY2hpbGQyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGls
ZDMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gY2hpbGQzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGlu
ZGV4KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9hZEVsaW1pbmF0
aW9uKHVuc2lnbmVkIHZhck51bWJlciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbigpOwor
ICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4g
c3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgorICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBj
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2Jq
ZWN0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJsb2NrKCktPmdsb2JhbE9i
amVjdEZvcihub2RlLmNvZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9Cisg
ICAgCisgICAgTm9kZUluZGV4IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGls
ZDEsIE5vZGVJbmRleCBjaGlsZDIpCisgICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBz
dGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxLCBjaGlsZDIpOworICAgICAgICBmb3IgKE5vZGVJ
bmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICAgICAgaWYg
KCFieVZhbElzUHVyZShub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAg
ICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQx
ICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBtdXN0IGFzc3VtZSB0aGF0IHRoZSBQdXRCeVZhbCB3aWxsIGNsb2Ji
ZXIgdGhlIGxvY2F0aW9uIHdlJ3JlIGdldHRpbmcgZnJvbS4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgY2FuIGRvIGJldHRlcjsgaWYgd2Uga25vdyB0aGF0IHRoZSBQdXRCeVZhbCBpcyBh
Y2Nlc3NpbmcgYW4gYXJyYXkgb2YgYQorICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCB0eXBl
IHRoYW4gdGhlIEdldEJ5VmFsLCB0aGVuIHdlIGtub3cgdGhhdCB0aGV5IHdvbid0IGNsb2JiZXIg
ZWFjaCBvdGhlci4KKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAg
ICAgICAgICAgIC8vIEdldEJ5VmFsIGN1cnJlbnRseSBhbHdheXMgc3BlY3VsYXRlcyB0aGF0IGl0
J3MgYWNjZXNzaW5nIGFuCisgICAgICAgICAgICAgICAgLy8gYXJyYXkgd2l0aCBhbiBpbnRlZ2Vy
IGluZGV4LCB3aGljaCBtZWFucyB0aGF0IGl0J3MgaW1wb3NzaWJsZQorICAgICAgICAgICAgICAg
IC8vIGZvciBhIHN0cnVjdHVyZSBjaGFuZ2Ugb3IgYSBwdXQgdG8gcHJvcGVydHkgc3RvcmFnZSB0
byBhZmZlY3QKKyAgICAgICAgICAgICAgICAvLyB0aGUgR2V0QnlWYWwuCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAgICAgICAgICAv
LyBBIHB1c2ggY2Fubm90IGFmZmVjdCBwcmV2aW91c2x5IGV4aXN0aW5nIGVsZW1lbnRzIGluIHRo
ZSBhcnJheS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorCisgICAgYm9vbCBj
aGVja0Z1bmN0aW9uRWxpbWluYXRpb24oSlNGdW5jdGlvbiogZnVuY3Rpb24sIE5vZGVJbmRleCBj
aGlsZDEpCisgICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hp
bGRyZW4oY2hpbGQxKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBlbmRJbmRleEZv
clB1cmVDU0UoKTsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gQ2hlY2tGdW5jdGlv
biAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmZ1bmN0aW9uKCkgPT0gZnVuY3Rp
b24pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRp
b24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIE5vZGVJbmRleCBjaGlsZDEpCisg
ICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hp
bGQxKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5k
ZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQor
ICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9mKG5vZGUuc3Ry
dWN0dXJlU2V0KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQorICAg
ICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICAv
LyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgICAgICAgICBp
ZiAoYnlWYWxJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlW
YWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9y
IGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBOb2RlSW5kZXggZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFy
dCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOworICAgICAgICBmb3IgKE5vZGVJbmRl
eCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZp
ZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5jaGlsZDIoKSA9PSBjaGlsZDEpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZS5jaGlsZDMoKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIC8v
IENoYW5naW5nIHRoZSBzdHJ1Y3R1cmUgY2Fubm90IGNoYW5nZSB0aGUgb3V0Y29tZSBvZiBhIHBy
b3BlcnR5IGdldC4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
CisgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBh
cnJheSB3aXRoIGFuCisgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4g
aXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQorICAgICAgICAgICAg
ICAgICAgICAvLyBjaGFuZ2UuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3Js
ZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldFByb3BlcnR5U3RvcmFnZUxvYWRF
bGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0
YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CisgICAgICAgIGZvciAoTm9kZUlu
ZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCkgeworICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmU6CisgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBwdXR0aW5n
IHRvIHRoZSBzdG9yYWdlIGNhbm5vdAorICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcHJv
cGVydHkgc3RvcmFnZSBwb2ludGVyLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKKyAgICAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNj
ZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KKyAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBp
bmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCisg
ICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChj
bG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgIH0KKworICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIGJvb2wgaGFzSW50ZWdl
ckluZGV4UHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0
SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9
IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAg
ICAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogeworICAgICAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
LnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBib29sIG5vZGVIYXNJbnRlZ2VySW5kZXhQ
cmVkaWN0aW9uID0gISghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJl
ZGljdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYm
IGhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPT0gbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rp
b24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAg
ICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIC8vIENoYW5naW5n
IHRoZSBzdHJ1Y3R1cmUgb3IgcHV0dGluZyB0byB0aGUgc3RvcmFnZSBjYW5ub3QKKyAgICAgICAg
ICAgICAgICAvLyBjaGFuZ2UgdGhlIHByb3BlcnR5IHN0b3JhZ2UgcG9pbnRlci4KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKKyAgICAgICAgICAgICAgICAvLyBQdXRCeVZhbEFsaWFzIGNhbid0IGNoYW5nZSB0
aGUgaW5kZXhlZCBzdG9yYWdlIHBvaW50ZXIKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICAgICAg
aWYgKGlzRml4ZWRJbmRleGVkU3RvcmFnZU9iamVjdFByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkpICYmIGJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworCisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
IH0KKyAgICAKKyAgICBOb2RlSW5kZXggZ2V0U2NvcGVDaGFpbkxvYWRFbGltaW5hdGlvbih1bnNp
Z25lZCBkZXB0aCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhG
b3JDaGlsZHJlbigpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IGVuZEluZGV4Rm9y
UHVyZUNTRSgpOyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRTY29wZUNoYWlu
CisgICAgICAgICAgICAgICAgJiYgbm9kZS5zY29wZUNoYWluRGVwdGgoKSA9PSBkZXB0aCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGVVc2Um
IGNoaWxkLCBib29sIGFkZFJlZiA9IHRydWUpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiB0
aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgorICAgICAgICBpZiAoIWNoaWxkKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMg
YW55IHJlcGxhY2VtZW50LgorICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQgPSBtX3JlcGxh
Y2VtZW50c1tjaGlsZC5pbmRleCgpXTsKKyAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9k
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGNoaWxkLnNldEluZGV4
KHJlcGxhY2VtZW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkg
YSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90CisgICAg
ICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KKyAgICAgICAgQVNTRVJUKG1fcmVwbGFjZW1lbnRz
W2NoaWxkLmluZGV4KCldID09IE5vTm9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoYWRkUmVm
KQorICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0UmVwbGFjZW1lbnQoTm9kZUluZGV4IHJlcGxhY2VtZW50KQorICAgIHsKKyAgICAgICAg
aWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIC8vIEJlIHNhZmUuIERvbid0IHRyeSB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBp
ZiB0aGUgcHJlZGljdGlvbnMgZG9uJ3QKKyAgICAgICAgLy8gYWdyZWUuCisgICAgICAgIGlmICht
X2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgIT0gbV9ncmFwaFtyZXBsYWNlbWVu
dF0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAgIFJl
cGxhY2luZyBAJXUgLT4gQCV1IiwgbV9jb21waWxlSW5kZXgsIHJlcGxhY2VtZW50KTsKKyNlbmRp
ZgorICAgICAgICAKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
OworICAgICAgICBub2RlLm9wID0gUGhhbnRvbTsKKyAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgx
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5hdGUg
YWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgorICAgICAgICBtX3JlcGxhY2VtZW50c1ttX2Nv
bXBpbGVJbmRleF0gPSByZXBsYWNlbWVudDsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbGltaW5h
dGUoKQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisg
ICAgICAgIGRhdGFMb2coIiAgIEVsaW1pbmF0aW5nIEAldSIsIG1fY29tcGlsZUluZGV4KTsKKyNl
bmRpZgorICAgICAgICAKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdOworICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOworICAgICAgICBBU1NF
UlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7CisgICAgICAgIG5vZGUub3AgPSBQaGFudG9tOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUmIG5vZGUpCisgICAgeworICAg
ICAgICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS5zaG91bGRHZW5lcmF0ZSgpOworCisgICAg
ICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0
Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAg
ICBwZXJmb3JtU3Vic3RpdHV0aW9uKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0s
IHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBlcmZvcm1T
dWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzaG91
bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRy
ZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKCFzaG91bGRHZW5lcmF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9n
KCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3Ap
LCBtX2NvbXBpbGVJbmRleCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRo
ZXJlIGFyZSBzb21lIG5vZGVzIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGRvbid0IENTRSBldmVuIHRo
b3VnaCB3ZQorICAgICAgICAvLyBwcm9iYWJseSBjb3VsZCwgbGlrZSBTdHJDYXQgYW5kIFRvUHJp
bWl0aXZlLiBUaGF0J3MgYmVjYXVzZSB0aGVyZSBpcyBubworICAgICAgICAvLyBldmlkZW5jZSB0
aGF0IGRvaW5nIENTRSBvbiB0aGVzZSBub2RlcyB3b3VsZCByZXN1bHQgaW4gYSBwZXJmb3JtYW5j
ZQorICAgICAgICAvLyBwcm9ncmVzc2lvbi4gSGVuY2UgY29uc2lkZXJpbmcgdGhlc2Ugbm9kZXMg
aW4gQ1NFIHdvdWxkIGp1c3QgbWVhbiB0aGF0IHRoaXMKKyAgICAgICAgLy8gY29kZSBkb2VzIG1v
cmUgd29yayB3aXRoIG5vIHdpbi4gT2YgY291cnNlLCB3ZSBtYXkgd2FudCB0byByZWNvbnNpZGVy
IHRoaXMsCisgICAgICAgIC8vIHNpbmNlIFN0ckNhdCBpcyB0cml2aWFsbHkgQ1NFLWFibGUuIEl0
J3Mgbm90IHRyaXZpYWxseSBkb2FibGUgZm9yCisgICAgICAgIC8vIFRvUHJpbWl0aXZlLCBidXQg
d2UgY291bGQgY2hhbmdlIHRoYXQgd2l0aCBzb21lIHNwZWN1bGF0aW9ucyBpZiB3ZSByZWFsbHkK
KyAgICAgICAgLy8gbmVlZGVkIHRvLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoIChub2RlLm9w
KSB7CisgICAgICAgIAorICAgICAgICAvLyBIYW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5v
ZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4KKyAgICAgICAgY2FzZSBCaXRBbmQ6Cisg
ICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJp
dFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlm
dDoKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAg
ICAgY2FzZSBBcml0aE11bDoKKyAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgY2FzZSBB
cml0aERpdjoKKyAgICAgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgY2FzZSBBcml0aE1pbjoK
KyAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAg
IGNhc2UgR2V0Qnl0ZUFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldEludDhBcnJheUxlbmd0
aDoKKyAgICAgICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldElu
dDMyQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0VWludDhBcnJheUxlbmd0aDoKKyAgICAg
ICAgY2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRVaW50
MTZBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDoKKyAgICAg
ICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0RmxvYXQ2NEFy
cmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgY2FzZSBHZXRTdHJp
bmdMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QXJyYXlM
ZW5ndGg6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChpbXB1cmVDU0Uobm9kZSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZUNoYWlu
OgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0U2NvcGVDaGFpbkxvYWRFbGltaW5hdGlv
bihub2RlLnNjb3BlQ2hhaW5EZXB0aCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9uYWxseSBwdXJlOiB0aGVzZSBhcmUg
cHVyZSwgYW5kIGNhbgorICAgICAgICAvLyBiZSBDU0UnZCwgc28gbG9uZyBhcyB0aGUgcHJlZGlj
dGlvbiBpcyB0aGUgb25lIHdlIHdhbnQuCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAg
IGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgorICAg
ICAgICBjYXNlIENvbXBhcmVFcTogeworICAgICAgICAgICAgaWYgKGlzUHJlZGljdGVkTnVtZXJp
Y2FsKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXgg
PSBwdXJlQ1NFKG5vZGUpOworICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ICE9
IE5vTm9kZSAmJiBpc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhd
KSkKKyAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDogeworICAgICAgICAgICAgaWYgKGxvZ2ljYWxO
b3RJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJ
bmRleCA9IHB1cmVDU0Uobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5k
ZXggIT0gTm9Ob2RlICYmIGxvZ2ljYWxOb3RJc1B1cmUobV9ncmFwaFtyZXBsYWNlbWVudEluZGV4
XSkpCisgICAgICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50SW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFjY2Vzc2VzLiBUaGVzZSBhcmUg
bm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKKyAgICAgICAgLy8gb3B0aW1pemUgdGhl
bSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMgYXJlIG1ldC4KKyAgICAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJM
b2FkRWxpbWluYXRpb24obm9kZS52YXJOdW1iZXIoKSwgY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihub2RlLmNvZGVPcmlnaW4pKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5v
ZGUpKQorICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0
aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAg
ICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9u
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSAhPSBOb05vZGUp
CisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IFB1dEJ5VmFsQWxpYXM7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAg
ICAgICAgaWYgKGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0
KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAg
ICAgICAgICBpZiAoY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKG5vZGUuZnVuY3Rpb24oKSwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rp
b24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGJv
b2wgbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPSAhKCEoYmFzZVByZWRpY3Rpb24gJiBQ
cmVkaWN0SW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEo
KS5pbmRleCgpLCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlv
bihub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNl
dExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbV9sYXN0U2Vlbltub2RlLm9wICYgTm9kZUlkTWFza10gPSBt
X2NvbXBpbGVJbmRleDsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIGRhdGFMb2coIlxuIik7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgdm9pZCBw
ZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayYgYmxvY2spCisgICAgeworICAgICAgICBtX3N0YXJ0
ID0gYmxvY2suYmVnaW47CisgICAgICAgIE5vZGVJbmRleCBlbmQgPSBibG9jay5lbmQ7CisgICAg
ICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX3N0YXJ0OyBtX2NvbXBpbGVJbmRleCA8IGVuZDsg
KyttX2NvbXBpbGVJbmRleCkKKyAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdKTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG1fc3RhcnQ7CisgICAg
Tm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIFZlY3RvcjxOb2RlSW5kZXgsIDE2PiBtX3Jl
cGxhY2VtZW50czsKKyAgICBGaXhlZEFycmF5PE5vZGVJbmRleCwgTGFzdE5vZGVJZD4gbV9sYXN0
U2VlbjsKK307CisKK3ZvaWQgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCit7CisgICAgcnVuUGhh
c2U8Q1NFUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NTRVBoYXNl
X2gKKyNkZWZpbmUgREZHQ1NFUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitjbGFzcyBHcmFwaDsKKworLy8gQmxvY2stbG9jYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxp
bWluYXRpb24uIFRoaXMgaXMgYW4gb3B0aW9uYWwgcGhhc2UsIGJ1dAorLy8gaXQgaXMgcmF0aGVy
IHByb2ZpdGFibGUuIEl0IGhhcyBmYWlybHkgYWNjdXJhdGUgaGVhcCBtb2RlbGluZyBhbmQgd2ls
bCBtYXRjaAorLy8gYSB3aWRlIHJhbmdlIG9mIHN1YmV4cHJlc3Npb24gc2ltaWxhcml0aWVzLiBJ
dCdzIGtub3duIHRvIHByb2R1Y2UgYmlnIHdpbnMKKy8vIG9uIGEgZmV3IGJlbmNobWFya3MsIGFu
ZCBpcyByZWxhdGl2ZWx5IGNoZWFwIHRvIHJ1bi4KKwordm9pZCBwZXJmb3JtQ1NFKEdyYXBoJik7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHQ1NFUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxMDgxNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEzIEBA
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0FyaXRoTm9kZUZsYWdzSW5m
ZXJlbmNlUGhhc2UuaCIKICNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgorI2luY2x1ZGUg
IkRGR0NGQVBoYXNlLmgiCisjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdK
SVRDb21waWxlci5oIgotI2luY2x1ZGUgIkRGR1Byb3BhZ2F0b3IuaCIKKyNpbmNsdWRlICJERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
QEAgLTUzLDggKzU3LDEyIEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGls
ZU0KICAgICAKICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQogICAgICAg
ICBkZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoKTsKLSAgICAKLSAgICBwcm9wYWdhdGUoZGZnKTsK
KworICAgIHBlcmZvcm1Bcml0aE5vZGVGbGFnc0luZmVyZW5jZShkZmcpOworICAgIHBlcmZvcm1Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgcGVy
Zm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtQ0ZBKGRmZyk7
CiAgICAgCiAgICAgSklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZGZnKTsKICAgICBpZiAoY29tcGls
ZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKK3ZvaWQgUGhhc2U6OmJlZ2luUGhhc2UoKQoreworICAgIGRhdGFMb2coIkJlZ2lu
bmluZyBERkcgcGhhc2UgJXMuXG4iLCBtX25hbWUpOworfQorCit2b2lkIFBoYXNlOjplbmRQaGFz
ZSgpCit7CisgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgJXM6XG4iLCBtX25hbWUpOworICAgIG1f
Z3JhcGguZHVtcChtX2NvZGVCbG9jayk7Cit9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUGhhc2VfaAor
I2RlZmluZSBERkdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQaGFzZSB7
CitwdWJsaWM6CisgICAgUGhhc2UoR3JhcGgmIGdyYXBoLCBjb25zdCBjaGFyKiBuYW1lKQorICAg
ICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgeworICAg
ICAgICBiZWdpblBoYXNlKCk7CisgICAgfQorICAgIAorICAgIH5QaGFzZSgpCisgICAgeworICAg
ICAgICBlbmRQaGFzZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBFYWNoIHBoYXNlIG11c3QgaGF2
ZSBhIHJ1bigpIG1ldGhvZC4KKyAgICAKK3Byb3RlY3RlZDoKKyAgICAvLyBUaGluZ3MgeW91IG5l
ZWQgdG8gaGF2ZSBhIERGRyBjb21waWxlciBwaGFzZS4KKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAg
ICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dyYXBoLm1fZ2xv
YmFsRGF0YTsgfQorICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9ncmFwaC5t
X2NvZGVCbG9jazsgfQorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIHsgcmV0dXJuIG1f
Z3JhcGgubV9wcm9maWxlZEJsb2NrOyB9CisgICAgCisgICAgY29uc3QgY2hhciogbV9uYW1lOwor
ICAgIAorcHJpdmF0ZToKKyAgICAvLyBDYWxsIHRoZXNlIGhvb2tzIHdoZW4gc3RhcnRpbmcgYW5k
IGZpbmlzaGluZy4KKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisg
ICAgdm9pZCBiZWdpblBoYXNlKCk7CisgICAgdm9pZCBlbmRQaGFzZSgpOworI2Vsc2UgLy8gREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgIHZvaWQgYmVnaW5QaGFzZSgp
IHsgfQorICAgIHZvaWQgZW5kUGhhc2UoKSB7IH0KKyNlbmRpZiAvLyBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQaGFzZVR5cGU+
Cit2b2lkIHJ1blBoYXNlKEdyYXBoJiBncmFwaCkKK3sKKyAgICBQaGFzZVR5cGUgcGhhc2UoZ3Jh
cGgpOworICAgIHBoYXNlLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1BoYXNlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTogcHVibGljIFBoYXNl
IHsKK3B1YmxpYzoKKyAgICBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwcmVkaWN0aW9uIHByb3BhZ2F0aW9uIikKKyAgICB7
CisgICAgfQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBtX2NvdW50ID0gMDsKKyNlbmRpZgorICAg
ICAgICAvLyBUd28gc3RhZ2UgcHJvY2VzczogZmlyc3QgcHJvcGFnYXRlIHByZWRpY3Rpb25zLCB0
aGVuIHByb3BhZ2F0ZSB3aGlsZSBkb2luZyBkb3VibGUgdm90aW5nLgorICAgICAgICAKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3Ro
IHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2Rl
LgorICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2No
YW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhlIGxpa2VsaWhvb2QgdGhhdCBwYXRo
b2xvZ2ljYWwgY29kZSB3aWxsCisgICAgICAgICAgICAvLyBjYXVzZSBzbG93bmVzcy4gTG9vcHMg
KGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJhY2t3YXJkIGZsb3cuCisgICAgICAg
ICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2VzOiAoMSkgaXQgZGV0ZWN0cyBpZiB0
aGUgZm9yd2FyZCBmaXhwb2ludAorICAgICAgICAgICAgLy8gZm91bmQgYSBzb3VuZCBzb2x1dGlv
biBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZsb3cuCisgICAgICAgICAgICBtX2No
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUJhY2t3YXJkKCk7CisgICAgICAg
IH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAg
ICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGRvUm91bmRPZkRvdWJsZVZvdGluZygp
OworICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2No
YW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZG9Sb3VuZE9mRG91YmxlVm90aW5nKCk7
CisgICAgICAgICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2No
YW5nZWQpOworICAgICAgICAKKyAgICAgICAgZml4dXAoKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIGJvb2wgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAg
eworICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gc2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3ZSBrbm93
IHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIGNoYW5nZQorICAgICAgICAvLyBvdXIg
bWluZHMgYWJvdXQgd2hhdCB0aGUgcHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhlcmUgaXMg
bm8gc2VtYW50aWMKKyAgICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRpY3Rpb24o
KSBhbmQgbWVyZ2VQcmVkaWN0aW9uKCkgb3RoZXIgdGhhbiB0aGUKKyAgICAgICAgLy8gaW5jcmVh
c2VkIGNoZWNraW5nIHRvIHZhbGlkYXRlIHRoaXMgcHJvcGVydHkuCisgICAgICAgIEFTU0VSVCht
X2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0gUHJlZGljdE5vbmUgfHwgbV9n
cmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IHByZWRpY3Rpb24pOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJlZGlj
dGlvbik7CisgICAgfQorICAgIAorICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBw
cm9wYWdhdGUoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgTm9kZVR5cGUg
b3AgPSBub2RlLm9wOworCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQorICAgICAgICBkYXRhTG9nKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2Nv
bXBpbGVJbmRleCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEpTQ29u
c3RhbnQ6CisgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6IHsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gc2V0UHJlZGljdGlvbihwcmVkaWN0aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpT
Q29uc3RhbnQobV9jb21waWxlSW5kZXgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQorICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QobV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgY2Fz
ZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIGNhc2UgQml0UlNoaWZ0Ogor
ICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAg
ICBjYXNlIFZhbHVlVG9JbnQzMjogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7
CisgICAgICAgICAgICBpZiAobm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKQorICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckNvZGVBdDogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGlj
dEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBB
cml0aE1vZDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW50
MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSAmJiBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
UHJlZGljdERvdWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAg
ICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkp
KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihQcmVkaWN0SW50MzIp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBWYWx1ZUFkZDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0RG91
YmxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEobGVmdCAmIFByZWRpY3ROdW1iZXIp
IHx8ICEocmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBs
ZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBudW1iZXIu
CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RT
dHJpbmcpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMyIHwgUHJl
ZGljdERvdWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJp
dGhTdWI6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVk
aWN0RG91YmxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDoKKyAgICAgICAgY2FzZSBBcml0
aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aERpdjogewor
ICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5w
cmVkaWN0aW9uKCk7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChsZWZ0ICYmIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9u
KG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGljdERvdWJs
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhTcXJ0OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24oUHJlZGljdERvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKKyAgICAgICAgICAg
IFByZWRpY3RlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIGlmIChjaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChub2RlQ2Fu
U3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGlj
dERvdWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBDb21w
YXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2Ug
Q29tcGFyZUVxOgorICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgY2FzZSBJ
bnN0YW5jZU9mOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGlj
dEJvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAgIGlmIChub2RlLmdldEhlYXBQcmVk
aWN0aW9uKCkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9k
ZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jaygp
LT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSA9PSBnbG9iYWxEYXRhKCkucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8g
cHJlZGljdGlvbiBmcm9tIHZhbHVlIHByb2ZpbGVzLCBjaGVjayBpZiB3ZSBtaWdodCBiZQorICAg
ICAgICAgICAgICAgIC8vIGFibGUgdG8gaW5mZXIgdGhlIHR5cGUgb3Vyc2VsdmVzLgorICAgICAg
ICAgICAgICAgIGJvb2wgaXNBcnJheSA9IGlzQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBib29sIGlzU3RyaW5nID0g
aXNTdHJpbmdQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsK
KyAgICAgICAgICAgICAgICBib29sIGlzQnl0ZUFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBib29sIGlzSW50
OEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXko
KTsKKyAgICAgICAgICAgICAgICBib29sIGlzSW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpOworICAgICAgICAgICAgICAgIGJvb2wg
aXNJbnQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQz
MkFycmF5KCk7CisgICAgICAgICAgICAgICAgYm9vbCBpc1VpbnQ4QXJyYXkgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKTsKKyAgICAgICAgICAgICAg
ICBib29sIGlzVWludDhDbGFtcGVkQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCk7CisgICAgICAgICAgICAgICAgYm9vbCBpc1Vp
bnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZB
cnJheSgpOworICAgICAgICAgICAgICAgIGJvb2wgaXNVaW50MzJBcnJheSA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKTsKKyAgICAgICAgICAgICAg
ICBib29sIGlzRmxvYXQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVGbG9hdDMyQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBib29sIGlzRmxvYXQ2NEFycmF5
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSB8fCBpc1N0cmluZyB8fCBpc0J5dGVBcnJheSB8
fCBpc0ludDhBcnJheSB8fCBpc0ludDE2QXJyYXkgfHwgaXNJbnQzMkFycmF5IHx8IGlzVWludDhB
cnJheSB8fCBpc1VpbnQ4Q2xhbXBlZEFycmF5IHx8IGlzVWludDE2QXJyYXkgfHwgaXNVaW50MzJB
cnJheSB8fCBpc0Zsb2F0MzJBcnJheSB8fCBpc0Zsb2F0NjRBcnJheSkKKyAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGljdEludDMyKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBHZXRCeUlkRmx1c2g6CisgICAgICAgICAgICBpZiAobm9kZS5nZXRIZWFwUHJlZGlj
dGlvbigpKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUu
Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpIHx8IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkgfHwgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkKKyAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldFByb3BlcnR5
U3RvcmFnZTogCisgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogeworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPdGhlcik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAg
ICAgICAgICAgIGlmIChub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBD
YWxsOgorICAgICAgICBjYXNlIENvbnN0cnVjdDogeworICAgICAgICAgICAgaWYgKG5vZGUuZ2V0
SGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHByZWRpY3Rpb24gJiB+UHJlZGljdE9iamVjdE1hc2spIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHJlZGljdGlvbiAmPSBQcmVkaWN0T2JqZWN0TWFzazsKKyAgICAgICAgICAgICAgICAg
ICAgcHJlZGljdGlvbiA9IG1lcmdlUHJlZGljdGlvbnMocHJlZGljdGlvbiwgUHJlZGljdE9iamVj
dE90aGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldEds
b2JhbFZhclByZWRpY3Rpb24obm9kZS52YXJOdW1iZXIoKSk7CisgICAgICAgICAgICBpZiAocHJl
ZGljdGlvbikKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVk
aWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6CisgICAgICAgIGNhc2UgUmVzb2x2ZToK
KyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmlj
dFB1dDoKKyAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLmdldEhlYXBQcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICBpZiAocHJlZGljdGlvbikKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZUNoYWluOiB7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24oUHJlZGljdENlbGxPdGhlcik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0Q2FsbGVlOiB7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdEZ1bmN0aW9uKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDcmVh
dGVUaGlzOgorICAgICAgICBjYXNlIE5ld09iamVjdDogeworICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAg
IGNhc2UgTmV3QXJyYXlCdWZmZXI6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihQcmVkaWN0QXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIE5ld1JlZ2V4cDogeworICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAg
IGNhc2UgU3RyQ2F0OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJl
ZGljdFN0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
Y2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IGlmIChjaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24oY2hp
bGQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEknZCBsb3ZlIHRvIGZvbGQgdGhpcyBjYXNl
IGludG8gdGhlIGNhc2UgYmVsb3csIGJ1dCBJIGNhbid0LCBiZWNhdXNlCisgICAgICAgICAgICAg
ICAgICAgIC8vIHJlbW92aW5nIFByZWRpY3RPYmplY3RNYXNrIGZyb20gc29tZXRoaW5nIHRoYXQg
b25seSBoYXMgYW4gb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rpb24gYW5k
IG5vdGhpbmcgZWxzZSBtZWFucyB3ZSBoYXZlIGFuIGlsbC1mb3JtZWQgUHJlZGljdGVkVHlwZQor
ICAgICAgICAgICAgICAgICAgICAvLyAoc3Ryb25nIHByZWRpY3Qtbm9uZSkuIFRoaXMgc2hvdWxk
IGJlIGtpbGxlZCBvbmNlIHdlIHJlbW92ZSBhbGwgdHJhY2VzCisgICAgICAgICAgICAgICAgICAg
IC8vIG9mIHN0YXRpYyAoYWthIHdlYWspIHByZWRpY3Rpb25zLgorICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGNoaWxkICYgUHJlZGljdE9iamVjdE1hc2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gT2JqZWN0cyBnZXQgdHVybmVkIGludG8gc3RyaW5ncy4gU28gaWYgdGhlIGlu
cHV0IGhhcyBoaW50cyBvZiBvYmplY3RuZXNzLAorICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
b3V0cHV0IHdpbGwgaGF2ZSBoaW5zdHMgb2Ygc3RyaW5naW5lc3MuCisgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMoY2hpbGQgJiB+
UHJlZGljdE9iamVjdE1hc2ssIFByZWRpY3RTdHJpbmcpKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oY2hpbGQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldEJ5dGVB
cnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6CisgICAgICAgIGNh
c2UgR2V0SW50MTZBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRJbnQzMkFycmF5TGVuZ3Ro
OgorICAgICAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0VWlu
dDhDbGFtcGVkQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6
CisgICAgICAgIGNhc2UgR2V0VWludDMyQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0Rmxv
YXQzMkFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEdldEZsb2F0NjRBcnJheUxlbmd0aDoKKyAg
ICAgICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBz
aG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBp
cworICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlz
IHBoYXNlLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIC8vIFRo
ZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCisgICAg
ICAgIGNhc2UgUHV0U2NvcGVkVmFyOgorICAgICAgICBjYXNlIERGRzo6SnVtcDoKKyAgICAgICAg
Y2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgQnJlYWtwb2ludDoKKyAgICAgICAgY2FzZSBSZXR1
cm46CisgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAgY2FzZSBQaGk6Cisg
ICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhy
b3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAgIGNh
c2UgU2V0QXJndW1lbnQ6CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1dEJ5SWRE
aXJlY3Q6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgQ2hlY2tG
dW5jdGlvbjoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUaGVz
ZSBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgorICAgICAgICBj
YXNlIFBoYW50b206CisgICAgICAgIGNhc2UgSW5saW5lU3RhcnQ6CisgICAgICAgIGNhc2UgTm9w
OgorICAgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIlc1xuIiwgcHJlZGljdGlvblRvU3Ry
aW5nKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOworI2VuZGlmCisgICAg
ICAgIAorICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBwcm9wYWdhdGVGb3J3YXJkKCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBm
b3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yIChtX2NvbXBp
bGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxl
SW5kZXgpCisgICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUJhY2t3YXJkKCkKKyAgICB7CisjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCJQcm9w
YWdhdGluZyBwcmVkaWN0aW9ucyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOworI2VuZGlm
CisgICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsgbV9jb21waWxl
SW5kZXgtLSA+IDA7KQorICAgICAgICAgICAgcHJvcGFnYXRlKG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdKTsKKyAgICB9CisKKyAgICB2b2lkIHZvdGUoTm9kZVVzZSBub2RlVXNlLCBWYXJpYWJsZUFj
Y2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3QpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhb
bm9kZVVzZV0ub3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGNhc2Ug
VUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICBub2RlVXNlID0gbV9ncmFwaFtub2RlVXNlXS5j
aGlsZDEoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoW25vZGVV
c2VdLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAgbV9ncmFwaFtub2RlVXNlXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZvdGUo
Tm9kZSYgbm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90KQorICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmly
c3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAg
ICAgIHZvdGUobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFub2Rl
LmNoaWxkMSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2b3RlKG5vZGUuY2hpbGQx
KCksIGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICBpZiAo
IW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZvdGUobm9kZS5j
aGlsZDMoKSwgYmFsbG90KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVW
b3RpbmcoKQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIGRhdGFMb2coIlZvdGluZyBvbiBkb3VibGUgdXNlcyBvZiBsb2NhbHMgWyV1XVxu
IiwgbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Z3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3RlcygpOworICAgICAg
ICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21waWxlSW5kZXggPCBtX2dyYXBoLnNpemUo
KTsgKyttX2NvbXBpbGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAg
ICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAg
ICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhOjpC
YWxsb3QgYmFsbG90OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc051
bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KQorICAgICAg
ICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVE
b3VibGU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiYWxsb3Qg
PSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICAgICAg
dm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBcml0aE11bDoK
KyAgICAgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAgICAgICBjYXNlIEFyaXRoTWF4Ogor
ICAgICAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsK
KyAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90OworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc051bWJlclByZWRpY3Rpb24obGVmdCkg
JiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXSkgJiYg
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgICAgICBiYWxsb3Qg
PSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVEb3VibGU7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVWYWx1
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQxKCks
IGJhbGxvdCk7CisgICAgICAgICAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGE6OkJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICAgICAgaWYgKCEobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0Rh
dGE6OlZvdGVEb3VibGU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVWYWx1ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFyaXRo
U3FydDoKKyAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQxKCksIFZhcmlhYmxlQWNjZXNz
RGF0YTo6Vm90ZURvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7
CisgICAgICAgICAgICAgICAgaWYgKGlzRG91YmxlUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWYXJpYWJs
ZUFjY2Vzc0RhdGE6OlZvdGVEb3VibGUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc051
bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlv
bikpCisgICAgICAgICAgICAgICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUo
VmFyaWFibGVBY2Nlc3NEYXRhOjpWb3RlVmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICB2b3RlKG5vZGUsIFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZVZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhW2ldLmZpbmQoKS0+dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeHVwTm9kZShOb2RlJiBub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CisKKyNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAgICVzIEAldTog
IiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4KTsKKyNlbmRpZgorICAgICAgICAK
KyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAg
ICAgIGlmICghaXNJbnQzMlByZWRpY3Rpb24obV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGlj
dGlvbigpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjb2RlQmxv
Y2soKS0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgp
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGJvb2wgaXNBcnJheSA9IGlzQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJvb2wgaXNTdHJpbmcgPSBpc1N0cmluZ1By
ZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOworICAgICAgICAg
ICAgYm9vbCBpc0J5dGVBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlQnl0ZUFycmF5KCk7CisgICAgICAgICAgICBib29sIGlzSW50OEFycmF5ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKTsKKyAgICAgICAgICAgIGJv
b2wgaXNJbnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJ
bnQxNkFycmF5KCk7CisgICAgICAgICAgICBib29sIGlzSW50MzJBcnJheSA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpOworICAgICAgICAgICAgYm9v
bCBpc1VpbnQ4QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVp
bnQ4QXJyYXkoKTsKKyAgICAgICAgICAgIGJvb2wgaXNVaW50OENsYW1wZWRBcnJheSA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKTsKKyAg
ICAgICAgICAgIGJvb2wgaXNVaW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKTsKKyAgICAgICAgICAgIGJvb2wgaXNVaW50MzJBcnJh
eSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKTsK
KyAgICAgICAgICAgIGJvb2wgaXNGbG9hdDMyQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpOworICAgICAgICAgICAgYm9vbCBpc0Zsb2F0
NjRBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFy
cmF5KCk7CisgICAgICAgICAgICBpZiAoIWlzQXJyYXkgJiYgIWlzU3RyaW5nICYmICFpc0J5dGVB
cnJheSAmJiAhaXNJbnQ4QXJyYXkgJiYgIWlzSW50MTZBcnJheSAmJiAhaXNJbnQzMkFycmF5ICYm
ICFpc1VpbnQ4QXJyYXkgJiYgIWlzVWludDhDbGFtcGVkQXJyYXkgJiYgIWlzVWludDE2QXJyYXkg
JiYgIWlzVWludDMyQXJyYXkgJiYgIWlzRmxvYXQzMkFycmF5ICYmICFpc0Zsb2F0NjRBcnJheSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgQCV1IC0+ICVz
IiwgbV9jb21waWxlSW5kZXgsIGlzQXJyYXkgPyAiR2V0QXJyYXlMZW5ndGgiIDogIkdldFN0cmlu
Z0xlbmd0aCIpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoaXNBcnJheSkKKyAgICAgICAgICAg
ICAgICBub2RlLm9wID0gR2V0QXJyYXlMZW5ndGg7CisgICAgICAgICAgICBlbHNlIGlmIChpc1N0
cmluZykKKyAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0U3RyaW5nTGVuZ3RoOworICAgICAg
ICAgICAgZWxzZSBpZiAoaXNCeXRlQXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdl
dEJ5dGVBcnJheUxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50OEFycmF5KQorICAg
ICAgICAgICAgICAgIG5vZGUub3AgPSBHZXRJbnQ4QXJyYXlMZW5ndGg7CisgICAgICAgICAgICBl
bHNlIGlmIChpc0ludDE2QXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldEludDE2
QXJyYXlMZW5ndGg7CisgICAgICAgICAgICBlbHNlIGlmIChpc0ludDMyQXJyYXkpCisgICAgICAg
ICAgICAgICAgbm9kZS5vcCA9IEdldEludDMyQXJyYXlMZW5ndGg7CisgICAgICAgICAgICBlbHNl
IGlmIChpc1VpbnQ4QXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldFVpbnQ4QXJy
YXlMZW5ndGg7CisgICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQ4Q2xhbXBlZEFycmF5KQorICAg
ICAgICAgICAgICAgIG5vZGUub3AgPSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlzVWludDE2QXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9
IEdldFVpbnQxNkFycmF5TGVuZ3RoOworICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50MzJBcnJh
eSkKKyAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0VWludDMyQXJyYXlMZW5ndGg7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc0Zsb2F0MzJBcnJheSkKKyAgICAgICAgICAgICAgICBub2RlLm9w
ID0gR2V0RmxvYXQzMkFycmF5TGVuZ3RoOworICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdDY0
QXJyYXkpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldEZsb2F0NjRBcnJheUxlbmd0aDsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOyAvLyBObyBsb25nZXIg
TXVzdEdlbmVyYXRlCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
YmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJl
ZGljdGlvbikgeworICAgICAgICAgICAgICAgIG5vZGUub3AgPSBOb3A7CisgICAgICAgICAgICAg
ICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOworICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihub2RlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LmNsZWFyQW5kRGVyZWZDaGlsZDMobm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZS5zZXRSZWZD
b3VudCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIGlmICghIW5vZGUuY2hpbGQz
KCkgJiYgbV9ncmFwaFtub2RlLmNoaWxkMygpXS5vcCA9PSBOb3ApCisgICAgICAgICAgICAgICAg
bm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IE5vZGVVc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBk
YXRhTG9nKCJcbiIpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQgZml4dXAoKQorICAg
IHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRh
dGFMb2coIlBlcmZvcm1pbmcgRml4dXBcbiIpOworI2VuZGlmCisgICAgICAgIGZvciAobV9jb21w
aWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGls
ZUluZGV4KQorICAgICAgICAgICAgZml4dXBOb2RlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsK
KyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIGJvb2wgbV9j
aGFuZ2VkOworCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
IHVuc2lnbmVkIG1fY291bnQ7CisjZW5kaWYKK307CisgICAgCit2b2lkIHBlcmZvcm1QcmVkaWN0
aW9uUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIHJ1blBoYXNlPFByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2VfaAorI2RlZmluZSBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQ
cm9wYWdhdGUgcHJlZGljdGlvbnMgZ2F0aGVyZWQgYXQgaGVhcCBsb2FkIHNpdGVzIGJ5IHRoZSB2
YWx1ZSBwcm9maWxlciwgYW5kCisvLyBmcm9tIHNsb3cgcGF0aCBleGVjdXRpb25zLCB0byBnZW5l
cmF0ZSBhIHByZWRpY3Rpb24gZm9yIGVhY2ggbm9kZSBpbiB0aGUgZ3JhcGguCisvLyBUaGlzIGlz
IGEgY3J1Y2lhbCBwaGFzZSBvZiBjb21waWxhdGlvbiwgc2luY2UgYmVmb3JlIHJ1bm5pbmcgdGhp
cyBwaGFzZSwgd2UKKy8vIGhhdmUgbm8gaWRlYSB3aGF0IHR5cGVzIGFueSBub2RlIChvciBtb3N0
IHZhcmlhYmxlcykgY291bGQgcG9zc2libHkgaGF2ZSwgdW5sZXNzCisvLyB0aGF0IG5vZGUgaXMg
ZWl0aGVyIGEgaGVhcCBsb2FkLCBhIGNhbGwsIGEgR2V0TG9jYWwgZm9yIGFuIGFyZ3VtZW50LCBv
ciBhbgorLy8gYXJpdGhtZXRpYyBvcCB0aGF0IGhhZCBkZWZpbml0ZWx5IHRha2VuIHNsb3cgcGF0
aC4gTW9zdCBub2RlcyAoZXZlbiBtb3N0CisvLyBhcml0aG1ldGljIG5vZGVzKSBkbyBub3QgcXVh
bGlmeSBmb3IgYW55IG9mIHRoZXNlIGNhdGVnb3JpZXMuIEJ1dCBhZnRlciBydW5uaW5nCisvLyB0
aGlzIHBoYXNlLCB3ZSdsbCBoYXZlIGZ1bGwgaW5mb3JtYXRpb24gZm9yIHRoZSBleHBlY3RlZCB0
eXBlIG9mIGVhY2ggbm9kZS4KKwordm9pZCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdy
YXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkc6OlBoYXNlCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAko
cmV2aXNpb24gMTA4MTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkRGR1Byb3BhZ2F0b3IuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVk
ZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgotI2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAi
REZHU2NvcmVCb2FyZC5oIgotI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgUHJvcGFnYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgUHJvcGFnYXRvcihHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFwaChncmFwaCkKLSAg
ICAgICAgLCBtX2dsb2JhbERhdGEoZ3JhcGgubV9nbG9iYWxEYXRhKQotICAgICAgICAsIG1fY29k
ZUJsb2NrKGdyYXBoLm1fY29kZUJsb2NrKQotICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhncmFw
aC5tX3Byb2ZpbGVkQmxvY2spCi0gICAgewotICAgICAgICAvLyBSZXBsYWNlbWVudHMgYXJlIHVz
ZWQgdG8gaW1wbGVtZW50IGxvY2FsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uLgot
ICAgICAgICBtX3JlcGxhY2VtZW50cy5yZXNpemUobV9ncmFwaC5zaXplKCkpOwotICAgICAgICAK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGguc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICBtX3JlcGxhY2VtZW50c1tpXSA9IE5vTm9kZTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBMYXN0Tm9kZUlkOyArK2kpCi0gICAgICAgICAgICBt
X2xhc3RTZWVuW2ldID0gTm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeHBvaW50KCkK
LSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwotI2VuZGlmCi0KLSAgICAgICAgcHJvcGFnYXRl
QXJpdGhOb2RlRmxhZ3MoKTsKLSAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnMoKTsKLSAgICAg
ICAgZml4dXAoKTsKLSAgICAgICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBwcm9wYWdhdGlvbiBmaXh1cDpc
biIpOwotICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwotI2VuZGlmCi0KLSAgICAg
ICAgbG9jYWxDU0UoKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgQ1NFOlxuIik7Ci0gICAgICAgIG1fZ3Jh
cGguZHVtcChtX2NvZGVCbG9jayk7Ci0jZW5kaWYKLQotICAgICAgICBhbGxvY2F0ZVZpcnR1YWxS
ZWdpc3RlcnMoKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0aW9u
OlxuIik7Ci0gICAgICAgIG1fZ3JhcGguZHVtcChtX2NvZGVCbG9jayk7Ci0jZW5kaWYKLQotICAg
ICAgICBnbG9iYWxDRkEoKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAg
ICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgcHJvcGFnYXRpb246XG4iKTsKLSAgICAgICAgbV9ncmFw
aC5kdW1wKG1fY29kZUJsb2NrKTsKLSNlbmRpZgotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAg
Ym9vbCBpc05vdE5lZ1plcm8oTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIGlm
ICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNv
bnN0YW50KG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUg
PCAwLjA7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNOb3RaZXJvKE5vZGVJbmRleCBub2RlSW5k
ZXgpCi0gICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5k
ZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gISFtX2dyYXBo
LnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKLSAgICAgICAgQXJpdGhOb2RlRmxhZ3MgZmxh
Z3MgPSAwOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzQXJpdGhOb2RlRmxhZ3MoKSkK
LSAgICAgICAgICAgIGZsYWdzID0gbm9kZS5yYXdBcml0aE5vZGVGbGFncygpOwotICAgICAgICAK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2coIiAgICVzIEAldTogJXMgIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4LCBh
cml0aE5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAg
IGZsYWdzICY9IE5vZGVVc2VkQXNNYXNrOwotICAgICAgICAKLSAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2Ug
VmFsdWVUb0ludDMyOgotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgY2FzZSBCaXRPcjoK
LSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0TFNoaWZ0OgotICAgICAgICBj
YXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7Ci0gICAgICAgICAgICAv
LyBUaGVzZSBvcGVyYXRpb25zIGFyZSBwZXJmZWN0bHkgaGFwcHkgd2l0aCB0cnVuY2F0ZWQgaW50
ZWdlcnMsCi0gICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCB3YW50IHRvIHByb3BhZ2F0ZSBhbnl0
aGluZy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBVSW50MzJUb051bWJlcjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgot
ICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgo
KSkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJn
ZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aFN1Yjogewot
ICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90
WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQotICAgICAgICAgICAgICAgIGZsYWdzICY9IH5O
b2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VBcml0aE5vZGVGbGFn
cyhmbGFncyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAg
ICAgIC8vIEFzIHNvb24gYXMgYSBtdWx0aXBseSBoYXBwZW5zLCB3ZSBjYW4gZWFzaWx5IGVuZCB1
cCBpbiB0aGUgcGFydAotICAgICAgICAgICAgLy8gb2YgdGhlIGRvdWJsZSBkb21haW4gd2hlcmUg
dGhlIHBvaW50IGF0IHdoaWNoIHlvdSBkbyB0cnVuY2F0aW9uCi0gICAgICAgICAgICAvLyBjYW4g
Y2hhbmdlIHRoZSBvdXRjb21lLiBTbywgQXJpdGhNdWwgYWx3YXlzIGNoZWNrcyBmb3Igb3ZlcmZs
b3cKLSAgICAgICAgICAgIC8vIG5vIG1hdHRlciB3aGF0LCBhbmQgYWx3YXlzIGZvcmNlcyBpdHMg
aW5wdXRzIHRvIGNoZWNrIGFzIHdlbGwuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZsYWdz
IHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3Mp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJp
dGhOb2RlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAgICBjYXNlIEFyaXRoTWF4OiB7
Ci0gICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3Mp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJp
dGhOb2RlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBmbGFncyAmPSB+
Tm9kZU5lZWRzTmVnWmVybzsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbDogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxh
Z3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VBcml0aE5vZGVGbGFn
cyhmbGFncyB8IE5vZGVVc2VkQXNOdW1iZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQzKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFz
TnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdz
IHwgTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8pOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3Mg
fCBOb2RlVXNlZEFzTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2Vk
QXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgaWYgKG9wICYgTm9kZUhh
c1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNo
aWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUFyaXRoTm9kZUZs
YWdzKGZsYWdzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFu
b2RlLmNoaWxkMSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhm
bGFncyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFub2RlLmNoaWxkMygpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VBcml0aE5vZGVGbGFn
cyhmbGFncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRh
TG9nKCIlc1xuIiwgY2hhbmdlZCA/ICJDSEFOR0VEIiA6ICIiKTsKLSNlbmRpZgotICAgICAgICAK
LSAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJv
cGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3YXJkKCkKLSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCJQcm9wYWdhdGluZyBhcml0
aG1ldGljIG5vZGUgZmxhZ3MgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwotI2VuZGlmCi0g
ICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGgu
c2l6ZSgpOyArK21fY29tcGlsZUluZGV4KQotICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2Rl
RmxhZ3MobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBy
b3BhZ2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKQotICAgIHsKLSNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIlByb3BhZ2F0aW5nIGFy
aXRobWV0aWMgbm9kZSBmbGFncyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwotI2VuZGlm
Ci0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsgbV9jb21waWxl
SW5kZXgtLSA+IDA7KQotICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MobV9ncmFw
aFttX2NvbXBpbGVJbmRleF0pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZUFyaXRo
Tm9kZUZsYWdzKCkKLSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICBtX2NvdW50ID0gMDsKLSNlbmRpZgotICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVXAg
aGVyZSB3ZSBzdGFydCB3aXRoIGEgYmFja3dhcmQgcGFzcyBiZWNhdXNlIHdlIHN1c3BlY3QgdGhh
dCB0byBiZQotICAgICAgICAgICAgLy8gbW9yZSBwcm9maXRhYmxlLgotICAgICAgICAgICAgcHJv
cGFnYXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2FyZCgpOwotICAgICAgICAgICAgaWYgKCFtX2NoYW5n
ZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3
YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOwotICAgICAgICAK
LSAgICAgICAgLy8gc2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3ZSBrbm93IHRoYXQgdGhl
cmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIGNoYW5nZQotICAgICAgICAvLyBvdXIgbWluZHMgYWJv
dXQgd2hhdCB0aGUgcHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhlcmUgaXMgbm8gc2VtYW50
aWMKLSAgICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRpY3Rpb24oKSBhbmQgbWVy
Z2VQcmVkaWN0aW9uKCkgb3RoZXIgdGhhbiB0aGUKLSAgICAgICAgLy8gaW5jcmVhc2VkIGNoZWNr
aW5nIHRvIHZhbGlkYXRlIHRoaXMgcHJvcGVydHkuCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW21f
Y29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0gUHJlZGljdE5vbmUgfHwgbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IHByZWRpY3Rpb24pOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJlZGljdGlvbik7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNS
ZXN1bHQoKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0ucHJlZGljdChwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBwcm9wYWdhdGVO
b2RlUHJlZGljdGlvbnMoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTm9k
ZVR5cGUgb3AgPSBub2RlLm9wOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3Ap
LCBtX2NvbXBpbGVJbmRleCk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNl
IEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6IHsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihwcmVkaWN0aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFs
dWVPZkpTQ29uc3RhbnQobV9jb21waWxlSW5kZXgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQotICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFNldExvY2FsOiB7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3QobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNo
aWZ0OgotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0Ogot
ICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAgIGNhc2UgQXJyYXlQ
dXNoOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKQotICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgU3Ry
aW5nQ2hhckNvZGVBdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
UHJlZGljdEludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBl
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzSW50MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSAmJiBub2Rl
Q2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQotICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oUHJlZGljdERvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsK
LSAgICAgICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihQcmVkaWN0
SW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihQcmVkaWN0TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBs
ZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rp
b24ocmlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVk
aWN0RG91YmxlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEobGVmdCAmIFByZWRpY3RO
dW1iZXIpIHx8ICEocmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBsZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBu
dW1iZXIuCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFBy
ZWRpY3RTdHJpbmcpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMy
IHwgUHJlZGljdERvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNh
c2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBy
aWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihQcmVkaWN0RG91YmxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgY2Fz
ZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0aERp
djogewotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVk
aWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSAmJiBub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQotICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGlj
dERvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdERvdWJsZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAg
ICAgICAgIFByZWRpY3RlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChjaGlsZCkgewotICAgICAgICAgICAgICAgIGlmIChu
b2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQotICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
UHJlZGljdERvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgY2Fz
ZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBjYXNl
IENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAgICAg
IGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKLSAgICAgICAg
Y2FzZSBJbnN0YW5jZU9mOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
UHJlZGljdEJvb2xlYW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGlmIChub2RlLmdldEhl
YXBQcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSA9PSBtX2dsb2JhbERh
dGEucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gcHJlZGljdGlvbiBmcm9tIHZhbHVlIHByb2ZpbGVzLCBjaGVjayBpZiB3ZSBtaWdodCBi
ZQotICAgICAgICAgICAgICAgIC8vIGFibGUgdG8gaW5mZXIgdGhlIHR5cGUgb3Vyc2VsdmVzLgot
ICAgICAgICAgICAgICAgIGJvb2wgaXNBcnJheSA9IGlzQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgICAgICBib29sIGlzU3Ry
aW5nID0gaXNTdHJpbmdQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpKTsKLSAgICAgICAgICAgICAgICBib29sIGlzQnl0ZUFycmF5ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBib29s
IGlzSW50OEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4
QXJyYXkoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzSW50MTZBcnJheSA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpOwotICAgICAgICAgICAgICAg
IGJvb2wgaXNJbnQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVJbnQzMkFycmF5KCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc1VpbnQ4QXJyYXkgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKTsKLSAgICAgICAg
ICAgICAgICBib29sIGlzVWludDhDbGFtcGVkQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCk7Ci0gICAgICAgICAgICAgICAgYm9v
bCBpc1VpbnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVV
aW50MTZBcnJheSgpOwotICAgICAgICAgICAgICAgIGJvb2wgaXNVaW50MzJBcnJheSA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKTsKLSAgICAgICAg
ICAgICAgICBib29sIGlzRmxvYXQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzRmxvYXQ2
NEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJy
YXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSB8fCBpc1N0cmluZyB8fCBpc0J5dGVB
cnJheSB8fCBpc0ludDhBcnJheSB8fCBpc0ludDE2QXJyYXkgfHwgaXNJbnQzMkFycmF5IHx8IGlz
VWludDhBcnJheSB8fCBpc1VpbnQ4Q2xhbXBlZEFycmF5IHx8IGlzVWludDE2QXJyYXkgfHwgaXNV
aW50MzJBcnJheSB8fCBpc0Zsb2F0MzJBcnJheSB8fCBpc0Zsb2F0NjRBcnJheSkKLSAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGljdEludDMyKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6Ci0gICAgICAgICAgICBpZiAobm9kZS5nZXRIZWFw
UHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpIHx8IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkgfHwgbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkKLSAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFBy
b3BlcnR5U3RvcmFnZTogCi0gICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTog
ewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPdGhlcik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6
IHsKLSAgICAgICAgICAgIGlmIChub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpCi0gICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDogewotICAgICAgICAgICAgaWYgKG5v
ZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0g
ICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHByZWRpY3Rpb24gJiB+UHJlZGljdE9iamVjdE1hc2spIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHJlZGljdGlvbiAmPSBQcmVkaWN0T2JqZWN0TWFzazsKLSAgICAgICAgICAg
ICAgICAgICAgcHJlZGljdGlvbiA9IG1lcmdlUHJlZGljdGlvbnMocHJlZGljdGlvbiwgUHJlZGlj
dE9iamVjdE90aGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0R2xv
YmFsVmFyOiB7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBo
LmdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZS52YXJOdW1iZXIoKSk7Ci0gICAgICAgICAgICBp
ZiAocHJlZGljdGlvbikKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihwcmVkaWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6Ci0gICAgICAgIGNhc2UgUmVz
b2x2ZToKLSAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKLSAgICAgICAgY2FzZSBSZXNvbHZlQmFz
ZVN0cmljdFB1dDoKLSAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7Ci0gICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLmdldEhlYXBQcmVkaWN0aW9uKCk7Ci0gICAg
ICAgICAgICBpZiAocHJlZGljdGlvbikKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihwcmVkaWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRTY29wZUNoYWluOiB7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdENlbGxPdGhlcik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0Q2FsbGVlOiB7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdEZ1bmN0aW9uKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBDcmVhdGVUaGlzOgotICAgICAgICBjYXNlIE5ld09iamVjdDogewotICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RGaW5hbE9iamVjdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3QXJyYXk6Ci0g
ICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihQcmVkaWN0QXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5ld1JlZ2V4cDogewotICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPYmplY3RPdGhlcik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0g
ICAgICAgIGNhc2UgU3RyQ2F0OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oUHJlZGljdFN0cmluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgICAgIFByZWRpY3Rl
ZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAg
ICAgICAgIGlmIChjaGlsZCkgewotICAgICAgICAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rp
b24oY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEknZCBsb3ZlIHRvIGZvbGQgdGhp
cyBjYXNlIGludG8gdGhlIGNhc2UgYmVsb3csIGJ1dCBJIGNhbid0LCBiZWNhdXNlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHJlbW92aW5nIFByZWRpY3RPYmplY3RNYXNrIGZyb20gc29tZXRoaW5n
IHRoYXQgb25seSBoYXMgYW4gb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rp
b24gYW5kIG5vdGhpbmcgZWxzZSBtZWFucyB3ZSBoYXZlIGFuIGlsbC1mb3JtZWQgUHJlZGljdGVk
VHlwZQotICAgICAgICAgICAgICAgICAgICAvLyAoc3Ryb25nIHByZWRpY3Qtbm9uZSkuIFRoaXMg
c2hvdWxkIGJlIGtpbGxlZCBvbmNlIHdlIHJlbW92ZSBhbGwgdHJhY2VzCi0gICAgICAgICAgICAg
ICAgICAgIC8vIG9mIHN0YXRpYyAoYWthIHdlYWspIHByZWRpY3Rpb25zLgotICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkICYgUHJlZGljdE9iamVjdE1hc2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gT2JqZWN0cyBnZXQgdHVybmVkIGludG8gc3RyaW5ncy4gU28gaWYg
dGhlIGlucHV0IGhhcyBoaW50cyBvZiBvYmplY3RuZXNzLAotICAgICAgICAgICAgICAgICAgICAv
LyB0aGUgb3V0cHV0IHdpbGwgaGF2ZSBoaW5zdHMgb2Ygc3RyaW5naW5lc3MuCi0gICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMoY2hp
bGQgJiB+UHJlZGljdE9iamVjdE1hc2ssIFByZWRpY3RTdHJpbmcpKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
Y2hpbGQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdl
dEJ5dGVBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6Ci0gICAg
ICAgIGNhc2UgR2V0SW50MTZBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRJbnQzMkFycmF5
TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2Ug
R2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDE2QXJyYXlM
ZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2Ug
R2V0RmxvYXQzMkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEZsb2F0NjRBcnJheUxlbmd0
aDoKLSAgICAgICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6IHsKLSAgICAgICAgICAgIC8vIFRoaXMg
bm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9u
LiBJdCBpcwotICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93
cyB0aGlzIHBoYXNlLgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAg
IC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcu
Ci0gICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICBjYXNlIERGRzo6SnVtcDoKLSAg
ICAgICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgIGNhc2UgQnJlYWtwb2ludDoKLSAgICAgICAgY2Fz
ZSBSZXR1cm46Ci0gICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKLSAgICAgICAgY2FzZSBQ
aGk6Ci0gICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIGNhc2UgVGhyb3c6Ci0gICAgICAgIGNh
c2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKLSAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6Ci0gICAg
ICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgY2FzZSBQdXRCeUlkOgotICAgICAgICBjYXNlIFB1
dEJ5SWREaXJlY3Q6Ci0gICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2Ug
Q2hlY2tGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAv
LyBUaGVzZSBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgotICAg
ICAgICBjYXNlIFBoYW50b206Ci0gICAgICAgIGNhc2UgSW5saW5lU3RhcnQ6Ci0gICAgICAgIGNh
c2UgTm9wOgotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZQotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0jaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIlc1xuIiwgcHJlZGljdGlv
blRvU3RyaW5nKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOwotI2VuZGlm
Ci0gICAgICAgIAotICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKQotICAgIHsKLSNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIlByb3BhZ2F0
aW5nIHByZWRpY3Rpb25zIGZvcndhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKLSNlbmRpZgotICAg
ICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21waWxlSW5kZXggPCBtX2dyYXBoLnNp
emUoKTsgKyttX2NvbXBpbGVJbmRleCkKLSAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGVQcmVkaWN0
aW9ucyhtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJv
cGFnYXRlUHJlZGljdGlvbnNCYWNrd2FyZCgpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiUHJvcGFnYXRpbmcgcHJlZGlj
dGlvbnMgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKLSNlbmRpZgotICAgICAgICBmb3Ig
KG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4LS0gPiAwOykK
LSAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyhtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdm90ZShOb2RlVXNlIG5vZGVVc2UsIFZhcmlh
YmxlQWNjZXNzRGF0YTo6QmFsbG90IGJhbGxvdCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9n
cmFwaFtub2RlVXNlXS5vcCkgewotICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAg
Y2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgIG5vZGVVc2UgPSBtX2dyYXBoW25vZGVV
c2VdLmNoaWxkMSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhb
bm9kZVVzZV0ub3AgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBtX2dyYXBoW25vZGVVc2VdLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
dm90ZShOb2RlJiBub2RlLCBWYXJpYWJsZUFjY2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3QpCi0gICAg
ewotICAgICAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9k
ZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAg
ICAgICAgICAgdm90ZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBiYWxsb3Qp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5vZGUuY2hpbGQxKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5j
aGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7Ci0gICAgICAg
IGlmICghbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShu
b2RlLmNoaWxkMygpLCBiYWxsb3QpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGRvUm91bmRPZkRv
dWJsZVZvdGluZygpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgZGF0YUxvZygiVm90aW5nIG9uIGRvdWJsZSB1c2VzIG9mIGxvY2FscyBb
JXVdXG4iLCBtX2NvdW50KTsKLSNlbmRpZgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7Ci0g
ICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGgu
c2l6ZSgpOyArK21fY29tcGlsZUluZGV4KSB7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAg
ICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAg
ICAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
bGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rp
b24oKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGE6OkJhbGxvdCBiYWxsb3Q7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpCi0g
ICAgICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6
Vm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJh
bGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZVZhbHVlOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAg
ICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFyaXRo
TXVsOgotICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhN
YXg6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgotICAgICAgICAgICAgY2FzZSBBcml0aERp
djogewotICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmln
aHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3Q7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihs
ZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpICYmICEoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQxKCld
KSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkpCi0gICAgICAgICAgICAgICAgICAgIGJh
bGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90
ZVZhbHVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGls
ZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxv
dCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIEFyaXRoQWJzOgotICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YTo6QmFsbG90IGJhbGxvdDsKLSAgICAgICAgICAgICAgICBpZiAoIShtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBub2RlLmNhblNwZWN1
bGF0ZUludGVnZXIoKSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZhcmlhYmxlQWNj
ZXNzRGF0YTo6Vm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGJhbGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZVZhbHVlOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
QXJpdGhTcXJ0OgotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgVmFyaWFibGVB
Y2Nlc3NEYXRhOjpWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNEb3VibGVQcmVkaWN0aW9uKHByZWRpY3Rpb24p
KQotICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZh
cmlhYmxlQWNjZXNzRGF0YTo6Vm90ZURvdWJsZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
IWlzTnVtYmVyUHJlZGljdGlvbihwcmVkaWN0aW9uKSB8fCBpc0ludDMyUHJlZGljdGlvbihwcmVk
aWN0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
dm90ZShWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHZvdGUobm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpWb3RlVmFs
dWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJp
YWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT50YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9y
bWF0KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJvcGFnYXRlUHJlZGljdGlvbnMoKQotICAg
IHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIG1f
Y291bnQgPSAwOwotI2VuZGlmCi0gICAgICAgIC8vIFR3byBzdGFnZSBwcm9jZXNzOiBmaXJzdCBw
cm9wYWdhdGUgcHJlZGljdGlvbnMsIHRoZW4gcHJvcGFnYXRlIHdoaWxlIGRvaW5nIGRvdWJsZSB2
b3RpbmcuCi0gICAgICAgIAotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBp
cyBuZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCi0gICAgICAg
ICAgICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9u
c0ZvcndhcmQoKTsKLSAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlv
biByZWR1Y2VzIHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAotICAg
ICAgICAgICAgLy8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVz
KSByZXNlbWJsZSBiYWNrd2FyZCBmbG93LgotICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1
cmVzIHR3byBjYXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKLSAg
ICAgICAgICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0
cyBiYWNrd2FyZCBmbG93LgotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0JhY2t3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1f
Y2hhbmdlZCk7Ci0gICAgICAgIAotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIGRvUm91bmRPZkRvdWJsZVZvdGluZygpOwotICAgICAgICAg
ICAgcHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hh
bmdlZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKTsK
LSAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25zQmFja3dhcmQoKTsKLSAgICAgICAgfSB3
aGlsZSAobV9jaGFuZ2VkKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXh1cE5vZGUoTm9kZSYg
bm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwot
Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRh
TG9nKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7Ci0j
ZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBHZXRC
eUlkOiB7Ci0gICAgICAgICAgICBpZiAoIWlzSW50MzJQcmVkaWN0aW9uKG1fZ3JhcGhbbV9jb21w
aWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBpZiAobV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkp
ICE9IG1fZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBib29sIGlzQXJyYXkgPSBpc0FycmF5UHJlZGljdGlvbihtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzU3Ry
aW5nID0gaXNTdHJpbmdQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpKTsKLSAgICAgICAgICAgIGJvb2wgaXNCeXRlQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnNob3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0ludDhB
cnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCk7
Ci0gICAgICAgICAgICBib29sIGlzSW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0ludDMyQXJy
YXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKTsK
LSAgICAgICAgICAgIGJvb2wgaXNVaW50OEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzVWludDhDbGFt
cGVkQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xh
bXBlZEFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzVWludDE2QXJyYXkgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCk7Ci0gICAgICAgICAgICBi
b29sIGlzVWludDMyQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0
ZVVpbnQzMkFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzRmxvYXQzMkFycmF5ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKTsKLSAgICAgICAg
ICAgIGJvb2wgaXNGbG9hdDY0QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNw
ZWN1bGF0ZUZsb2F0NjRBcnJheSgpOwotICAgICAgICAgICAgaWYgKCFpc0FycmF5ICYmICFpc1N0
cmluZyAmJiAhaXNCeXRlQXJyYXkgJiYgIWlzSW50OEFycmF5ICYmICFpc0ludDE2QXJyYXkgJiYg
IWlzSW50MzJBcnJheSAmJiAhaXNVaW50OEFycmF5ICYmICFpc1VpbnQ4Q2xhbXBlZEFycmF5ICYm
ICFpc1VpbnQxNkFycmF5ICYmICFpc1VpbnQzMkFycmF5ICYmICFpc0Zsb2F0MzJBcnJheSAmJiAh
aXNGbG9hdDY0QXJyYXkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgIEAldSAtPiAlcyIsIG1fY29tcGlsZUluZGV4LCBpc0FycmF5ID8gIkdldEFycmF5TGVu
Z3RoIiA6ICJHZXRTdHJpbmdMZW5ndGgiKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGlzQXJy
YXkpCi0gICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldEFycmF5TGVuZ3RoOwotICAgICAgICAg
ICAgZWxzZSBpZiAoaXNTdHJpbmcpCi0gICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldFN0cmlu
Z0xlbmd0aDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQnl0ZUFycmF5KQotICAgICAgICAgICAg
ICAgIG5vZGUub3AgPSBHZXRCeXRlQXJyYXlMZW5ndGg7Ci0gICAgICAgICAgICBlbHNlIGlmIChp
c0ludDhBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0SW50OEFycmF5TGVuZ3Ro
OwotICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQxNkFycmF5KQotICAgICAgICAgICAgICAgIG5v
ZGUub3AgPSBHZXRJbnQxNkFycmF5TGVuZ3RoOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQz
MkFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUub3AgPSBHZXRJbnQzMkFycmF5TGVuZ3RoOwot
ICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50OEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUu
b3AgPSBHZXRVaW50OEFycmF5TGVuZ3RoOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50OENs
YW1wZWRBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0VWludDhDbGFtcGVkQXJy
YXlMZW5ndGg7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQxNkFycmF5KQotICAgICAgICAg
ICAgICAgIG5vZGUub3AgPSBHZXRVaW50MTZBcnJheUxlbmd0aDsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGlzVWludDMyQXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5vcCA9IEdldFVpbnQzMkFy
cmF5TGVuZ3RoOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdDMyQXJyYXkpCi0gICAgICAg
ICAgICAgICAgbm9kZS5vcCA9IEdldEZsb2F0MzJBcnJheUxlbmd0aDsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGlzRmxvYXQ2NEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUub3AgPSBHZXRGbG9h
dDY0QXJyYXlMZW5ndGg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4
KTsgLy8gTm8gbG9uZ2VyIE11c3RHZW5lcmF0ZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAg
ICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5w
cmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIShiYXNlUHJlZGljdGlvbiAmIFByZWRpY3RJ
bnQzMikgJiYgYmFzZVByZWRpY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBub2RlLm9wID0gTm9w
OwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKLSAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7Ci0gICAgICAg
ICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQzKG5vZGUpOwotICAgICAgICAgICAg
ICAgIG5vZGUuc2V0UmVmQ291bnQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJBdDoKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAgICAgICBp
ZiAoISFub2RlLmNoaWxkMygpICYmIG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AgPT0gTm9wKQot
ICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBOb2RlVXNlKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICB2
b2lkIGZpeHVwKCkKLSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICBkYXRhTG9nKCJQZXJmb3JtaW5nIEZpeHVwXG4iKTsKLSNlbmRpZgotICAg
ICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21waWxlSW5kZXggPCBtX2dyYXBoLnNp
emUoKTsgKyttX2NvbXBpbGVJbmRleCkKLSAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21f
Y29tcGlsZUluZGV4XSk7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUo
Tm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9O
b2RlKQotICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgCi0gICAgICAgIGlmICht
X2dyYXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgbm9kZUlu
ZGV4ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgIAotICAg
ICAgICByZXR1cm4gbm9kZUluZGV4OwotICAgIH0KLSAgICBOb2RlSW5kZXggY2Fub25pY2FsaXpl
KE5vZGVVc2Ugbm9kZVVzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobm9k
ZVVzZS5pbmRleFVuY2hlY2tlZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ29tcHV0ZXMgd2hl
cmUgdGhlIHNlYXJjaCBmb3IgYSBjYW5kaWRhdGUgZm9yIENTRSBzaG91bGQgc3RhcnQuIERvbid0
IGNhbGwKLSAgICAvLyB0aGlzIGRpcmVjdGx5OyBjYWxsIHN0YXJ0SW5kZXgoKSBpbnN0ZWFkIGFz
IGl0IGRvZXMgbG9nZ2luZyBpbiBkZWJ1ZyBtb2RlLgotICAgIE5vZGVJbmRleCBjb21wdXRlU3Rh
cnRJbmRleEZvckNoaWxkcmVuKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCi0gICAgewotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBsaW1pdCA9IDMwMDsKLSAgICAgICAgCi0gICAgICAgIE5vZGVJbmRl
eCBzdGFydCA9IG1fc3RhcnQ7Ci0gICAgICAgIGlmIChtX2NvbXBpbGVJbmRleCAtIHN0YXJ0ID4g
bGltaXQpCi0gICAgICAgICAgICBzdGFydCA9IG1fY29tcGlsZUluZGV4IC0gbGltaXQ7Ci0gICAg
ICAgIAotICAgICAgICBBU1NFUlQoc3RhcnQgPj0gbV9zdGFydCk7Ci0gICAgICAgIAotICAgICAg
ICBOb2RlSW5kZXggY2hpbGQgPSBjYW5vbmljYWxpemUoY2hpbGQxKTsKLSAgICAgICAgaWYgKGNo
aWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGFydDsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzdGFydCA8IGNoaWxkKQotICAgICAgICAgICAgc3RhcnQgPSBjaGlsZDsKLSAgICAg
ICAgCi0gICAgICAgIGNoaWxkID0gY2Fub25pY2FsaXplKGNoaWxkMik7Ci0gICAgICAgIGlmIChj
aGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RhcnQ7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc3RhcnQgPCBjaGlsZCkKLSAgICAgICAgICAgIHN0YXJ0ID0gY2hpbGQ7Ci0gICAg
ICAgIAotICAgICAgICBjaGlsZCA9IGNhbm9uaWNhbGl6ZShjaGlsZDMpOwotICAgICAgICBpZiAo
Y2hpbGQgPT0gTm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0YXJ0IDwgY2hpbGQpCi0gICAgICAgICAgICBzdGFydCA9IGNoaWxkOwotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgIH0KLSAgICAKLSAgICBOb2RlSW5kZXgg
c3RhcnRJbmRleEZvckNoaWxkcmVuKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRl
eCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCi0gICAgewotICAg
ICAgICBOb2RlSW5kZXggcmVzdWx0ID0gY29tcHV0ZVN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgbG9va2JhY2sgJXU6ICIsIHJlc3VsdCk7Ci0jZW5k
aWYKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IHN0
YXJ0SW5kZXgoKQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdOwotICAgICAgICByZXR1cm4gc3RhcnRJbmRleEZvckNoaWxkcmVuKAotICAgICAgICAg
ICAgbm9kZS5jaGlsZDEoKS5pbmRleFVuY2hlY2tlZCgpLAotICAgICAgICAgICAgbm9kZS5jaGls
ZDIoKS5pbmRleFVuY2hlY2tlZCgpLAotICAgICAgICAgICAgbm9kZS5jaGlsZDMoKS5pbmRleFVu
Y2hlY2tlZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IGVuZEluZGV4Rm9yUHVyZUNT
RSgpCi0gICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0ID0gbV9sYXN0U2VlblttX2dyYXBo
W21fY29tcGlsZUluZGV4XS5vcCAmIE5vZGVJZE1hc2tdOwotICAgICAgICBpZiAocmVzdWx0ID09
IE5vTm9kZSkKLSAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJlc3VsdCsrOwotICAgICAgICBBU1NFUlQocmVzdWx0IDw9IG1fY29tcGlsZUluZGV4KTsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2coIiAgbGltaXQgJXU6ICIsIHJlc3VsdCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IHB1cmVDU0UoTm9kZSYgbm9kZSkKLSAgICB7
Ci0gICAgICAgIE5vZGVJbmRleCBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgIE5vZGVJbmRleCBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDMoKSk7
Ci0gICAgICAgIAotICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4KCk7Ci0gICAg
ICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGluZGV4LS0g
PiBzdGFydDspIHsKLSAgICAgICAgICAgIE5vZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OwotICAgICAgICAgICAgaWYgKG5vZGUub3AgIT0gb3RoZXJOb2RlLm9wKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5hcml0aE5v
ZGVGbGFnc0ZvckNvbXBhcmUoKSAhPSBvdGhlck5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJl
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQxKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNo
aWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBpZiAo
b3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAg
ICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQyKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXpl
KG90aGVyTm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05v
ZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgaWYgKG90aGVy
Q2hpbGQgIT0gY2hpbGQzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBu
b2RlKQotICAgIHsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVy
UHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpOwotICAgIH0KLSAg
ICAKLSAgICBib29sIGxvZ2ljYWxOb3RJc1B1cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpOwotICAgICAgICByZXR1cm4gaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSB8
fCAhcHJlZGljdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBu
b2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAmJiAoKG5vZGUub3AgPT0gUHV0QnlWYWwg
fHwgbm9kZS5vcCA9PSBQdXRCeVZhbEFsaWFzKQotICAgICAgICAgICAgICAgID8gaXNBY3Rpb25h
YmxlTXV0YWJsZUFycmF5UHJlZGljdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKSkKLSAgICAgICAgICAgICAgICA6IGlzQWN0aW9uYWJsZUFycmF5UHJlZGljdGlvbihtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkpOwotICAgIH0KLSAgICAKLSAgICBib29s
IGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlmIChub2RlLm9wICYgTm9kZUNs
b2JiZXJzV29ybGQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobm9k
ZS5vcCAmIE5vZGVNaWdodENsb2JiZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAg
Y2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBj
YXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAg
ICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVy
aWNhbChub2RlKTsKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgICAgICAgICAgcmV0dXJu
ICFsb2dpY2FsTm90SXNQdXJlKG5vZGUpOwotICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAg
ICAgICAgcmV0dXJuICFieVZhbElzUHVyZShub2RlKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8v
IElmIGJ5IHNvbWUgb2RkaXR5IHdlIGhpdCB0aGlzIGNhc2UgaW4gcmVsZWFzZSBidWlsZCBpdCdz
IHNhZmVyIHRvIGhhdmUgQ1NFIGFzc3VtZSB0aGUgd29yc3QuCi0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgTm9kZUluZGV4IGltcHVyZUNTRShOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMSA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMiA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMyA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMygpKTsKLSAgICAgICAg
Ci0gICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKLSAgICAgICAgZm9yIChO
b2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgewotICAg
ICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBp
ZiAobm9kZS5vcCA9PSBvdGhlck5vZGUub3AKLSAgICAgICAgICAgICAgICAmJiBub2RlLmFyaXRo
Tm9kZUZsYWdzRm9yQ29tcGFyZSgpID09IG90aGVyTm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBh
cmUoKSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2Fs
aXplKG90aGVyTm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQg
PT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAg
ICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gY2hpbGQxKSB7Ci0gICAgICAgICAgICAgICAgICAgIG90
aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBj
aGlsZDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxp
emUob3RoZXJOb2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhl
ckNoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBjaGlsZDMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBnbG9i
YWxWYXJMb2FkRWxpbWluYXRpb24odW5zaWduZWQgdmFyTnVtYmVyLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRl
eEZvckNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxl
SW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW2luZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkg
PT0gdmFyTnVtYmVyICYmIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3Jp
Z2luKSA9PSBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgot
ICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGlu
ZGV4KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Tm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRp
b24oTm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMikKLSAgICB7Ci0gICAgICAgIE5v
ZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEsIGNoaWxkMik7Ci0g
ICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBz
dGFydDspIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAg
ICAgICAgICAgICAgICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNo
aWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxk
MikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5
VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKCFieVZhbElzUHVyZShub2RlKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5j
aGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9u
aWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMo
KS5pbmRleCgpOwotICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYXNzdW1lIHRoYXQgdGhlIFB1
dEJ5VmFsIHdpbGwgY2xvYmJlciB0aGUgbG9jYXRpb24gd2UncmUgZ2V0dGluZyBmcm9tLgotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVyOyBpZiB3ZSBrbm93IHRoYXQg
dGhlIFB1dEJ5VmFsIGlzIGFjY2Vzc2luZyBhbiBhcnJheSBvZiBhCi0gICAgICAgICAgICAgICAg
Ly8gZGlmZmVyZW50IHR5cGUgdGhhbiB0aGUgR2V0QnlWYWwsIHRoZW4gd2Uga25vdyB0aGF0IHRo
ZXkgd29uJ3QgY2xvYmJlciBlYWNoIG90aGVyLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7Ci0gICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgIGNhc2UgUHV0
QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgLy8gR2V0QnlWYWwgY3VycmVudGx5IGFsd2F5cyBz
cGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4KLSAgICAgICAgICAgICAgICAvLyBhcnJh
eSB3aXRoIGFuIGludGVnZXIgaW5kZXgsIHdoaWNoIG1lYW5zIHRoYXQgaXQncyBpbXBvc3NpYmxl
Ci0gICAgICAgICAgICAgICAgLy8gZm9yIGEgc3RydWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBw
cm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAotICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZh
bC4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgot
ICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3Rp
bmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAg
ICB9Ci0KLSAgICBib29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihKU0Z1bmN0aW9uKiBmdW5j
dGlvbiwgTm9kZUluZGV4IGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBzdGFydCA9
IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOwotICAgICAgICBmb3IgKE5vZGVJbmRleCBp
bmRleCA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpbmRleC0tID4gc3RhcnQ7KSB7Ci0gICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5v
cCA9PSBDaGVja0Z1bmN0aW9uICYmIG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuZnVu
Y3Rpb24oKSA9PSBmdW5jdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBjaGVja1N0cnVj
dHVyZUxvYWRFbGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9k
ZUluZGV4IGNoaWxkMSkKLSAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5k
ZXhGb3JDaGlsZHJlbihjaGlsZDEpOwotICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1f
Y29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7Ci0gICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hp
bGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5pc1N1
cGVyc2V0T2Yobm9kZS5zdHJ1Y3R1cmVTZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlu
cyhub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNl
dC5jb250YWlucyhub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1
cmUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0Ogot
ICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgYSBwcm9wZXJ0eSBjYW5ub3QgY2hhbmdlIHRoZSBz
dHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgot
ICAgICAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJy
YXkgd2l0aCBhbgotICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0
J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChp
bmRleCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQxKQotICAgIHsKLSAgICAg
ICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7Ci0gICAg
ICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFy
dDspIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAg
ICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0g
ICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBjYW5ub3QgY2hhbmdlIHRo
ZSBvdXRjb21lIG9mIGEgcHJvcGVydHkgZ2V0LgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0
J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW50
ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0
dXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICBOb2RlSW5kZXggZ2V0UHJv
cGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEpCi0gICAgewotICAg
ICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxKTsKLSAg
ICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0
YXJ0OykgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgICAgICAgICBjYXNlIEdldFByb3BlcnR5U3Rv
cmFnZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGUgc3Ry
dWN0dXJlIG9yIHB1dHRpbmcgdG8gdGhlIHN0b3JhZ2UgY2Fubm90Ci0gICAgICAgICAgICAgICAg
Ly8gY2hhbmdlIHRoZSBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChieVZhbElz
UHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxh
dGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgotICAgICAgICAgICAgICAg
ICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1
c2UgYSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgfQotCi0gICAgTm9kZUluZGV4
IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxk
MSwgYm9vbCBoYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgTm9kZUlu
ZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7Ci0gICAgICAgIGZvciAo
Tm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCkgewotICAgICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OiB7Ci0gICAgICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBiYXNlUHJlZGljdGlvbiA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIGJvb2wgbm9k
ZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPSAhKCEoYmFzZVByZWRpY3Rpb24gJiBQcmVkaWN0
SW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDEoKSA9PSBjaGlsZDEgJiYgaGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9PSBub2RlSGFzSW50
ZWdlckluZGV4UHJlZGljdGlvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAg
ICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdl
IGNhbm5vdAotICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcHJvcGVydHkgc3RvcmFnZSBw
b2ludGVyLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIC8vIFB1dEJ5VmFsQWxp
YXMgY2FuJ3QgY2hhbmdlIHRoZSBpbmRleGVkIHN0b3JhZ2UgcG9pbnRlcgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoK
LSAgICAgICAgICAgICAgICBpZiAoaXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlv
bihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgJiYgYnlWYWxJc1B1cmUobm9k
ZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNsb2Ji
ZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBOb05vZGU7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBnZXRTY29wZUNoYWluTG9h
ZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGRlcHRoKQotICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHN0
YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAoTm9kZUluZGV4IGlu
ZGV4ID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGluZGV4LS0gPiBzdGFydDspIHsKLSAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9w
ID09IEdldFNjb3BlQ2hhaW4KLSAgICAgICAgICAgICAgICAmJiBub2RlLnNjb3BlQ2hhaW5EZXB0
aCgpID09IGRlcHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBlcmZvcm1TdWJz
dGl0dXRpb24oTm9kZVVzZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKLSAgICB7Ci0gICAg
ICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCi0gICAgICAg
IGlmICghY2hpbGQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAvLyBD
aGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5vZGVJbmRleCByZXBs
YWNlbWVudCA9IG1fcmVwbGFjZW1lbnRzW2NoaWxkLmluZGV4KCldOwotICAgICAgICBpZiAocmVw
bGFjZW1lbnQgPT0gTm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAg
ICAgY2hpbGQuc2V0SW5kZXgocmVwbGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhl
cmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1l
bnQgZG9lcyBub3QKLSAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NF
UlQobV9yZXBsYWNlbWVudHNbY2hpbGQuaW5kZXgoKV0gPT0gTm9Ob2RlKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChhZGRSZWYpCi0gICAgICAgICAgICBtX2dyYXBoW2NoaWxkXS5yZWYoKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzZXRSZXBsYWNlbWVudChOb2RlSW5kZXggcmVwbGFjZW1lbnQp
Ci0gICAgewotICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZv
cm0gcmVwbGFjZW1lbnRzIGlmIHRoZSBwcmVkaWN0aW9ucyBkb24ndAotICAgICAgICAvLyBhZ3Jl
ZS4KLSAgICAgICAgaWYgKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSAhPSBt
X2dyYXBoW3JlcGxhY2VtZW50XS5wcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgZGF0YUxvZygiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2NvbXBpbGVJbmRleCwgcmVw
bGFjZW1lbnQpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIG5vZGUub3AgPSBQaGFudG9tOwotICAgICAgICBu
b2RlLnNldFJlZkNvdW50KDEpOwotICAgICAgICAKLSAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3
ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCi0gICAgICAgIG1f
cmVwbGFjZW1lbnRzW21fY29tcGlsZUluZGV4XSA9IHJlcGxhY2VtZW50OwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGVsaW1pbmF0ZSgpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcgQCV1IiwgbV9j
b21waWxlSW5kZXgpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0g
MSk7Ci0gICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5lcmF0ZSgpKTsKLSAgICAgICAgbm9kZS5v
cCA9IFBoYW50b207Ci0gICAgfQotICAgIAotICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSYg
bm9kZSkKLSAgICB7Ci0gICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLnNob3VsZEdl
bmVyYXRlKCk7Ci0KLSAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgewotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsr
KQotICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91
bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRy
ZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb24obm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNob3VsZEdlbmVyYXRlKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgICAgIGRhdGFMb2coIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21f
Y29tcGlsZUluZGV4XS5vcCksIG1fY29tcGlsZUluZGV4KTsKLSNlbmRpZgotICAgICAgICAKLSAg
ICAgICAgLy8gTk9URTogdGhlcmUgYXJlIHNvbWUgbm9kZXMgdGhhdCB3ZSBkZWxpYmVyYXRlbHkg
ZG9uJ3QgQ1NFIGV2ZW4gdGhvdWdoIHdlCi0gICAgICAgIC8vIHByb2JhYmx5IGNvdWxkLCBsaWtl
IFN0ckNhdCBhbmQgVG9QcmltaXRpdmUuIFRoYXQncyBiZWNhdXNlIHRoZXJlIGlzIG5vCi0gICAg
ICAgIC8vIGV2aWRlbmNlIHRoYXQgZG9pbmcgQ1NFIG9uIHRoZXNlIG5vZGVzIHdvdWxkIHJlc3Vs
dCBpbiBhIHBlcmZvcm1hbmNlCi0gICAgICAgIC8vIHByb2dyZXNzaW9uLiBIZW5jZSBjb25zaWRl
cmluZyB0aGVzZSBub2RlcyBpbiBDU0Ugd291bGQganVzdCBtZWFuIHRoYXQgdGhpcwotICAgICAg
ICAvLyBjb2RlIGRvZXMgbW9yZSB3b3JrIHdpdGggbm8gd2luLiBPZiBjb3Vyc2UsIHdlIG1heSB3
YW50IHRvIHJlY29uc2lkZXIgdGhpcywKLSAgICAgICAgLy8gc2luY2UgU3RyQ2F0IGlzIHRyaXZp
YWxseSBDU0UtYWJsZS4gSXQncyBub3QgdHJpdmlhbGx5IGRvYWJsZSBmb3IKLSAgICAgICAgLy8g
VG9QcmltaXRpdmUsIGJ1dCB3ZSBjb3VsZCBjaGFuZ2UgdGhhdCB3aXRoIHNvbWUgc3BlY3VsYXRp
b25zIGlmIHdlIHJlYWxseQotICAgICAgICAvLyBuZWVkZWQgdG8uCi0gICAgICAgIAotICAgICAg
ICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgCi0gICAgICAgIC8vIEhhbmRsZSB0aGUgcHVy
ZSBub2Rlcy4gVGhlc2Ugbm9kZXMgbmV2ZXIgaGF2ZSBhbnkgc2lkZS1lZmZlY3RzLgotICAgICAg
ICBjYXNlIEJpdEFuZDoKLSAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6
Ci0gICAgICAgIGNhc2UgQml0UlNoaWZ0OgotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAg
ICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBjYXNl
IEFyaXRoU3ViOgotICAgICAgICBjYXNlIEFyaXRoTXVsOgotICAgICAgICBjYXNlIEFyaXRoTW9k
OgotICAgICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICBjYXNlIEFyaXRoQWJzOgotICAgICAg
ICBjYXNlIEFyaXRoTWluOgotICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICBjYXNlIEFy
aXRoU3FydDoKLSAgICAgICAgY2FzZSBHZXRCeXRlQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2Ug
R2V0SW50OEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDE2QXJyYXlMZW5ndGg6Ci0g
ICAgICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50OEFy
cmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoOgotICAg
ICAgICBjYXNlIEdldFVpbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQzMkFy
cmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEZsb2F0MzJBcnJheUxlbmd0aDoKLSAgICAgICAg
Y2FzZSBHZXRGbG9hdDY0QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0Q2FsbGVlOgotICAg
ICAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0g
ICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KHB1cmVDU0Uobm9kZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGltcHVy
ZUNTRShub2RlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEdldFNjb3BlQ2hhaW46Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRTY29wZUNo
YWluTG9hZEVsaW1pbmF0aW9uKG5vZGUuc2NvcGVDaGFpbkRlcHRoKCkpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIEhhbmRsZSBub2RlcyB0aGF0IGFyZSBjb25kaXRpb25hbGx5
IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCi0gICAgICAgIC8vIGJlIENTRSdkLCBzbyBs
b25nIGFzIHRoZSBwcmVkaWN0aW9uIGlzIHRoZSBvbmUgd2Ugd2FudC4KLSAgICAgICAgY2FzZSBW
YWx1ZUFkZDoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJl
TGVzc0VxOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVxOiB7Ci0gICAgICAgICAgICBpZiAo
aXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
cmVwbGFjZW1lbnRJbmRleCA9IHB1cmVDU0Uobm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJl
cGxhY2VtZW50SW5kZXggIT0gTm9Ob2RlICYmIGlzUHJlZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhb
cmVwbGFjZW1lbnRJbmRleF0pKQotICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChy
ZXBsYWNlbWVudEluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAg
ICAgICBpZiAobG9naWNhbE5vdElzUHVyZShub2RlKSkgewotICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBp
ZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbG9naWNhbE5vdElzUHVyZShtX2dyYXBo
W3JlcGxhY2VtZW50SW5kZXhdKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
cmVwbGFjZW1lbnRJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIGhlYXAgYWNj
ZXNzZXMuIFRoZXNlIGFyZSBub3QgcXVpdGUgcHVyZSwgYnV0IHdlIGNhbiBzdGlsbAotICAgICAg
ICAvLyBvcHRpbWl6ZSB0aGVtIHByb3ZpZGVkIHRoYXQgc29tZSBzdWJ0bGUgY29uZGl0aW9ucyBh
cmUgbWV0LgotICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2RlLnZhck51bWJlcigpLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICBp
ZiAoYnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0
QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigp
LmluZGV4KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlW
YWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmlu
ZGV4KCkpICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBub2RlLm9wID0gUHV0QnlWYWxBbGlh
czsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24o
bm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKLSAgICAgICAgICAg
ICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2hl
Y2tGdW5jdGlvbjoKLSAgICAgICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24obm9k
ZS5mdW5jdGlvbigpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQotICAgICAgICAgICAgICAgIGVs
aW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgUHJlZGljdGVk
VHlwZSBiYXNlUHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgYm9vbCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9ICEoIShi
YXNlUHJlZGljdGlvbiAmIFByZWRpY3RJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pOwotICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5h
dGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9u
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2V0UHJv
cGVydHlTdG9yYWdlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9y
YWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gZG8gbm90aGluZy4KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2xhc3RTZWVuW25vZGUub3Ag
JiBOb2RlSWRNYXNrXSA9IG1fY29tcGlsZUluZGV4OwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSNlbmRpZgotICAgIH0K
LSAgICAKLSAgICB2b2lkIHBlcmZvcm1CbG9ja0NTRShCYXNpY0Jsb2NrJiBibG9jaykKLSAgICB7
Ci0gICAgICAgIG1fc3RhcnQgPSBibG9jay5iZWdpbjsKLSAgICAgICAgTm9kZUluZGV4IGVuZCA9
IGJsb2NrLmVuZDsKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IG1fc3RhcnQ7IG1fY29t
cGlsZUluZGV4IDwgZW5kOyArK21fY29tcGlsZUluZGV4KQotICAgICAgICAgICAgcGVyZm9ybU5v
ZGVDU0UobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGxv
Y2FsQ1NFKCkKLSAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICBkYXRhTG9nKCJQZXJmb3JtaW5nIGxvY2FsIENTRToiKTsKLSNlbmRpZgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9jaykKLSAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRSgqbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja10pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFsbG9jYXRlVmlydHVhbFJlZ2lz
dGVycygpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0
YUxvZygiUHJlc2VydmVkIHZhcnM6ICIpOwotICAgICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFy
cy5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7Ci0jZW5kaWYK
LSAgICAgICAgU2NvcmVCb2FyZCBzY29yZUJvYXJkKG1fZ3JhcGgsIG1fZ3JhcGgubV9wcmVzZXJ2
ZWRWYXJzKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzID0gbV9ncmFw
aC5tX2Jsb2Nrcy5sYXN0KCktPmVuZDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplRXhjbHVkaW5nUGhpTm9kZXM7ICsraSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbaV07Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRl
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8g
R2V0TG9jYWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBpbiB0aGUgZ3JhcGgsIHJl
ZmVyZW5jaW5nCi0gICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3IgYmxvY2tzLgotICAg
ICAgICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAvLyBG
aXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhl
bgotICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlz
IG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKLSAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0
IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAgICAgICAgICAgICAgIC8v
IFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2Rl
LgotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgp
OyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGls
ZElkeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAg
ICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgbm9kZS5zZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcmVCb2FyZC5hbGxvY2F0ZSgpKTsKLSAgICAgICAgICAgIC8vICdtdXN0R2VuZXJh
dGUnIG5vZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5IGVsZXZhdGVkLAotICAg
ICAgICAgICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgICAgICAg
ICBpZiAobm9kZS5tdXN0R2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVz
ZShpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICdtX251bUNhbGxlZVJlZ2lzdGVycycgaXMg
dGhlIG51bWJlciBvZiBsb2NhbHMgYW5kIHRlbXBvcmFyaWVzIGFsbG9jYXRlZAotICAgICAgICAv
LyBmb3IgdGhlIGZ1bmN0aW9uIChhbmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBTaW5jZSB3ZSBw
ZXJmb3JtIGEgbmV3IGFuZAotICAgICAgICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1w
b3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJlZC4KLSAgICAgICAgdW5z
aWduZWQgY2FsbGVlUmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5oaWdoV2F0ZXJtYXJrKCkgKyBtX2dy
YXBoLm1fcGFyYW1ldGVyU2xvdHM7Ci0gICAgICAgIGlmICgodW5zaWduZWQpbV9jb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJzKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwotI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiTnVtIGNhbGxlZSByZWdp
c3RlcnM6ICV1XG4iLCBjYWxsZWVSZWdpc3RlcnMpOwotI2VuZGlmCi0gICAgfQotICAgIAotICAg
IHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEFic3RyYWN0U3RhdGUmIHN0YXRlLCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgpCi0gICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghYmxvY2stPmNmYVNob3VsZFJl
dmlzaXQpCi0gICAgICAgICAgICByZXR1cm47Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICBCbG9jayAjJXUgKGJjIyV1KTpcbiIs
IGJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKLSNlbmRpZgotICAgICAgICBzdGF0
ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgICAgaGVhZCB2YXJzOiAiKTsKLSAgICAg
ICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIFdURjo6ZGF0YUZpbGUoKSk7Ci0g
ICAgICAgIGRhdGFMb2coIlxuIik7Ci0jZW5kaWYKLSAgICAgICAgZm9yIChOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2stPmJlZ2luOyBub2RlSW5kZXggPCBibG9jay0+ZW5kOyArK25vZGVJbmRl
eCkgewotICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUo
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgICAlcyBAJXU6ICIsIEdy
YXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4KTsKLSAgICAgICAg
ICAgIHN0YXRlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2coIlxu
Iik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmICghc3RhdGUuZXhlY3V0ZShub2RlSW5kZXgpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICAgICB0YWlsIHJlZ3M6ICIp
OwotICAgICAgICBzdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2co
IlxuIik7Ci0jZW5kaWYKLSAgICAgICAgbV9jaGFuZ2VkIHw9IHN0YXRlLmVuZEJhc2ljQmxvY2so
QWJzdHJhY3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nlc3NvcnMpOwotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgICAgdGFpbCB2YXJzOiAi
KTsKLSAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdFRhaWwsIFdURjo6ZGF0YUZp
bGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBwZXJmb3JtRm9yd2FyZENGQShBYnN0cmFjdFN0YXRlJiBzdGF0ZSkKLSAgICB7Ci0jaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCJD
RkEgWyV1XVxuIiwgKyttX2NvdW50KTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9jaykKLSAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NGQShzdGF0ZSwgYmxvY2spOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGdsb2JhbENGQSgpCi0gICAgewotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgbV9jb3VudCA9IDA7Ci0jZW5kaWYKLSAgICAg
ICAgCi0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHBzZXVkby13b3JrbGlzdC1iYXNlZCBm
b3J3YXJkIENGQSwgZXhjZXB0IHRoYXQgdGhlIHZpc2l0IG9yZGVyCi0gICAgICAgIC8vIG9mIGJs
b2NrcyBpcyB0aGUgYnl0ZWNvZGUgcHJvZ3JhbSBvcmRlciAod2hpY2ggaXMgbmVhcmx5IHRvcG9s
b2dpY2FsKSwgYW5kCi0gICAgICAgIC8vIGluc3RlYWQgb2YgYSB3b3JrbGlzdCB3ZSBqdXN0IHdh
bGsgYWxsIGJhc2ljIGJsb2NrcyBjaGVja2luZyBpZiBjZmFTaG91bGRSZXZpc2l0Ci0gICAgICAg
IC8vIGlzIHNldCB0byB0cnVlLiBUaGlzIGlzIGxpa2VseSB0byBiYWxhbmNlIHRoZSBlZmZpY2ll
bmN5IHByb3BlcnRpZXMgb2YgYm90aAotICAgICAgICAvLyB3b3JrbGlzdC1iYXNlZCBhbmQgZm9y
d2FyZCBmaXhwb2ludC1iYXNlZCBhcHByb2FjaGVzLiBMaWtlIGEgd29ya2xpc3QtYmFzZWQKLSAg
ICAgICAgLy8gYXBwcm9hY2gsIGl0IHdvbid0IHZpc2l0IGNvZGUgaWYgaXQncyBtZWFuaW5nbGVz
cyB0byBkbyBzbyAobm90aGluZyBjaGFuZ2VkIGF0Ci0gICAgICAgIC8vIHRoZSBoZWFkIG9mIHRo
ZSBibG9jayBvciB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgbm90IGJlZW4gdmlzaXRlZCkuIExpa2Ug
YSBmb3J3YXJkCi0gICAgICAgIC8vIGZpeHBvaW50LWJhc2VkIGFwcHJvYWNoLCBpdCBoYXMgYSBo
aWdoIHByb2JhYmlsaXR5IG9mIG9ubHkgdmlzaXRpbmcgYSBibG9jawotICAgICAgICAvLyBhZnRl
ciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5IGxvb3BzIHdpbGwgY2F1
c2UgdGhpcyBhbmFseXNpcyB0bwotICAgICAgICAvLyByZXZpc2l0IGJsb2NrcywgYW5kIHRoZSBh
bW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9vcCBkZXB0aC4KLSAgICAg
ICAgCi0gICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUobV9ncmFwaCk7Ci0gICAgICAg
IAotICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fZ3JhcGgpOwotICAgICAgICAKLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwZXJm
b3JtRm9yd2FyZENGQShzdGF0ZSk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7Ci0gICAg
fQotICAgIAotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxE
YXRhOwotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0gICAgQ29kZUJsb2NrKiBtX3Byb2Zp
bGVkQmxvY2s7Ci0gICAgCi0gICAgTm9kZUluZGV4IG1fc3RhcnQ7Ci0gICAgTm9kZUluZGV4IG1f
Y29tcGlsZUluZGV4OwotICAgIAotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICB1bnNpZ25lZCBtX2NvdW50OwotI2VuZGlmCi0gICAgCi0gICAgYm9vbCBtX2No
YW5nZWQ7Ci0KLSAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV9yZXBsYWNlbWVudHM7Ci0gICAg
Rml4ZWRBcnJheTxOb2RlSW5kZXgsIExhc3ROb2RlSWQ+IG1fbGFzdFNlZW47Ci19OwotCi12b2lk
IHByb3BhZ2F0ZShHcmFwaCYgZ3JhcGgpCi17Ci0gICAgUHJvcGFnYXRvciBwcm9wYWdhdG9yKGdy
YXBoKTsKLSAgICBwcm9wYWdhdG9yLmZpeHBvaW50KCk7Ci0gICAgCi19Ci0KLX0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuaAkocmV2aXNpb24gMTA4MTU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIERGR1Byb3BhZ2F0b3JfaAotI2RlZmluZSBERkdQcm9wYWdhdG9y
X2gKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBKU0dsb2JhbERhdGE7
Ci0KLW5hbWVzcGFjZSBERkcgewotCi0vLyBQcm9wYWdhdGUgZHluYW1pYyBwcmVkaWN0aW9ucyBm
cm9tIHZhbHVlIHNvdXJjZXMgdG8gdmFyaWFibGVzLgotdm9pZCBwcm9wYWdhdGUoR3JhcGgmKTsK
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2U6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgVmlydHVhbFJlZ2lzdGVyQWxsb2Nh
dGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInZpcnR1YWwg
cmVnaXN0ZXIgYWxsb2NhdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigp
CisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygi
UHJlc2VydmVkIHZhcnM6ICIpOworICAgICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFycy5kdW1w
KFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisjZW5kaWYKKyAgICAg
ICAgU2NvcmVCb2FyZCBzY29yZUJvYXJkKG1fZ3JhcGgsIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJz
KTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzID0gbV9ncmFwaC5tX2Js
b2Nrcy5sYXN0KCktPmVuZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhj
bHVkaW5nUGhpTm9kZXM7ICsraSkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aV07CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0TG9j
YWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBpbiB0aGUgZ3JhcGgsIHJlZmVyZW5j
aW5nCisgICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3IgYmxvY2tzLgorICAgICAgICAg
ICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCwg
Y2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgorICAg
ICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUu
IFdlIGRvIHNvIGluIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEg
Y2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQorICAgICAgICAgICAgICAgIC8vIFZpcnR1
YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2RlLgorICAg
ICAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsr
KQorICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbm9kZS5zZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcmVCb2FyZC5hbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIC8vICdtdXN0R2VuZXJhdGUnIG5v
ZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5IGVsZXZhdGVkLAorICAgICAgICAg
ICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCisgICAgICAgICAgICBpZiAo
bm9kZS5tdXN0R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShpKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vICdtX251bUNhbGxlZVJlZ2lzdGVycycgaXMgdGhlIG51
bWJlciBvZiBsb2NhbHMgYW5kIHRlbXBvcmFyaWVzIGFsbG9jYXRlZAorICAgICAgICAvLyBmb3Ig
dGhlIGZ1bmN0aW9uIChhbmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBTaW5jZSB3ZSBwZXJmb3Jt
IGEgbmV3IGFuZAorICAgICAgICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3Jhcmll
cywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJlZC4KKyAgICAgICAgdW5zaWduZWQg
Y2FsbGVlUmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5oaWdoV2F0ZXJtYXJrKCkgKyBtX2dyYXBoLm1f
cGFyYW1ldGVyU2xvdHM7CisgICAgICAgIGlmICgodW5zaWduZWQpY29kZUJsb2NrKCktPm1fbnVt
Q2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJzKQorICAgICAgICAgICAgY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOworI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiTnVtIGNhbGxlZSByZWdpc3RlcnM6
ICV1XG4iLCBjYWxsZWVSZWdpc3RlcnMpOworI2VuZGlmCisgICAgfQorfTsKKwordm9pZCBwZXJm
b3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgcnVuUGhh
c2U8VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZV9oCisjZGVm
aW5lIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwor
Ly8gUHJpb3IgdG8gcnVubmluZyB0aGlzIHBoYXNlLCB3ZSBoYXZlIG5vIGlkZWEgd2hlcmUgaW4g
dGhlIGNhbGwgZnJhbWUgbm9kZXMKKy8vIHdpbGwgaGF2ZSB0aGVpciB2YWx1ZXMgc3BpbGxlZC4g
VGhpcyBwaGFzZSBmaXhlcyB0aGF0IGJ5IGdpdmluZyBlYWNoIG5vZGUKKy8vIGEgc3BpbGwgc2xv
dC4gVGhlIHNwaWxsIHNsb3QgaW5kZXggKGkuZS4gdGhlIHZpcnR1YWwgcmVnaXN0ZXIpIGlzIGFs
c28gdXNlZAorLy8gZm9yIGxvb2stdXAgdGFibGVzIGZvciB0aGUgbGluZWFyIHNjYW4gcmVnaXN0
ZXIgYWxsb2NhdG9yIHRoYXQgdGhlIGJhY2tlbmQKKy8vIHVzZXMuCisKK3ZvaWQgcGVyZm9ybVZp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2VfaAorCg==
</data>
<flag name="review"
          id="129904"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>