<?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>52421</bug_id>
          
          <creation_ts>2011-01-13 19:30:05 -0800</creation_ts>
          <short_desc>Split out a MarkedSpace strategy object from Heap.</short_desc>
          <delta_ts>2011-01-15 15:59:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>334087</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-13 19:30:05 -0800</bug_when>
    <thetext>Split out a MarkedSpace strategy object from Heap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334090</commentid>
    <comment_count>1</comment_count>
      <attachid>78884</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-13 19:49:36 -0800</bug_when>
    <thetext>Created attachment 78884
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334109</commentid>
    <comment_count>2</comment_count>
      <attachid>78888</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-13 21:43:35 -0800</bug_when>
    <thetext>Created attachment 78888
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334582</commentid>
    <comment_count>3</comment_count>
      <attachid>78888</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-01-14 13:58:17 -0800</bug_when>
    <thetext>Comment on attachment 78888
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334781</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-14 17:43:49 -0800</bug_when>
    <thetext>Committed r75855: &lt;http://trac.webkit.org/changeset/75855&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334825</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-14 19:12:13 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75855 might have broken GTK Linux 64-bit Debug
The following tests are not passing:
fast/workers/shared-worker-shared.html
fast/workers/worker-close-more.html
fast/workers/worker-constructor.html
http/tests/websocket/tests/workers/close-in-shared-worker.html
http/tests/workers/shared-worker-importScripts.html
http/tests/workers/worker-importScripts.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334833</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-14 19:54:03 -0800</bug_when>
    <thetext>Boo: http://trac.webkit.org/changeset/75868</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334834</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-14 19:54:26 -0800</bug_when>
    <thetext>BTW, did you ever run this? It asserted when launching Safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334961</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-15 15:59:50 -0800</bug_when>
    <thetext>&gt; Boo: http://trac.webkit.org/changeset/75868

Heh -- too late! I committed the same fix in http://trac.webkit.org/changeset/75866.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78884</attachid>
            <date>2011-01-13 19:49:36 -0800</date>
            <delta_ts>2011-01-13 21:43:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>84680</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzU3NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODEgQEAK
KzIwMTEtMDEtMTMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCBvdXQgYSBNYXJr
ZWRTcGFjZSBzdHJhdGVneSBvYmplY3QgZnJvbSBIZWFwLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI0MjEKKyAgICAgICAgCisgICAgICAgIFN1blNw
aWRlciByZXBvcnRzIG5vIGNoYW5nZS4KKworICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcm86CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBVcGRhdGVkIG91ciA3IGJ1aWxkIHN5c3RlbXMuIFdoaWNoIGlzIGNvb2wuCisKKyAgICAg
ICAgKiBydW50aW1lL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlY29yZEV4dHJh
Q29zdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6b2JqZWN0Q291bnQpOgorICAgICAgICAoSlNDOjpIZWFwOjpz
dGF0aXN0aWNzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2l6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6OmlzQnVzeSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6cHJpbWFyeUhlYXBCZWdpbik6CisgICAgICAgIChKU0M6OkhlYXA6
OnByaW1hcnlIZWFwRW5kKToKKyAgICAgICAgKiBydW50aW1lL0hlYXAuaDoKKyAgICAgICAgKEpT
Qzo6SGVhcDo6Z2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtlZFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6aXNDZWxsTWFya2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
Y2hlY2tNYXJrQ2VsbCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDZWxsKTogTW92ZWQgYWxs
IGNvZGUgcGVydGFpbmluZyB0byBtYW5hZ2luZyBjaHVua3Mgb2YKKyAgICAgICAgY29sbGVjdG9y
IG1lbW9yeSBvdXQgb2YgdGhpcyBjbGFzcy4gSGVhcCBub3cganVzdCBkZWxlZ2F0ZXMgdG8gTWFy
a2VkU3BhY2UuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OkhlYXA6OmhlYXApOiBVcGRhdGVkIGZvciBNYXJrZWRTcGFjZSBkZWxlZ2F0aW9uLgor
CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6IE1vdmVkIHRoZSBWYWx1ZVN0cmluZ1BhaXIg
dHlwZWRlZiB0byBoZWxwIHdpdGggI2luY2x1ZGVzLgorCisgICAgICAgICogcnVudGltZS9NYXJr
ZWRTcGFjZS5jcHA6IENvcGllZCBmcm9tIHJ1bnRpbWUvSGVhcC5jcHAuCisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjpNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpk
ZXN0cm95KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRlQmxvY2spOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlc2l6ZUJsb2Nr
cyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpncm93QmxvY2tzKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkU3BhY2U6OnNocmlua0Jsb2Nrcyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjptYXJrQ29uc2VydmF0aXZlbHkpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2xlYXJN
YXJrQml0cyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjptYXJrZWRDZWxscyk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpvYmplY3RDb3VudCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphZGRUb1N0YXRpc3Rp
Y3MpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6c3RhdGlzdGljcyk6CisgICAgICAgIChK
U0M6Ok1hcmtlZFNwYWNlOjpzaXplKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlc2V0
KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnByaW1hcnlIZWFwQmVnaW4pOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6cHJpbWFyeUhlYXBFbmQpOgorICAgICAgICAqIHJ1bnRpbWUv
TWFya2VkU3BhY2UuaDogQ29waWVkIGZyb20gcnVudGltZS9IZWFwLmguCisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjpnbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmRp
ZFNocmluayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpjZWxsQmxvY2spOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2VsbE9mZnNldCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjppc0NlbGxNYXJrZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2hlY2tNYXJr
Q2VsbCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjptYXJrQ2VsbCk6IE1vdmVkIGFsbCBj
b2RlIHBlcnRhaW5pbmcgdG8gbWFuYWdpbmcgY2h1bmtzIG9mCisgICAgICAgIGNvbGxlY3RvciBt
ZW1vcnkgaW50byB0aGlzIGNsYXNzLgorCisgICAgICAgICogcnVudGltZS9NZW1vcnlTdGF0aXN0
aWNzLmNwcDoKKyAgICAgICAgKEpTQzo6aGVhcFN0YXRpc3RpY3MpOgorICAgICAgICAqIHJ1bnRp
bWUvTWVtb3J5U3RhdGlzdGljcy5oOiBVcGRhdGVkIGZvciBNYXJrZWRTcGFjZSBkZWxlZ2F0aW9u
LgorCiAyMDExLTAxLTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
bmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1r
CShyZXZpc2lvbiA3NTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSBcCiAJcnVu
dGltZS9Cb29sZWFuT2JqZWN0LmNwcCBcCiAJcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcCBc
CiAJcnVudGltZS9DYWxsRGF0YS5jcHAgXAorCXJ1bnRpbWUvTWFya2VkU3BhY2UuY3BwIFwKIAly
dW50aW1lL0hlYXAuY3BwIFwKIAlydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCBcCiAJcnVu
dGltZS9Db21wbGV0aW9uLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiA3NTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAKICAgICBydW50aW1lL0Jvb2xl
YW5Qcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9DYWxsRGF0YS5jcHAKKyAgICBydW50aW1lL01h
cmtlZFNwYWNlLmNwcAogICAgIHJ1bnRpbWUvSGVhcC5jcHAKICAgICBydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmNwcAogICAgIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDc1NzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDgg
QEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FsbERhdGEuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxs
RGF0YS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3BhY2UuY3BwIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IZWFwLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGVhcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3JIZWFwSXRl
cmF0b3IuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lw
aQkocmV2aXNpb24gNzU3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTgyLDYgKzE4Miw4IEBACiAgICAgICAgICAgICAn
cnVudGltZS9DYWxsRGF0YS5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvQ2FsbERhdGEuaCcs
CiAgICAgICAgICAgICAncnVudGltZS9DbGFzc0luZm8uaCcsCisgICAgICAgICAgICAncnVudGlt
ZS9NYXJrZWRTcGFjZS5jcHAnLAorICAgICAgICAgICAgJ3J1bnRpbWUvTWFya2VkU3BhY2UuaCcs
CiAgICAgICAgICAgICAncnVudGltZS9IZWFwLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9I
ZWFwLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmgnLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA3
NTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL0Jv
b2xlYW5PYmplY3QuY3BwIFwKICAgICBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwIFwKICAg
ICBydW50aW1lL0NhbGxEYXRhLmNwcCBcCisgICAgcnVudGltZS9NYXJrZWRTcGFjZS5jcHAgXAog
ICAgIHJ1bnRpbWUvSGVhcC5jcHAgXAogICAgIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3Bw
IFwKICAgICBydW50aW1lL0NvbXBsZXRpb24uY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiA3
NTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OTQs
NiArNTk0LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHJ1bnRpbWVcTWFya2VkU3BhY2UuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXE1hcmtlZFNwYWNlLmgiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRp
bWVcQ29sbGVjdG9ySGVhcEludHJvc3BlY3Rvci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NTc2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMCBAQAogCQkxNDA1NjZEMTEwN0VDMjY3MDA1REJD
OEQgLyogSlNTdGF0aWNTY29wZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U0MkMxOTBFMzkzODgzMDA2NUE1NDQgLyogSlNTdGF0aWNT
Y29wZU9iamVjdC5jcHAgKi87IH07CiAJCTE0MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1
bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY2OTJBODVFMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNwcCAqLzsgfTsKIAkJMTQw
QjdEMUQwREM2OUFGNzAwOUM0MkI4IC8qIEpTQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIg
LyogSlNBY3RpdmF0aW9uLmNwcCAqLzsgfTsKKwkJMTQwQ0RDN0MxMkRDMDlCRjAwMTNDRkM1IC8q
IE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0MENEQzc2MTJEQkVBMzMwMDEzQ0ZDNSAvKiBNYXJrZWRTcGFjZS5jcHAgKi87IH07
CisJCTE0MENERTcwMTJERTk3QTAwMDEzQ0ZDNSAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MENERTZDMTJERTk3N0UwMDEzQ0ZDNSAv
KiBIZWFwLmNwcCAqLzsgfTsKKwkJMTQwQ0RFNzExMkRFOTdCMTAwMTNDRkM1IC8qIEhlYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MENERTZEMTJE
RTk3N0UwMDEzQ0ZDNSAvKiBIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMTQwQ0RGMEMxMkRFQ0U1QzAwMTNDRkM1IC8qIE1hcmtlZFNwYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDBDREM3
NzEyREJFQTMzMDAxM0NGQzUgLyogTWFya2VkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDBEMTdENzBFOEFENEE5MDAwQ0QxN0QgLyog
SlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDEyMTEzMTBBNDg3
OTREMDA0ODAyNTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1
IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJMTQxMjExMzQwQTQ4Nzk1ODAw
NDgwMjU1IC8qIG1pbmlkb20uYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MTIxMTAyMEE0ODc4MDkwMDQ4MDI1NSAvKiBtaW5pZG9tLmMgKi87IH07CkBA
IC0xNzUsNyArMTc5LDYgQEAKIAkJMTRGMzQ4OEYwRTk1RUY4QTAwMzY0OEJDIC8qIENvbGxlY3Rv
ckhlYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTRGMzQ4OEUwRTk1RUY4QTAwMzY0OEJDIC8qIENvbGxlY3RvckhlYXBJdGVyYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTE0RjhCQTNFMTA3RUM4
ODYwMDk4OTJEQyAvKiBGYXN0TWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1RTIxN0I5MDhFN0VFQ0MwMDIzRTVGNiAvKiBGYXN0TWFsbG9j
LmNwcCAqLzsgfTsKIAkJMTRGOEJBNDMxMDdFQzg4QzAwOTg5MkRDIC8qIFRDU3lzdGVtQWxsb2Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJE
NzAwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lzdGVtQWxsb2MuY3BwICovOyB9OwotCQkxNEY4QkE0
RjEwN0VDODk5MDA5ODkyREMgLyogSGVhcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1MjAyNTU1OTdEMDFGRjYwRjcgLyogSGVhcC5jcHAg
Ki87IH07CiAJCTE0RkZGOThDMTJCRkZGNzUwMDc5NUJCOCAvKiBQYWdlQWxsb2NhdGlvbkFsaWdu
ZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRG
RkY5OEExMkJGRkY3NTAwNzk1QkI4IC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgKi87IH07
CiAJCTE0RkZGOThEMTJCRkZGNzUwMDc5NUJCOCAvKiBQYWdlQWxsb2NhdGlvbkFsaWduZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RkZGOThCMTJC
RkZGNzUwMDc5NUJCOCAvKiBQYWdlQWxsb2NhdGlvbkFsaWduZWQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxODBCOUIwODBGMTZEOTRGMDA5QkRC
QzUgLyogQ3VycmVudFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE4MEI5QUYwMEYxNkM1NjkwMDlCREJDNSAvKiBDdXJyZW50VGltZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zOTQsNyArMzk3
LDYgQEAKIAkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xlYW5PYmplY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwNEZEMzUzMDU2OTdF
NkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVD
NTA3RjBEOURGNjNCMDA4OEY2QjkgLyogQ2FsbERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzNGMDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q29sbGF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQTg2MkFBMEQ3RUJCN0QwMDFFQzZBQSAvKiBDb2xsYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDMThDM0YxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNjkyQTg1MzAyNTU1OTdEMDFGRjYwRjcgLyogSGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBDb21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVFQTczNjMwQkFFMzVEMTAwMUJCNTYwIC8qIENvbW1vbklkZW50aWZpZXJz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMx
OEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBD
b21wbGV0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3
IC8qIGNvbmZpZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC02NjUsNiArNjY3LDEwIEBACiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBP
U0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQx
MjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQwMzVEQjAxMERCRkIyQTAwRkZGRkU3IC8qIFdlYWtHQ1B0ci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrR0NQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMTQwQ0RDNzYxMkRCRUEzMzAwMTNDRkM1IC8qIE1hcmtlZFNwYWNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtlZFNwYWNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQwQ0RDNzcxMkRCRUEzMzAwMTNDRkM1IC8qIE1hcmtlZFNw
YWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZFNwYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MENERTZDMTJERTk3N0UwMDEzQ0ZDNSAvKiBI
ZWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDBDREU2RDEyREU5NzdFMDAxM0NGQzUgLyog
SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMjExMDIwQTQ4NzgwOTAwNDgwMjU1
IC8qIG1pbmlkb20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbWluaWRvbS5j
OyBwYXRoID0gdGVzdHMvbWluaWRvbS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUgLyogbWluaWRvbS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgbmFtZSA9IG1pbmlkb20uanM7IHBhdGggPSB0ZXN0cy9taW5pZG9tLmpz
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE3OCw4ICsxMTg0LDYgQEAKIAkJRjY5
MkE4NEQwMjU1NTk3RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5UHJvdG90eXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNjkyQTg0
RTAyNTU1OTdEMDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlQcm90b3R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNjkyQTg1MDAyNTU1OTdEMDFG
RjYwRjcgLyogQm9vbGVhbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCb29sZWFuT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwotCQlGNjkyQTg1MjAyNTU1OTdEMDFGRjYwRjcg
LyogSGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBIZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB9OwotCQlGNjkyQTg1MzAyNTU1OTdEMDFGRjYwRjcgLyogSGVhcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3
IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucGVybDsgcGF0aCA9IGNyZWF0ZV9oYXNoX3RhYmxlOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY2OTJBODU4MDI1NTU5N0QwMUZGNjBGNyAvKiBEZWJ1
Z2dlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZWJ1Z2dlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgfTsKIAkJRjY5MkE4NTkwMjU1NTk3RDAxRkY2MEY3IC8qIERlYnVnZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKQEAgLTE3MzYsOCArMTc0MCw4
IEBACiAJCQkJQkMzMzdCREUwRTFBRjBCODAwNzY5MThBIC8qIEdldHRlclNldHRlci5oICovLAog
CQkJCUJDMjU3REVEMEUxRjUyRUQwMDE2QjZDOSAvKiBHbG9iYWxFdmFsRnVuY3Rpb24uY3BwICov
LAogCQkJCUJDMjU3REVFMEUxRjUyRUQwMDE2QjZDOSAvKiBHbG9iYWxFdmFsRnVuY3Rpb24uaCAq
LywKLQkJCQlGNjkyQTg1MjAyNTU1OTdEMDFGRjYwRjcgLyogSGVhcC5jcHAgKi8sCi0JCQkJRjY5
MkE4NTMwMjU1NTk3RDAxRkY2MEY3IC8qIEhlYXAuaCAqLywKKwkJCQkxNDBDREU2QzEyREU5NzdF
MDAxM0NGQzUgLyogSGVhcC5jcHAgKi8sCisJCQkJMTQwQ0RFNkQxMkRFOTc3RTAwMTNDRkM1IC8q
IEhlYXAuaCAqLywKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5j
cHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywK
IAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAg
Ki8sCkBAIC0xNzk3LDYgKzE4MDEsOCBAQAogCQkJCUY2OTJBODY5MDI1NTU5N0QwMUZGNjBGNyAv
KiBMb29rdXAuaCAqLywKIAkJCQkxNEI3MjMzRjEyRDdEMERBMDAzQkQ1RUQgLyogTWFjaGluZVN0
YWNrTWFya2VyLmNwcCAqLywKIAkJCQkxNEI3MjM0MDEyRDdEMERBMDAzQkQ1RUQgLyogTWFjaGlu
ZVN0YWNrTWFya2VyLmggKi8sCisJCQkJMTQwQ0RDNzYxMkRCRUEzMzAwMTNDRkM1IC8qIE1hcmtl
ZFNwYWNlLmNwcCAqLywKKwkJCQkxNDBDREM3NzEyREJFQTMzMDAxM0NGQzUgLyogTWFya2VkU3Bh
Y2UuaCAqLywKIAkJCQlBNzRCMzQ5ODEwMkE1RjhFMDAzMkFCOTggLyogTWFya1N0YWNrLmNwcCAq
LywKIAkJCQlBNzc5NTU4RjEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNrLmggKi8sCiAJCQkJ
QTdDNTMwRTMxMDJBMzgxMzAwNUJDNzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNwcCAqLywKQEAgLTIw
OTgsNiArMjEwNCw3IEBACiAJCQkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUY3QkJFMTE4MjNCNTkwMDUyQzAyQyAvKiBBdG9t
aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjhCRkEwOTExN0NFRkQxMDBCOTA4QjEgLyogQXRv
bWljU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkYzODg1OTEyMTEzMENBMDA3QTdDRTMg
LyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4QkZBMEExMTdDRUZE
MTAwQjkwOEIxIC8qIEF0b21pY1N0cmluZ0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
M0VCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBBVkxUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdC
ODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjEwNiw3ICsyMTEzLDYgQEAKIAkJCQk4NjY3NkQ1MjExRkVEOUJDMDA0
QjY4NjMgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QTFG
N0FEMEYyNTJCM0MwMEUxODRFMiAvKiBCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
OUEwNzIzMEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJRkRBMTVDMUUxMkIwMzA1QzAwM0E1ODNBIC8qIENvbXBsZXguaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2OUQwNEFGMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRh
bEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAg
LyogQ2FsbERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLApAQCAtMjExNSwxMyArMjEyMSwxMiBAQAog
CQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0YwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb2xsYXRvci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQkMxOEMzRjEwRTE2RjVDRDAwQjM0NDYwIC8qIEhlYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RjM0ODhGMEU5NUVGOEEwMDM2NDhCQyAvKiBDb2xsZWN0b3JIZWFwSXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBD
b21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjQwRTE2RjVDRDAw
QjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUZEQTE1QzFFMTJCMDMw
NUMwMDNBNTgzQSAvKiBDb21wbGV4LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNTBFMTZG
NUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNjBFMTZG
NUNEMDBCMzQ0NjAgLyogQ29uc3RydWN0RGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNURFNkU1
QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEJERkZBRTAwRkM2MTkyOTAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY1NjU3NDMxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTE4MEI5QjA4MEYxNkQ5NEYwMDlCREJDNSAvKiBDdXJyZW50VGlt
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTM1LDkgKzIxNDAsMTIgQEAKIAkJCQlCQzE4QzNGQTBF
MTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzEzNTY0
MEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDM0ZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODYyQUY0QjYxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1iZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUxMzVGQUYyMTJEMjZBQ0UwMDNDMDgzQiAvKiBEZWNvZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBFMTZGNUNEMDBCMzQ0NjAgLyogRGVxdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0ZEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEaXNhbGxv
d0NUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGRTBFMTZGNUNEMDBCMzQ0NjAgLyog
ZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTEzNUZBRjMxMkQyNkFEMTAwM0MwODNCIC8qIEVu
Y29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA0NjA3MEUxRjQ5N0YwMDMyMzJDRiAvKiBF
cnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MEQwRTE4MzlEQjAwMEY5Mjk3IC8qIEVy
cm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOThEMEUxODNFMzgwMDBG
OTI5NyAvKiBFcnJvckluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTIxNTIsNiArMjE2MCw4
IEBACiAJCQkJQkMxOEM0MDMwRTE2RjVDRDAwQjM0NDYwIC8qIEZvcndhcmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDA0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rp
b25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCURERjdBQkQ0MTFGNjBFRDIwMDEwOEUz
NiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCURERTgyQUQ4MTIw
OUQ5NTUwMDVDMTc1NiAvKiBHQ0hhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDYw
RTE2RjVDRDAwQjM0NDYwIC8qIEdldFB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyNTdERjAw
RTFGNTJFRDAwMTZCNkM5IC8qIEdsb2JhbEV2YWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MDgwRTE2RjVDRDAwQjM0NDYwIC8qIEhhc2hDb3VudGVkU2V0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTIxNjEsNiArMjE3MSw3IEBACiAJCQkJQkMxOEM0MEMwRTE2RjVDRDAwQjM0NDYw
IC8qIEhhc2hTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBEMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBFMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBIYXNoVHJhaXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDBDREU3MTEyREU5N0Ix
MDAxM0NGQzUgLyogSGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAw
QjM0NDYwIC8qIElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEwMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMjI0MCwxMSArMjI1MSwxMyBAQAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzkwRTE2
RjVDRDAwQjM0NDYwIC8qIE1haW5UaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNB
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYWxsb2Nab25lU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMTQwQ0RGMEMxMkRFQ0U1QzAwMTNDRkM1IC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzc5NTU5MDEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQzQjBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0aEV4dHJhcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0M0MwRTE2RjVDRDAwQjM0NDYwIC8qIE1hdGhPYmplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNTJBMEUxNkZDQzIwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRkM0Q0IxMTdFRTJBODAwNDI1MjcyIC8qIE1E
NS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9y
eVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNFMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBNZXNzYWdlUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUw
MDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMTBF
MTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yMjUyLDkgKzIyNjUsMTAgQEAKIAkJCQlBNzZFRTY1OTBGQUU1OUQ1MDAzRjA2OUEgLyog
TmF0aXZlRnVuY3Rpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUZGMDA2NDBFQzA1
QTlBMDBBQTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBOb2Rlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjVFMUEzREYxMjJC
ODk0NTAwQjI2MDk3IC8qIE5vbkNvcHlpbmdTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ0MDBFMTZGNUNEMDBCMzQ0NjAgLyogTm9uY29weWFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTY1RTFBM0RGMTIyQjg5NDUwMEIyNjA5NyAvKiBOb25Db3B5aW5nU29ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzBBMjcyNjMwRTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5MzNGNUNEQzEyNjkyMjlCMDA0OTE5MUUgLyogTnVsbFB0ci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NDEwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVy
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MzBFMTZGNUNEMDBC
MzQ0NjAgLyogTnVtYmVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTIyNjUsMTQgKzIyNzks
MjAgQEAKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25z
LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBP
d25BcnJheVB0ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGQkU2OTgxMjI1NjFEMjAwMzA5RTlE
IC8qIE93bkFycmF5UHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQkRGRkFFMTBGQzYx
OTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NEEwRTE2RjVDRDAwQjM0NDYwIC8qIE93blB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQw
OUQ4NDcwRkFGODBBMjAwNTIzQjg3IC8qIE93blB0ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkxNEZGRjk4RDEyQkZGRjc1MDA3OTVCQjggLyogUGFnZUFsbG9jYXRpb25BbGln
bmVkLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEIzRUYwNTEyQkMyNEREMDBEMjlFRkYgLyogUGFn
ZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjkwMjMxNTEyMDkyRDVDMDA2MzBBRjkgLyog
UGFnZVJlc2VydmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzE0QUY1RjEyMkYzMjA3MDA5
MkQ5RjUgLyogUGFyc2VkVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QjBFMTZGNUNE
MDBCMzQ0NjAgLyogUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA1MkMzNTBGQjc5MjE5
MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRkJFNjk2MTIy
NTYwRTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0
REQ0ODUzMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ0QzBFMTZGNUNEMDBCMzQ0NjAgLyogUGFzc1JlZlB0ci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NEQwRTE2RjVDRDAwQjM0NDYwIC8qIHBjcmUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjI5Myw2ICsyMzEzLDcgQEAKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0
UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODhGQTVCQzBFRjc2RDQzMDA1NzhF
NkYgLyogUmFuZG9tTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEUyNzlFOTBFRjgzQjEw
MDA3REI1MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxNEFG
NEIxMjJGMjg5QTAwOTJEOUY1IC8qIFJhd1VSTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NTcwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDU4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHIuaCBp
biBIZWFkZXJzICovLApAQCAtMjMyMiw2ICsyMzQzLDcgQEAKIAkJCQk4NkQ4N0REQjEyQkNBRjk0
MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OEJGQTYwMTE3
RDA0ODIwMEI5MDhCMSAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFMUI0NDdBMEVDQ0Q3M0IwMDRGNEREMSAvKiBTdGRMaWJFeHRyYXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZCOTlBRTMxMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxNDY5NDkxMjY0Mzc4NTAwREZGOTM1IC8qIFN0
cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4Q0FCQkE2MTI2NUFCMzkwMEIyMDZD
RSAvKiBTdHJpbmdDb25jYXRlbmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzQ2LDYgKzIzNjgs
NyBAQAogCQkJCUJDMThDNDZFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ2RjBFMTZGNUNEMDBCMzQ0NjAgLyogVENTeXN0ZW1BbGxvYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxRURFQTYxMTY5RTBEMzAwNUU0MjYyIC8qIFRlcm1pbmF0
b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUYzQkQzMUVEMTI2NzM1NzcwMDY1NDY3RiAvKiBUZXh0
UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE4QkFCNTU0MTBEQUUwNjYwMDBEOTQ1QiAv
KiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ3MDBFMTZGNUNEMDBCMzQ0NjAgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzVGN0JCRjExODIzQjU5MDA1MkMwMkMgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yMzU5LDYgKzIzODIsMTEgQEAKIAkJCQlCQzE4QzQ3MzBFMTZGNUNEMDBCMzQ0
NjAgLyogVW5pY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NzQwRTE2RjVDRDAwQjM0
NDYwIC8qIFVuaWNvZGVJY3UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDc1MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBVbnVzZWRQYXJhbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxNEFGNEMxMjJG
Mjg5QTAwOTJEOUY1IC8qIFVSTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxNEFGNEQx
MjJGMjg5QTAwOTJEOUY1IC8qIFVSTENvbXBvbmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcx
NEFGNEUxMjJGMjg5QTAwOTJEOUY1IC8qIFVSTFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTcxNEFGNEYxMjJGMjg5QTAwOTJEOUY1IC8qIFVSTFNlZ21lbnRzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk5NzE0QUY2MDEyMkYzMjA3MDA5MkQ5RjUgLyogVVJMU3RyaW5nLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ3NjBFMTZGNUNEMDBCMzQ0NjAgLyogVVN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDhEREE1QzExMjY0NjMxNzAwNzUxNzMyIC8qIFVTdHJpbmdCdWlsZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3NzBFMTZGNUNEMDBCMzQ0NjAgLyogVVRGOC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMzczLDMzICsyNDAxLDEyIEBACiAJCQkJODY4QkZBMTgxMTdDRjE5OTAw
QjkwOEIxIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEMDhENTQxMTc5MzYx
MzAwNkU1RUQwIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2ODhDQjE2
MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCURE
RjdBQkQ0MTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLAotCQkJCURERTgyQUQ4MTIwOUQ5NTUwMDVDMTc1NiAvKiBHQ0hhbmRsZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJODZGMzg4NTkxMjExMzBDQTAwN0E3Q0UzIC8qIEF0b21pY1N0cmluZ0hhc2gu
aCBpbiBIZWFkZXJzICovLAotCQkJCTg2MkFGNEI2MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNpbWFs
TnVtYmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5NjEyMjU2MEU4MDAzMDlFOUQgLyog
UGFzc093bkFycmF5UHRyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5ODEyMjU2MUQyMDAz
MDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTk3MTRBRjRC
MTIyRjI4OUEwMDkyRDlGNSAvKiBSYXdVUkxCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3
MTRBRjRDMTIyRjI4OUEwMDkyRDlGNSAvKiBVUkxCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTk3MTRBRjREMTIyRjI4OUEwMDkyRDlGNSAvKiBVUkxDb21wb25lbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCTk3MTRBRjRFMTIyRjI4OUEwMDkyRDlGNSAvKiBVUkxQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTk3MTRBRjRGMTIyRjI4OUEwMDkyRDlGNSAvKiBVUkxTZWdtZW50cy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJOTcxNEFGNUYxMjJGMzIwNzAwOTJEOUY1IC8qIFBhcnNlZFVSTC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJOTcxNEFGNjAxMjJGMzIwNzAwOTJEOUY1IC8qIFVSTFN0cmluZy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0
YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAv
KiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTMzRjVDREMxMjY5
MjI5QjAwNDkxOTFFIC8qIE51bGxQdHIuaCBpbiBIZWFkZXJzICovLAotCQkJCUYzQkQzMUVEMTI2
NzM1NzcwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTE0MDAw
Njc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MTRCM0VGMDUxMkJDMjRERDAwRDI5RUZGIC8qIFBhZ2VCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMTRGRkY5OEQxMkJGRkY3NTAwNzk1QkI4IC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNTEzNUZBRjIxMkQyNkFDRTAwM0MwODNCIC8qIERlY29kZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTUxMzVGQUYzMTJEMjZBRDEwMDNDMDgzQiAvKiBFbmNvZGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRh
eENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NjcwNEI0
MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJsZSBpbiBIZWFk
ZXJzICovLAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
QEAgLTI2OTcsNyArMjcwNCw2IEBACiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENv
ZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUE4NjJENjBEN0YyQjVDMDAxRUM2QUEg
LyogQ29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTg2MkE5MEQ3RUJC
NzYwMDFFQzZBQSAvKiBDb2xsYXRvcklDVS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxNEY4QkE0
RjEwN0VDODk5MDA5ODkyREMgLyogSGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
MTEwN0VDMzc2MDA0MjdBNDggLyogQ29tbW9uSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNzI5LDYgKzI3MzUsNyBAQAogCQkJCTE0MjgwODU1MTA3RUMw
RTcwMDEzRTdCMiAvKiBHZXR0ZXJTZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
Q0QxMDdFQzM3NjAwNDI3QTQ4IC8qIEdsb2JhbEV2YWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NURGQzkzMzA4RUExNzNBMDBGNzMwMEIgLyogSGFzaFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTE0MENERTcwMTJERTk3QTAwMDEzQ0ZDNSAvKiBIZWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUNFMTA3RUMzNzYwMDQyN0E0OCAvKiBJZGVudGlmaWVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxNzg2MzZEMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0
OCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc4Nyw2ICsyNzk0
LDcgQEAKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDZEMzU4QjMwREFBREFBNDAwM0IxNzRFIC8qIE1haW5U
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDZEMzU4QjQwREFBREFBQTAwM0IxNzRFIC8q
IE1haW5UaHJlYWRNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkxNDBDREM3QzEyREMwOUJGMDAx
M0NGQzUgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc0QjM0OTkxMDJB
NUY4RTAwMzJBQjk4IC8qIE1hcmtTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0M1MzBF
NDEwMkEzODEzMDA1QkM3NDEgLyogTWFya1N0YWNrUG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ0NjlEREYxMDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yODYxLDEwICsyODY5LDEwIEBACiAJCQkJRTFFRjc5QUEwQ0U5N0JBNjAwODhENTAw
IC8qIFVURjguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4QkZBMTcxMTdDRjE5OTAwQjkwOEIx
IC8qIFdURlN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkQwOEQ1MzExNzkzNjEzMDA2
RTVFRDAgLyogV1RGVGhyZWFkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk4NjcwNEI0MjEy
REI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODY3MDRCODQxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJT
eW50YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGVhcC5jcHAJKHJldmlzaW9uIDc1NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDU2ICsyMSwyOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKIAotI2luY2x1ZGUgIkFyZ0xp
c3QuaCIKLSNpbmNsdWRlICJDYWxsRnJhbWUuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKKyNpbmNsdWRlICJHQ0hhbmRsZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
Ci0jaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNP
Tk9iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiSlNWYWx1ZS5oIgot
I2luY2x1ZGUgIkpTWm9tYmllLmgiCi0jaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAi
Tm9kZXMuaCIKLSNpbmNsdWRlICJUcmFjaW5nLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2lu
Y2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHNldGptcC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVk
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KLSNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CisjaW5jbHVkZSAiVHJhY2luZ0R0
cmFjZS5oIgogCiAjZGVmaW5lIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElPTiAwCiAKLXVzaW5n
IHN0ZDo6bWF4OwotCiBuYW1lc3BhY2UgSlNDIHsKIAotLy8gdHVuYWJsZSBwYXJhbWV0ZXJzCi0K
LWNvbnN0IHNpemVfdCBHUk9XVEhfRkFDVE9SID0gMjsKLWNvbnN0IHNpemVfdCBMT1dfV0FURVJf
RkFDVE9SID0gNDsKLWNvbnN0IHNpemVfdCBBTExPQ0FUSU9OU19QRVJfQ09MTEVDVElPTiA9IDM2
MDA7Ci0vLyBUaGlzIHZhbHVlIGhhcyB0byBiZSBhIG1hY3JvIHRvIGJlIHVzZWQgaW4gbWF4KCkg
d2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywg
c2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX0FSUkFZX1NJWkUgKHN0
YXRpY19jYXN0PHNpemVfdD4oMTQpKQotCiBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKLSAgICA6IG1fbWFya0xpc3RTZXQoMCkKKyAgICA6IG1fbWFya2VkU3BhY2UoZ2xvYmFs
RGF0YSkKKyAgICAsIG1fbWFya0xpc3RTZXQoMCkKKyAgICAsIG1fYWN0aXZpdHlDYWxsYmFjayhE
ZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX2dsb2JhbERh
dGEoZ2xvYmFsRGF0YSkKLSAgICAsIG1fbWFjaGluZVN0YWNrTWFya2VyKHRoaXMpCisgICAgLCBt
X21hY2hpbmVTdGFja01hcmtlcigmZ2xvYmFsRGF0YS0+aGVhcCkKKyAgICAsIG1fZXh0cmFDb3N0
KDApCiB7Ci0gICAgQVNTRVJUKGdsb2JhbERhdGEpOwotICAgIG1lbXNldCgmbV9oZWFwLCAwLCBz
aXplb2YoQ29sbGVjdG9ySGVhcCkpOwotICAgIGFsbG9jYXRlQmxvY2soKTsKLSAgICBtX2FjdGl2
aXR5Q2FsbGJhY2sgPSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUodGhpcyk7CiAg
ICAgKCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7CiB9CiAKQEAgLTg4LDcgKzYwLDcgQEAgdm9pZCBI
ZWFwOjpkZXN0cm95KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKCFtX2dsb2JhbERh
dGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpOwotICAgIEFTU0VSVCghaXNCdXN5KCkpOworICAgIEFT
U0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwogICAgIAogICAgIC8v
IFRoZSBnbG9iYWwgb2JqZWN0IGlzIG5vdCBHQyBwcm90ZWN0ZWQgYXQgdGhpcyBwb2ludCwgc28g
c3dlZXBpbmcgbWF5IGRlbGV0ZSBpdAogICAgIC8vIChhbmQgdGh1cyB0aGUgZ2xvYmFsIGRhdGEp
IGJlZm9yZSBvdGhlciBvYmplY3RzIHRoYXQgbWF5IHVzZSB0aGUgZ2xvYmFsIGRhdGEuCkBAIC05
Nyw5MSArNjksMTEgQEAgdm9pZCBIZWFwOjpkZXN0cm95KCkKICAgICBkZWxldGUgbV9tYXJrTGlz
dFNldDsKICAgICBtX21hcmtMaXN0U2V0ID0gMDsKIAotICAgIGZyZWVCbG9ja3MoKTsKLQotICAg
IG1fZ2xvYmFsRGF0YSA9IDA7Ci19Ci0KLU5FVkVSX0lOTElORSBDb2xsZWN0b3JCbG9jayogSGVh
cDo6YWxsb2NhdGVCbG9jaygpCi17Ci0gICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRp
b24gPSBQYWdlQWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKEJMT0NLX1NJWkUsIEJMT0NLX1NJ
WkUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKLSAgICBDb2xsZWN0b3JCbG9jayogYmxv
Y2sgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9jayo+KGFsbG9jYXRpb24uYmFzZSgpKTsKLSAg
ICBpZiAoIWJsb2NrKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBibG9j
ay4KLQotICAgIGJsb2NrLT5oZWFwID0gdGhpczsKLSAgICBjbGVhck1hcmtCaXRzKGJsb2NrKTsK
LQotICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBtX2dsb2JhbERh
dGEtPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jazsgKytpKQotICAgICAgICBuZXcg
KCZibG9jay0+Y2VsbHNbaV0pIEpTQ2VsbChkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSk7Ci0g
ICAgCi0gICAgLy8gQWRkIGJsb2NrIHRvIGJsb2NrcyB2ZWN0b3IuCi0KLSAgICBzaXplX3QgbnVt
QmxvY2tzID0gbV9oZWFwLm51bUJsb2NrczsKLSAgICBpZiAobV9oZWFwLnVzZWRCbG9ja3MgPT0g
bnVtQmxvY2tzKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4TnVtQmxvY2tzID0g
VUxPTkdfTUFYIC8gc2l6ZW9mKFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCkgLyBHUk9XVEhfRkFDVE9S
OwotICAgICAgICBpZiAobnVtQmxvY2tzID4gbWF4TnVtQmxvY2tzKQotICAgICAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgbnVtQmxvY2tzID0gbWF4KE1JTl9BUlJBWV9TSVpFLCBudW1CbG9ja3Mg
KiBHUk9XVEhfRkFDVE9SKTsKLSAgICAgICAgbV9oZWFwLm51bUJsb2NrcyA9IG51bUJsb2NrczsK
LSAgICAgICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PFBhZ2VBbGxvY2F0aW9uQWxpZ25l
ZCo+KGZhc3RSZWFsbG9jKG1faGVhcC5ibG9ja3MsIG51bUJsb2NrcyAqIHNpemVvZihQYWdlQWxs
b2NhdGlvbkFsaWduZWQpKSk7Ci0gICAgfQotICAgIG1faGVhcC5ibG9ja3NbbV9oZWFwLnVzZWRC
bG9ja3MrK10gPSBhbGxvY2F0aW9uOwotCi0gICAgcmV0dXJuIGJsb2NrOwotfQotCi1ORVZFUl9J
TkxJTkUgdm9pZCBIZWFwOjpmcmVlQmxvY2soc2l6ZV90IGJsb2NrKQotewotICAgIG1faGVhcC5k
aWRTaHJpbmsgPSB0cnVlOwotCi0gICAgT2JqZWN0SXRlcmF0b3IgaXQobV9oZWFwLCBibG9jayk7
Ci0gICAgT2JqZWN0SXRlcmF0b3IgZW5kKG1faGVhcCwgYmxvY2sgKyAxKTsKLSAgICBmb3IgKCA7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPn5KU0NlbGwoKTsKLSAgICBtX2hlYXAu
YmxvY2tzW2Jsb2NrXS5kZWFsbG9jYXRlKCk7Ci0KLSAgICAvLyBzd2FwIHdpdGggdGhlIGxhc3Qg
YmxvY2sgc28gd2UgY29tcGFjdCBhcyB3ZSBnbwotICAgIG1faGVhcC5ibG9ja3NbYmxvY2tdID0g
bV9oZWFwLmJsb2Nrc1ttX2hlYXAudXNlZEJsb2NrcyAtIDFdOwotICAgIG1faGVhcC51c2VkQmxv
Y2tzLS07Ci0KLSAgICBpZiAobV9oZWFwLm51bUJsb2NrcyA+IE1JTl9BUlJBWV9TSVpFICYmIG1f
aGVhcC51c2VkQmxvY2tzIDwgbV9oZWFwLm51bUJsb2NrcyAvIExPV19XQVRFUl9GQUNUT1IpIHsK
LSAgICAgICAgbV9oZWFwLm51bUJsb2NrcyA9IG1faGVhcC5udW1CbG9ja3MgLyBHUk9XVEhfRkFD
VE9SOyAKLSAgICAgICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZCo+KGZhc3RSZWFsbG9jKG1faGVhcC5ibG9ja3MsIG1faGVhcC5udW1CbG9ja3MgKiBz
aXplb2YoUGFnZUFsbG9jYXRpb25BbGlnbmVkKSkpOwotICAgIH0KLX0KLQotdm9pZCBIZWFwOjpm
cmVlQmxvY2tzKCkKLXsKICAgICBQcm90ZWN0Q291bnRTZXQgcHJvdGVjdGVkVmFsdWVzQ29weSA9
IG1fcHJvdGVjdGVkVmFsdWVzOwotCi0gICAgY2xlYXJNYXJrQml0cygpOwotICAgIFByb3RlY3RD
b3VudFNldDo6aXRlcmF0b3IgcHJvdGVjdGVkVmFsdWVzRW5kID0gcHJvdGVjdGVkVmFsdWVzQ29w
eS5lbmQoKTsKLSAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBwcm90ZWN0
ZWRWYWx1ZXNDb3B5LmJlZ2luKCk7IGl0ICE9IHByb3RlY3RlZFZhbHVlc0VuZDsgKytpdCkKLSAg
ICAgICAgbWFya0NlbGwoaXQtPmZpcnN0KTsKLQotICAgIG1faGVhcC5uZXh0Q2VsbCA9IDA7Ci0g
ICAgbV9oZWFwLm5leHRCbG9jayA9IDA7Ci0gICAgRGVhZE9iamVjdEl0ZXJhdG9yIGl0KG1faGVh
cCwgbV9oZWFwLm5leHRCbG9jaywgbV9oZWFwLm5leHRDZWxsKTsKLSAgICBEZWFkT2JqZWN0SXRl
cmF0b3IgZW5kKG1faGVhcCwgbV9oZWFwLnVzZWRCbG9ja3MpOwotICAgIGZvciAoIDsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+fkpTQ2VsbCgpOwotCisgICAgbV9tYXJrZWRTcGFj
ZS5kZXN0cm95KHByb3RlY3RlZFZhbHVlc0NvcHkpOwogICAgIEFTU0VSVCghcHJvdGVjdGVkT2Jq
ZWN0Q291bnQoKSk7CiAKLSAgICBwcm90ZWN0ZWRWYWx1ZXNFbmQgPSBwcm90ZWN0ZWRWYWx1ZXND
b3B5LmVuZCgpOwotICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IHByb3Rl
Y3RlZFZhbHVlc0NvcHkuYmVnaW4oKTsgaXQgIT0gcHJvdGVjdGVkVmFsdWVzRW5kOyArK2l0KQot
ICAgICAgICBpdC0+Zmlyc3QtPn5KU0NlbGwoKTsKLQotICAgIGZvciAoc2l6ZV90IGJsb2NrID0g
MDsgYmxvY2sgPCBtX2hlYXAudXNlZEJsb2NrczsgKytibG9jaykKLSAgICAgICAgbV9oZWFwLmJs
b2Nrc1tibG9ja10uZGVhbGxvY2F0ZSgpOwotCi0gICAgZmFzdEZyZWUobV9oZWFwLmJsb2Nrcyk7
Ci0KLSAgICBtZW1zZXQoJm1faGVhcCwgMCwgc2l6ZW9mKENvbGxlY3RvckhlYXApKTsKKyAgICBt
X2dsb2JhbERhdGEgPSAwOwogfQogCiB2b2lkIEhlYXA6OnJlY29yZEV4dHJhQ29zdChzaXplX3Qg
Y29zdCkKQEAgLTE5NywxNjcgKzg5LDcxIEBAIHZvaWQgSGVhcDo6cmVjb3JkRXh0cmFDb3N0KHNp
emVfdCBjb3N0KQogICAgIC8vIGlmIGEgbGFyZ2UgdmFsdWUgc3Vydml2ZXMgb25lIGdhcmJhZ2Ug
Y29sbGVjdGlvbiwgdGhlcmUgaXMgbm90IG11Y2ggcG9pbnQgdG8KICAgICAvLyBjb2xsZWN0aW5n
IG1vcmUgZnJlcXVlbnRseSBhcyBsb25nIGFzIGl0IHN0YXlzIGFsaXZlLgogCi0gICAgaWYgKG1f
aGVhcC5leHRyYUNvc3QgPiBtYXhFeHRyYUNvc3QgJiYgbV9oZWFwLmV4dHJhQ29zdCA+IG1faGVh
cC51c2VkQmxvY2tzICogQkxPQ0tfU0laRSAvIDIpIHsKKyAgICBpZiAobV9leHRyYUNvc3QgPiBt
YXhFeHRyYUNvc3QgJiYgbV9leHRyYUNvc3QgPiBtX21hcmtlZFNwYWNlLnNpemUoKSAvIDIpIHsK
KyAgICAgICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKKwogICAgICAgICAvLyBJZiB0aGUg
bGFzdCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgaGVhcCBkZWFsbG9jYXRlZCBibG9ja3MsIHdlIG5l
ZWQKICAgICAgICAgLy8gdG8gY2xlYW4gdXAgcmVtYWluaW5nIGdhcmJhZ2UgYmVmb3JlIG1hcmtp
bmcuIE90aGVyd2lzZSwgdGhlIGNvbnNlcnZhdGl2ZQogICAgICAgICAvLyBtYXJraW5nIG1lY2hh
bmlzbSBtaWdodCBmb2xsb3cgYSBwb2ludGVyIHRvIHVubWFwcGVkIG1lbW9yeS4KLSAgICAgICAg
aWYgKG1faGVhcC5kaWRTaHJpbmspCi0gICAgICAgICAgICBzd2VlcCgpOwotICAgICAgICByZXNl
dCgpOworICAgICAgICBpZiAobV9tYXJrZWRTcGFjZS5kaWRTaHJpbmsoKSkKKyAgICAgICAgICAg
IG1fbWFya2VkU3BhY2Uuc3dlZXAoKTsKKworICAgICAgICBtYXJrUm9vdHMoKTsKKworICAgICAg
ICBKQVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKKworICAgICAgICBtX21hcmtlZFNwYWNlLnJl
c2V0KCk7CisgICAgICAgIG1fZXh0cmFDb3N0ID0gMDsKKworICAgICAgICBKQVZBU0NSSVBUQ09S
RV9HQ19FTkQoKTsKKworICAgICAgICAoKm1fYWN0aXZpdHlDYWxsYmFjaykoKTsKICAgICB9Ci0g
ICAgbV9oZWFwLmV4dHJhQ29zdCArPSBjb3N0OworICAgIG1fZXh0cmFDb3N0ICs9IGNvc3Q7CiB9
CiAKIHZvaWQqIEhlYXA6OmFsbG9jYXRlKHNpemVfdCBzKQogewogICAgIEFTU0VSVChnbG9iYWxE
YXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZp
ZXJUYWJsZSgpKTsKLSAgICB0eXBlZGVmIEhlYXBDb25zdGFudHM6OkJsb2NrIEJsb2NrOwotICAg
IHR5cGVkZWYgSGVhcENvbnN0YW50czo6Q2VsbCBDZWxsOwotICAgIAogICAgIEFTU0VSVChKU0xv
Y2s6OmxvY2tDb3VudCgpID4gMCk7CiAgICAgQVNTRVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soKSk7CiAgICAgQVNTRVJUX1VOVVNFRChzLCBzIDw9IEhlYXBDb25zdGFudHM6
OmNlbGxTaXplKTsKLQotICAgIEFTU0VSVChtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBO
b09wZXJhdGlvbik7CisgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJh
dGlvbik7CiAKICNpZiBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJT04KICAgICBjb2xsZWN0QWxs
R2FyYmFnZSgpOwotICAgIEFTU0VSVChtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09w
ZXJhdGlvbik7CisgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlv
bik7CiAjZW5kaWYKIAotYWxsb2NhdGU6Ci0KLSAgICAvLyBGYXN0IGNhc2U6IGZpbmQgdGhlIG5l
eHQgZ2FyYmFnZSBjZWxsIGFuZCByZWN5Y2xlIGl0LgotCi0gICAgZG8gewotICAgICAgICBBU1NF
UlQobV9oZWFwLm5leHRCbG9jayA8IG1faGVhcC51c2VkQmxvY2tzKTsKLSAgICAgICAgQmxvY2sq
IGJsb2NrID0gbV9oZWFwLmNvbGxlY3RvckJsb2NrKG1faGVhcC5uZXh0QmxvY2spOwotICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBBU1NFUlQobV9oZWFwLm5leHRDZWxsIDwgSGVhcENvbnN0YW50
czo6Y2VsbHNQZXJCbG9jayk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5tYXJrZWQuZ2V0KG1f
aGVhcC5uZXh0Q2VsbCkpIHsgLy8gQWx3YXlzIGZhbHNlIGZvciB0aGUgbGFzdCBjZWxsIGluIHRo
ZSBibG9jawotICAgICAgICAgICAgICAgIENlbGwqIGNlbGwgPSAmYmxvY2stPmNlbGxzW21faGVh
cC5uZXh0Q2VsbF07Ci0KLSAgICAgICAgICAgICAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVz
cyA9IEFsbG9jYXRpb247Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBpbXAgPSByZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KGNlbGwpOwotICAgICAgICAgICAgICAgIGltcC0+fkpTQ2VsbCgpOwot
ICAgICAgICAgICAgICAgIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247
Ci0KLSAgICAgICAgICAgICAgICArK21faGVhcC5uZXh0Q2VsbDsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY2VsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJsb2NrLT5tYXJrZWQuYWR2
YW5jZVRvTmV4dFBvc3NpYmxlRnJlZUNlbGwobV9oZWFwLm5leHRDZWxsKTsKLSAgICAgICAgfSB3
aGlsZSAobV9oZWFwLm5leHRDZWxsICE9IEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2spOwot
ICAgICAgICBtX2hlYXAubmV4dENlbGwgPSAwOwotICAgIH0gd2hpbGUgKCsrbV9oZWFwLm5leHRC
bG9jayAhPSBtX2hlYXAudXNlZEJsb2Nrcyk7CisgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0g
QWxsb2NhdGlvbjsKKyAgICB2b2lkKiByZXN1bHQgPSBtX21hcmtlZFNwYWNlLmFsbG9jYXRlKHMp
OworICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwogCi0gICAgLy8gU2xv
dyBjYXNlOiByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGhlYXAuIE1hcmsgbGl2ZSBvYmplY3RzIGFu
ZCBzdGFydCBvdmVyLgorICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEpBVkFTQ1JJUFRDT1JF
X0dDX0JFR0lOKCk7CiAKLSAgICByZXNldCgpOwotICAgIGdvdG8gYWxsb2NhdGU7Ci19CisgICAg
ICAgIG1hcmtSb290cygpOwogCi12b2lkIEhlYXA6OnJlc2l6ZUJsb2NrcygpCi17Ci0gICAgbV9o
ZWFwLmRpZFNocmluayA9IGZhbHNlOworICAgICAgICBKQVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQo
KTsKIAotICAgIHNpemVfdCB1c2VkQ2VsbENvdW50ID0gbWFya2VkQ2VsbHMoKTsKLSAgICBzaXpl
X3QgbWluQ2VsbENvdW50ID0gdXNlZENlbGxDb3VudCArIG1heChBTExPQ0FUSU9OU19QRVJfQ09M
TEVDVElPTiwgdXNlZENlbGxDb3VudCk7Ci0gICAgc2l6ZV90IG1pbkJsb2NrQ291bnQgPSAobWlu
Q2VsbENvdW50ICsgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpIC8gSGVhcENvbnN0
YW50czo6Y2VsbHNQZXJCbG9jazsKKyAgICAgICAgbV9tYXJrZWRTcGFjZS5yZXNldCgpOworICAg
ICAgICBtX2V4dHJhQ29zdCA9IDA7CiAKLSAgICBzaXplX3QgbWF4Q2VsbENvdW50ID0gMS4yNWYg
KiBtaW5DZWxsQ291bnQ7Ci0gICAgc2l6ZV90IG1heEJsb2NrQ291bnQgPSAobWF4Q2VsbENvdW50
ICsgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpIC8gSGVhcENvbnN0YW50czo6Y2Vs
bHNQZXJCbG9jazsKKyAgICAgICAgSkFWQVNDUklQVENPUkVfR0NfRU5EKCk7CiAKLSAgICBpZiAo
bV9oZWFwLnVzZWRCbG9ja3MgPCBtaW5CbG9ja0NvdW50KQotICAgICAgICBncm93QmxvY2tzKG1p
bkJsb2NrQ291bnQpOwotICAgIGVsc2UgaWYgKG1faGVhcC51c2VkQmxvY2tzID4gbWF4QmxvY2tD
b3VudCkKLSAgICAgICAgc2hyaW5rQmxvY2tzKG1heEJsb2NrQ291bnQpOwotfQotCi12b2lkIEhl
YXA6Omdyb3dCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2NrcykKLXsKLSAgICBBU1NFUlQobV9oZWFw
LnVzZWRCbG9ja3MgPCBuZWVkZWRCbG9ja3MpOwotICAgIHdoaWxlIChtX2hlYXAudXNlZEJsb2Nr
cyA8IG5lZWRlZEJsb2NrcykKLSAgICAgICAgYWxsb2NhdGVCbG9jaygpOwotfQorICAgICAgICAo
Km1fYWN0aXZpdHlDYWxsYmFjaykoKTsKIAotdm9pZCBIZWFwOjpzaHJpbmtCbG9ja3Moc2l6ZV90
IG5lZWRlZEJsb2NrcykKLXsKLSAgICBBU1NFUlQobV9oZWFwLnVzZWRCbG9ja3MgPiBuZWVkZWRC
bG9ja3MpOwotICAgIAotICAgIC8vIENsZWFyIHRoZSBhbHdheXMtb24gbGFzdCBiaXQsIHNvIGlz
RW1wdHkoKSBpc24ndCBmb29sZWQgYnkgaXQuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2hlYXAudXNlZEJsb2NrczsgKytpKQotICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSkt
Pm1hcmtlZC5jbGVhcihIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSAhPSBtX2hlYXAudXNlZEJsb2NrcyAmJiBtX2hlYXAudXNlZEJs
b2NrcyAhPSBuZWVkZWRCbG9ja3M7ICkgewotICAgICAgICBpZiAobV9oZWFwLmNvbGxlY3RvckJs
b2NrKGkpLT5tYXJrZWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmcmVlQmxvY2soaSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgKytpOworICAgICAgICBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPSBBbGxvY2F0aW9uOworICAgICAgICByZXN1bHQgPSBtX21hcmtlZFNwYWNlLmFsbG9j
YXRlKHMpOworICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAg
ICB9Ci0KLSAgICAvLyBSZXNldCB0aGUgYWx3YXlzLW9uIGxhc3QgYml0LgotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsraSkKLSAgICAgICAgbV9oZWFwLmNv
bGxlY3RvckJsb2NrKGkpLT5tYXJrZWQuc2V0KEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sg
LSAxKTsKLX0KLQotaW5saW5lIGJvb2wgaXNQb2ludGVyQWxpZ25lZCh2b2lkKiBwKQotewotICAg
IHJldHVybiAoKChpbnRwdHJfdCkocCkgJiAoc2l6ZW9mKGNoYXIqKSAtIDEpKSA9PSAwKTsKLX0K
LQotLy8gQ2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIGZvciBpc1Bvc3NpYmxl
Q2VsbCB0byBiZSB2YWxpZC4KLUNPTVBJTEVfQVNTRVJUKHNpemVvZihDb2xsZWN0b3JDZWxsKSAl
IDIgPT0gMCwgQ29sbGVjdG9yX2NlbGxfc2l6ZV9pc19wb3dlcl9vZl90d28pOwotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNDZWxsQWxpZ25lZCh2b2lkICpwKQotewotICAgIHJldHVybiAoKChpbnRw
dHJfdCkocCkgJiBDRUxMX01BU0spID09IDApOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQ
b3NzaWJsZUNlbGwodm9pZCogcCkKLXsKLSAgICByZXR1cm4gaXNDZWxsQWxpZ25lZChwKSAmJiBw
OworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgSGVh
cDo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrLCB2b2lkKiBzdGFydCwg
dm9pZCogZW5kKQogewotI2lmIE9TKFdJTkNFKQotICAgIGlmIChzdGFydCA+IGVuZCkgewotICAg
ICAgICB2b2lkKiB0bXAgPSBzdGFydDsKLSAgICAgICAgc3RhcnQgPSBlbmQ7Ci0gICAgICAgIGVu
ZCA9IHRtcDsKLSAgICB9Ci0jZWxzZQotICAgIEFTU0VSVChzdGFydCA8PSBlbmQpOwotI2VuZGlm
Ci0KLSAgICBBU1NFUlQoKHN0YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hh
cio+KHN0YXJ0KSkgPCAweDEwMDAwMDApOwotICAgIEFTU0VSVChpc1BvaW50ZXJBbGlnbmVkKHN0
YXJ0KSk7Ci0gICAgQVNTRVJUKGlzUG9pbnRlckFsaWduZWQoZW5kKSk7Ci0KLSAgICBjaGFyKiog
cCA9IHN0YXRpY19jYXN0PGNoYXIqKj4oc3RhcnQpOwotICAgIGNoYXIqKiBlID0gc3RhdGljX2Nh
c3Q8Y2hhcioqPihlbmQpOwotCi0gICAgd2hpbGUgKHAgIT0gZSkgewotICAgICAgICBjaGFyKiB4
ID0gKnArKzsKLSAgICAgICAgaWYgKGlzUG9zc2libGVDZWxsKHgpKSB7Ci0gICAgICAgICAgICBz
aXplX3QgdXNlZEJsb2NrczsKLSAgICAgICAgICAgIHVpbnRwdHJfdCB4QXNCaXRzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpOwotICAgICAgICAgICAgeEFzQml0cyAmPSBDRUxMX0FM
SUdOX01BU0s7Ci0KLSAgICAgICAgICAgIHVpbnRwdHJfdCBvZmZzZXQgPSB4QXNCaXRzICYgQkxP
Q0tfT0ZGU0VUX01BU0s7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgbGFzdENlbGxPZmZzZXQg
PSBzaXplb2YoQ29sbGVjdG9yQ2VsbCkgKiAoQ0VMTFNfUEVSX0JMT0NLIC0gMSk7Ci0gICAgICAg
ICAgICBpZiAob2Zmc2V0ID4gbGFzdENlbGxPZmZzZXQpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIENvbGxlY3RvckJsb2NrKiBibG9ja0FkZHIgPSByZWludGVycHJl
dF9jYXN0PENvbGxlY3RvckJsb2NrKj4oeEFzQml0cyAtIG9mZnNldCk7Ci0gICAgICAgICAgICB1
c2VkQmxvY2tzID0gbV9oZWFwLnVzZWRCbG9ja3M7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBi
bG9jayA9IDA7IGJsb2NrIDwgdXNlZEJsb2NrczsgYmxvY2srKykgewotICAgICAgICAgICAgICAg
IGlmIChtX2hlYXAuY29sbGVjdG9yQmxvY2soYmxvY2spICE9IGJsb2NrQWRkcikKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChy
ZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHhBc0JpdHMpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KKyAgICBtX21hcmtlZFNwYWNlLm1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3Rh
Y2ssIHN0YXJ0LCBlbmQpOwogfQogCiB2b2lkIEhlYXA6OnVwZGF0ZVdlYWtHQ0hhbmRsZXMoKQpA
QCAtNDQ4LDY3ICsyNDQsNiBAQCB2b2lkIEhlYXA6Om1hcmtUZW1wU29ydFZlY3RvcnMoTWFya1N0
YWNrCiAgICAgfQogfQogICAgIAotdm9pZCBIZWFwOjpjbGVhck1hcmtCaXRzKCkKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1faGVhcC51c2VkQmxvY2tzOyArK2kpCi0gICAgICAgIGNs
ZWFyTWFya0JpdHMobV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpKTsKLX0KLQotdm9pZCBIZWFwOjpj
bGVhck1hcmtCaXRzKENvbGxlY3RvckJsb2NrKiBibG9jaykKLXsKLSAgICAvLyBhbGxvY2F0ZSBh
c3N1bWVzIHRoYXQgdGhlIGxhc3QgY2VsbCBpbiBldmVyeSBibG9jayBpcyBtYXJrZWQuCi0gICAg
YmxvY2stPm1hcmtlZC5jbGVhckFsbCgpOwotICAgIGJsb2NrLT5tYXJrZWQuc2V0KEhlYXBDb25z
dGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKLX0KLQotc2l6ZV90IEhlYXA6Om1hcmtlZENlbGxz
KHNpemVfdCBzdGFydEJsb2NrLCBzaXplX3Qgc3RhcnRDZWxsKSBjb25zdAotewotICAgIEFTU0VS
VChzdGFydEJsb2NrIDw9IG1faGVhcC51c2VkQmxvY2tzKTsKLSAgICBBU1NFUlQoc3RhcnRDZWxs
IDwgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayk7Ci0KLSAgICBpZiAoc3RhcnRCbG9jayA+
PSBtX2hlYXAudXNlZEJsb2NrcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzaXplX3QgcmVz
dWx0ID0gMDsKLSAgICByZXN1bHQgKz0gbV9oZWFwLmNvbGxlY3RvckJsb2NrKHN0YXJ0QmxvY2sp
LT5tYXJrZWQuY291bnQoc3RhcnRDZWxsKTsKLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRCbG9j
ayArIDE7IGkgPCBtX2hlYXAudXNlZEJsb2NrczsgKytpKQotICAgICAgICByZXN1bHQgKz0gbV9o
ZWFwLmNvbGxlY3RvckJsb2NrKGkpLT5tYXJrZWQuY291bnQoKTsKLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgSGVhcDo6c3dlZXAoKQotewotICAgIEFTU0VSVChtX2hlYXAub3BlcmF0
aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7Ci0gICAgaWYgKG1faGVhcC5vcGVyYXRpb25J
blByb2dyZXNzICE9IE5vT3BlcmF0aW9uKQotICAgICAgICBDUkFTSCgpOwotICAgIG1faGVhcC5v
cGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKLSAgICAKLSNpZiAhRU5BQkxFKEpTQ19a
T01CSUVTKQotICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBtX2ds
b2JhbERhdGEtPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOwotI2VuZGlmCi0KLSAg
ICBEZWFkT2JqZWN0SXRlcmF0b3IgaXQobV9oZWFwLCBtX2hlYXAubmV4dEJsb2NrLCBtX2hlYXAu
bmV4dENlbGwpOwotICAgIERlYWRPYmplY3RJdGVyYXRvciBlbmQobV9oZWFwLCBtX2hlYXAudXNl
ZEJsb2Nrcyk7Ci0gICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSlNDZWxs
KiBjZWxsID0gKml0OwotI2lmIEVOQUJMRShKU0NfWk9NQklFUykKLSAgICAgICAgaWYgKCFjZWxs
LT5pc1pvbWJpZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBjZWxs
LT5jbGFzc0luZm8oKTsKLSAgICAgICAgICAgIGNlbGwtPn5KU0NlbGwoKTsKLSAgICAgICAgICAg
IG5ldyAoY2VsbCkgSlNab21iaWUoaW5mbywgSlNab21iaWU6OmxlYWtlZFpvbWJpZVN0cnVjdHVy
ZSgpKTsKLSAgICAgICAgICAgIEhlYXA6Om1hcmtDZWxsKGNlbGwpOwotICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICBjZWxsLT5+SlNDZWxsKCk7Ci0gICAgICAgIC8vIENhbGxlcnMgb2Ygc3dlZXAg
YXNzdW1lIGl0J3Mgc2FmZSB0byBtYXJrIGFueSBjZWxsIGluIHRoZSBoZWFwLgotICAgICAgICBu
ZXcgKGNlbGwpIEpTQ2VsbChkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSk7Ci0jZW5kaWYKLSAg
ICB9Ci0KLSAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwotfQot
CiB2b2lkIEhlYXA6Om1hcmtSb290cygpCiB7CiAjaWZuZGVmIE5ERUJVRwpAQCAtNTE4LDE2ICsy
NTMsMTYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIH0KICNlbmRpZgogCi0gICAgQVNT
RVJUKG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKLSAgICBpZiAo
bV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pCisgICAgQVNTRVJUKG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7CisgICAgaWYgKG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbikKICAgICAgICAgQ1JBU0goKTsKIAotICAgIG1faGVh
cC5vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKKyAgICBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPSBDb2xsZWN0aW9uOwogCiAgICAgTWFya1N0YWNrJiBtYXJrU3RhY2sgPSBtX2dsb2Jh
bERhdGEtPm1hcmtTdGFjazsKIAogICAgIC8vIFJlc2V0IG1hcmsgYml0cy4KLSAgICBjbGVhck1h
cmtCaXRzKCk7CisgICAgbV9tYXJrZWRTcGFjZS5jbGVhck1hcmtCaXRzKCk7CiAKICAgICAvLyBN
YXJrIHN0YWNrIHJvb3RzLgogICAgIG1fbWFjaGluZVN0YWNrTWFya2VyLm1hcmtNYWNoaW5lU3Rh
Y2tDb25zZXJ2YXRpdmVseShtYXJrU3RhY2spOwpAQCAtNTU2LDMzICsyOTEsMjIgQEAgdm9pZCBI
ZWFwOjptYXJrUm9vdHMoKQogCiAgICAgdXBkYXRlV2Vha0dDSGFuZGxlcygpOwogCi0gICAgbV9o
ZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKKyAgICBtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKIH0KIAogc2l6ZV90IEhlYXA6Om9iamVjdENvdW50KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9oZWFwLm5leHRCbG9jayAqIEhlYXBDb25zdGFudHM6OmNl
bGxzUGVyQmxvY2sgLy8gYWxsb2NhdGVkIGZ1bGwgYmxvY2tzCi0gICAgICAgICAgICsgbV9oZWFw
Lm5leHRDZWxsIC8vIGFsbG9jYXRlZCBjZWxscyBpbiBjdXJyZW50IGJsb2NrCi0gICAgICAgICAg
ICsgbWFya2VkQ2VsbHMobV9oZWFwLm5leHRCbG9jaywgbV9oZWFwLm5leHRDZWxsKSAvLyBtYXJr
ZWQgY2VsbHMgaW4gcmVtYWluZGVyIG9mIG1faGVhcAotICAgICAgICAgICAtIG1faGVhcC51c2Vk
QmxvY2tzOyAvLyAxIGNlbGwgcGVyIGJsb2NrIGlzIGEgZHVtbXkgc2VudGluZWwKLX0KLQotdm9p
ZCBIZWFwOjphZGRUb1N0YXRpc3RpY3MoSGVhcDo6U3RhdGlzdGljcyYgc3RhdGlzdGljcykgY29u
c3QKLXsKLSAgICBzdGF0aXN0aWNzLnNpemUgKz0gbV9oZWFwLnVzZWRCbG9ja3MgKiBCTE9DS19T
SVpFOwotICAgIHN0YXRpc3RpY3MuZnJlZSArPSBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NLX1NJ
WkUgLSAob2JqZWN0Q291bnQoKSAqIEhlYXBDb25zdGFudHM6OmNlbGxTaXplKTsKKyAgICByZXR1
cm4gbV9tYXJrZWRTcGFjZS5vYmplY3RDb3VudCgpOwogfQogCi1IZWFwOjpTdGF0aXN0aWNzIEhl
YXA6OnN0YXRpc3RpY3MoKSBjb25zdAorTWFya2VkU3BhY2U6OlN0YXRpc3RpY3MgSGVhcDo6c3Rh
dGlzdGljcygpIGNvbnN0CiB7Ci0gICAgU3RhdGlzdGljcyBzdGF0aXN0aWNzID0geyAwLCAwIH07
Ci0gICAgYWRkVG9TdGF0aXN0aWNzKHN0YXRpc3RpY3MpOwotICAgIHJldHVybiBzdGF0aXN0aWNz
OworICAgIHJldHVybiBtX21hcmtlZFNwYWNlLnN0YXRpc3RpY3MoKTsKIH0KIAogc2l6ZV90IEhl
YXA6OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NL
X1NJWkU7CisgICAgcmV0dXJuIG1fbWFya2VkU3BhY2Uuc2l6ZSgpOwogfQogCiBzaXplX3QgSGVh
cDo6Z2xvYmFsT2JqZWN0Q291bnQoKQpAQCAtNjU5LDI5ICszODMsNyBAQCBIYXNoQ291bnRlZFNl
dDxjb25zdCBjaGFyKj4qIEhlYXA6Om9iamVjCiAKIGJvb2wgSGVhcDo6aXNCdXN5KCkKIHsKLSAg
ICByZXR1cm4gbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb247Ci19Ci0K
LXZvaWQgSGVhcDo6cmVzZXQoKQotewotICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmlkZW50aWZp
ZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKLSAg
ICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwotCi0gICAgbWFya1Jvb3RzKCk7Ci0KLSAgICBK
QVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKLQotICAgIG1faGVhcC5uZXh0Q2VsbCA9IDA7Ci0g
ICAgbV9oZWFwLm5leHRCbG9jayA9IDA7Ci0gICAgbV9oZWFwLmV4dHJhQ29zdCA9IDA7Ci0jaWYg
RU5BQkxFKEpTQ19aT01CSUVTKQotICAgIHN3ZWVwKCk7Ci0jZW5kaWYKLSAgICByZXNpemVCbG9j
a3MoKTsKLQotICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwotCi0gICAgKCptX2FjdGl2aXR5
Q2FsbGJhY2spKCk7CisgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJh
dGlvbjsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC02OTIsMzAgKzM5
NCwzMCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKICAgICAvLyBJZiB0aGUgbGFz
dCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgaGVhcCBkZWFsbG9jYXRlZCBibG9ja3MsIHdlIG5lZWQK
ICAgICAvLyB0byBjbGVhbiB1cCByZW1haW5pbmcgZ2FyYmFnZSBiZWZvcmUgbWFya2luZy4gT3Ro
ZXJ3aXNlLCB0aGUgY29uc2VydmF0aXZlCiAgICAgLy8gbWFya2luZyBtZWNoYW5pc20gbWlnaHQg
Zm9sbG93IGEgcG9pbnRlciB0byB1bm1hcHBlZCBtZW1vcnkuCi0gICAgaWYgKG1faGVhcC5kaWRT
aHJpbmspCi0gICAgICAgIHN3ZWVwKCk7CisgICAgaWYgKG1fbWFya2VkU3BhY2UuZGlkU2hyaW5r
KCkpCisgICAgICAgIG1fbWFya2VkU3BhY2Uuc3dlZXAoKTsKIAogICAgIG1hcmtSb290cygpOwog
CiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAKLSAgICBtX2hlYXAubmV4dENlbGwg
PSAwOwotICAgIG1faGVhcC5uZXh0QmxvY2sgPSAwOwotICAgIG1faGVhcC5leHRyYUNvc3QgPSAw
OwotICAgIHN3ZWVwKCk7Ci0gICAgcmVzaXplQmxvY2tzKCk7CisgICAgbV9tYXJrZWRTcGFjZS5y
ZXNldCgpOworICAgIG1fbWFya2VkU3BhY2Uuc3dlZXAoKTsKKyAgICBtX2V4dHJhQ29zdCA9IDA7
CiAKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKKworICAgICgqbV9hY3Rpdml0eUNhbGxi
YWNrKSgpOwogfQogCiBMaXZlT2JqZWN0SXRlcmF0b3IgSGVhcDo6cHJpbWFyeUhlYXBCZWdpbigp
CiB7Ci0gICAgcmV0dXJuIExpdmVPYmplY3RJdGVyYXRvcihtX2hlYXAsIDApOworICAgIHJldHVy
biBtX21hcmtlZFNwYWNlLnByaW1hcnlIZWFwQmVnaW4oKTsKIH0KIAogTGl2ZU9iamVjdEl0ZXJh
dG9yIEhlYXA6OnByaW1hcnlIZWFwRW5kKCkKIHsKLSAgICByZXR1cm4gTGl2ZU9iamVjdEl0ZXJh
dG9yKG1faGVhcCwgbV9oZWFwLnVzZWRCbG9ja3MpOworICAgIHJldHVybiBtX21hcmtlZFNwYWNl
LnByaW1hcnlIZWFwRW5kKCk7CiB9CiAKIHZvaWQgSGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhQ
YXNzT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gYWN0aXZpdHlDYWxsYmFjaykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFwLmgJKHJldmlzaW9uIDc1NzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2MiAr
MjIsMjggQEAKICNpZm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCi0jaW5jbHVkZSAiR0NI
YW5kbGUuaCIKLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0jaW5jbHVkZSAiTWFjaGluZVN0YWNrTWFy
a2VyLmgiCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL0JpdG1hcC5oPgotI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Q
YWdlQWxsb2NhdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIAogI2RlZmluZSBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKGNsYXNzKSBDT01QSUxFX0FT
U0VSVChzaXplb2YoY2xhc3MpIDw9IENFTExfU0laRSwgY2xhc3NfZml0c19pbl9jZWxsKQogCiBu
YW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIENvbGxlY3RvckJsb2NrOworICAgIGNsYXNzIEpT
VmFsdWU7CisgICAgY2xhc3MgVVN0cmluZzsKICAgICBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7
CiAgICAgY2xhc3MgSlNDZWxsOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBK
U1ZhbHVlOworICAgIGNsYXNzIExpdmVPYmplY3RJdGVyYXRvcjsKICAgICBjbGFzcyBNYXJrZWRB
cmd1bWVudEJ1ZmZlcjsKICAgICBjbGFzcyBNYXJrU3RhY2s7CisgICAgY2xhc3MgV2Vha0dDSGFu
ZGxlUG9vbDsKIAotICAgIGVudW0gT3BlcmF0aW9uSW5Qcm9ncmVzcyB7IE5vT3BlcmF0aW9uLCBB
bGxvY2F0aW9uLCBDb2xsZWN0aW9uIH07Ci0KLSAgICBjbGFzcyBMaXZlT2JqZWN0SXRlcmF0b3I7
Ci0KLSNpZiBPUyhXSU5DRSkgfHwgT1MoU1lNQklBTikgfHwgUExBVEZPUk0oQlJFV01QKQotICAg
IGNvbnN0IHNpemVfdCBCTE9DS19TSVpFID0gNjQgKiAxMDI0OyAvLyA2NGsKLSNlbHNlCi0gICAg
Y29uc3Qgc2l6ZV90IEJMT0NLX1NJWkUgPSAyNTYgKiAxMDI0OyAvLyAyNTZrCi0jZW5kaWYKLQot
ICAgIHN0cnVjdCBDb2xsZWN0b3JIZWFwIHsKLSAgICAgICAgc2l6ZV90IG5leHRCbG9jazsKLSAg
ICAgICAgc2l6ZV90IG5leHRDZWxsOwotICAgICAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQqIGJs
b2NrczsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBudW1CbG9ja3M7Ci0gICAgICAgIHNpemVf
dCB1c2VkQmxvY2tzOwotCi0gICAgICAgIHNpemVfdCBleHRyYUNvc3Q7Ci0gICAgICAgIGJvb2wg
ZGlkU2hyaW5rOwotCi0gICAgICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uSW5Qcm9n
cmVzczsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxKU1ZhbHVlLCBVU3RyaW5nPiBWYWx1ZVN0cmlu
Z1BhaXI7CiAKLSAgICAgICAgQ29sbGVjdG9yQmxvY2sqIGNvbGxlY3RvckJsb2NrKHNpemVfdCBp
bmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENv
bGxlY3RvckJsb2NrKj4oYmxvY2tzW2luZGV4XS5iYXNlKCkpOwotICAgICAgICB9Ci0gICAgfTsK
KyAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwg
Q29sbGVjdGlvbiB9OwogCiAgICAgY2xhc3MgSGVhcCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAg
ICAgcHVibGljOgpAQCAtOTcsMTEgKzYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgcmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBjb3N0KTsKIAogICAgICAgICBzaXplX3Qg
b2JqZWN0Q291bnQoKSBjb25zdDsKLSAgICAgICAgc3RydWN0IFN0YXRpc3RpY3MgewotICAgICAg
ICAgICAgc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICBzaXplX3QgZnJlZTsKLSAgICAgICAgfTsK
LSAgICAgICAgU3RhdGlzdGljcyBzdGF0aXN0aWNzKCkgY29uc3Q7CisgICAgICAgIE1hcmtlZFNw
YWNlOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3MoKSBjb25zdDsKICAgICAgICAgc2l6ZV90IHNpemUo
KSBjb25zdDsKIAogICAgICAgICB2b2lkIHByb3RlY3QoSlNWYWx1ZSk7CkBAIC0xMzIsMzcgKzk0
LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVm
ZmVyKj4mIG1hcmtMaXN0U2V0KCkgeyBpZiAoIW1fbWFya0xpc3RTZXQpIG1fbWFya0xpc3RTZXQg
PSBuZXcgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+OyByZXR1cm4gKm1fbWFya0xpc3RT
ZXQ7IH0KIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbERhdGE7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNOdW1iZXIoSlNDZWxsKik7
CiAgICAgICAgIAogICAgICAgICBMaXZlT2JqZWN0SXRlcmF0b3IgcHJpbWFyeUhlYXBCZWdpbigp
OwogICAgICAgICBMaXZlT2JqZWN0SXRlcmF0b3IgcHJpbWFyeUhlYXBFbmQoKTsKLQorICAgICAg
ICAKICAgICAgICAgTWFjaGluZVN0YWNrTWFya2VyJiBtYWNoaW5lU3RhY2tNYXJrZXIoKSB7IHJl
dHVybiBtX21hY2hpbmVTdGFja01hcmtlcjsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9p
ZCByZXNldCgpOwotICAgICAgICB2b2lkIHN3ZWVwKCk7Ci0gICAgICAgIHN0YXRpYyBDb2xsZWN0
b3JCbG9jayogY2VsbEJsb2NrKGNvbnN0IEpTQ2VsbCopOwotICAgICAgICBzdGF0aWMgc2l6ZV90
IGNlbGxPZmZzZXQoY29uc3QgSlNDZWxsKik7CisgICAgICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRT
cGFjZSgpIHsgcmV0dXJuIG1fbWFya2VkU3BhY2U7IH0KIAorICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgICAgIEhlYXAoSlNHbG9iYWxEYXRhKik7
CiAgICAgICAgIH5IZWFwKCk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIENvbGxlY3RvckJsb2Nr
KiBhbGxvY2F0ZUJsb2NrKCk7Ci0gICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGZyZWVCbG9jayhz
aXplX3QpOwotICAgICAgICB2b2lkIGZyZWVCbG9ja3MoKTsKLSAgICAgICAgdm9pZCByZXNpemVC
bG9ja3MoKTsKLSAgICAgICAgdm9pZCBncm93QmxvY2tzKHNpemVfdCBuZWVkZWRCbG9ja3MpOwot
ICAgICAgICB2b2lkIHNocmlua0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKTsKLSAgICAgICAg
dm9pZCBjbGVhck1hcmtCaXRzKCk7Ci0gICAgICAgIHZvaWQgY2xlYXJNYXJrQml0cyhDb2xsZWN0
b3JCbG9jayopOwotICAgICAgICBzaXplX3QgbWFya2VkQ2VsbHMoc2l6ZV90IHN0YXJ0QmxvY2sg
PSAwLCBzaXplX3Qgc3RhcnRDZWxsID0gMCkgY29uc3Q7Ci0KICAgICAgICAgdm9pZCByZWNvcmRF
eHRyYUNvc3Qoc2l6ZV90KTsKIAotICAgICAgICB2b2lkIGFkZFRvU3RhdGlzdGljcyhTdGF0aXN0
aWNzJikgY29uc3Q7Ci0KICAgICAgICAgdm9pZCBtYXJrUm9vdHMoKTsKICAgICAgICAgdm9pZCBt
YXJrUHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhY2smKTsKICAgICAgICAgdm9pZCBtYXJrVGVtcFNv
cnRWZWN0b3JzKE1hcmtTdGFjayYpOwpAQCAtMTcwLDkgKzExNiw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHVwZGF0ZVdlYWtHQ0hhbmRsZXMoKTsKICAgICAgICAgV2Vha0dDSGFu
ZGxlUG9vbCogd2Vha0dDSGFuZGxlUG9vbChzaXplX3QgaW5kZXgpOwogCi0gICAgICAgIHR5cGVk
ZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50U2V0OwotCi0gICAgICAgIENv
bGxlY3RvckhlYXAgbV9oZWFwOworICAgICAgICBNYXJrZWRTcGFjZSBtX21hcmtlZFNwYWNlOwor
ICAgICAgICBPcGVyYXRpb25JblByb2dyZXNzIG1fb3BlcmF0aW9uSW5Qcm9ncmVzczsKIAogICAg
ICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRWYWx1ZXM7CiAgICAgICAgIFdURjo6VmVj
dG9yPFBhZ2VBbGxvY2F0aW9uQWxpZ25lZD4gbV93ZWFrR0NIYW5kbGVQb29sczsKQEAgLTE4NSwx
MDUgKzEzMCwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2ds
b2JhbERhdGE7CiAgICAgICAgIAogICAgICAgICBNYWNoaW5lU3RhY2tNYXJrZXIgbV9tYWNoaW5l
U3RhY2tNYXJrZXI7CisgICAgICAgIAorICAgICAgICBzaXplX3QgbV9leHRyYUNvc3Q7CiAgICAg
fTsKIAotICAgIC8vIHR1bmFibGUgcGFyYW1ldGVycwotICAgIC8vIGRlcml2ZWQgY29uc3RhbnRz
Ci0gICAgY29uc3Qgc2l6ZV90IEJMT0NLX09GRlNFVF9NQVNLID0gQkxPQ0tfU0laRSAtIDE7Ci0g
ICAgY29uc3Qgc2l6ZV90IEJMT0NLX01BU0sgPSB+QkxPQ0tfT0ZGU0VUX01BU0s7Ci0gICAgY29u
c3Qgc2l6ZV90IE1JTklNVU1fQ0VMTF9TSVpFID0gNjQ7Ci0gICAgY29uc3Qgc2l6ZV90IENFTExf
QVJSQVlfTEVOR1RIID0gKE1JTklNVU1fQ0VMTF9TSVpFIC8gc2l6ZW9mKGRvdWJsZSkpICsgKE1J
TklNVU1fQ0VMTF9TSVpFICUgc2l6ZW9mKGRvdWJsZSkgIT0gMCA/IHNpemVvZihkb3VibGUpIDog
MCk7Ci0gICAgY29uc3Qgc2l6ZV90IENFTExfU0laRSA9IENFTExfQVJSQVlfTEVOR1RIICogc2l6
ZW9mKGRvdWJsZSk7Ci0gICAgY29uc3Qgc2l6ZV90IFNNQUxMX0NFTExfU0laRSA9IENFTExfU0la
RSAvIDI7Ci0gICAgY29uc3Qgc2l6ZV90IENFTExfTUFTSyA9IENFTExfU0laRSAtIDE7Ci0gICAg
Y29uc3Qgc2l6ZV90IENFTExfQUxJR05fTUFTSyA9IH5DRUxMX01BU0s7Ci0gICAgY29uc3Qgc2l6
ZV90IENFTExTX1BFUl9CTE9DSyA9IChCTE9DS19TSVpFIC0gc2l6ZW9mKEhlYXAqKSkgKiA4ICog
Q0VMTF9TSVpFIC8gKDggKiBDRUxMX1NJWkUgKyAxKSAvIENFTExfU0laRTsgLy8gb25lIGJpdG1h
cCBieXRlIGNhbiByZXByZXNlbnQgOCBjZWxscy4KLSAgICAKLSAgICBjb25zdCBzaXplX3QgQklU
TUFQX1NJWkUgPSAoQ0VMTFNfUEVSX0JMT0NLICsgNykgLyA4OwotICAgIGNvbnN0IHNpemVfdCBC
SVRNQVBfV09SRFMgPSAoQklUTUFQX1NJWkUgKyAzKSAvIHNpemVvZih1aW50MzJfdCk7Ci0KLSAg
ICBzdHJ1Y3QgQ29sbGVjdG9yQml0bWFwIHsKLSAgICAgICAgRml4ZWRBcnJheTx1aW50MzJfdCwg
QklUTUFQX1dPUkRTPiBiaXRzOwotICAgICAgICBib29sIGdldChzaXplX3QgbikgY29uc3QgeyBy
ZXR1cm4gISEoYml0c1tuID4+IDVdICYgKDEgPDwgKG4gJiAweDFGKSkpOyB9IAotICAgICAgICB2
b2lkIHNldChzaXplX3QgbikgeyBiaXRzW24gPj4gNV0gfD0gKDEgPDwgKG4gJiAweDFGKSk7IH0g
Ci0gICAgICAgIGJvb2wgZ2V0c2V0KHNpemVfdCBuKQotICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpID0gKDEgPDwgKG4gJiAweDFGKSk7Ci0gICAgICAgICAgICB1aW50MzJfdCYgYiA9
IGJpdHNbbiA+PiA1XTsKLSAgICAgICAgICAgIGJvb2wgciA9ICEhKGIgJiBpKTsKLSAgICAgICAg
ICAgIGIgfD0gaTsKLSAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICB9IAotICAgICAgICB2
b2lkIGNsZWFyKHNpemVfdCBuKSB7IGJpdHNbbiA+PiA1XSAmPSB+KDEgPDwgKG4gJiAweDFGKSk7
IH0gCi0gICAgICAgIHZvaWQgY2xlYXJBbGwoKSB7IG1lbXNldChiaXRzLmRhdGEoKSwgMCwgc2l6
ZW9mKGJpdHMpKTsgfQotICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWR2YW5jZVRvTmV4dFBv
c3NpYmxlRnJlZUNlbGwoc2l6ZV90JiBzdGFydENlbGwpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICghfmJpdHNbc3RhcnRDZWxsID4+IDVdKQotICAgICAgICAgICAgICAgIHN0YXJ0Q2VsbCA9
IChzdGFydENlbGwgJiAofjB4MUYpKSArIDMyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICsrc3RhcnRDZWxsOwotICAgICAgICB9Ci0gICAgICAgIHNpemVfdCBjb3VudChzaXpl
X3Qgc3RhcnRDZWxsID0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZV90IHJlc3VsdCA9
IDA7Ci0gICAgICAgICAgICBmb3IgKCA7IChzdGFydENlbGwgJiAweDFGKSAhPSAwOyArK3N0YXJ0
Q2VsbCkgewotICAgICAgICAgICAgICAgIGlmIChnZXQoc3RhcnRDZWxsKSkKLSAgICAgICAgICAg
ICAgICAgICAgKytyZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gc3RhcnRDZWxsID4+IDU7IGkgPCBCSVRNQVBfV09SRFM7ICsraSkKLSAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gV1RGOjpiaXRDb3VudChiaXRzW2ldKTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgc2l6ZV90IGlzRW1wdHkoKSAvLyBNdWNoIG1v
cmUgZWZmaWNpZW50IHRoYW4gdGVzdGluZyBjb3VudCgpID09IDAuCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQklUTUFQX1dPUkRTOyArK2kpCi0gICAgICAg
ICAgICAgICAgaWYgKGJpdHNbaV0gIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9OwotICAKLSAg
ICBzdHJ1Y3QgQ29sbGVjdG9yQ2VsbCB7Ci0gICAgICAgIEZpeGVkQXJyYXk8ZG91YmxlLCBDRUxM
X0FSUkFZX0xFTkdUSD4gbWVtb3J5OwotICAgIH07Ci0KLSAgICBjbGFzcyBDb2xsZWN0b3JCbG9j
ayB7Ci0gICAgcHVibGljOgotICAgICAgICBGaXhlZEFycmF5PENvbGxlY3RvckNlbGwsIENFTExT
X1BFUl9CTE9DSz4gY2VsbHM7Ci0gICAgICAgIENvbGxlY3RvckJpdG1hcCBtYXJrZWQ7Ci0gICAg
ICAgIEhlYXAqIGhlYXA7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBIZWFwQ29uc3RhbnRzIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjZWxsU2l6ZSA9IENFTExfU0laRTsKLSAgICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBjZWxsc1BlckJsb2NrID0gQ0VMTFNfUEVSX0JMT0NLOwotICAg
ICAgICB0eXBlZGVmIENvbGxlY3RvckNlbGwgQ2VsbDsKLSAgICAgICAgdHlwZWRlZiBDb2xsZWN0
b3JCbG9jayBCbG9jazsKLSAgICB9OwotCi0gICAgaW5saW5lIENvbGxlY3RvckJsb2NrKiBIZWFw
OjpjZWxsQmxvY2soY29uc3QgSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oY2VsbCkgJiBCTE9DS19NQVNLKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgc2l6ZV90IEhlYXA6
OmNlbGxPZmZzZXQoY29uc3QgSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgJiBCTE9DS19PRkZTRVRfTUFTSykgLyBD
RUxMX1NJWkU7Ci0gICAgfQotCiAgICAgaW5saW5lIGJvb2wgSGVhcDo6aXNDZWxsTWFya2VkKGNv
bnN0IEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjZWxsQmxvY2soY2VsbCkt
Pm1hcmtlZC5nZXQoY2VsbE9mZnNldChjZWxsKSk7CisgICAgICAgIHJldHVybiBNYXJrZWRTcGFj
ZTo6aXNDZWxsTWFya2VkKGNlbGwpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIEhlYXA6OmNo
ZWNrTWFya0NlbGwoY29uc3QgSlNDZWxsKiBjZWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNl
bGxCbG9jayhjZWxsKS0+bWFya2VkLmdldHNldChjZWxsT2Zmc2V0KGNlbGwpKTsKKyAgICAgICAg
cmV0dXJuIE1hcmtlZFNwYWNlOjpjaGVja01hcmtDZWxsKGNlbGwpOwogICAgIH0KIAogICAgIGlu
bGluZSB2b2lkIEhlYXA6Om1hcmtDZWxsKEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIGNl
bGxCbG9jayhjZWxsKS0+bWFya2VkLnNldChjZWxsT2Zmc2V0KGNlbGwpKTsKKyAgICAgICAgTWFy
a2VkU3BhY2U6Om1hcmtDZWxsKGNlbGwpOwogICAgIH0KIAogICAgIGlubGluZSB2b2lkIEhlYXA6
OnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCkKQEAgLTI5Niw2ICsxNTksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWFrR0NI
YW5kbGVQb29sKj4obV93ZWFrR0NIYW5kbGVQb29sc1tpbmRleF0uYmFzZSgpKTsKICAgICB9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLyogSGVhcF9oICovCisjZW5kaWYgLy8gSGVh
cF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24g
NzU3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpTQVBJVmFsdWVXcmFwcGVyOwogICAgICAgICBmcmllbmQgY2xhc3MgSlNab21iaWU7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgICAgIGZyaWVuZCBjbGFz
cyBNYXJrZWRTcGFjZTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGV4cGxpY2l0IEpTQ2VsbChT
dHJ1Y3R1cmUqKTsKQEAgLTM2Miw3ICszNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlu
bGluZSBIZWFwKiBIZWFwOjpoZWFwKEpTQ2VsbCogYykKICAgICB7Ci0gICAgICAgIHJldHVybiBj
ZWxsQmxvY2soYyktPmhlYXA7CisgICAgICAgIHJldHVybiBNYXJrZWRTcGFjZTo6Y2VsbEJsb2Nr
KGMpLT5oZWFwOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSlNDX1pPTUJJRVMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiA3NTc2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNzYzLDggKzc2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gYXNWYWx1
ZSgpID09IGpzTnVsbCgpOwogICAgIH0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IAotICAgIHR5cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWUsIFVTdHJpbmc+IFZhbHVlU3RyaW5nUGFp
cjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU1ZhbHVlX2gKSW5kZXg6IHJ1
bnRpbWUvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJ1bnRpbWUvTWFya2VkU3BhY2Uu
Y3BwCShyZXZpc2lvbiA3NTQ1MykJKGZyb20gcnVudGltZS9IZWFwLmNwcDo3NTQ1MykKKysrIHJ1
bnRpbWUvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiA3NTQ0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTksNDAgKzE5LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogCi0jaW5jbHVkZSAiQXJn
TGlzdC5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkNvbGxlY3RvckhlYXBJdGVyYXRvci5oIgotI2luY2x1ZGUgIkdDQWN0aXZpdHlD
YWxsYmFjay5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheS5o
IgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5j
bHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCi0jaW5jbHVkZSAiSlNP
Tk9iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiSlNWYWx1ZS5oIgot
I2luY2x1ZGUgIkpTWm9tYmllLmgiCi0jaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAi
Tm9kZXMuaCIKLSNpbmNsdWRlICJUcmFjaW5nLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2lu
Y2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHNldGptcC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVk
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KLSNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+Ci0KLSNkZWZpbmUgQ09MTEVDVF9P
Tl9FVkVSWV9BTExPQ0FUSU9OIDAKIAogdXNpbmcgc3RkOjptYXg7CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBTdHJ1Y3R1cmU7CisKIC8vIHR1bmFibGUgcGFyYW1ldGVycwogCiBjb25zdCBz
aXplX3QgR1JPV1RIX0ZBQ1RPUiA9IDI7CkBAIC02Miw0NyArNDEsNDAgQEAgY29uc3Qgc2l6ZV90
IEFMTE9DQVRJT05TX1BFUl9DT0xMRUNUSU9OIAogLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBi
aW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KICNkZWZpbmUgTUlOX0FSUkFZ
X1NJWkUgKHN0YXRpY19jYXN0PHNpemVfdD4oMTQpKQogCi1IZWFwOjpIZWFwKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKLSAgICA6IG1fbWFya0xpc3RTZXQoMCkKLSAgICAsIG1fZ2xvYmFsRGF0
YShnbG9iYWxEYXRhKQotICAgICwgbV9tYWNoaW5lU3RhY2tNYXJrZXIodGhpcykKK01hcmtlZFNw
YWNlOjpNYXJrZWRTcGFjZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgOiBtX2dsb2Jh
bERhdGEoZ2xvYmFsRGF0YSkKIHsKLSAgICBBU1NFUlQoZ2xvYmFsRGF0YSk7CiAgICAgbWVtc2V0
KCZtX2hlYXAsIDAsIHNpemVvZihDb2xsZWN0b3JIZWFwKSk7CiAgICAgYWxsb2NhdGVCbG9jaygp
OwotICAgIG1fYWN0aXZpdHlDYWxsYmFjayA9IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNy
ZWF0ZSh0aGlzKTsKLSAgICAoKm1fYWN0aXZpdHlDYWxsYmFjaykoKTsKLX0KLQotSGVhcDo6fkhl
YXAoKQotewotICAgIC8vIFRoZSBkZXN0cm95IGZ1bmN0aW9uIG11c3QgYWxyZWFkeSBoYXZlIGJl
ZW4gY2FsbGVkLCBzbyBhc3NlcnQgdGhpcy4KLSAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YSk7CiB9
CiAKLXZvaWQgSGVhcDo6ZGVzdHJveSgpCit2b2lkIE1hcmtlZFNwYWNlOjpkZXN0cm95KFByb3Rl
Y3RDb3VudFNldCYgcHJvdGVjdGVkVmFsdWVzQ29weSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIGNsZWFyTWFya0JpdHMoKTsKKyAgICBQcm90ZWN0Q291
bnRTZXQ6Oml0ZXJhdG9yIHByb3RlY3RlZFZhbHVlc0VuZCA9IHByb3RlY3RlZFZhbHVlc0NvcHku
ZW5kKCk7CisgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gcHJvdGVjdGVk
VmFsdWVzQ29weS5iZWdpbigpOyBpdCAhPSBwcm90ZWN0ZWRWYWx1ZXNFbmQ7ICsraXQpCisgICAg
ICAgIG1hcmtDZWxsKGl0LT5maXJzdCk7CiAKLSAgICBpZiAoIW1fZ2xvYmFsRGF0YSkKLSAgICAg
ICAgcmV0dXJuOworICAgIG1faGVhcC5uZXh0Q2VsbCA9IDA7CisgICAgbV9oZWFwLm5leHRCbG9j
ayA9IDA7CisgICAgRGVhZE9iamVjdEl0ZXJhdG9yIGl0KG1faGVhcCwgbV9oZWFwLm5leHRCbG9j
aywgbV9oZWFwLm5leHRDZWxsKTsKKyAgICBEZWFkT2JqZWN0SXRlcmF0b3IgZW5kKG1faGVhcCwg
bV9oZWFwLnVzZWRCbG9ja3MpOworICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICAoKml0KS0+fkpTQ2VsbCgpOwogCi0gICAgQVNTRVJUKCFtX2dsb2JhbERhdGEtPmR5bmFtaWNH
bG9iYWxPYmplY3QpOwotICAgIEFTU0VSVCghaXNCdXN5KCkpOwotICAgIAotICAgIC8vIFRoZSBn
bG9iYWwgb2JqZWN0IGlzIG5vdCBHQyBwcm90ZWN0ZWQgYXQgdGhpcyBwb2ludCwgc28gc3dlZXBp
bmcgbWF5IGRlbGV0ZSBpdAotICAgIC8vIChhbmQgdGh1cyB0aGUgZ2xvYmFsIGRhdGEpIGJlZm9y
ZSBvdGhlciBvYmplY3RzIHRoYXQgbWF5IHVzZSB0aGUgZ2xvYmFsIGRhdGEuCi0gICAgUmVmUHRy
PEpTR2xvYmFsRGF0YT4gcHJvdGVjdChtX2dsb2JhbERhdGEpOworICAgIHByb3RlY3RlZFZhbHVl
c0VuZCA9IHByb3RlY3RlZFZhbHVlc0NvcHkuZW5kKCk7CisgICAgZm9yIChQcm90ZWN0Q291bnRT
ZXQ6Oml0ZXJhdG9yIGl0ID0gcHJvdGVjdGVkVmFsdWVzQ29weS5iZWdpbigpOyBpdCAhPSBwcm90
ZWN0ZWRWYWx1ZXNFbmQ7ICsraXQpCisgICAgICAgIGl0LT5maXJzdC0+fkpTQ2VsbCgpOwogCi0g
ICAgZGVsZXRlIG1fbWFya0xpc3RTZXQ7Ci0gICAgbV9tYXJrTGlzdFNldCA9IDA7CisgICAgZm9y
IChzaXplX3QgYmxvY2sgPSAwOyBibG9jayA8IG1faGVhcC51c2VkQmxvY2tzOyArK2Jsb2NrKQor
ICAgICAgICBtX2hlYXAuYmxvY2tzW2Jsb2NrXS5kZWFsbG9jYXRlKCk7CiAKLSAgICBmcmVlQmxv
Y2tzKCk7CisgICAgZmFzdEZyZWUobV9oZWFwLmJsb2Nrcyk7CiAKLSAgICBtX2dsb2JhbERhdGEg
PSAwOworICAgIG1lbXNldCgmbV9oZWFwLCAwLCBzaXplb2YoQ29sbGVjdG9ySGVhcCkpOwogfQog
Ci1ORVZFUl9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIEhlYXA6OmFsbG9jYXRlQmxvY2soKQorTkVW
RVJfSU5MSU5FIENvbGxlY3RvckJsb2NrKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVCbG9jaygpCiB7
CiAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRpb24gPSBQYWdlQWxsb2NhdGlvbkFs
aWduZWQ6OmFsbG9jYXRlKEJMT0NLX1NJWkUsIEJMT0NLX1NJWkUsIE9TQWxsb2NhdG9yOjpKU0dD
SGVhcFBhZ2VzKTsKICAgICBDb2xsZWN0b3JCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxDb2xs
ZWN0b3JCbG9jayo+KGFsbG9jYXRpb24uYmFzZSgpKTsKQEAgLTExMSwxMCArODMsMTAgQEAgTkVW
RVJfSU5MSU5FIENvbGxlY3RvckJsb2NrKiBIZWFwOjphbGxvYwogCiAgICAgLy8gSW5pdGlhbGl6
ZSBibG9jay4KIAotICAgIGJsb2NrLT5oZWFwID0gdGhpczsKKyAgICBibG9jay0+aGVhcCA9ICZn
bG9iYWxEYXRhKCktPmhlYXA7CiAgICAgY2xlYXJNYXJrQml0cyhibG9jayk7CiAKLSAgICBTdHJ1
Y3R1cmUqIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9nbG9iYWxEYXRhLT5kdW1teU1h
cmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQoKTsKKyAgICBTdHJ1Y3R1cmUqIGR1bW15TWFya2FibGVD
ZWxsU3RydWN0dXJlID0gZ2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5n
ZXQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhlYXBDb25zdGFudHM6OmNlbGxzUGVy
QmxvY2s7ICsraSkKICAgICAgICAgbmV3ICgmYmxvY2stPmNlbGxzW2ldKSBKU0NlbGwoZHVtbXlN
YXJrYWJsZUNlbGxTdHJ1Y3R1cmUpOwogICAgIApAQCAtMTM0LDcgKzEwNiw3IEBAIE5FVkVSX0lO
TElORSBDb2xsZWN0b3JCbG9jayogSGVhcDo6YWxsb2MKICAgICByZXR1cm4gYmxvY2s7CiB9CiAK
LU5FVkVSX0lOTElORSB2b2lkIEhlYXA6OmZyZWVCbG9jayhzaXplX3QgYmxvY2spCitORVZFUl9J
TkxJTkUgdm9pZCBNYXJrZWRTcGFjZTo6ZnJlZUJsb2NrKHNpemVfdCBibG9jaykKIHsKICAgICBt
X2hlYXAuZGlkU2hyaW5rID0gdHJ1ZTsKIApAQCAtMTU0LDYxICsxMjYsNyBAQCBORVZFUl9JTkxJ
TkUgdm9pZCBIZWFwOjpmcmVlQmxvY2soc2l6ZV90CiAgICAgfQogfQogCi12b2lkIEhlYXA6OmZy
ZWVCbG9ja3MoKQotewotICAgIFByb3RlY3RDb3VudFNldCBwcm90ZWN0ZWRWYWx1ZXNDb3B5ID0g
bV9wcm90ZWN0ZWRWYWx1ZXM7Ci0KLSAgICBjbGVhck1hcmtCaXRzKCk7Ci0gICAgUHJvdGVjdENv
dW50U2V0OjppdGVyYXRvciBwcm90ZWN0ZWRWYWx1ZXNFbmQgPSBwcm90ZWN0ZWRWYWx1ZXNDb3B5
LmVuZCgpOwotICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IHByb3RlY3Rl
ZFZhbHVlc0NvcHkuYmVnaW4oKTsgaXQgIT0gcHJvdGVjdGVkVmFsdWVzRW5kOyArK2l0KQotICAg
ICAgICBtYXJrQ2VsbChpdC0+Zmlyc3QpOwotCi0gICAgbV9oZWFwLm5leHRDZWxsID0gMDsKLSAg
ICBtX2hlYXAubmV4dEJsb2NrID0gMDsKLSAgICBEZWFkT2JqZWN0SXRlcmF0b3IgaXQobV9oZWFw
LCBtX2hlYXAubmV4dEJsb2NrLCBtX2hlYXAubmV4dENlbGwpOwotICAgIERlYWRPYmplY3RJdGVy
YXRvciBlbmQobV9oZWFwLCBtX2hlYXAudXNlZEJsb2Nrcyk7Ci0gICAgZm9yICggOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5+SlNDZWxsKCk7Ci0KLSAgICBBU1NFUlQoIXByb3Rl
Y3RlZE9iamVjdENvdW50KCkpOwotCi0gICAgcHJvdGVjdGVkVmFsdWVzRW5kID0gcHJvdGVjdGVk
VmFsdWVzQ29weS5lbmQoKTsKLSAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQg
PSBwcm90ZWN0ZWRWYWx1ZXNDb3B5LmJlZ2luKCk7IGl0ICE9IHByb3RlY3RlZFZhbHVlc0VuZDsg
KytpdCkKLSAgICAgICAgaXQtPmZpcnN0LT5+SlNDZWxsKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBi
bG9jayA9IDA7IGJsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsrYmxvY2spCi0gICAgICAgIG1f
aGVhcC5ibG9ja3NbYmxvY2tdLmRlYWxsb2NhdGUoKTsKLQotICAgIGZhc3RGcmVlKG1faGVhcC5i
bG9ja3MpOwotCi0gICAgbWVtc2V0KCZtX2hlYXAsIDAsIHNpemVvZihDb2xsZWN0b3JIZWFwKSk7
Ci19Ci0KLXZvaWQgSGVhcDo6cmVjb3JkRXh0cmFDb3N0KHNpemVfdCBjb3N0KQotewotICAgIC8v
IE91ciBmcmVxdWVuY3kgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uIHRyaWVzIHRvIGJhbGFuY2UgbWVt
b3J5IHVzZSBhZ2FpbnN0IHNwZWVkCi0gICAgLy8gYnkgY29sbGVjdGluZyBiYXNlZCBvbiB0aGUg
bnVtYmVyIG9mIG5ld2x5IGNyZWF0ZWQgdmFsdWVzLiBIb3dldmVyLCBmb3IgdmFsdWVzCi0gICAg
Ly8gdGhhdCBob2xkIG9uIHRvIGEgZ3JlYXQgZGVhbCBvZiBtZW1vcnkgdGhhdCdzIG5vdCBpbiB0
aGUgZm9ybSBvZiBvdGhlciBKUyB2YWx1ZXMsCi0gICAgLy8gdGhhdCBpcyBub3QgZ29vZCBlbm91
Z2ggLSBpbiBzb21lIGNhc2VzIGEgbG90IG9mIHRob3NlIG9iamVjdHMgY2FuIHBpbGUgdXAgYW5k
Ci0gICAgLy8gdXNlIGNyYXp5IGFtb3VudHMgb2YgbWVtb3J5IHdpdGhvdXQgYSBHQyBoYXBwZW5p
bmcuIFNvIHdlIHRyYWNrIHRoZXNlIGV4dHJhCi0gICAgLy8gbWVtb3J5IGNvc3RzLiBPbmx5IHVu
dXN1YWxseSBsYXJnZSBvYmplY3RzIGFyZSBub3RlZCwgYW5kIHdlIG9ubHkga2VlcCB0cmFjawot
ICAgIC8vIG9mIHRoaXMgZXh0cmEgY29zdCB1bnRpbCB0aGUgbmV4dCBHQy4gSW4gZ2FyYmFnZSBj
b2xsZWN0ZWQgbGFuZ3VhZ2VzLCBtb3N0IHZhbHVlcwotICAgIC8vIGFyZSBlaXRoZXIgdmVyeSBz
aG9ydCBsaXZlZCB0ZW1wb3Jhcmllcywgb3IgaGF2ZSBleHRyZW1lbHkgbG9uZyBsaWZldGltZXMu
IFNvCi0gICAgLy8gaWYgYSBsYXJnZSB2YWx1ZSBzdXJ2aXZlcyBvbmUgZ2FyYmFnZSBjb2xsZWN0
aW9uLCB0aGVyZSBpcyBub3QgbXVjaCBwb2ludCB0bwotICAgIC8vIGNvbGxlY3RpbmcgbW9yZSBm
cmVxdWVudGx5IGFzIGxvbmcgYXMgaXQgc3RheXMgYWxpdmUuCi0KLSAgICBpZiAobV9oZWFwLmV4
dHJhQ29zdCA+IG1heEV4dHJhQ29zdCAmJiBtX2hlYXAuZXh0cmFDb3N0ID4gbV9oZWFwLnVzZWRC
bG9ja3MgKiBCTE9DS19TSVpFIC8gMikgewotICAgICAgICAvLyBJZiB0aGUgbGFzdCBpdGVyYXRp
b24gdGhyb3VnaCB0aGUgaGVhcCBkZWFsbG9jYXRlZCBibG9ja3MsIHdlIG5lZWQKLSAgICAgICAg
Ly8gdG8gY2xlYW4gdXAgcmVtYWluaW5nIGdhcmJhZ2UgYmVmb3JlIG1hcmtpbmcuIE90aGVyd2lz
ZSwgdGhlIGNvbnNlcnZhdGl2ZQotICAgICAgICAvLyBtYXJraW5nIG1lY2hhbmlzbSBtaWdodCBm
b2xsb3cgYSBwb2ludGVyIHRvIHVubWFwcGVkIG1lbW9yeS4KLSAgICAgICAgaWYgKG1faGVhcC5k
aWRTaHJpbmspCi0gICAgICAgICAgICBzd2VlcCgpOwotICAgICAgICByZXNldCgpOwotICAgIH0K
LSAgICBtX2hlYXAuZXh0cmFDb3N0ICs9IGNvc3Q7Ci19Ci0KLXZvaWQqIEhlYXA6OmFsbG9jYXRl
KHNpemVfdCBzKQordm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzKQogewogICAg
IEFTU0VSVChnbG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCku
Y3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKICAgICB0eXBlZGVmIEhlYXBDb25zdGFudHM6OkJs
b2NrIEJsb2NrOwpAQCAtMjE4LDE1ICsxMzYsNiBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZShzaXpl
X3QgcykKICAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsK
ICAgICBBU1NFUlRfVU5VU0VEKHMsIHMgPD0gSGVhcENvbnN0YW50czo6Y2VsbFNpemUpOwogCi0g
ICAgQVNTRVJUKG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKLQot
I2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElPTgotICAgIGNvbGxlY3RBbGxHYXJiYWdlKCk7
Ci0gICAgQVNTRVJUKG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsK
LSNlbmRpZgotCi1hbGxvY2F0ZToKLQogICAgIC8vIEZhc3QgY2FzZTogZmluZCB0aGUgbmV4dCBn
YXJiYWdlIGNlbGwgYW5kIHJlY3ljbGUgaXQuCiAKICAgICBkbyB7CkBAIC0yMzcsMTAgKzE0Niw4
IEBAIGFsbG9jYXRlOgogICAgICAgICAgICAgaWYgKCFibG9jay0+bWFya2VkLmdldChtX2hlYXAu
bmV4dENlbGwpKSB7IC8vIEFsd2F5cyBmYWxzZSBmb3IgdGhlIGxhc3QgY2VsbCBpbiB0aGUgYmxv
Y2sKICAgICAgICAgICAgICAgICBDZWxsKiBjZWxsID0gJmJsb2NrLT5jZWxsc1ttX2hlYXAubmV4
dENlbGxdOwogCi0gICAgICAgICAgICAgICAgbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBB
bGxvY2F0aW9uOwogICAgICAgICAgICAgICAgIEpTQ2VsbCogaW1wID0gcmVpbnRlcnByZXRfY2Fz
dDxKU0NlbGwqPihjZWxsKTsKICAgICAgICAgICAgICAgICBpbXAtPn5KU0NlbGwoKTsKLSAgICAg
ICAgICAgICAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwogCiAg
ICAgICAgICAgICAgICAgKyttX2hlYXAubmV4dENlbGw7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGNlbGw7CkBAIC0yNDksMTQgKzE1NiwxMSBAQCBhbGxvY2F0ZToKICAgICAgICAgfSB3aGlsZSAo
bV9oZWFwLm5leHRDZWxsICE9IEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2spOwogICAgICAg
ICBtX2hlYXAubmV4dENlbGwgPSAwOwogICAgIH0gd2hpbGUgKCsrbV9oZWFwLm5leHRCbG9jayAh
PSBtX2hlYXAudXNlZEJsb2Nrcyk7Ci0KLSAgICAvLyBTbG93IGNhc2U6IHJlYWNoZWQgdGhlIGVu
ZCBvZiB0aGUgaGVhcC4gTWFyayBsaXZlIG9iamVjdHMgYW5kIHN0YXJ0IG92ZXIuCi0KLSAgICBy
ZXNldCgpOwotICAgIGdvdG8gYWxsb2NhdGU7CisgICAgCisgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgSGVhcDo6cmVzaXplQmxvY2tzKCkKK3ZvaWQgTWFya2VkU3BhY2U6OnJlc2l6ZUJsb2Nrcygp
CiB7CiAgICAgbV9oZWFwLmRpZFNocmluayA9IGZhbHNlOwogCkBAIC0yNzMsMTQgKzE3NywxNCBA
QCB2b2lkIEhlYXA6OnJlc2l6ZUJsb2NrcygpCiAgICAgICAgIHNocmlua0Jsb2NrcyhtYXhCbG9j
a0NvdW50KTsKIH0KIAotdm9pZCBIZWFwOjpncm93QmxvY2tzKHNpemVfdCBuZWVkZWRCbG9ja3Mp
Cit2b2lkIE1hcmtlZFNwYWNlOjpncm93QmxvY2tzKHNpemVfdCBuZWVkZWRCbG9ja3MpCiB7CiAg
ICAgQVNTRVJUKG1faGVhcC51c2VkQmxvY2tzIDwgbmVlZGVkQmxvY2tzKTsKICAgICB3aGlsZSAo
bV9oZWFwLnVzZWRCbG9ja3MgPCBuZWVkZWRCbG9ja3MpCiAgICAgICAgIGFsbG9jYXRlQmxvY2so
KTsKIH0KIAotdm9pZCBIZWFwOjpzaHJpbmtCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2NrcykKK3Zv
aWQgTWFya2VkU3BhY2U6OnNocmlua0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKQogewogICAg
IEFTU0VSVChtX2hlYXAudXNlZEJsb2NrcyA+IG5lZWRlZEJsb2Nrcyk7CiAgICAgCkBAIC0zMTgs
NyArMjIyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUG9zc2libGVDZWxsKHZvaWQqIAogICAg
IHJldHVybiBpc0NlbGxBbGlnbmVkKHApICYmIHA7CiB9CiAKLXZvaWQgSGVhcDo6bWFya0NvbnNl
cnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQor
dm9pZCBNYXJrZWRTcGFjZTo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNr
LCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQogewogI2lmIE9TKFdJTkNFKQogICAgIGlmIChzdGFy
dCA+IGVuZCkgewpAQCAtMzYwLDEwOCArMjY0LDIwIEBAIHZvaWQgSGVhcDo6bWFya0NvbnNlcnZh
dGl2ZWx5KE1hcmtTdGFjayYKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6dXBkYXRlV2Vha0dDSGFu
ZGxlcygpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fd2Vha0dDSGFuZGxlUG9v
bHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHdlYWtHQ0hhbmRsZVBvb2woaSktPnVwZGF0ZSgpOwot
fQotCi12b2lkIFdlYWtHQ0hhbmRsZVBvb2w6OnVwZGF0ZSgpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IFdlYWtHQ0hhbmRsZVBvb2w6Om51bVBvb2xFbnRyaWVzOyArK2kpIHsKLSAg
ICAgICAgaWYgKG1fZW50cmllc1tpXS5pc1ZhbGlkUHRyKCkpIHsKLSAgICAgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IG1fZW50cmllc1tpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghY2VsbCB8fCAh
SGVhcDo6aXNDZWxsTWFya2VkKGNlbGwpKQotICAgICAgICAgICAgICAgIG1fZW50cmllc1tpXS5p
bnZhbGlkYXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYWtHQ0hhbmRsZSogSGVhcDo6
YWRkV2Vha0dDSGFuZGxlKEpTQ2VsbCogcHRyKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3dlYWtHQ0hhbmRsZVBvb2xzLnNpemUoKTsgKytpKQotICAgICAgICBpZiAoIXdlYWtH
Q0hhbmRsZVBvb2woaSktPmlzRnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHdlYWtHQ0hhbmRs
ZVBvb2woaSktPmFsbG9jYXRlKHB0cik7Ci0KLSAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxs
b2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoV2Vha0dDSGFuZGxlUG9v
bDo6cG9vbFNpemUsIFdlYWtHQ0hhbmRsZVBvb2w6OnBvb2xTaXplLCBPU0FsbG9jYXRvcjo6SlNH
Q0hlYXBQYWdlcyk7Ci0gICAgbV93ZWFrR0NIYW5kbGVQb29scy5hcHBlbmQoYWxsb2NhdGlvbik7
Ci0KLSAgICBXZWFrR0NIYW5kbGVQb29sKiBwb29sID0gbmV3IChhbGxvY2F0aW9uLmJhc2UoKSkg
V2Vha0dDSGFuZGxlUG9vbCgpOwotICAgIHJldHVybiBwb29sLT5hbGxvY2F0ZShwdHIpOwotfQot
Ci12b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQotewotICAgIEFTU0VSVChrKTsKLSAgICBB
U1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFtX2dsb2JhbERh
dGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7Ci0KLSAgICBpZiAoIWsuaXNDZWxsKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcHJvdGVjdGVkVmFsdWVzLmFkZChrLmFzQ2VsbCgpKTsKLX0KLQot
Ym9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBrKQotewotICAgIEFTU0VSVChrKTsKLSAgICBB
U1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFtX2dsb2JhbERh
dGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7Ci0KLSAgICBpZiAoIWsuaXNDZWxsKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3Byb3RlY3RlZFZhbHVlcy5yZW1vdmUoay5h
c0NlbGwoKSk7Ci19Ci0KLXZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoTWFya1N0YWNr
JiBtYXJrU3RhY2spCi17Ci0gICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3By
b3RlY3RlZFZhbHVlcy5lbmQoKTsKLSAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3Ig
aXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgbWFya1N0YWNrLmFwcGVuZChpdC0+Zmlyc3QpOwotICAgICAgICBtYXJrU3RhY2suZHJhaW4o
KTsKLSAgICB9Ci19Ci0KLXZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0VmVjdG9yKFZlY3RvcjxWYWx1
ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9yKQotewotICAgIG1fdGVtcFNvcnRpbmdWZWN0b3JzLmFw
cGVuZCh0ZW1wVmVjdG9yKTsKLX0KLQotdm9pZCBIZWFwOjpwb3BUZW1wU29ydFZlY3RvcihWZWN0
b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHRl
bXBWZWN0b3IsIHRlbXBWZWN0b3IgPT0gbV90ZW1wU29ydGluZ1ZlY3RvcnMubGFzdCgpKTsKLSAg
ICBtX3RlbXBTb3J0aW5nVmVjdG9ycy5yZW1vdmVMYXN0KCk7Ci19Ci0gICAgCi12b2lkIEhlYXA6
Om1hcmtUZW1wU29ydFZlY3RvcnMoTWFya1N0YWNrJiBtYXJrU3RhY2spCi17Ci0gICAgdHlwZWRl
ZiBWZWN0b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qID4gVmVjdG9yT2ZWYWx1ZVN0cmluZ1Zl
Y3RvcnM7Ci0KLSAgICBWZWN0b3JPZlZhbHVlU3RyaW5nVmVjdG9yczo6aXRlcmF0b3IgZW5kID0g
bV90ZW1wU29ydGluZ1ZlY3RvcnMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3JPZlZhbHVlU3RyaW5n
VmVjdG9yczo6aXRlcmF0b3IgaXQgPSBtX3RlbXBTb3J0aW5nVmVjdG9ycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qIHRlbXBTb3J0
aW5nVmVjdG9yID0gKml0OwotCi0gICAgICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+OjppdGVy
YXRvciB2ZWN0b3JFbmQgPSB0ZW1wU29ydGluZ1ZlY3Rvci0+ZW5kKCk7Ci0gICAgICAgIGZvciAo
VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj46Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdGVtcFNvcnRpbmdW
ZWN0b3ItPmJlZ2luKCk7IHZlY3Rvckl0ICE9IHZlY3RvckVuZDsgKyt2ZWN0b3JJdCkKLSAgICAg
ICAgICAgIGlmICh2ZWN0b3JJdC0+Zmlyc3QpCi0gICAgICAgICAgICAgICAgbWFya1N0YWNrLmFw
cGVuZCh2ZWN0b3JJdC0+Zmlyc3QpOwotICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKLSAgICB9
Ci19Ci0gICAgCi12b2lkIEhlYXA6OmNsZWFyTWFya0JpdHMoKQordm9pZCBNYXJrZWRTcGFjZTo6
Y2xlYXJNYXJrQml0cygpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hlYXAudXNl
ZEJsb2NrczsgKytpKQogICAgICAgICBjbGVhck1hcmtCaXRzKG1faGVhcC5jb2xsZWN0b3JCbG9j
ayhpKSk7CiB9CiAKLXZvaWQgSGVhcDo6Y2xlYXJNYXJrQml0cyhDb2xsZWN0b3JCbG9jayogYmxv
Y2spCit2b2lkIE1hcmtlZFNwYWNlOjpjbGVhck1hcmtCaXRzKENvbGxlY3RvckJsb2NrKiBibG9j
aykKIHsKICAgICAvLyBhbGxvY2F0ZSBhc3N1bWVzIHRoYXQgdGhlIGxhc3QgY2VsbCBpbiBldmVy
eSBibG9jayBpcyBtYXJrZWQuCiAgICAgYmxvY2stPm1hcmtlZC5jbGVhckFsbCgpOwogICAgIGJs
b2NrLT5tYXJrZWQuc2V0KEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKIH0KIAot
c2l6ZV90IEhlYXA6Om1hcmtlZENlbGxzKHNpemVfdCBzdGFydEJsb2NrLCBzaXplX3Qgc3RhcnRD
ZWxsKSBjb25zdAorc2l6ZV90IE1hcmtlZFNwYWNlOjptYXJrZWRDZWxscyhzaXplX3Qgc3RhcnRC
bG9jaywgc2l6ZV90IHN0YXJ0Q2VsbCkgY29uc3QKIHsKICAgICBBU1NFUlQoc3RhcnRCbG9jayA8
PSBtX2hlYXAudXNlZEJsb2Nrcyk7CiAgICAgQVNTRVJUKHN0YXJ0Q2VsbCA8IEhlYXBDb25zdGFu
dHM6OmNlbGxzUGVyQmxvY2spOwpAQCAtNDc3LDE1ICsyOTMsMTAgQEAgc2l6ZV90IEhlYXA6Om1h
cmtlZENlbGxzKHNpemVfdCBzdGFydEJsbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
SGVhcDo6c3dlZXAoKQordm9pZCBNYXJrZWRTcGFjZTo6c3dlZXAoKQogewotICAgIEFTU0VSVCht
X2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7Ci0gICAgaWYgKG1faGVh
cC5vcGVyYXRpb25JblByb2dyZXNzICE9IE5vT3BlcmF0aW9uKQotICAgICAgICBDUkFTSCgpOwot
ICAgIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKLSAgICAKICNpZiAh
RU5BQkxFKEpTQ19aT01CSUVTKQotICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1
Y3R1cmUgPSBtX2dsb2JhbERhdGEtPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOwor
ICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBnbG9iYWxEYXRhKCkt
PmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOwogI2VuZGlmCiAKICAgICBEZWFkT2Jq
ZWN0SXRlcmF0b3IgaXQobV9oZWFwLCBtX2hlYXAubmV4dEJsb2NrLCBtX2hlYXAubmV4dENlbGwp
OwpAQCAtNTA1LDYxICszMTYsOSBAQCB2b2lkIEhlYXA6OnN3ZWVwKCkKICAgICAgICAgbmV3IChj
ZWxsKSBKU0NlbGwoZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUpOwogI2VuZGlmCiAgICAgfQot
Ci0gICAgbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKLX0KLQotdm9p
ZCBIZWFwOjptYXJrUm9vdHMoKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBpZiAobV9nbG9iYWxE
YXRhLT5pc1NoYXJlZEluc3RhbmNlKCkpIHsKLSAgICAgICAgQVNTRVJUKEpTTG9jazo6bG9ja0Nv
dW50KCkgPiAwKTsKLSAgICAgICAgQVNTRVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBBU1NFUlQobV9oZWFwLm9wZXJhdGlvbklu
UHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwotICAgIGlmIChtX2hlYXAub3BlcmF0aW9uSW5Qcm9n
cmVzcyAhPSBOb09wZXJhdGlvbikKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIG1faGVhcC5vcGVy
YXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKLQotICAgIE1hcmtTdGFjayYgbWFya1N0YWNr
ID0gbV9nbG9iYWxEYXRhLT5tYXJrU3RhY2s7Ci0KLSAgICAvLyBSZXNldCBtYXJrIGJpdHMuCi0g
ICAgY2xlYXJNYXJrQml0cygpOwotCi0gICAgLy8gTWFyayBzdGFjayByb290cy4KLSAgICBtX21h
Y2hpbmVTdGFja01hcmtlci5tYXJrTWFjaGluZVN0YWNrQ29uc2VydmF0aXZlbHkobWFya1N0YWNr
KTsKLSAgICBtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5tYXJrQ2Fs
bEZyYW1lcyhtYXJrU3RhY2ssIHRoaXMpOwotCi0gICAgLy8gTWFyayBleHBsaWNpdGx5IHJlZ2lz
dGVyZWQgcm9vdHMuCi0gICAgbWFya1Byb3RlY3RlZE9iamVjdHMobWFya1N0YWNrKTsKLSAgICAK
LSAgICAvLyBNYXJrIHRlbXBvcmFyeSB2ZWN0b3IgZm9yIEFycmF5IHNvcnRpbmcKLSAgICBtYXJr
VGVtcFNvcnRWZWN0b3JzKG1hcmtTdGFjayk7Ci0KLSAgICAvLyBNYXJrIG1pc2MuIG90aGVyIHJv
b3RzLgotICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkKLSAg
ICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhtYXJrU3RhY2ssICptX21hcmtM
aXN0U2V0KTsKLSAgICBpZiAobV9nbG9iYWxEYXRhLT5leGNlcHRpb24pCi0gICAgICAgIG1hcmtT
dGFjay5hcHBlbmQobV9nbG9iYWxEYXRhLT5leGNlcHRpb24pOwotICAgIGlmIChtX2dsb2JhbERh
dGEtPmZpcnN0U3RyaW5naWZpZXJUb01hcmspCi0gICAgICAgIEpTT05PYmplY3Q6Om1hcmtTdHJp
bmdpZmllcnMobWFya1N0YWNrLCBtX2dsb2JhbERhdGEtPmZpcnN0U3RyaW5naWZpZXJUb01hcmsp
OwotCi0gICAgLy8gTWFyayB0aGUgc21hbGwgc3RyaW5ncyBjYWNoZSBsYXN0LCBzaW5jZSBpdCB3
aWxsIGNsZWFyIGl0c2VsZiBpZiBub3RoaW5nCi0gICAgLy8gZWxzZSBoYXMgbWFya2VkIGl0Lgot
ICAgIG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwot
Ci0gICAgbWFya1N0YWNrLmRyYWluKCk7Ci0gICAgbWFya1N0YWNrLmNvbXBhY3QoKTsKLQotICAg
IHVwZGF0ZVdlYWtHQ0hhbmRsZXMoKTsKLQotICAgIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNz
ID0gTm9PcGVyYXRpb247CiB9CiAKLXNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpIGNvbnN0Citz
aXplX3QgTWFya2VkU3BhY2U6Om9iamVjdENvdW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9o
ZWFwLm5leHRCbG9jayAqIEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sgLy8gYWxsb2NhdGVk
IGZ1bGwgYmxvY2tzCiAgICAgICAgICAgICsgbV9oZWFwLm5leHRDZWxsIC8vIGFsbG9jYXRlZCBj
ZWxscyBpbiBjdXJyZW50IGJsb2NrCkBAIC01NjcsMTY1ICszMjYsNDIgQEAgc2l6ZV90IEhlYXA6
Om9iamVjdENvdW50KCkgY29uc3QKICAgICAgICAgICAgLSBtX2hlYXAudXNlZEJsb2NrczsgLy8g
MSBjZWxsIHBlciBibG9jayBpcyBhIGR1bW15IHNlbnRpbmVsCiB9CiAKLXZvaWQgSGVhcDo6YWRk
VG9TdGF0aXN0aWNzKEhlYXA6OlN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIGNvbnN0Cit2b2lkIE1h
cmtlZFNwYWNlOjphZGRUb1N0YXRpc3RpY3MoU3RhdGlzdGljcyYgc3RhdGlzdGljcykgY29uc3QK
IHsKICAgICBzdGF0aXN0aWNzLnNpemUgKz0gbV9oZWFwLnVzZWRCbG9ja3MgKiBCTE9DS19TSVpF
OwogICAgIHN0YXRpc3RpY3MuZnJlZSArPSBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NLX1NJWkUg
LSAob2JqZWN0Q291bnQoKSAqIEhlYXBDb25zdGFudHM6OmNlbGxTaXplKTsKIH0KIAotSGVhcDo6
U3RhdGlzdGljcyBIZWFwOjpzdGF0aXN0aWNzKCkgY29uc3QKK01hcmtlZFNwYWNlOjpTdGF0aXN0
aWNzIE1hcmtlZFNwYWNlOjpzdGF0aXN0aWNzKCkgY29uc3QKIHsKICAgICBTdGF0aXN0aWNzIHN0
YXRpc3RpY3MgPSB7IDAsIDAgfTsKICAgICBhZGRUb1N0YXRpc3RpY3Moc3RhdGlzdGljcyk7CiAg
ICAgcmV0dXJuIHN0YXRpc3RpY3M7CiB9CiAKLXNpemVfdCBIZWFwOjpzaXplKCkgY29uc3QKK3Np
emVfdCBNYXJrZWRTcGFjZTo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faGVhcC51c2Vk
QmxvY2tzICogQkxPQ0tfU0laRTsKIH0KIAotc2l6ZV90IEhlYXA6Omdsb2JhbE9iamVjdENvdW50
KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSAwOwotICAgIGlmIChKU0dsb2JhbE9iamVjdCogaGVh
ZCA9IG1fZ2xvYmFsRGF0YS0+aGVhZCkgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogbyA9IGhl
YWQ7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgICAgICAgICBvID0g
by0+bmV4dCgpOwotICAgICAgICB9IHdoaWxlIChvICE9IGhlYWQpOwotICAgIH0KLSAgICByZXR1
cm4gY291bnQ7Ci19Ci0KLXNpemVfdCBIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgp
Ci17Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGhlYWQg
PSBtX2dsb2JhbERhdGEtPmhlYWQpIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIG8gPSBoZWFk
OwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAobV9wcm90ZWN0ZWRWYWx1ZXMuY29udGFp
bnMobykpCi0gICAgICAgICAgICAgICAgKytjb3VudDsKLSAgICAgICAgICAgIG8gPSBvLT5uZXh0
KCk7Ci0gICAgICAgIH0gd2hpbGUgKG8gIT0gaGVhZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNv
dW50OwotfQotCi1zaXplX3QgSGVhcDo6cHJvdGVjdGVkT2JqZWN0Q291bnQoKQordm9pZCBNYXJr
ZWRTcGFjZTo6cmVzZXQoKQogewotICAgIHJldHVybiBtX3Byb3RlY3RlZFZhbHVlcy5zaXplKCk7
Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0eXBlTmFtZShKU0NlbGwqIGNlbGwpCi17Ci0gICAg
aWYgKGNlbGwtPmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiAic3RyaW5nIjsKLSAgICBpZiAo
Y2VsbC0+aXNHZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuICJHZXR0ZXItU2V0dGVyIjsK
LSAgICBpZiAoY2VsbC0+aXNBUElWYWx1ZVdyYXBwZXIoKSkKLSAgICAgICAgcmV0dXJuICJBUEkg
d3JhcHBlciI7Ci0gICAgaWYgKGNlbGwtPmlzUHJvcGVydHlOYW1lSXRlcmF0b3IoKSkKLSAgICAg
ICAgcmV0dXJuICJGb3ItaW4gaXRlcmF0b3IiOwotICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuICJbZW1wdHkgY2VsbF0iOwotICAgIGNvbnN0IENsYXNzSW5mbyogaW5m
byA9IGNlbGwtPmNsYXNzSW5mbygpOwotICAgIHJldHVybiBpbmZvID8gaW5mby0+Y2xhc3NOYW1l
IDogIk9iamVjdCI7Ci19Ci0KLUhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiogSGVhcDo6cHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cygpCi17Ci0gICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hh
cio+KiBjb3VudHMgPSBuZXcgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OwotCi0gICAgUHJv
dGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKLSAg
ICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGNvdW50cy0+YWRkKHR5cGVOYW1lKGl0
LT5maXJzdCkpOwotCi0gICAgcmV0dXJuIGNvdW50czsKLX0KLQotSGFzaENvdW50ZWRTZXQ8Y29u
c3QgY2hhcio+KiBIZWFwOjpvYmplY3RUeXBlQ291bnRzKCkKLXsKLSAgICBIYXNoQ291bnRlZFNl
dDxjb25zdCBjaGFyKj4qIGNvdW50cyA9IG5ldyBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj47
Ci0KLSAgICBMaXZlT2JqZWN0SXRlcmF0b3IgaXQgPSBwcmltYXJ5SGVhcEJlZ2luKCk7Ci0gICAg
TGl2ZU9iamVjdEl0ZXJhdG9yIGhlYXBFbmQgPSBwcmltYXJ5SGVhcEVuZCgpOwotICAgIGZvciAo
IDsgaXQgIT0gaGVhcEVuZDsgKytpdCkKLSAgICAgICAgY291bnRzLT5hZGQodHlwZU5hbWUoKml0
KSk7Ci0KLSAgICByZXR1cm4gY291bnRzOwotfQotCi1ib29sIEhlYXA6OmlzQnVzeSgpCi17Ci0g
ICAgcmV0dXJuIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzICE9IE5vT3BlcmF0aW9uOwotfQot
Ci12b2lkIEhlYXA6OnJlc2V0KCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsRGF0YSgpLT5pZGVudGlm
aWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7Ci0g
ICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKLQotICAgIG1hcmtSb290cygpOwotCi0gICAg
SkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7Ci0KICAgICBtX2hlYXAubmV4dENlbGwgPSAwOwog
ICAgIG1faGVhcC5uZXh0QmxvY2sgPSAwOwotICAgIG1faGVhcC5leHRyYUNvc3QgPSAwOwogI2lm
IEVOQUJMRShKU0NfWk9NQklFUykKICAgICBzd2VlcCgpOwogI2VuZGlmCiAgICAgcmVzaXplQmxv
Y2tzKCk7Ci0KLSAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKLQotICAgICgqbV9hY3Rpdml0
eUNhbGxiYWNrKSgpOwotfQotCi12b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKLXsKLSAg
ICBBU1NFUlQoZ2xvYmFsRGF0YSgpLT5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgp
LmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7Ci0gICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4o
KTsKLQotICAgIC8vIElmIHRoZSBsYXN0IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBoZWFwIGRlYWxs
b2NhdGVkIGJsb2Nrcywgd2UgbmVlZAotICAgIC8vIHRvIGNsZWFuIHVwIHJlbWFpbmluZyBnYXJi
YWdlIGJlZm9yZSBtYXJraW5nLiBPdGhlcndpc2UsIHRoZSBjb25zZXJ2YXRpdmUKLSAgICAvLyBt
YXJraW5nIG1lY2hhbmlzbSBtaWdodCBmb2xsb3cgYSBwb2ludGVyIHRvIHVubWFwcGVkIG1lbW9y
eS4KLSAgICBpZiAobV9oZWFwLmRpZFNocmluaykKLSAgICAgICAgc3dlZXAoKTsKLQotICAgIG1h
cmtSb290cygpOwotCi0gICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7Ci0KLSAgICBtX2hl
YXAubmV4dENlbGwgPSAwOwotICAgIG1faGVhcC5uZXh0QmxvY2sgPSAwOwotICAgIG1faGVhcC5l
eHRyYUNvc3QgPSAwOwotICAgIHN3ZWVwKCk7Ci0gICAgcmVzaXplQmxvY2tzKCk7Ci0KLSAgICBK
QVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKIH0KIAotTGl2ZU9iamVjdEl0ZXJhdG9yIEhlYXA6OnBy
aW1hcnlIZWFwQmVnaW4oKQorTGl2ZU9iamVjdEl0ZXJhdG9yIE1hcmtlZFNwYWNlOjpwcmltYXJ5
SGVhcEJlZ2luKCkKIHsKICAgICByZXR1cm4gTGl2ZU9iamVjdEl0ZXJhdG9yKG1faGVhcCwgMCk7
CiB9CiAKLUxpdmVPYmplY3RJdGVyYXRvciBIZWFwOjpwcmltYXJ5SGVhcEVuZCgpCitMaXZlT2Jq
ZWN0SXRlcmF0b3IgTWFya2VkU3BhY2U6OnByaW1hcnlIZWFwRW5kKCkKIHsKICAgICByZXR1cm4g
TGl2ZU9iamVjdEl0ZXJhdG9yKG1faGVhcCwgbV9oZWFwLnVzZWRCbG9ja3MpOwogfQogCi12b2lk
IEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+
IGFjdGl2aXR5Q2FsbGJhY2spCi17Ci0gICAgbV9hY3Rpdml0eUNhbGxiYWNrID0gYWN0aXZpdHlD
YWxsYmFjazsKLX0KLQotR0NBY3Rpdml0eUNhbGxiYWNrKiBIZWFwOjphY3Rpdml0eUNhbGxiYWNr
KCkKLXsKLSAgICByZXR1cm4gbV9hY3Rpdml0eUNhbGxiYWNrLmdldCgpOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IHJ1bnRpbWUvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
dW50aW1lL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDc1NDUxKQkoZnJvbSBydW50aW1lL0hlYXAu
aDo3NTQ1MSkKKysrIHJ1bnRpbWUvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiA3
NTQ0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZFNwYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5LDQwICsxOSwyNSBAQAogICoKICAqLwogCi0jaWZuZGVmIEhlYXBf
aAotI2RlZmluZSBIZWFwX2gKKyNpZm5kZWYgTWFya2VkU3BhY2VfaAorI2RlZmluZSBNYXJrZWRT
cGFjZV9oCiAKLSNpbmNsdWRlICJHQ0hhbmRsZS5oIgotI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNp
bmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNs
dWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CisjaW5jbHVkZSAiUGFnZUFs
bG9jYXRpb25BbGlnbmVkLmgiCiAjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGln
bmVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+Ci0KLSNkZWZpbmUgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChjbGFzcykgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKGNsYXNzKSA8PSBDRUxMX1NJWkUsIGNsYXNzX2ZpdHNfaW5fY2Vs
bCkKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgQ29sbGVjdG9yQmxvY2s7Ci0gICAgY2xhc3MgR0NBY3Rpdml0eUNhbGxiYWNrOworICAgIGNs
YXNzIEhlYXA7CiAgICAgY2xhc3MgSlNDZWxsOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKLSAg
ICBjbGFzcyBKU1ZhbHVlOwotICAgIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOwotICAgIGNs
YXNzIE1hcmtTdGFjazsKLQotICAgIGVudW0gT3BlcmF0aW9uSW5Qcm9ncmVzcyB7IE5vT3BlcmF0
aW9uLCBBbGxvY2F0aW9uLCBDb2xsZWN0aW9uIH07Ci0KICAgICBjbGFzcyBMaXZlT2JqZWN0SXRl
cmF0b3I7CisgICAgY2xhc3MgTWFya1N0YWNrOworICAgIGNsYXNzIFdlYWtHQ0hhbmRsZTsKIAog
I2lmIE9TKFdJTkNFKSB8fCBPUyhTWU1CSUFOKSB8fCBQTEFURk9STShCUkVXTVApCiAgICAgY29u
c3Qgc2l6ZV90IEJMT0NLX1NJWkUgPSA2NCAqIDEwMjQ7IC8vIDY0awpAQCAtNjAsNiArNDUsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBjb25zdCBzaXplX3QgQkxPQ0tfU0laRSA9IDI1NiAqIDEw
MjQ7IC8vIDI1NmsKICNlbmRpZgogCisgICAgdHlwZWRlZiBIYXNoQ291bnRlZFNldDxKU0NlbGwq
PiBQcm90ZWN0Q291bnRTZXQ7CisKICAgICBzdHJ1Y3QgQ29sbGVjdG9ySGVhcCB7CiAgICAgICAg
IHNpemVfdCBuZXh0QmxvY2s7CiAgICAgICAgIHNpemVfdCBuZXh0Q2VsbDsKQEAgLTY4LDM0ICs1
NSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IG51bUJsb2NrczsKICAgICAg
ICAgc2l6ZV90IHVzZWRCbG9ja3M7CiAKLSAgICAgICAgc2l6ZV90IGV4dHJhQ29zdDsKICAgICAg
ICAgYm9vbCBkaWRTaHJpbms7CiAKLSAgICAgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRp
b25JblByb2dyZXNzOwotCiAgICAgICAgIENvbGxlY3RvckJsb2NrKiBjb2xsZWN0b3JCbG9jayhz
aXplX3QgaW5kZXgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDb2xsZWN0b3JCbG9jayo+KGJsb2Nrc1tpbmRleF0uYmFzZSgpKTsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBjbGFzcyBIZWFwIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBjbGFz
cyBNYXJrZWRTcGFjZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAg
ICB2b2lkIGRlc3Ryb3koKTsKKyAgICAgICAgTWFya2VkU3BhY2UoSlNHbG9iYWxEYXRhKik7Cisg
ICAgICAgIHZvaWQgZGVzdHJveShQcm90ZWN0Q291bnRTZXQmKTsKIAogICAgICAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3QpOwogCi0gICAgICAgIGJvb2wgaXNCdXN5KCk7IC8vIHRydWUgaWYgYW4g
YWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCi0gICAgICAgIHZvaWQgY29s
bGVjdEFsbEdhcmJhZ2UoKTsKLQotICAgICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGFjdGl2aXR5
Q2FsbGJhY2soKTsKLSAgICAgICAgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8
R0NBY3Rpdml0eUNhbGxiYWNrPik7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5F
eHRyYUNvc3QgPSAyNTY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RXh0cmFDb3N0
ID0gMTAyNCAqIDEwMjQ7Ci0KLSAgICAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6
ZV90IGNvc3QpOwotCiAgICAgICAgIHNpemVfdCBvYmplY3RDb3VudCgpIGNvbnN0OwogICAgICAg
ICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZTsKQEAgLTEwNCwy
MCArNzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RhdGlzdGljcyBzdGF0aXN0aWNz
KCkgY29uc3Q7CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBw
cm90ZWN0KEpTVmFsdWUpOwotICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlz
IG5vIGxvbmdlciBwcm90ZWN0ZWQgYnkgYW55IHByb3RlY3QgcG9pbnRlcnMKLSAgICAgICAgLy8g
KHRob3VnaCBpdCBtYXkgc3RpbGwgYmUgYWxpdmUgZHVlIHRvIGhlYXAvc3RhY2sgcmVmZXJlbmNl
cykuCi0gICAgICAgIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOwotCi0gICAgICAgIHN0YXRpYyBI
ZWFwKiBoZWFwKEpTVmFsdWUpOyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCiAgICAgICAgIHN0
YXRpYyBIZWFwKiBoZWFwKEpTQ2VsbCopOwogCi0gICAgICAgIHNpemVfdCBnbG9iYWxPYmplY3RD
b3VudCgpOwotICAgICAgICBzaXplX3QgcHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKLSAgICAgICAg
c2l6ZV90IHByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7Ci0gICAgICAgIEhhc2hDb3VudGVk
U2V0PGNvbnN0IGNoYXIqPiogcHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpOwotICAgICAgICBI
YXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4qIG9iamVjdFR5cGVDb3VudHMoKTsKLQogICAgICAg
ICBzdGF0aWMgYm9vbCBpc0NlbGxNYXJrZWQoY29uc3QgSlNDZWxsKik7CiAgICAgICAgIHN0YXRp
YyBib29sIGNoZWNrTWFya0NlbGwoY29uc3QgSlNDZWxsKik7CiAgICAgICAgIHN0YXRpYyB2b2lk
IG1hcmtDZWxsKEpTQ2VsbCopOwpAQCAtMTI2LDMyICs4OCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2b2lkIG1hcmtDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smLCB2b2lkKiBzdGFy
dCwgdm9pZCogZW5kKTsKIAotICAgICAgICB2b2lkIHB1c2hUZW1wU29ydFZlY3RvcihXVEY6OlZl
Y3RvcjxWYWx1ZVN0cmluZ1BhaXI+Kik7Ci0gICAgICAgIHZvaWQgcG9wVGVtcFNvcnRWZWN0b3Io
V1RGOjpWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiopOyAgICAgICAgCi0KLSAgICAgICAgSGFzaFNl
dDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBtYXJrTGlzdFNldCgpIHsgaWYgKCFtX21hcmtMaXN0
U2V0KSBtX21hcmtMaXN0U2V0ID0gbmV3IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPjsg
cmV0dXJuICptX21hcmtMaXN0U2V0OyB9Ci0KLSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CiAgICAgICAgIHN0YXRpYyBib29s
IGlzTnVtYmVyKEpTQ2VsbCopOwogICAgICAgICAKICAgICAgICAgTGl2ZU9iamVjdEl0ZXJhdG9y
IHByaW1hcnlIZWFwQmVnaW4oKTsKICAgICAgICAgTGl2ZU9iamVjdEl0ZXJhdG9yIHByaW1hcnlI
ZWFwRW5kKCk7CiAKLSAgICAgICAgTWFjaGluZVN0YWNrTWFya2VyJiBtYWNoaW5lU3RhY2tNYXJr
ZXIoKSB7IHJldHVybiBtX21hY2hpbmVTdGFja01hcmtlcjsgfQorICAgICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKLSAgICAgICAgdm9pZCBzd2VlcCgpOwogICAgICAgICBz
dGF0aWMgQ29sbGVjdG9yQmxvY2sqIGNlbGxCbG9jayhjb25zdCBKU0NlbGwqKTsKICAgICAgICAg
c3RhdGljIHNpemVfdCBjZWxsT2Zmc2V0KGNvbnN0IEpTQ2VsbCopOwogCi0gICAgICAgIGZyaWVu
ZCBjbGFzcyBKU0dsb2JhbERhdGE7Ci0gICAgICAgIEhlYXAoSlNHbG9iYWxEYXRhKik7Ci0gICAg
ICAgIH5IZWFwKCk7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAgICAgdm9pZCBzd2VlcCgp
OwogCiAgICAgICAgIE5FVkVSX0lOTElORSBDb2xsZWN0b3JCbG9jayogYWxsb2NhdGVCbG9jaygp
OwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBmcmVlQmxvY2soc2l6ZV90KTsKLSAgICAgICAg
dm9pZCBmcmVlQmxvY2tzKCk7CiAgICAgICAgIHZvaWQgcmVzaXplQmxvY2tzKCk7CiAgICAgICAg
IHZvaWQgZ3Jvd0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKTsKICAgICAgICAgdm9pZCBzaHJp
bmtCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2Nrcyk7CkBAIC0xNTksMzIgKzExMCwxNSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjbGVhck1hcmtCaXRzKENvbGxlY3RvckJsb2NrKik7
CiAgICAgICAgIHNpemVfdCBtYXJrZWRDZWxscyhzaXplX3Qgc3RhcnRCbG9jayA9IDAsIHNpemVf
dCBzdGFydENlbGwgPSAwKSBjb25zdDsKIAotICAgICAgICB2b2lkIHJlY29yZEV4dHJhQ29zdChz
aXplX3QpOwotCiAgICAgICAgIHZvaWQgYWRkVG9TdGF0aXN0aWNzKFN0YXRpc3RpY3MmKSBjb25z
dDsKIAogICAgICAgICB2b2lkIG1hcmtSb290cygpOwotICAgICAgICB2b2lkIG1hcmtQcm90ZWN0
ZWRPYmplY3RzKE1hcmtTdGFjayYpOwotICAgICAgICB2b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMo
TWFya1N0YWNrJik7Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVXZWFrR0NIYW5kbGVzKCk7Ci0gICAg
ICAgIFdlYWtHQ0hhbmRsZVBvb2wqIHdlYWtHQ0hhbmRsZVBvb2woc2l6ZV90IGluZGV4KTsKLQot
ICAgICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RDb3VudFNldDsK
IAorICAgICAgICBib29sIGRpZFNocmluaygpIHsgcmV0dXJuIG1faGVhcC5kaWRTaHJpbms7IH0K
KyAgICAgICAgCisgICAgcHJpdmF0ZToKICAgICAgICAgQ29sbGVjdG9ySGVhcCBtX2hlYXA7Ci0K
LSAgICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwotICAgICAgICBXVEY6
OlZlY3RvcjxQYWdlQWxsb2NhdGlvbkFsaWduZWQ+IG1fd2Vha0dDSGFuZGxlUG9vbHM7Ci0gICAg
ICAgIFdURjo6VmVjdG9yPFdURjo6VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qID4gbV90ZW1wU29y
dGluZ1ZlY3RvcnM7Ci0KLSAgICAgICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+KiBt
X21hcmtMaXN0U2V0OwotCi0gICAgICAgIE93blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IG1fYWN0
aXZpdHlDYWxsYmFjazsKLQogICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKLSAg
ICAgICAgCi0gICAgICAgIE1hY2hpbmVTdGFja01hcmtlciBtX21hY2hpbmVTdGFja01hcmtlcjsK
ICAgICB9OwogCiAgICAgLy8gdHVuYWJsZSBwYXJhbWV0ZXJzCkBAIC0xOTcsNyArMTMxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgY29uc3Qgc2l6ZV90IFNNQUxMX0NFTExfU0laRSA9IENFTExf
U0laRSAvIDI7CiAgICAgY29uc3Qgc2l6ZV90IENFTExfTUFTSyA9IENFTExfU0laRSAtIDE7CiAg
ICAgY29uc3Qgc2l6ZV90IENFTExfQUxJR05fTUFTSyA9IH5DRUxMX01BU0s7Ci0gICAgY29uc3Qg
c2l6ZV90IENFTExTX1BFUl9CTE9DSyA9IChCTE9DS19TSVpFIC0gc2l6ZW9mKEhlYXAqKSkgKiA4
ICogQ0VMTF9TSVpFIC8gKDggKiBDRUxMX1NJWkUgKyAxKSAvIENFTExfU0laRTsgLy8gb25lIGJp
dG1hcCBieXRlIGNhbiByZXByZXNlbnQgOCBjZWxscy4KKyAgICBjb25zdCBzaXplX3QgQ0VMTFNf
UEVSX0JMT0NLID0gKEJMT0NLX1NJWkUgLSBzaXplb2YoTWFya2VkU3BhY2UqKSkgKiA4ICogQ0VM
TF9TSVpFIC8gKDggKiBDRUxMX1NJWkUgKyAxKSAvIENFTExfU0laRTsgLy8gb25lIGJpdG1hcCBi
eXRlIGNhbiByZXByZXNlbnQgOCBjZWxscy4KICAgICAKICAgICBjb25zdCBzaXplX3QgQklUTUFQ
X1NJWkUgPSAoQ0VMTFNfUEVSX0JMT0NLICsgNykgLyA4OwogICAgIGNvbnN0IHNpemVfdCBCSVRN
QVBfV09SRFMgPSAoQklUTUFQX1NJWkUgKyAzKSAvIHNpemVvZih1aW50MzJfdCk7CkBAIC0yNjEs
NDEgKzE5NSwzMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBDb2xsZWN0b3JC
bG9jayBCbG9jazsKICAgICB9OwogCi0gICAgaW5saW5lIENvbGxlY3RvckJsb2NrKiBIZWFwOjpj
ZWxsQmxvY2soY29uc3QgSlNDZWxsKiBjZWxsKQorICAgIGlubGluZSBDb2xsZWN0b3JCbG9jayog
TWFya2VkU3BhY2U6OmNlbGxCbG9jayhjb25zdCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb2xsZWN0b3JCbG9jayo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihjZWxsKSAmIEJMT0NLX01BU0spOwogICAgIH0KIAotICAgIGlubGluZSBz
aXplX3QgSGVhcDo6Y2VsbE9mZnNldChjb25zdCBKU0NlbGwqIGNlbGwpCisgICAgaW5saW5lIHNp
emVfdCBNYXJrZWRTcGFjZTo6Y2VsbE9mZnNldChjb25zdCBKU0NlbGwqIGNlbGwpCiAgICAgewog
ICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxsKSAmIEJMT0NL
X09GRlNFVF9NQVNLKSAvIENFTExfU0laRTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBIZWFw
Ojppc0NlbGxNYXJrZWQoY29uc3QgSlNDZWxsKiBjZWxsKQorICAgIGlubGluZSBib29sIE1hcmtl
ZFNwYWNlOjppc0NlbGxNYXJrZWQoY29uc3QgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGNlbGxCbG9jayhjZWxsKS0+bWFya2VkLmdldChjZWxsT2Zmc2V0KGNlbGwpKTsKICAg
ICB9CiAKLSAgICBpbmxpbmUgYm9vbCBIZWFwOjpjaGVja01hcmtDZWxsKGNvbnN0IEpTQ2VsbCog
Y2VsbCkKKyAgICBpbmxpbmUgYm9vbCBNYXJrZWRTcGFjZTo6Y2hlY2tNYXJrQ2VsbChjb25zdCBK
U0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICByZXR1cm4gY2VsbEJsb2NrKGNlbGwpLT5tYXJr
ZWQuZ2V0c2V0KGNlbGxPZmZzZXQoY2VsbCkpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhl
YXA6Om1hcmtDZWxsKEpTQ2VsbCogY2VsbCkKKyAgICBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6
bWFya0NlbGwoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgY2VsbEJsb2NrKGNlbGwpLT5t
YXJrZWQuc2V0KGNlbGxPZmZzZXQoY2VsbCkpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEhl
YXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCkKLSAgICB7Ci0gICAgICAgIGlm
IChjb3N0ID4gbWluRXh0cmFDb3N0KSAKLSAgICAgICAgICAgIHJlY29yZEV4dHJhQ29zdChjb3N0
KTsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIFdlYWtHQ0hhbmRsZVBvb2wqIEhlYXA6OndlYWtH
Q0hhbmRsZVBvb2woc2l6ZV90IGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYWtHQ0hhbmRsZVBvb2wqPihtX3dlYWtHQ0hhbmRsZVBvb2xzW2luZGV4XS5iYXNlKCkp
OwotICAgIH0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLyogSGVhcF9oICovCisjZW5k
aWYgLy8gTWFya2VkU3BhY2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWVtb3J5U3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWVtb3J5U3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDc1NzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWVtb3J5U3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUhlYXA6OlN0YXRpc3Rp
Y3MgaGVhcFN0YXRpc3RpY3MoSlNHbG9iYWxEYXRhKiBjb21tb25HbG9iYWxEYXRhKQorTWFya2Vk
U3BhY2U6OlN0YXRpc3RpY3MgaGVhcFN0YXRpc3RpY3MoSlNHbG9iYWxEYXRhKiBjb21tb25HbG9i
YWxEYXRhKQogewogICAgIHJldHVybiBjb21tb25HbG9iYWxEYXRhLT5oZWFwLnN0YXRpc3RpY3Mo
KTsKIH0gICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWVtb3J5
U3RhdGlzdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01lbW9yeVN0YXRpc3RpY3MuaAkocmV2aXNpb24gNzU3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAgc3RydWN0IEdsb2JhbE1lbW9yeVN0YXRpc3RpY3MgewogICAgIHNpemVfdCBKSVRC
eXRlczsKIH07CiAKLUhlYXA6OlN0YXRpc3RpY3MgaGVhcFN0YXRpc3RpY3MoSlNHbG9iYWxEYXRh
KiBjb21tb25HbG9iYWxEYXRhKTsKK01hcmtlZFNwYWNlOjpTdGF0aXN0aWNzIGhlYXBTdGF0aXN0
aWNzKEpTR2xvYmFsRGF0YSogY29tbW9uR2xvYmFsRGF0YSk7CiBHbG9iYWxNZW1vcnlTdGF0aXN0
aWNzIGdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78888</attachid>
            <date>2011-01-13 21:43:35 -0800</date>
            <delta_ts>2011-01-14 13:58:17 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>124187</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzU3NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODEgQEAK
KzIwMTEtMDEtMTMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCBvdXQgYSBNYXJr
ZWRTcGFjZSBzdHJhdGVneSBvYmplY3QgZnJvbSBIZWFwLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI0MjEKKyAgICAgICAgCisgICAgICAgIFN1blNw
aWRlciByZXBvcnRzIG5vIGNoYW5nZS4KKworICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcm86CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBVcGRhdGVkIG91ciA3IGJ1aWxkIHN5c3RlbXMuIFdoaWNoIGlzIGNvb2wuCisKKyAgICAg
ICAgKiBydW50aW1lL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlY29yZEV4dHJh
Q29zdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6b2JqZWN0Q291bnQpOgorICAgICAgICAoSlNDOjpIZWFwOjpz
dGF0aXN0aWNzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2l6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6OmlzQnVzeSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6cHJpbWFyeUhlYXBCZWdpbik6CisgICAgICAgIChKU0M6OkhlYXA6
OnByaW1hcnlIZWFwRW5kKToKKyAgICAgICAgKiBydW50aW1lL0hlYXAuaDoKKyAgICAgICAgKEpT
Qzo6SGVhcDo6Z2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtlZFNwYWNlKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6aXNDZWxsTWFya2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
Y2hlY2tNYXJrQ2VsbCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDZWxsKTogTW92ZWQgYWxs
IGNvZGUgcGVydGFpbmluZyB0byBtYW5hZ2luZyBjaHVua3Mgb2YKKyAgICAgICAgY29sbGVjdG9y
IG1lbW9yeSBvdXQgb2YgdGhpcyBjbGFzcy4gSGVhcCBub3cganVzdCBkZWxlZ2F0ZXMgdG8gTWFy
a2VkU3BhY2UuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OkhlYXA6OmhlYXApOiBVcGRhdGVkIGZvciBNYXJrZWRTcGFjZSBkZWxlZ2F0aW9uLgor
CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6IE1vdmVkIHRoZSBWYWx1ZVN0cmluZ1BhaXIg
dHlwZWRlZiB0byBoZWxwIHdpdGggI2luY2x1ZGVzLgorCisgICAgICAgICogcnVudGltZS9NYXJr
ZWRTcGFjZS5jcHA6IENvcGllZCBmcm9tIHJ1bnRpbWUvSGVhcC5jcHAuCisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjpNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpk
ZXN0cm95KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRlQmxvY2spOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlc2l6ZUJsb2Nr
cyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpncm93QmxvY2tzKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkU3BhY2U6OnNocmlua0Jsb2Nrcyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjptYXJrQ29uc2VydmF0aXZlbHkpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2xlYXJN
YXJrQml0cyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjptYXJrZWRDZWxscyk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpvYmplY3RDb3VudCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphZGRUb1N0YXRpc3Rp
Y3MpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6c3RhdGlzdGljcyk6CisgICAgICAgIChK
U0M6Ok1hcmtlZFNwYWNlOjpzaXplKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlc2V0
KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnByaW1hcnlIZWFwQmVnaW4pOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6cHJpbWFyeUhlYXBFbmQpOgorICAgICAgICAqIHJ1bnRpbWUv
TWFya2VkU3BhY2UuaDogQ29waWVkIGZyb20gcnVudGltZS9IZWFwLmguCisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjpnbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmRp
ZFNocmluayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpjZWxsQmxvY2spOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2VsbE9mZnNldCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjppc0NlbGxNYXJrZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2hlY2tNYXJr
Q2VsbCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjptYXJrQ2VsbCk6IE1vdmVkIGFsbCBj
b2RlIHBlcnRhaW5pbmcgdG8gbWFuYWdpbmcgY2h1bmtzIG9mCisgICAgICAgIGNvbGxlY3RvciBt
ZW1vcnkgaW50byB0aGlzIGNsYXNzLgorCisgICAgICAgICogcnVudGltZS9NZW1vcnlTdGF0aXN0
aWNzLmNwcDoKKyAgICAgICAgKEpTQzo6aGVhcFN0YXRpc3RpY3MpOgorICAgICAgICAqIHJ1bnRp
bWUvTWVtb3J5U3RhdGlzdGljcy5oOiBVcGRhdGVkIGZvciBNYXJrZWRTcGFjZSBkZWxlZ2F0aW9u
LgorCiAyMDExLTAxLTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
bmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1r
CShyZXZpc2lvbiA3NTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSBcCiAJcnVu
dGltZS9Cb29sZWFuT2JqZWN0LmNwcCBcCiAJcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcCBc
CiAJcnVudGltZS9DYWxsRGF0YS5jcHAgXAorCXJ1bnRpbWUvTWFya2VkU3BhY2UuY3BwIFwKIAly
dW50aW1lL0hlYXAuY3BwIFwKIAlydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCBcCiAJcnVu
dGltZS9Db21wbGV0aW9uLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiA3NTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAKICAgICBydW50aW1lL0Jvb2xl
YW5Qcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9DYWxsRGF0YS5jcHAKKyAgICBydW50aW1lL01h
cmtlZFNwYWNlLmNwcAogICAgIHJ1bnRpbWUvSGVhcC5jcHAKICAgICBydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmNwcAogICAgIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDc1NzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDgg
QEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FsbERhdGEuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxs
RGF0YS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3BhY2UuY3BwIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IZWFwLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGVhcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3JIZWFwSXRl
cmF0b3IuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lw
aQkocmV2aXNpb24gNzU3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTgyLDYgKzE4Miw4IEBACiAgICAgICAgICAgICAn
cnVudGltZS9DYWxsRGF0YS5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvQ2FsbERhdGEuaCcs
CiAgICAgICAgICAgICAncnVudGltZS9DbGFzc0luZm8uaCcsCisgICAgICAgICAgICAncnVudGlt
ZS9NYXJrZWRTcGFjZS5jcHAnLAorICAgICAgICAgICAgJ3J1bnRpbWUvTWFya2VkU3BhY2UuaCcs
CiAgICAgICAgICAgICAncnVudGltZS9IZWFwLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9I
ZWFwLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmgnLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA3
NTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL0Jv
b2xlYW5PYmplY3QuY3BwIFwKICAgICBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwIFwKICAg
ICBydW50aW1lL0NhbGxEYXRhLmNwcCBcCisgICAgcnVudGltZS9NYXJrZWRTcGFjZS5jcHAgXAog
ICAgIHJ1bnRpbWUvSGVhcC5jcHAgXAogICAgIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3Bw
IFwKICAgICBydW50aW1lL0NvbXBsZXRpb24uY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiA3
NTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OTQs
NiArNTk0LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHJ1bnRpbWVcTWFya2VkU3BhY2UuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXE1hcmtlZFNwYWNlLmgiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRp
bWVcQ29sbGVjdG9ySGVhcEludHJvc3BlY3Rvci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NTc2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMCBAQAogCQkxNDA1NjZEMTEwN0VDMjY3MDA1REJD
OEQgLyogSlNTdGF0aWNTY29wZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U0MkMxOTBFMzkzODgzMDA2NUE1NDQgLyogSlNTdGF0aWNT
Y29wZU9iamVjdC5jcHAgKi87IH07CiAJCTE0MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1
bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY2OTJBODVFMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNwcCAqLzsgfTsKIAkJMTQw
QjdEMUQwREM2OUFGNzAwOUM0MkI4IC8qIEpTQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIg
LyogSlNBY3RpdmF0aW9uLmNwcCAqLzsgfTsKKwkJMTQwQ0RDN0MxMkRDMDlCRjAwMTNDRkM1IC8q
IE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0MENEQzc2MTJEQkVBMzMwMDEzQ0ZDNSAvKiBNYXJrZWRTcGFjZS5jcHAgKi87IH07
CisJCTE0MENERTcwMTJERTk3QTAwMDEzQ0ZDNSAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MENERTZDMTJERTk3N0UwMDEzQ0ZDNSAv
KiBIZWFwLmNwcCAqLzsgfTsKKwkJMTQwQ0RFNzExMkRFOTdCMTAwMTNDRkM1IC8qIEhlYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MENERTZEMTJE
RTk3N0UwMDEzQ0ZDNSAvKiBIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMTQwQ0RGMEMxMkRFQ0U1QzAwMTNDRkM1IC8qIE1hcmtlZFNwYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDBDREM3
NzEyREJFQTMzMDAxM0NGQzUgLyogTWFya2VkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDBEMTdENzBFOEFENEE5MDAwQ0QxN0QgLyog
SlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDEyMTEzMTBBNDg3
OTREMDA0ODAyNTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1
IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJMTQxMjExMzQwQTQ4Nzk1ODAw
NDgwMjU1IC8qIG1pbmlkb20uYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MTIxMTAyMEE0ODc4MDkwMDQ4MDI1NSAvKiBtaW5pZG9tLmMgKi87IH07CkBA
IC0xNzUsNyArMTc5LDYgQEAKIAkJMTRGMzQ4OEYwRTk1RUY4QTAwMzY0OEJDIC8qIENvbGxlY3Rv
ckhlYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTRGMzQ4OEUwRTk1RUY4QTAwMzY0OEJDIC8qIENvbGxlY3RvckhlYXBJdGVyYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTE0RjhCQTNFMTA3RUM4
ODYwMDk4OTJEQyAvKiBGYXN0TWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1RTIxN0I5MDhFN0VFQ0MwMDIzRTVGNiAvKiBGYXN0TWFsbG9j
LmNwcCAqLzsgfTsKIAkJMTRGOEJBNDMxMDdFQzg4QzAwOTg5MkRDIC8qIFRDU3lzdGVtQWxsb2Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJE
NzAwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lzdGVtQWxsb2MuY3BwICovOyB9OwotCQkxNEY4QkE0
RjEwN0VDODk5MDA5ODkyREMgLyogSGVhcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1MjAyNTU1OTdEMDFGRjYwRjcgLyogSGVhcC5jcHAg
Ki87IH07CiAJCTE0RkZGOThDMTJCRkZGNzUwMDc5NUJCOCAvKiBQYWdlQWxsb2NhdGlvbkFsaWdu
ZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRG
RkY5OEExMkJGRkY3NTAwNzk1QkI4IC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgKi87IH07
CiAJCTE0RkZGOThEMTJCRkZGNzUwMDc5NUJCOCAvKiBQYWdlQWxsb2NhdGlvbkFsaWduZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RkZGOThCMTJC
RkZGNzUwMDc5NUJCOCAvKiBQYWdlQWxsb2NhdGlvbkFsaWduZWQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxODBCOUIwODBGMTZEOTRGMDA5QkRC
QzUgLyogQ3VycmVudFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE4MEI5QUYwMEYxNkM1NjkwMDlCREJDNSAvKiBDdXJyZW50VGltZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zOTQsNyArMzk3
LDYgQEAKIAkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xlYW5PYmplY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwNEZEMzUzMDU2OTdF
NkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVD
NTA3RjBEOURGNjNCMDA4OEY2QjkgLyogQ2FsbERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzNGMDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q29sbGF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQTg2MkFBMEQ3RUJCN0QwMDFFQzZBQSAvKiBDb2xsYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDMThDM0YxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNjkyQTg1MzAyNTU1OTdEMDFGRjYwRjcgLyogSGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBDb21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVFQTczNjMwQkFFMzVEMTAwMUJCNTYwIC8qIENvbW1vbklkZW50aWZpZXJz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMx
OEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBD
b21wbGV0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3
IC8qIGNvbmZpZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC02NjUsNiArNjY3LDEwIEBACiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBP
U0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQx
MjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQwMzVEQjAxMERCRkIyQTAwRkZGRkU3IC8qIFdlYWtHQ1B0ci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrR0NQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMTQwQ0RDNzYxMkRCRUEzMzAwMTNDRkM1IC8qIE1hcmtlZFNwYWNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtlZFNwYWNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQwQ0RDNzcxMkRCRUEzMzAwMTNDRkM1IC8qIE1hcmtlZFNw
YWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZFNwYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MENERTZDMTJERTk3N0UwMDEzQ0ZDNSAvKiBI
ZWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDBDREU2RDEyREU5NzdFMDAxM0NGQzUgLyog
SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMjExMDIwQTQ4NzgwOTAwNDgwMjU1
IC8qIG1pbmlkb20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbWluaWRvbS5j
OyBwYXRoID0gdGVzdHMvbWluaWRvbS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUgLyogbWluaWRvbS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgbmFtZSA9IG1pbmlkb20uanM7IHBhdGggPSB0ZXN0cy9taW5pZG9tLmpz
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE3OCw4ICsxMTg0LDYgQEAKIAkJRjY5
MkE4NEQwMjU1NTk3RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5UHJvdG90eXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNjkyQTg0
RTAyNTU1OTdEMDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlQcm90b3R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNjkyQTg1MDAyNTU1OTdEMDFG
RjYwRjcgLyogQm9vbGVhbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCb29sZWFuT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwotCQlGNjkyQTg1MjAyNTU1OTdEMDFGRjYwRjcg
LyogSGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBIZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB9OwotCQlGNjkyQTg1MzAyNTU1OTdEMDFGRjYwRjcgLyogSGVhcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3
IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucGVybDsgcGF0aCA9IGNyZWF0ZV9oYXNoX3RhYmxlOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY2OTJBODU4MDI1NTU5N0QwMUZGNjBGNyAvKiBEZWJ1
Z2dlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZWJ1Z2dlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgfTsKIAkJRjY5MkE4NTkwMjU1NTk3RDAxRkY2MEY3IC8qIERlYnVnZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKQEAgLTE3MzYsOCArMTc0MCw4
IEBACiAJCQkJQkMzMzdCREUwRTFBRjBCODAwNzY5MThBIC8qIEdldHRlclNldHRlci5oICovLAog
CQkJCUJDMjU3REVEMEUxRjUyRUQwMDE2QjZDOSAvKiBHbG9iYWxFdmFsRnVuY3Rpb24uY3BwICov
LAogCQkJCUJDMjU3REVFMEUxRjUyRUQwMDE2QjZDOSAvKiBHbG9iYWxFdmFsRnVuY3Rpb24uaCAq
LywKLQkJCQlGNjkyQTg1MjAyNTU1OTdEMDFGRjYwRjcgLyogSGVhcC5jcHAgKi8sCi0JCQkJRjY5
MkE4NTMwMjU1NTk3RDAxRkY2MEY3IC8qIEhlYXAuaCAqLywKKwkJCQkxNDBDREU2QzEyREU5NzdF
MDAxM0NGQzUgLyogSGVhcC5jcHAgKi8sCisJCQkJMTQwQ0RFNkQxMkRFOTc3RTAwMTNDRkM1IC8q
IEhlYXAuaCAqLywKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5j
cHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywK
IAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAg
Ki8sCkBAIC0xNzk3LDYgKzE4MDEsOCBAQAogCQkJCUY2OTJBODY5MDI1NTU5N0QwMUZGNjBGNyAv
KiBMb29rdXAuaCAqLywKIAkJCQkxNEI3MjMzRjEyRDdEMERBMDAzQkQ1RUQgLyogTWFjaGluZVN0
YWNrTWFya2VyLmNwcCAqLywKIAkJCQkxNEI3MjM0MDEyRDdEMERBMDAzQkQ1RUQgLyogTWFjaGlu
ZVN0YWNrTWFya2VyLmggKi8sCisJCQkJMTQwQ0RDNzYxMkRCRUEzMzAwMTNDRkM1IC8qIE1hcmtl
ZFNwYWNlLmNwcCAqLywKKwkJCQkxNDBDREM3NzEyREJFQTMzMDAxM0NGQzUgLyogTWFya2VkU3Bh
Y2UuaCAqLywKIAkJCQlBNzRCMzQ5ODEwMkE1RjhFMDAzMkFCOTggLyogTWFya1N0YWNrLmNwcCAq
LywKIAkJCQlBNzc5NTU4RjEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNrLmggKi8sCiAJCQkJ
QTdDNTMwRTMxMDJBMzgxMzAwNUJDNzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNwcCAqLywKQEAgLTIw
OTgsNiArMjEwNCw3IEBACiAJCQkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUY3QkJFMTE4MjNCNTkwMDUyQzAyQyAvKiBBdG9t
aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjhCRkEwOTExN0NFRkQxMDBCOTA4QjEgLyogQXRv
bWljU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkYzODg1OTEyMTEzMENBMDA3QTdDRTMg
LyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4QkZBMEExMTdDRUZE
MTAwQjkwOEIxIC8qIEF0b21pY1N0cmluZ0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
M0VCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBBVkxUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdC
ODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjEwNiw3ICsyMTEzLDYgQEAKIAkJCQk4NjY3NkQ1MjExRkVEOUJDMDA0
QjY4NjMgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QTFG
N0FEMEYyNTJCM0MwMEUxODRFMiAvKiBCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
OUEwNzIzMEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJRkRBMTVDMUUxMkIwMzA1QzAwM0E1ODNBIC8qIENvbXBsZXguaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2OUQwNEFGMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRh
bEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAg
LyogQ2FsbERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLApAQCAtMjExNSwxMyArMjEyMSwxMiBAQAog
CQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0YwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb2xsYXRvci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQkMxOEMzRjEwRTE2RjVDRDAwQjM0NDYwIC8qIEhlYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RjM0ODhGMEU5NUVGOEEwMDM2NDhCQyAvKiBDb2xsZWN0b3JIZWFwSXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBD
b21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjQwRTE2RjVDRDAw
QjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUZEQTE1QzFFMTJCMDMw
NUMwMDNBNTgzQSAvKiBDb21wbGV4LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNTBFMTZG
NUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNjBFMTZG
NUNEMDBCMzQ0NjAgLyogQ29uc3RydWN0RGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNURFNkU1
QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEJERkZBRTAwRkM2MTkyOTAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY1NjU3NDMxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTE4MEI5QjA4MEYxNkQ5NEYwMDlCREJDNSAvKiBDdXJyZW50VGlt
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTM1LDkgKzIxNDAsMTIgQEAKIAkJCQlCQzE4QzNGQTBF
MTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzEzNTY0
MEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDM0ZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODYyQUY0QjYxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1iZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUxMzVGQUYyMTJEMjZBQ0UwMDNDMDgzQiAvKiBEZWNvZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBFMTZGNUNEMDBCMzQ0NjAgLyogRGVxdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0ZEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEaXNhbGxv
d0NUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGRTBFMTZGNUNEMDBCMzQ0NjAgLyog
ZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTEzNUZBRjMxMkQyNkFEMTAwM0MwODNCIC8qIEVu
Y29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA0NjA3MEUxRjQ5N0YwMDMyMzJDRiAvKiBF
cnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MEQwRTE4MzlEQjAwMEY5Mjk3IC8qIEVy
cm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOThEMEUxODNFMzgwMDBG
OTI5NyAvKiBFcnJvckluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTIxNTIsNiArMjE2MCw4
IEBACiAJCQkJQkMxOEM0MDMwRTE2RjVDRDAwQjM0NDYwIC8qIEZvcndhcmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDA0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rp
b25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCURERjdBQkQ0MTFGNjBFRDIwMDEwOEUz
NiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCURERTgyQUQ4MTIw
OUQ5NTUwMDVDMTc1NiAvKiBHQ0hhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDYw
RTE2RjVDRDAwQjM0NDYwIC8qIEdldFB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyNTdERjAw
RTFGNTJFRDAwMTZCNkM5IC8qIEdsb2JhbEV2YWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MDgwRTE2RjVDRDAwQjM0NDYwIC8qIEhhc2hDb3VudGVkU2V0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTIxNjEsNiArMjE3MSw3IEBACiAJCQkJQkMxOEM0MEMwRTE2RjVDRDAwQjM0NDYw
IC8qIEhhc2hTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBEMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBFMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBIYXNoVHJhaXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDBDREU3MTEyREU5N0Ix
MDAxM0NGQzUgLyogSGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAw
QjM0NDYwIC8qIElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEwMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMjI0MCwxMSArMjI1MSwxMyBAQAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzkwRTE2
RjVDRDAwQjM0NDYwIC8qIE1haW5UaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNB
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYWxsb2Nab25lU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMTQwQ0RGMEMxMkRFQ0U1QzAwMTNDRkM1IC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzc5NTU5MDEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQzQjBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0aEV4dHJhcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0M0MwRTE2RjVDRDAwQjM0NDYwIC8qIE1hdGhPYmplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNTJBMEUxNkZDQzIwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRkM0Q0IxMTdFRTJBODAwNDI1MjcyIC8qIE1E
NS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9y
eVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNFMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBNZXNzYWdlUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUw
MDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMTBF
MTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yMjUyLDkgKzIyNjUsMTAgQEAKIAkJCQlBNzZFRTY1OTBGQUU1OUQ1MDAzRjA2OUEgLyog
TmF0aXZlRnVuY3Rpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUZGMDA2NDBFQzA1
QTlBMDBBQTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBOb2Rlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjVFMUEzREYxMjJC
ODk0NTAwQjI2MDk3IC8qIE5vbkNvcHlpbmdTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ0MDBFMTZGNUNEMDBCMzQ0NjAgLyogTm9uY29weWFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTY1RTFBM0RGMTIyQjg5NDUwMEIyNjA5NyAvKiBOb25Db3B5aW5nU29ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzBBMjcyNjMwRTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5MzNGNUNEQzEyNjkyMjlCMDA0OTE5MUUgLyogTnVsbFB0ci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NDEwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVy
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MzBFMTZGNUNEMDBC
MzQ0NjAgLyogTnVtYmVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTIyNjUsMTQgKzIyNzks
MjAgQEAKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25z
LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBP
d25BcnJheVB0ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGQkU2OTgxMjI1NjFEMjAwMzA5RTlE
IC8qIE93bkFycmF5UHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQkRGRkFFMTBGQzYx
OTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NEEwRTE2RjVDRDAwQjM0NDYwIC8qIE93blB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQw
OUQ4NDcwRkFGODBBMjAwNTIzQjg3IC8qIE93blB0ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkxNEZGRjk4RDEyQkZGRjc1MDA3OTVCQjggLyogUGFnZUFsbG9jYXRpb25BbGln
bmVkLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEIzRUYwNTEyQkMyNEREMDBEMjlFRkYgLyogUGFn
ZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjkwMjMxNTEyMDkyRDVDMDA2MzBBRjkgLyog
UGFnZVJlc2VydmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzE0QUY1RjEyMkYzMjA3MDA5
MkQ5RjUgLyogUGFyc2VkVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QjBFMTZGNUNE
MDBCMzQ0NjAgLyogUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA1MkMzNTBGQjc5MjE5
MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRkJFNjk2MTIy
NTYwRTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0
REQ0ODUzMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ0QzBFMTZGNUNEMDBCMzQ0NjAgLyogUGFzc1JlZlB0ci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NEQwRTE2RjVDRDAwQjM0NDYwIC8qIHBjcmUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjI5Myw2ICsyMzEzLDcgQEAKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0
UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODhGQTVCQzBFRjc2RDQzMDA1NzhF
NkYgLyogUmFuZG9tTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEUyNzlFOTBFRjgzQjEw
MDA3REI1MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxNEFG
NEIxMjJGMjg5QTAwOTJEOUY1IC8qIFJhd1VSTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NTcwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDU4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHIuaCBp
biBIZWFkZXJzICovLApAQCAtMjMyMiw2ICsyMzQzLDcgQEAKIAkJCQk4NkQ4N0REQjEyQkNBRjk0
MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OEJGQTYwMTE3
RDA0ODIwMEI5MDhCMSAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFMUI0NDdBMEVDQ0Q3M0IwMDRGNEREMSAvKiBTdGRMaWJFeHRyYXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZCOTlBRTMxMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxNDY5NDkxMjY0Mzc4NTAwREZGOTM1IC8qIFN0
cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4Q0FCQkE2MTI2NUFCMzkwMEIyMDZD
RSAvKiBTdHJpbmdDb25jYXRlbmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzQ2LDYgKzIzNjgs
NyBAQAogCQkJCUJDMThDNDZFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ2RjBFMTZGNUNEMDBCMzQ0NjAgLyogVENTeXN0ZW1BbGxvYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxRURFQTYxMTY5RTBEMzAwNUU0MjYyIC8qIFRlcm1pbmF0
b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUYzQkQzMUVEMTI2NzM1NzcwMDY1NDY3RiAvKiBUZXh0
UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE4QkFCNTU0MTBEQUUwNjYwMDBEOTQ1QiAv
KiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ3MDBFMTZGNUNEMDBCMzQ0NjAgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzVGN0JCRjExODIzQjU5MDA1MkMwMkMgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yMzU5LDYgKzIzODIsMTEgQEAKIAkJCQlCQzE4QzQ3MzBFMTZGNUNEMDBCMzQ0
NjAgLyogVW5pY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NzQwRTE2RjVDRDAwQjM0
NDYwIC8qIFVuaWNvZGVJY3UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDc1MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBVbnVzZWRQYXJhbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxNEFGNEMxMjJG
Mjg5QTAwOTJEOUY1IC8qIFVSTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxNEFGNEQx
MjJGMjg5QTAwOTJEOUY1IC8qIFVSTENvbXBvbmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcx
NEFGNEUxMjJGMjg5QTAwOTJEOUY1IC8qIFVSTFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTcxNEFGNEYxMjJGMjg5QTAwOTJEOUY1IC8qIFVSTFNlZ21lbnRzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk5NzE0QUY2MDEyMkYzMjA3MDA5MkQ5RjUgLyogVVJMU3RyaW5nLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ3NjBFMTZGNUNEMDBCMzQ0NjAgLyogVVN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDhEREE1QzExMjY0NjMxNzAwNzUxNzMyIC8qIFVTdHJpbmdCdWlsZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3NzBFMTZGNUNEMDBCMzQ0NjAgLyogVVRGOC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMzczLDMzICsyNDAxLDEyIEBACiAJCQkJODY4QkZBMTgxMTdDRjE5OTAw
QjkwOEIxIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEMDhENTQxMTc5MzYx
MzAwNkU1RUQwIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2ODhDQjE2
MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCURE
RjdBQkQ0MTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLAotCQkJCURERTgyQUQ4MTIwOUQ5NTUwMDVDMTc1NiAvKiBHQ0hhbmRsZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJODZGMzg4NTkxMjExMzBDQTAwN0E3Q0UzIC8qIEF0b21pY1N0cmluZ0hhc2gu
aCBpbiBIZWFkZXJzICovLAotCQkJCTg2MkFGNEI2MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNpbWFs
TnVtYmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5NjEyMjU2MEU4MDAzMDlFOUQgLyog
UGFzc093bkFycmF5UHRyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5ODEyMjU2MUQyMDAz
MDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTk3MTRBRjRC
MTIyRjI4OUEwMDkyRDlGNSAvKiBSYXdVUkxCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3
MTRBRjRDMTIyRjI4OUEwMDkyRDlGNSAvKiBVUkxCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTk3MTRBRjREMTIyRjI4OUEwMDkyRDlGNSAvKiBVUkxDb21wb25lbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCTk3MTRBRjRFMTIyRjI4OUEwMDkyRDlGNSAvKiBVUkxQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTk3MTRBRjRGMTIyRjI4OUEwMDkyRDlGNSAvKiBVUkxTZWdtZW50cy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJOTcxNEFGNUYxMjJGMzIwNzAwOTJEOUY1IC8qIFBhcnNlZFVSTC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJOTcxNEFGNjAxMjJGMzIwNzAwOTJEOUY1IC8qIFVSTFN0cmluZy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0
YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAv
KiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTMzRjVDREMxMjY5
MjI5QjAwNDkxOTFFIC8qIE51bGxQdHIuaCBpbiBIZWFkZXJzICovLAotCQkJCUYzQkQzMUVEMTI2
NzM1NzcwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTE0MDAw
Njc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MTRCM0VGMDUxMkJDMjRERDAwRDI5RUZGIC8qIFBhZ2VCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMTRGRkY5OEQxMkJGRkY3NTAwNzk1QkI4IC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNTEzNUZBRjIxMkQyNkFDRTAwM0MwODNCIC8qIERlY29kZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTUxMzVGQUYzMTJEMjZBRDEwMDNDMDgzQiAvKiBFbmNvZGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRh
eENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NjcwNEI0
MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJsZSBpbiBIZWFk
ZXJzICovLAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
QEAgLTI2OTcsNyArMjcwNCw2IEBACiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENv
ZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUE4NjJENjBEN0YyQjVDMDAxRUM2QUEg
LyogQ29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTg2MkE5MEQ3RUJC
NzYwMDFFQzZBQSAvKiBDb2xsYXRvcklDVS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxNEY4QkE0
RjEwN0VDODk5MDA5ODkyREMgLyogSGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
MTEwN0VDMzc2MDA0MjdBNDggLyogQ29tbW9uSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNzI5LDYgKzI3MzUsNyBAQAogCQkJCTE0MjgwODU1MTA3RUMw
RTcwMDEzRTdCMiAvKiBHZXR0ZXJTZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
Q0QxMDdFQzM3NjAwNDI3QTQ4IC8qIEdsb2JhbEV2YWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NURGQzkzMzA4RUExNzNBMDBGNzMwMEIgLyogSGFzaFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTE0MENERTcwMTJERTk3QTAwMDEzQ0ZDNSAvKiBIZWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUNFMTA3RUMzNzYwMDQyN0E0OCAvKiBJZGVudGlmaWVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxNzg2MzZEMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0
OCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc4Nyw2ICsyNzk0
LDcgQEAKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDZEMzU4QjMwREFBREFBNDAwM0IxNzRFIC8qIE1haW5U
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDZEMzU4QjQwREFBREFBQTAwM0IxNzRFIC8q
IE1haW5UaHJlYWRNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkxNDBDREM3QzEyREMwOUJGMDAx
M0NGQzUgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc0QjM0OTkxMDJB
NUY4RTAwMzJBQjk4IC8qIE1hcmtTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0M1MzBF
NDEwMkEzODEzMDA1QkM3NDEgLyogTWFya1N0YWNrUG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ0NjlEREYxMDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yODYxLDEwICsyODY5LDEwIEBACiAJCQkJRTFFRjc5QUEwQ0U5N0JBNjAwODhENTAw
IC8qIFVURjguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4QkZBMTcxMTdDRjE5OTAwQjkwOEIx
IC8qIFdURlN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkQwOEQ1MzExNzkzNjEzMDA2
RTVFRDAgLyogV1RGVGhyZWFkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk4NjcwNEI0MjEy
REI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODY3MDRCODQxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJT
eW50YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGVhcC5jcHAJKHJldmlzaW9uIDc1NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDU2ICsyMSwyOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKIAotI2luY2x1ZGUgIkFyZ0xp
c3QuaCIKLSNpbmNsdWRlICJDYWxsRnJhbWUuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKKyNpbmNsdWRlICJHQ0hhbmRsZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
Ci0jaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNP
Tk9iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiSlNWYWx1ZS5oIgot
I2luY2x1ZGUgIkpTWm9tYmllLmgiCi0jaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAi
Tm9kZXMuaCIKLSNpbmNsdWRlICJUcmFjaW5nLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2lu
Y2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHNldGptcC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVk
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KLSNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CisjaW5jbHVkZSAiVHJhY2luZ0R0
cmFjZS5oIgogCiAjZGVmaW5lIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElPTiAwCiAKLXVzaW5n
IHN0ZDo6bWF4OwotCiBuYW1lc3BhY2UgSlNDIHsKIAotLy8gdHVuYWJsZSBwYXJhbWV0ZXJzCi0K
LWNvbnN0IHNpemVfdCBHUk9XVEhfRkFDVE9SID0gMjsKLWNvbnN0IHNpemVfdCBMT1dfV0FURVJf
RkFDVE9SID0gNDsKLWNvbnN0IHNpemVfdCBBTExPQ0FUSU9OU19QRVJfQ09MTEVDVElPTiA9IDM2
MDA7Ci0vLyBUaGlzIHZhbHVlIGhhcyB0byBiZSBhIG1hY3JvIHRvIGJlIHVzZWQgaW4gbWF4KCkg
d2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywg
c2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX0FSUkFZX1NJWkUgKHN0
YXRpY19jYXN0PHNpemVfdD4oMTQpKQotCiBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKLSAgICA6IG1fbWFya0xpc3RTZXQoMCkKKyAgICA6IG1fbWFya2VkU3BhY2UoZ2xvYmFs
RGF0YSkKKyAgICAsIG1fbWFya0xpc3RTZXQoMCkKKyAgICAsIG1fYWN0aXZpdHlDYWxsYmFjayhE
ZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX2dsb2JhbERh
dGEoZ2xvYmFsRGF0YSkKLSAgICAsIG1fbWFjaGluZVN0YWNrTWFya2VyKHRoaXMpCisgICAgLCBt
X21hY2hpbmVTdGFja01hcmtlcigmZ2xvYmFsRGF0YS0+aGVhcCkKKyAgICAsIG1fZXh0cmFDb3N0
KDApCiB7Ci0gICAgQVNTRVJUKGdsb2JhbERhdGEpOwotICAgIG1lbXNldCgmbV9oZWFwLCAwLCBz
aXplb2YoQ29sbGVjdG9ySGVhcCkpOwotICAgIGFsbG9jYXRlQmxvY2soKTsKLSAgICBtX2FjdGl2
aXR5Q2FsbGJhY2sgPSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUodGhpcyk7CiAg
ICAgKCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7CiB9CiAKQEAgLTg4LDcgKzYwLDcgQEAgdm9pZCBI
ZWFwOjpkZXN0cm95KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKCFtX2dsb2JhbERh
dGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpOwotICAgIEFTU0VSVCghaXNCdXN5KCkpOworICAgIEFT
U0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwogICAgIAogICAgIC8v
IFRoZSBnbG9iYWwgb2JqZWN0IGlzIG5vdCBHQyBwcm90ZWN0ZWQgYXQgdGhpcyBwb2ludCwgc28g
c3dlZXBpbmcgbWF5IGRlbGV0ZSBpdAogICAgIC8vIChhbmQgdGh1cyB0aGUgZ2xvYmFsIGRhdGEp
IGJlZm9yZSBvdGhlciBvYmplY3RzIHRoYXQgbWF5IHVzZSB0aGUgZ2xvYmFsIGRhdGEuCkBAIC05
Nyw5MSArNjksMTEgQEAgdm9pZCBIZWFwOjpkZXN0cm95KCkKICAgICBkZWxldGUgbV9tYXJrTGlz
dFNldDsKICAgICBtX21hcmtMaXN0U2V0ID0gMDsKIAotICAgIGZyZWVCbG9ja3MoKTsKLQotICAg
IG1fZ2xvYmFsRGF0YSA9IDA7Ci19Ci0KLU5FVkVSX0lOTElORSBDb2xsZWN0b3JCbG9jayogSGVh
cDo6YWxsb2NhdGVCbG9jaygpCi17Ci0gICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRp
b24gPSBQYWdlQWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKEJMT0NLX1NJWkUsIEJMT0NLX1NJ
WkUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKLSAgICBDb2xsZWN0b3JCbG9jayogYmxv
Y2sgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9jayo+KGFsbG9jYXRpb24uYmFzZSgpKTsKLSAg
ICBpZiAoIWJsb2NrKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBibG9j
ay4KLQotICAgIGJsb2NrLT5oZWFwID0gdGhpczsKLSAgICBjbGVhck1hcmtCaXRzKGJsb2NrKTsK
LQotICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBtX2dsb2JhbERh
dGEtPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jazsgKytpKQotICAgICAgICBuZXcg
KCZibG9jay0+Y2VsbHNbaV0pIEpTQ2VsbChkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSk7Ci0g
ICAgCi0gICAgLy8gQWRkIGJsb2NrIHRvIGJsb2NrcyB2ZWN0b3IuCi0KLSAgICBzaXplX3QgbnVt
QmxvY2tzID0gbV9oZWFwLm51bUJsb2NrczsKLSAgICBpZiAobV9oZWFwLnVzZWRCbG9ja3MgPT0g
bnVtQmxvY2tzKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4TnVtQmxvY2tzID0g
VUxPTkdfTUFYIC8gc2l6ZW9mKFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCkgLyBHUk9XVEhfRkFDVE9S
OwotICAgICAgICBpZiAobnVtQmxvY2tzID4gbWF4TnVtQmxvY2tzKQotICAgICAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgbnVtQmxvY2tzID0gbWF4KE1JTl9BUlJBWV9TSVpFLCBudW1CbG9ja3Mg
KiBHUk9XVEhfRkFDVE9SKTsKLSAgICAgICAgbV9oZWFwLm51bUJsb2NrcyA9IG51bUJsb2NrczsK
LSAgICAgICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PFBhZ2VBbGxvY2F0aW9uQWxpZ25l
ZCo+KGZhc3RSZWFsbG9jKG1faGVhcC5ibG9ja3MsIG51bUJsb2NrcyAqIHNpemVvZihQYWdlQWxs
b2NhdGlvbkFsaWduZWQpKSk7Ci0gICAgfQotICAgIG1faGVhcC5ibG9ja3NbbV9oZWFwLnVzZWRC
bG9ja3MrK10gPSBhbGxvY2F0aW9uOwotCi0gICAgcmV0dXJuIGJsb2NrOwotfQotCi1ORVZFUl9J
TkxJTkUgdm9pZCBIZWFwOjpmcmVlQmxvY2soc2l6ZV90IGJsb2NrKQotewotICAgIG1faGVhcC5k
aWRTaHJpbmsgPSB0cnVlOwotCi0gICAgT2JqZWN0SXRlcmF0b3IgaXQobV9oZWFwLCBibG9jayk7
Ci0gICAgT2JqZWN0SXRlcmF0b3IgZW5kKG1faGVhcCwgYmxvY2sgKyAxKTsKLSAgICBmb3IgKCA7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPn5KU0NlbGwoKTsKLSAgICBtX2hlYXAu
YmxvY2tzW2Jsb2NrXS5kZWFsbG9jYXRlKCk7Ci0KLSAgICAvLyBzd2FwIHdpdGggdGhlIGxhc3Qg
YmxvY2sgc28gd2UgY29tcGFjdCBhcyB3ZSBnbwotICAgIG1faGVhcC5ibG9ja3NbYmxvY2tdID0g
bV9oZWFwLmJsb2Nrc1ttX2hlYXAudXNlZEJsb2NrcyAtIDFdOwotICAgIG1faGVhcC51c2VkQmxv
Y2tzLS07Ci0KLSAgICBpZiAobV9oZWFwLm51bUJsb2NrcyA+IE1JTl9BUlJBWV9TSVpFICYmIG1f
aGVhcC51c2VkQmxvY2tzIDwgbV9oZWFwLm51bUJsb2NrcyAvIExPV19XQVRFUl9GQUNUT1IpIHsK
LSAgICAgICAgbV9oZWFwLm51bUJsb2NrcyA9IG1faGVhcC5udW1CbG9ja3MgLyBHUk9XVEhfRkFD
VE9SOyAKLSAgICAgICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZCo+KGZhc3RSZWFsbG9jKG1faGVhcC5ibG9ja3MsIG1faGVhcC5udW1CbG9ja3MgKiBz
aXplb2YoUGFnZUFsbG9jYXRpb25BbGlnbmVkKSkpOwotICAgIH0KLX0KLQotdm9pZCBIZWFwOjpm
cmVlQmxvY2tzKCkKLXsKICAgICBQcm90ZWN0Q291bnRTZXQgcHJvdGVjdGVkVmFsdWVzQ29weSA9
IG1fcHJvdGVjdGVkVmFsdWVzOwotCi0gICAgY2xlYXJNYXJrQml0cygpOwotICAgIFByb3RlY3RD
b3VudFNldDo6aXRlcmF0b3IgcHJvdGVjdGVkVmFsdWVzRW5kID0gcHJvdGVjdGVkVmFsdWVzQ29w
eS5lbmQoKTsKLSAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBwcm90ZWN0
ZWRWYWx1ZXNDb3B5LmJlZ2luKCk7IGl0ICE9IHByb3RlY3RlZFZhbHVlc0VuZDsgKytpdCkKLSAg
ICAgICAgbWFya0NlbGwoaXQtPmZpcnN0KTsKLQotICAgIG1faGVhcC5uZXh0Q2VsbCA9IDA7Ci0g
ICAgbV9oZWFwLm5leHRCbG9jayA9IDA7Ci0gICAgRGVhZE9iamVjdEl0ZXJhdG9yIGl0KG1faGVh
cCwgbV9oZWFwLm5leHRCbG9jaywgbV9oZWFwLm5leHRDZWxsKTsKLSAgICBEZWFkT2JqZWN0SXRl
cmF0b3IgZW5kKG1faGVhcCwgbV9oZWFwLnVzZWRCbG9ja3MpOwotICAgIGZvciAoIDsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+fkpTQ2VsbCgpOwotCisgICAgbV9tYXJrZWRTcGFj
ZS5kZXN0cm95KHByb3RlY3RlZFZhbHVlc0NvcHkpOwogICAgIEFTU0VSVCghcHJvdGVjdGVkT2Jq
ZWN0Q291bnQoKSk7CiAKLSAgICBwcm90ZWN0ZWRWYWx1ZXNFbmQgPSBwcm90ZWN0ZWRWYWx1ZXND
b3B5LmVuZCgpOwotICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IHByb3Rl
Y3RlZFZhbHVlc0NvcHkuYmVnaW4oKTsgaXQgIT0gcHJvdGVjdGVkVmFsdWVzRW5kOyArK2l0KQot
ICAgICAgICBpdC0+Zmlyc3QtPn5KU0NlbGwoKTsKLQotICAgIGZvciAoc2l6ZV90IGJsb2NrID0g
MDsgYmxvY2sgPCBtX2hlYXAudXNlZEJsb2NrczsgKytibG9jaykKLSAgICAgICAgbV9oZWFwLmJs
b2Nrc1tibG9ja10uZGVhbGxvY2F0ZSgpOwotCi0gICAgZmFzdEZyZWUobV9oZWFwLmJsb2Nrcyk7
Ci0KLSAgICBtZW1zZXQoJm1faGVhcCwgMCwgc2l6ZW9mKENvbGxlY3RvckhlYXApKTsKKyAgICBt
X2dsb2JhbERhdGEgPSAwOwogfQogCiB2b2lkIEhlYXA6OnJlY29yZEV4dHJhQ29zdChzaXplX3Qg
Y29zdCkKQEAgLTE5NywxNjcgKzg5LDcxIEBAIHZvaWQgSGVhcDo6cmVjb3JkRXh0cmFDb3N0KHNp
emVfdCBjb3N0KQogICAgIC8vIGlmIGEgbGFyZ2UgdmFsdWUgc3Vydml2ZXMgb25lIGdhcmJhZ2Ug
Y29sbGVjdGlvbiwgdGhlcmUgaXMgbm90IG11Y2ggcG9pbnQgdG8KICAgICAvLyBjb2xsZWN0aW5n
IG1vcmUgZnJlcXVlbnRseSBhcyBsb25nIGFzIGl0IHN0YXlzIGFsaXZlLgogCi0gICAgaWYgKG1f
aGVhcC5leHRyYUNvc3QgPiBtYXhFeHRyYUNvc3QgJiYgbV9oZWFwLmV4dHJhQ29zdCA+IG1faGVh
cC51c2VkQmxvY2tzICogQkxPQ0tfU0laRSAvIDIpIHsKKyAgICBpZiAobV9leHRyYUNvc3QgPiBt
YXhFeHRyYUNvc3QgJiYgbV9leHRyYUNvc3QgPiBtX21hcmtlZFNwYWNlLnNpemUoKSAvIDIpIHsK
KyAgICAgICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKKwogICAgICAgICAvLyBJZiB0aGUg
bGFzdCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgaGVhcCBkZWFsbG9jYXRlZCBibG9ja3MsIHdlIG5l
ZWQKICAgICAgICAgLy8gdG8gY2xlYW4gdXAgcmVtYWluaW5nIGdhcmJhZ2UgYmVmb3JlIG1hcmtp
bmcuIE90aGVyd2lzZSwgdGhlIGNvbnNlcnZhdGl2ZQogICAgICAgICAvLyBtYXJraW5nIG1lY2hh
bmlzbSBtaWdodCBmb2xsb3cgYSBwb2ludGVyIHRvIHVubWFwcGVkIG1lbW9yeS4KLSAgICAgICAg
aWYgKG1faGVhcC5kaWRTaHJpbmspCi0gICAgICAgICAgICBzd2VlcCgpOwotICAgICAgICByZXNl
dCgpOworICAgICAgICBpZiAobV9tYXJrZWRTcGFjZS5kaWRTaHJpbmsoKSkKKyAgICAgICAgICAg
IG1fbWFya2VkU3BhY2Uuc3dlZXAoKTsKKworICAgICAgICBtYXJrUm9vdHMoKTsKKworICAgICAg
ICBKQVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKKworICAgICAgICBtX21hcmtlZFNwYWNlLnJl
c2V0KCk7CisgICAgICAgIG1fZXh0cmFDb3N0ID0gMDsKKworICAgICAgICBKQVZBU0NSSVBUQ09S
RV9HQ19FTkQoKTsKKworICAgICAgICAoKm1fYWN0aXZpdHlDYWxsYmFjaykoKTsKICAgICB9Ci0g
ICAgbV9oZWFwLmV4dHJhQ29zdCArPSBjb3N0OworICAgIG1fZXh0cmFDb3N0ICs9IGNvc3Q7CiB9
CiAKIHZvaWQqIEhlYXA6OmFsbG9jYXRlKHNpemVfdCBzKQogewogICAgIEFTU0VSVChnbG9iYWxE
YXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZp
ZXJUYWJsZSgpKTsKLSAgICB0eXBlZGVmIEhlYXBDb25zdGFudHM6OkJsb2NrIEJsb2NrOwotICAg
IHR5cGVkZWYgSGVhcENvbnN0YW50czo6Q2VsbCBDZWxsOwotICAgIAogICAgIEFTU0VSVChKU0xv
Y2s6OmxvY2tDb3VudCgpID4gMCk7CiAgICAgQVNTRVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soKSk7CiAgICAgQVNTRVJUX1VOVVNFRChzLCBzIDw9IEhlYXBDb25zdGFudHM6
OmNlbGxTaXplKTsKLQotICAgIEFTU0VSVChtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBO
b09wZXJhdGlvbik7CisgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJh
dGlvbik7CiAKICNpZiBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJT04KICAgICBjb2xsZWN0QWxs
R2FyYmFnZSgpOwotICAgIEFTU0VSVChtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09w
ZXJhdGlvbik7CisgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlv
bik7CiAjZW5kaWYKIAotYWxsb2NhdGU6Ci0KLSAgICAvLyBGYXN0IGNhc2U6IGZpbmQgdGhlIG5l
eHQgZ2FyYmFnZSBjZWxsIGFuZCByZWN5Y2xlIGl0LgotCi0gICAgZG8gewotICAgICAgICBBU1NF
UlQobV9oZWFwLm5leHRCbG9jayA8IG1faGVhcC51c2VkQmxvY2tzKTsKLSAgICAgICAgQmxvY2sq
IGJsb2NrID0gbV9oZWFwLmNvbGxlY3RvckJsb2NrKG1faGVhcC5uZXh0QmxvY2spOwotICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBBU1NFUlQobV9oZWFwLm5leHRDZWxsIDwgSGVhcENvbnN0YW50
czo6Y2VsbHNQZXJCbG9jayk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5tYXJrZWQuZ2V0KG1f
aGVhcC5uZXh0Q2VsbCkpIHsgLy8gQWx3YXlzIGZhbHNlIGZvciB0aGUgbGFzdCBjZWxsIGluIHRo
ZSBibG9jawotICAgICAgICAgICAgICAgIENlbGwqIGNlbGwgPSAmYmxvY2stPmNlbGxzW21faGVh
cC5uZXh0Q2VsbF07Ci0KLSAgICAgICAgICAgICAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVz
cyA9IEFsbG9jYXRpb247Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBpbXAgPSByZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KGNlbGwpOwotICAgICAgICAgICAgICAgIGltcC0+fkpTQ2VsbCgpOwot
ICAgICAgICAgICAgICAgIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247
Ci0KLSAgICAgICAgICAgICAgICArK21faGVhcC5uZXh0Q2VsbDsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY2VsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJsb2NrLT5tYXJrZWQuYWR2
YW5jZVRvTmV4dFBvc3NpYmxlRnJlZUNlbGwobV9oZWFwLm5leHRDZWxsKTsKLSAgICAgICAgfSB3
aGlsZSAobV9oZWFwLm5leHRDZWxsICE9IEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2spOwot
ICAgICAgICBtX2hlYXAubmV4dENlbGwgPSAwOwotICAgIH0gd2hpbGUgKCsrbV9oZWFwLm5leHRC
bG9jayAhPSBtX2hlYXAudXNlZEJsb2Nrcyk7CisgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0g
QWxsb2NhdGlvbjsKKyAgICB2b2lkKiByZXN1bHQgPSBtX21hcmtlZFNwYWNlLmFsbG9jYXRlKHMp
OworICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwogCi0gICAgLy8gU2xv
dyBjYXNlOiByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGhlYXAuIE1hcmsgbGl2ZSBvYmplY3RzIGFu
ZCBzdGFydCBvdmVyLgorICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEpBVkFTQ1JJUFRDT1JF
X0dDX0JFR0lOKCk7CiAKLSAgICByZXNldCgpOwotICAgIGdvdG8gYWxsb2NhdGU7Ci19CisgICAg
ICAgIG1hcmtSb290cygpOwogCi12b2lkIEhlYXA6OnJlc2l6ZUJsb2NrcygpCi17Ci0gICAgbV9o
ZWFwLmRpZFNocmluayA9IGZhbHNlOworICAgICAgICBKQVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQo
KTsKIAotICAgIHNpemVfdCB1c2VkQ2VsbENvdW50ID0gbWFya2VkQ2VsbHMoKTsKLSAgICBzaXpl
X3QgbWluQ2VsbENvdW50ID0gdXNlZENlbGxDb3VudCArIG1heChBTExPQ0FUSU9OU19QRVJfQ09M
TEVDVElPTiwgdXNlZENlbGxDb3VudCk7Ci0gICAgc2l6ZV90IG1pbkJsb2NrQ291bnQgPSAobWlu
Q2VsbENvdW50ICsgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpIC8gSGVhcENvbnN0
YW50czo6Y2VsbHNQZXJCbG9jazsKKyAgICAgICAgbV9tYXJrZWRTcGFjZS5yZXNldCgpOworICAg
ICAgICBtX2V4dHJhQ29zdCA9IDA7CiAKLSAgICBzaXplX3QgbWF4Q2VsbENvdW50ID0gMS4yNWYg
KiBtaW5DZWxsQ291bnQ7Ci0gICAgc2l6ZV90IG1heEJsb2NrQ291bnQgPSAobWF4Q2VsbENvdW50
ICsgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpIC8gSGVhcENvbnN0YW50czo6Y2Vs
bHNQZXJCbG9jazsKKyAgICAgICAgSkFWQVNDUklQVENPUkVfR0NfRU5EKCk7CiAKLSAgICBpZiAo
bV9oZWFwLnVzZWRCbG9ja3MgPCBtaW5CbG9ja0NvdW50KQotICAgICAgICBncm93QmxvY2tzKG1p
bkJsb2NrQ291bnQpOwotICAgIGVsc2UgaWYgKG1faGVhcC51c2VkQmxvY2tzID4gbWF4QmxvY2tD
b3VudCkKLSAgICAgICAgc2hyaW5rQmxvY2tzKG1heEJsb2NrQ291bnQpOwotfQotCi12b2lkIEhl
YXA6Omdyb3dCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2NrcykKLXsKLSAgICBBU1NFUlQobV9oZWFw
LnVzZWRCbG9ja3MgPCBuZWVkZWRCbG9ja3MpOwotICAgIHdoaWxlIChtX2hlYXAudXNlZEJsb2Nr
cyA8IG5lZWRlZEJsb2NrcykKLSAgICAgICAgYWxsb2NhdGVCbG9jaygpOwotfQorICAgICAgICAo
Km1fYWN0aXZpdHlDYWxsYmFjaykoKTsKIAotdm9pZCBIZWFwOjpzaHJpbmtCbG9ja3Moc2l6ZV90
IG5lZWRlZEJsb2NrcykKLXsKLSAgICBBU1NFUlQobV9oZWFwLnVzZWRCbG9ja3MgPiBuZWVkZWRC
bG9ja3MpOwotICAgIAotICAgIC8vIENsZWFyIHRoZSBhbHdheXMtb24gbGFzdCBiaXQsIHNvIGlz
RW1wdHkoKSBpc24ndCBmb29sZWQgYnkgaXQuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2hlYXAudXNlZEJsb2NrczsgKytpKQotICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSkt
Pm1hcmtlZC5jbGVhcihIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSAhPSBtX2hlYXAudXNlZEJsb2NrcyAmJiBtX2hlYXAudXNlZEJs
b2NrcyAhPSBuZWVkZWRCbG9ja3M7ICkgewotICAgICAgICBpZiAobV9oZWFwLmNvbGxlY3RvckJs
b2NrKGkpLT5tYXJrZWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmcmVlQmxvY2soaSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgKytpOworICAgICAgICBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPSBBbGxvY2F0aW9uOworICAgICAgICByZXN1bHQgPSBtX21hcmtlZFNwYWNlLmFsbG9j
YXRlKHMpOworICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAg
ICB9Ci0KLSAgICAvLyBSZXNldCB0aGUgYWx3YXlzLW9uIGxhc3QgYml0LgotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsraSkKLSAgICAgICAgbV9oZWFwLmNv
bGxlY3RvckJsb2NrKGkpLT5tYXJrZWQuc2V0KEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sg
LSAxKTsKLX0KLQotaW5saW5lIGJvb2wgaXNQb2ludGVyQWxpZ25lZCh2b2lkKiBwKQotewotICAg
IHJldHVybiAoKChpbnRwdHJfdCkocCkgJiAoc2l6ZW9mKGNoYXIqKSAtIDEpKSA9PSAwKTsKLX0K
LQotLy8gQ2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIGZvciBpc1Bvc3NpYmxl
Q2VsbCB0byBiZSB2YWxpZC4KLUNPTVBJTEVfQVNTRVJUKHNpemVvZihDb2xsZWN0b3JDZWxsKSAl
IDIgPT0gMCwgQ29sbGVjdG9yX2NlbGxfc2l6ZV9pc19wb3dlcl9vZl90d28pOwotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNDZWxsQWxpZ25lZCh2b2lkICpwKQotewotICAgIHJldHVybiAoKChpbnRw
dHJfdCkocCkgJiBDRUxMX01BU0spID09IDApOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQ
b3NzaWJsZUNlbGwodm9pZCogcCkKLXsKLSAgICByZXR1cm4gaXNDZWxsQWxpZ25lZChwKSAmJiBw
OworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgSGVh
cDo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrLCB2b2lkKiBzdGFydCwg
dm9pZCogZW5kKQogewotI2lmIE9TKFdJTkNFKQotICAgIGlmIChzdGFydCA+IGVuZCkgewotICAg
ICAgICB2b2lkKiB0bXAgPSBzdGFydDsKLSAgICAgICAgc3RhcnQgPSBlbmQ7Ci0gICAgICAgIGVu
ZCA9IHRtcDsKLSAgICB9Ci0jZWxzZQotICAgIEFTU0VSVChzdGFydCA8PSBlbmQpOwotI2VuZGlm
Ci0KLSAgICBBU1NFUlQoKHN0YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hh
cio+KHN0YXJ0KSkgPCAweDEwMDAwMDApOwotICAgIEFTU0VSVChpc1BvaW50ZXJBbGlnbmVkKHN0
YXJ0KSk7Ci0gICAgQVNTRVJUKGlzUG9pbnRlckFsaWduZWQoZW5kKSk7Ci0KLSAgICBjaGFyKiog
cCA9IHN0YXRpY19jYXN0PGNoYXIqKj4oc3RhcnQpOwotICAgIGNoYXIqKiBlID0gc3RhdGljX2Nh
c3Q8Y2hhcioqPihlbmQpOwotCi0gICAgd2hpbGUgKHAgIT0gZSkgewotICAgICAgICBjaGFyKiB4
ID0gKnArKzsKLSAgICAgICAgaWYgKGlzUG9zc2libGVDZWxsKHgpKSB7Ci0gICAgICAgICAgICBz
aXplX3QgdXNlZEJsb2NrczsKLSAgICAgICAgICAgIHVpbnRwdHJfdCB4QXNCaXRzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpOwotICAgICAgICAgICAgeEFzQml0cyAmPSBDRUxMX0FM
SUdOX01BU0s7Ci0KLSAgICAgICAgICAgIHVpbnRwdHJfdCBvZmZzZXQgPSB4QXNCaXRzICYgQkxP
Q0tfT0ZGU0VUX01BU0s7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgbGFzdENlbGxPZmZzZXQg
PSBzaXplb2YoQ29sbGVjdG9yQ2VsbCkgKiAoQ0VMTFNfUEVSX0JMT0NLIC0gMSk7Ci0gICAgICAg
ICAgICBpZiAob2Zmc2V0ID4gbGFzdENlbGxPZmZzZXQpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIENvbGxlY3RvckJsb2NrKiBibG9ja0FkZHIgPSByZWludGVycHJl
dF9jYXN0PENvbGxlY3RvckJsb2NrKj4oeEFzQml0cyAtIG9mZnNldCk7Ci0gICAgICAgICAgICB1
c2VkQmxvY2tzID0gbV9oZWFwLnVzZWRCbG9ja3M7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBi
bG9jayA9IDA7IGJsb2NrIDwgdXNlZEJsb2NrczsgYmxvY2srKykgewotICAgICAgICAgICAgICAg
IGlmIChtX2hlYXAuY29sbGVjdG9yQmxvY2soYmxvY2spICE9IGJsb2NrQWRkcikKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChy
ZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHhBc0JpdHMpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KKyAgICBtX21hcmtlZFNwYWNlLm1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3Rh
Y2ssIHN0YXJ0LCBlbmQpOwogfQogCiB2b2lkIEhlYXA6OnVwZGF0ZVdlYWtHQ0hhbmRsZXMoKQpA
QCAtNDQ4LDY3ICsyNDQsNiBAQCB2b2lkIEhlYXA6Om1hcmtUZW1wU29ydFZlY3RvcnMoTWFya1N0
YWNrCiAgICAgfQogfQogICAgIAotdm9pZCBIZWFwOjpjbGVhck1hcmtCaXRzKCkKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1faGVhcC51c2VkQmxvY2tzOyArK2kpCi0gICAgICAgIGNs
ZWFyTWFya0JpdHMobV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpKTsKLX0KLQotdm9pZCBIZWFwOjpj
bGVhck1hcmtCaXRzKENvbGxlY3RvckJsb2NrKiBibG9jaykKLXsKLSAgICAvLyBhbGxvY2F0ZSBh
c3N1bWVzIHRoYXQgdGhlIGxhc3QgY2VsbCBpbiBldmVyeSBibG9jayBpcyBtYXJrZWQuCi0gICAg
YmxvY2stPm1hcmtlZC5jbGVhckFsbCgpOwotICAgIGJsb2NrLT5tYXJrZWQuc2V0KEhlYXBDb25z
dGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKLX0KLQotc2l6ZV90IEhlYXA6Om1hcmtlZENlbGxz
KHNpemVfdCBzdGFydEJsb2NrLCBzaXplX3Qgc3RhcnRDZWxsKSBjb25zdAotewotICAgIEFTU0VS
VChzdGFydEJsb2NrIDw9IG1faGVhcC51c2VkQmxvY2tzKTsKLSAgICBBU1NFUlQoc3RhcnRDZWxs
IDwgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayk7Ci0KLSAgICBpZiAoc3RhcnRCbG9jayA+
PSBtX2hlYXAudXNlZEJsb2NrcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzaXplX3QgcmVz
dWx0ID0gMDsKLSAgICByZXN1bHQgKz0gbV9oZWFwLmNvbGxlY3RvckJsb2NrKHN0YXJ0QmxvY2sp
LT5tYXJrZWQuY291bnQoc3RhcnRDZWxsKTsKLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRCbG9j
ayArIDE7IGkgPCBtX2hlYXAudXNlZEJsb2NrczsgKytpKQotICAgICAgICByZXN1bHQgKz0gbV9o
ZWFwLmNvbGxlY3RvckJsb2NrKGkpLT5tYXJrZWQuY291bnQoKTsKLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgSGVhcDo6c3dlZXAoKQotewotICAgIEFTU0VSVChtX2hlYXAub3BlcmF0
aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7Ci0gICAgaWYgKG1faGVhcC5vcGVyYXRpb25J
blByb2dyZXNzICE9IE5vT3BlcmF0aW9uKQotICAgICAgICBDUkFTSCgpOwotICAgIG1faGVhcC5v
cGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKLSAgICAKLSNpZiAhRU5BQkxFKEpTQ19a
T01CSUVTKQotICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBtX2ds
b2JhbERhdGEtPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOwotI2VuZGlmCi0KLSAg
ICBEZWFkT2JqZWN0SXRlcmF0b3IgaXQobV9oZWFwLCBtX2hlYXAubmV4dEJsb2NrLCBtX2hlYXAu
bmV4dENlbGwpOwotICAgIERlYWRPYmplY3RJdGVyYXRvciBlbmQobV9oZWFwLCBtX2hlYXAudXNl
ZEJsb2Nrcyk7Ci0gICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSlNDZWxs
KiBjZWxsID0gKml0OwotI2lmIEVOQUJMRShKU0NfWk9NQklFUykKLSAgICAgICAgaWYgKCFjZWxs
LT5pc1pvbWJpZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBjZWxs
LT5jbGFzc0luZm8oKTsKLSAgICAgICAgICAgIGNlbGwtPn5KU0NlbGwoKTsKLSAgICAgICAgICAg
IG5ldyAoY2VsbCkgSlNab21iaWUoaW5mbywgSlNab21iaWU6OmxlYWtlZFpvbWJpZVN0cnVjdHVy
ZSgpKTsKLSAgICAgICAgICAgIEhlYXA6Om1hcmtDZWxsKGNlbGwpOwotICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICBjZWxsLT5+SlNDZWxsKCk7Ci0gICAgICAgIC8vIENhbGxlcnMgb2Ygc3dlZXAg
YXNzdW1lIGl0J3Mgc2FmZSB0byBtYXJrIGFueSBjZWxsIGluIHRoZSBoZWFwLgotICAgICAgICBu
ZXcgKGNlbGwpIEpTQ2VsbChkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSk7Ci0jZW5kaWYKLSAg
ICB9Ci0KLSAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwotfQot
CiB2b2lkIEhlYXA6Om1hcmtSb290cygpCiB7CiAjaWZuZGVmIE5ERUJVRwpAQCAtNTE4LDE2ICsy
NTMsMTYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIH0KICNlbmRpZgogCi0gICAgQVNT
RVJUKG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKLSAgICBpZiAo
bV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pCisgICAgQVNTRVJUKG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7CisgICAgaWYgKG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbikKICAgICAgICAgQ1JBU0goKTsKIAotICAgIG1faGVh
cC5vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKKyAgICBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPSBDb2xsZWN0aW9uOwogCiAgICAgTWFya1N0YWNrJiBtYXJrU3RhY2sgPSBtX2dsb2Jh
bERhdGEtPm1hcmtTdGFjazsKIAogICAgIC8vIFJlc2V0IG1hcmsgYml0cy4KLSAgICBjbGVhck1h
cmtCaXRzKCk7CisgICAgbV9tYXJrZWRTcGFjZS5jbGVhck1hcmtCaXRzKCk7CiAKICAgICAvLyBN
YXJrIHN0YWNrIHJvb3RzLgogICAgIG1fbWFjaGluZVN0YWNrTWFya2VyLm1hcmtNYWNoaW5lU3Rh
Y2tDb25zZXJ2YXRpdmVseShtYXJrU3RhY2spOwpAQCAtNTU2LDMzICsyOTEsMjIgQEAgdm9pZCBI
ZWFwOjptYXJrUm9vdHMoKQogCiAgICAgdXBkYXRlV2Vha0dDSGFuZGxlcygpOwogCi0gICAgbV9o
ZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKKyAgICBtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKIH0KIAogc2l6ZV90IEhlYXA6Om9iamVjdENvdW50KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9oZWFwLm5leHRCbG9jayAqIEhlYXBDb25zdGFudHM6OmNl
bGxzUGVyQmxvY2sgLy8gYWxsb2NhdGVkIGZ1bGwgYmxvY2tzCi0gICAgICAgICAgICsgbV9oZWFw
Lm5leHRDZWxsIC8vIGFsbG9jYXRlZCBjZWxscyBpbiBjdXJyZW50IGJsb2NrCi0gICAgICAgICAg
ICsgbWFya2VkQ2VsbHMobV9oZWFwLm5leHRCbG9jaywgbV9oZWFwLm5leHRDZWxsKSAvLyBtYXJr
ZWQgY2VsbHMgaW4gcmVtYWluZGVyIG9mIG1faGVhcAotICAgICAgICAgICAtIG1faGVhcC51c2Vk
QmxvY2tzOyAvLyAxIGNlbGwgcGVyIGJsb2NrIGlzIGEgZHVtbXkgc2VudGluZWwKLX0KLQotdm9p
ZCBIZWFwOjphZGRUb1N0YXRpc3RpY3MoSGVhcDo6U3RhdGlzdGljcyYgc3RhdGlzdGljcykgY29u
c3QKLXsKLSAgICBzdGF0aXN0aWNzLnNpemUgKz0gbV9oZWFwLnVzZWRCbG9ja3MgKiBCTE9DS19T
SVpFOwotICAgIHN0YXRpc3RpY3MuZnJlZSArPSBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NLX1NJ
WkUgLSAob2JqZWN0Q291bnQoKSAqIEhlYXBDb25zdGFudHM6OmNlbGxTaXplKTsKKyAgICByZXR1
cm4gbV9tYXJrZWRTcGFjZS5vYmplY3RDb3VudCgpOwogfQogCi1IZWFwOjpTdGF0aXN0aWNzIEhl
YXA6OnN0YXRpc3RpY3MoKSBjb25zdAorTWFya2VkU3BhY2U6OlN0YXRpc3RpY3MgSGVhcDo6c3Rh
dGlzdGljcygpIGNvbnN0CiB7Ci0gICAgU3RhdGlzdGljcyBzdGF0aXN0aWNzID0geyAwLCAwIH07
Ci0gICAgYWRkVG9TdGF0aXN0aWNzKHN0YXRpc3RpY3MpOwotICAgIHJldHVybiBzdGF0aXN0aWNz
OworICAgIHJldHVybiBtX21hcmtlZFNwYWNlLnN0YXRpc3RpY3MoKTsKIH0KIAogc2l6ZV90IEhl
YXA6OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NL
X1NJWkU7CisgICAgcmV0dXJuIG1fbWFya2VkU3BhY2Uuc2l6ZSgpOwogfQogCiBzaXplX3QgSGVh
cDo6Z2xvYmFsT2JqZWN0Q291bnQoKQpAQCAtNjU5LDI5ICszODMsNyBAQCBIYXNoQ291bnRlZFNl
dDxjb25zdCBjaGFyKj4qIEhlYXA6Om9iamVjCiAKIGJvb2wgSGVhcDo6aXNCdXN5KCkKIHsKLSAg
ICByZXR1cm4gbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb247Ci19Ci0K
LXZvaWQgSGVhcDo6cmVzZXQoKQotewotICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmlkZW50aWZp
ZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKLSAg
ICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwotCi0gICAgbWFya1Jvb3RzKCk7Ci0KLSAgICBK
QVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKLQotICAgIG1faGVhcC5uZXh0Q2VsbCA9IDA7Ci0g
ICAgbV9oZWFwLm5leHRCbG9jayA9IDA7Ci0gICAgbV9oZWFwLmV4dHJhQ29zdCA9IDA7Ci0jaWYg
RU5BQkxFKEpTQ19aT01CSUVTKQotICAgIHN3ZWVwKCk7Ci0jZW5kaWYKLSAgICByZXNpemVCbG9j
a3MoKTsKLQotICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwotCi0gICAgKCptX2FjdGl2aXR5
Q2FsbGJhY2spKCk7CisgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJh
dGlvbjsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC02OTIsMzAgKzM5
NCwzMCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKICAgICAvLyBJZiB0aGUgbGFz
dCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgaGVhcCBkZWFsbG9jYXRlZCBibG9ja3MsIHdlIG5lZWQK
ICAgICAvLyB0byBjbGVhbiB1cCByZW1haW5pbmcgZ2FyYmFnZSBiZWZvcmUgbWFya2luZy4gT3Ro
ZXJ3aXNlLCB0aGUgY29uc2VydmF0aXZlCiAgICAgLy8gbWFya2luZyBtZWNoYW5pc20gbWlnaHQg
Zm9sbG93IGEgcG9pbnRlciB0byB1bm1hcHBlZCBtZW1vcnkuCi0gICAgaWYgKG1faGVhcC5kaWRT
aHJpbmspCi0gICAgICAgIHN3ZWVwKCk7CisgICAgaWYgKG1fbWFya2VkU3BhY2UuZGlkU2hyaW5r
KCkpCisgICAgICAgIG1fbWFya2VkU3BhY2Uuc3dlZXAoKTsKIAogICAgIG1hcmtSb290cygpOwog
CiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAKLSAgICBtX2hlYXAubmV4dENlbGwg
PSAwOwotICAgIG1faGVhcC5uZXh0QmxvY2sgPSAwOwotICAgIG1faGVhcC5leHRyYUNvc3QgPSAw
OwotICAgIHN3ZWVwKCk7Ci0gICAgcmVzaXplQmxvY2tzKCk7CisgICAgbV9tYXJrZWRTcGFjZS5y
ZXNldCgpOworICAgIG1fbWFya2VkU3BhY2Uuc3dlZXAoKTsKKyAgICBtX2V4dHJhQ29zdCA9IDA7
CiAKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKKworICAgICgqbV9hY3Rpdml0eUNhbGxi
YWNrKSgpOwogfQogCiBMaXZlT2JqZWN0SXRlcmF0b3IgSGVhcDo6cHJpbWFyeUhlYXBCZWdpbigp
CiB7Ci0gICAgcmV0dXJuIExpdmVPYmplY3RJdGVyYXRvcihtX2hlYXAsIDApOworICAgIHJldHVy
biBtX21hcmtlZFNwYWNlLnByaW1hcnlIZWFwQmVnaW4oKTsKIH0KIAogTGl2ZU9iamVjdEl0ZXJh
dG9yIEhlYXA6OnByaW1hcnlIZWFwRW5kKCkKIHsKLSAgICByZXR1cm4gTGl2ZU9iamVjdEl0ZXJh
dG9yKG1faGVhcCwgbV9oZWFwLnVzZWRCbG9ja3MpOworICAgIHJldHVybiBtX21hcmtlZFNwYWNl
LnByaW1hcnlIZWFwRW5kKCk7CiB9CiAKIHZvaWQgSGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhQ
YXNzT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gYWN0aXZpdHlDYWxsYmFjaykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFwLmgJKHJldmlzaW9uIDc1NzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2MiAr
MjIsMjggQEAKICNpZm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCi0jaW5jbHVkZSAiR0NI
YW5kbGUuaCIKLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0jaW5jbHVkZSAiTWFjaGluZVN0YWNrTWFy
a2VyLmgiCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL0JpdG1hcC5oPgotI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Q
YWdlQWxsb2NhdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIAogI2RlZmluZSBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKGNsYXNzKSBDT01QSUxFX0FT
U0VSVChzaXplb2YoY2xhc3MpIDw9IENFTExfU0laRSwgY2xhc3NfZml0c19pbl9jZWxsKQogCiBu
YW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIENvbGxlY3RvckJsb2NrOworICAgIGNsYXNzIEpT
VmFsdWU7CisgICAgY2xhc3MgVVN0cmluZzsKICAgICBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7
CiAgICAgY2xhc3MgSlNDZWxsOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBK
U1ZhbHVlOworICAgIGNsYXNzIExpdmVPYmplY3RJdGVyYXRvcjsKICAgICBjbGFzcyBNYXJrZWRB
cmd1bWVudEJ1ZmZlcjsKICAgICBjbGFzcyBNYXJrU3RhY2s7CisgICAgY2xhc3MgV2Vha0dDSGFu
ZGxlUG9vbDsKIAotICAgIGVudW0gT3BlcmF0aW9uSW5Qcm9ncmVzcyB7IE5vT3BlcmF0aW9uLCBB
bGxvY2F0aW9uLCBDb2xsZWN0aW9uIH07Ci0KLSAgICBjbGFzcyBMaXZlT2JqZWN0SXRlcmF0b3I7
Ci0KLSNpZiBPUyhXSU5DRSkgfHwgT1MoU1lNQklBTikgfHwgUExBVEZPUk0oQlJFV01QKQotICAg
IGNvbnN0IHNpemVfdCBCTE9DS19TSVpFID0gNjQgKiAxMDI0OyAvLyA2NGsKLSNlbHNlCi0gICAg
Y29uc3Qgc2l6ZV90IEJMT0NLX1NJWkUgPSAyNTYgKiAxMDI0OyAvLyAyNTZrCi0jZW5kaWYKLQot
ICAgIHN0cnVjdCBDb2xsZWN0b3JIZWFwIHsKLSAgICAgICAgc2l6ZV90IG5leHRCbG9jazsKLSAg
ICAgICAgc2l6ZV90IG5leHRDZWxsOwotICAgICAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQqIGJs
b2NrczsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBudW1CbG9ja3M7Ci0gICAgICAgIHNpemVf
dCB1c2VkQmxvY2tzOwotCi0gICAgICAgIHNpemVfdCBleHRyYUNvc3Q7Ci0gICAgICAgIGJvb2wg
ZGlkU2hyaW5rOwotCi0gICAgICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uSW5Qcm9n
cmVzczsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxKU1ZhbHVlLCBVU3RyaW5nPiBWYWx1ZVN0cmlu
Z1BhaXI7CiAKLSAgICAgICAgQ29sbGVjdG9yQmxvY2sqIGNvbGxlY3RvckJsb2NrKHNpemVfdCBp
bmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENv
bGxlY3RvckJsb2NrKj4oYmxvY2tzW2luZGV4XS5iYXNlKCkpOwotICAgICAgICB9Ci0gICAgfTsK
KyAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwg
Q29sbGVjdGlvbiB9OwogCiAgICAgY2xhc3MgSGVhcCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAg
ICAgcHVibGljOgpAQCAtOTcsMTEgKzYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgcmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBjb3N0KTsKIAogICAgICAgICBzaXplX3Qg
b2JqZWN0Q291bnQoKSBjb25zdDsKLSAgICAgICAgc3RydWN0IFN0YXRpc3RpY3MgewotICAgICAg
ICAgICAgc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICBzaXplX3QgZnJlZTsKLSAgICAgICAgfTsK
LSAgICAgICAgU3RhdGlzdGljcyBzdGF0aXN0aWNzKCkgY29uc3Q7CisgICAgICAgIE1hcmtlZFNw
YWNlOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3MoKSBjb25zdDsKICAgICAgICAgc2l6ZV90IHNpemUo
KSBjb25zdDsKIAogICAgICAgICB2b2lkIHByb3RlY3QoSlNWYWx1ZSk7CkBAIC0xMzIsMzcgKzk0
LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVm
ZmVyKj4mIG1hcmtMaXN0U2V0KCkgeyBpZiAoIW1fbWFya0xpc3RTZXQpIG1fbWFya0xpc3RTZXQg
PSBuZXcgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+OyByZXR1cm4gKm1fbWFya0xpc3RT
ZXQ7IH0KIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbERhdGE7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNOdW1iZXIoSlNDZWxsKik7
CiAgICAgICAgIAogICAgICAgICBMaXZlT2JqZWN0SXRlcmF0b3IgcHJpbWFyeUhlYXBCZWdpbigp
OwogICAgICAgICBMaXZlT2JqZWN0SXRlcmF0b3IgcHJpbWFyeUhlYXBFbmQoKTsKLQorICAgICAg
ICAKICAgICAgICAgTWFjaGluZVN0YWNrTWFya2VyJiBtYWNoaW5lU3RhY2tNYXJrZXIoKSB7IHJl
dHVybiBtX21hY2hpbmVTdGFja01hcmtlcjsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9p
ZCByZXNldCgpOwotICAgICAgICB2b2lkIHN3ZWVwKCk7Ci0gICAgICAgIHN0YXRpYyBDb2xsZWN0
b3JCbG9jayogY2VsbEJsb2NrKGNvbnN0IEpTQ2VsbCopOwotICAgICAgICBzdGF0aWMgc2l6ZV90
IGNlbGxPZmZzZXQoY29uc3QgSlNDZWxsKik7CisgICAgICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRT
cGFjZSgpIHsgcmV0dXJuIG1fbWFya2VkU3BhY2U7IH0KIAorICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgICAgIEhlYXAoSlNHbG9iYWxEYXRhKik7
CiAgICAgICAgIH5IZWFwKCk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIENvbGxlY3RvckJsb2Nr
KiBhbGxvY2F0ZUJsb2NrKCk7Ci0gICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGZyZWVCbG9jayhz
aXplX3QpOwotICAgICAgICB2b2lkIGZyZWVCbG9ja3MoKTsKLSAgICAgICAgdm9pZCByZXNpemVC
bG9ja3MoKTsKLSAgICAgICAgdm9pZCBncm93QmxvY2tzKHNpemVfdCBuZWVkZWRCbG9ja3MpOwot
ICAgICAgICB2b2lkIHNocmlua0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKTsKLSAgICAgICAg
dm9pZCBjbGVhck1hcmtCaXRzKCk7Ci0gICAgICAgIHZvaWQgY2xlYXJNYXJrQml0cyhDb2xsZWN0
b3JCbG9jayopOwotICAgICAgICBzaXplX3QgbWFya2VkQ2VsbHMoc2l6ZV90IHN0YXJ0QmxvY2sg
PSAwLCBzaXplX3Qgc3RhcnRDZWxsID0gMCkgY29uc3Q7Ci0KICAgICAgICAgdm9pZCByZWNvcmRF
eHRyYUNvc3Qoc2l6ZV90KTsKIAotICAgICAgICB2b2lkIGFkZFRvU3RhdGlzdGljcyhTdGF0aXN0
aWNzJikgY29uc3Q7Ci0KICAgICAgICAgdm9pZCBtYXJrUm9vdHMoKTsKICAgICAgICAgdm9pZCBt
YXJrUHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhY2smKTsKICAgICAgICAgdm9pZCBtYXJrVGVtcFNv
cnRWZWN0b3JzKE1hcmtTdGFjayYpOwpAQCAtMTcwLDkgKzExNiw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHVwZGF0ZVdlYWtHQ0hhbmRsZXMoKTsKICAgICAgICAgV2Vha0dDSGFu
ZGxlUG9vbCogd2Vha0dDSGFuZGxlUG9vbChzaXplX3QgaW5kZXgpOwogCi0gICAgICAgIHR5cGVk
ZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50U2V0OwotCi0gICAgICAgIENv
bGxlY3RvckhlYXAgbV9oZWFwOworICAgICAgICBNYXJrZWRTcGFjZSBtX21hcmtlZFNwYWNlOwor
ICAgICAgICBPcGVyYXRpb25JblByb2dyZXNzIG1fb3BlcmF0aW9uSW5Qcm9ncmVzczsKIAogICAg
ICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRWYWx1ZXM7CiAgICAgICAgIFdURjo6VmVj
dG9yPFBhZ2VBbGxvY2F0aW9uQWxpZ25lZD4gbV93ZWFrR0NIYW5kbGVQb29sczsKQEAgLTE4NSwx
MDUgKzEzMCwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2ds
b2JhbERhdGE7CiAgICAgICAgIAogICAgICAgICBNYWNoaW5lU3RhY2tNYXJrZXIgbV9tYWNoaW5l
U3RhY2tNYXJrZXI7CisgICAgICAgIAorICAgICAgICBzaXplX3QgbV9leHRyYUNvc3Q7CiAgICAg
fTsKIAotICAgIC8vIHR1bmFibGUgcGFyYW1ldGVycwotICAgIC8vIGRlcml2ZWQgY29uc3RhbnRz
Ci0gICAgY29uc3Qgc2l6ZV90IEJMT0NLX09GRlNFVF9NQVNLID0gQkxPQ0tfU0laRSAtIDE7Ci0g
ICAgY29uc3Qgc2l6ZV90IEJMT0NLX01BU0sgPSB+QkxPQ0tfT0ZGU0VUX01BU0s7Ci0gICAgY29u
c3Qgc2l6ZV90IE1JTklNVU1fQ0VMTF9TSVpFID0gNjQ7Ci0gICAgY29uc3Qgc2l6ZV90IENFTExf
QVJSQVlfTEVOR1RIID0gKE1JTklNVU1fQ0VMTF9TSVpFIC8gc2l6ZW9mKGRvdWJsZSkpICsgKE1J
TklNVU1fQ0VMTF9TSVpFICUgc2l6ZW9mKGRvdWJsZSkgIT0gMCA/IHNpemVvZihkb3VibGUpIDog
MCk7Ci0gICAgY29uc3Qgc2l6ZV90IENFTExfU0laRSA9IENFTExfQVJSQVlfTEVOR1RIICogc2l6
ZW9mKGRvdWJsZSk7Ci0gICAgY29uc3Qgc2l6ZV90IFNNQUxMX0NFTExfU0laRSA9IENFTExfU0la
RSAvIDI7Ci0gICAgY29uc3Qgc2l6ZV90IENFTExfTUFTSyA9IENFTExfU0laRSAtIDE7Ci0gICAg
Y29uc3Qgc2l6ZV90IENFTExfQUxJR05fTUFTSyA9IH5DRUxMX01BU0s7Ci0gICAgY29uc3Qgc2l6
ZV90IENFTExTX1BFUl9CTE9DSyA9IChCTE9DS19TSVpFIC0gc2l6ZW9mKEhlYXAqKSkgKiA4ICog
Q0VMTF9TSVpFIC8gKDggKiBDRUxMX1NJWkUgKyAxKSAvIENFTExfU0laRTsgLy8gb25lIGJpdG1h
cCBieXRlIGNhbiByZXByZXNlbnQgOCBjZWxscy4KLSAgICAKLSAgICBjb25zdCBzaXplX3QgQklU
TUFQX1NJWkUgPSAoQ0VMTFNfUEVSX0JMT0NLICsgNykgLyA4OwotICAgIGNvbnN0IHNpemVfdCBC
SVRNQVBfV09SRFMgPSAoQklUTUFQX1NJWkUgKyAzKSAvIHNpemVvZih1aW50MzJfdCk7Ci0KLSAg
ICBzdHJ1Y3QgQ29sbGVjdG9yQml0bWFwIHsKLSAgICAgICAgRml4ZWRBcnJheTx1aW50MzJfdCwg
QklUTUFQX1dPUkRTPiBiaXRzOwotICAgICAgICBib29sIGdldChzaXplX3QgbikgY29uc3QgeyBy
ZXR1cm4gISEoYml0c1tuID4+IDVdICYgKDEgPDwgKG4gJiAweDFGKSkpOyB9IAotICAgICAgICB2
b2lkIHNldChzaXplX3QgbikgeyBiaXRzW24gPj4gNV0gfD0gKDEgPDwgKG4gJiAweDFGKSk7IH0g
Ci0gICAgICAgIGJvb2wgZ2V0c2V0KHNpemVfdCBuKQotICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpID0gKDEgPDwgKG4gJiAweDFGKSk7Ci0gICAgICAgICAgICB1aW50MzJfdCYgYiA9
IGJpdHNbbiA+PiA1XTsKLSAgICAgICAgICAgIGJvb2wgciA9ICEhKGIgJiBpKTsKLSAgICAgICAg
ICAgIGIgfD0gaTsKLSAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICB9IAotICAgICAgICB2
b2lkIGNsZWFyKHNpemVfdCBuKSB7IGJpdHNbbiA+PiA1XSAmPSB+KDEgPDwgKG4gJiAweDFGKSk7
IH0gCi0gICAgICAgIHZvaWQgY2xlYXJBbGwoKSB7IG1lbXNldChiaXRzLmRhdGEoKSwgMCwgc2l6
ZW9mKGJpdHMpKTsgfQotICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWR2YW5jZVRvTmV4dFBv
c3NpYmxlRnJlZUNlbGwoc2l6ZV90JiBzdGFydENlbGwpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICghfmJpdHNbc3RhcnRDZWxsID4+IDVdKQotICAgICAgICAgICAgICAgIHN0YXJ0Q2VsbCA9
IChzdGFydENlbGwgJiAofjB4MUYpKSArIDMyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICsrc3RhcnRDZWxsOwotICAgICAgICB9Ci0gICAgICAgIHNpemVfdCBjb3VudChzaXpl
X3Qgc3RhcnRDZWxsID0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZV90IHJlc3VsdCA9
IDA7Ci0gICAgICAgICAgICBmb3IgKCA7IChzdGFydENlbGwgJiAweDFGKSAhPSAwOyArK3N0YXJ0
Q2VsbCkgewotICAgICAgICAgICAgICAgIGlmIChnZXQoc3RhcnRDZWxsKSkKLSAgICAgICAgICAg
ICAgICAgICAgKytyZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gc3RhcnRDZWxsID4+IDU7IGkgPCBCSVRNQVBfV09SRFM7ICsraSkKLSAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gV1RGOjpiaXRDb3VudChiaXRzW2ldKTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgc2l6ZV90IGlzRW1wdHkoKSAvLyBNdWNoIG1v
cmUgZWZmaWNpZW50IHRoYW4gdGVzdGluZyBjb3VudCgpID09IDAuCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQklUTUFQX1dPUkRTOyArK2kpCi0gICAgICAg
ICAgICAgICAgaWYgKGJpdHNbaV0gIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9OwotICAKLSAg
ICBzdHJ1Y3QgQ29sbGVjdG9yQ2VsbCB7Ci0gICAgICAgIEZpeGVkQXJyYXk8ZG91YmxlLCBDRUxM
X0FSUkFZX0xFTkdUSD4gbWVtb3J5OwotICAgIH07Ci0KLSAgICBjbGFzcyBDb2xsZWN0b3JCbG9j
ayB7Ci0gICAgcHVibGljOgotICAgICAgICBGaXhlZEFycmF5PENvbGxlY3RvckNlbGwsIENFTExT
X1BFUl9CTE9DSz4gY2VsbHM7Ci0gICAgICAgIENvbGxlY3RvckJpdG1hcCBtYXJrZWQ7Ci0gICAg
ICAgIEhlYXAqIGhlYXA7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBIZWFwQ29uc3RhbnRzIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjZWxsU2l6ZSA9IENFTExfU0laRTsKLSAgICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBjZWxsc1BlckJsb2NrID0gQ0VMTFNfUEVSX0JMT0NLOwotICAg
ICAgICB0eXBlZGVmIENvbGxlY3RvckNlbGwgQ2VsbDsKLSAgICAgICAgdHlwZWRlZiBDb2xsZWN0
b3JCbG9jayBCbG9jazsKLSAgICB9OwotCi0gICAgaW5saW5lIENvbGxlY3RvckJsb2NrKiBIZWFw
OjpjZWxsQmxvY2soY29uc3QgSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oY2VsbCkgJiBCTE9DS19NQVNLKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgc2l6ZV90IEhlYXA6
OmNlbGxPZmZzZXQoY29uc3QgSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgJiBCTE9DS19PRkZTRVRfTUFTSykgLyBD
RUxMX1NJWkU7Ci0gICAgfQotCiAgICAgaW5saW5lIGJvb2wgSGVhcDo6aXNDZWxsTWFya2VkKGNv
bnN0IEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjZWxsQmxvY2soY2VsbCkt
Pm1hcmtlZC5nZXQoY2VsbE9mZnNldChjZWxsKSk7CisgICAgICAgIHJldHVybiBNYXJrZWRTcGFj
ZTo6aXNDZWxsTWFya2VkKGNlbGwpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIEhlYXA6OmNo
ZWNrTWFya0NlbGwoY29uc3QgSlNDZWxsKiBjZWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNl
bGxCbG9jayhjZWxsKS0+bWFya2VkLmdldHNldChjZWxsT2Zmc2V0KGNlbGwpKTsKKyAgICAgICAg
cmV0dXJuIE1hcmtlZFNwYWNlOjpjaGVja01hcmtDZWxsKGNlbGwpOwogICAgIH0KIAogICAgIGlu
bGluZSB2b2lkIEhlYXA6Om1hcmtDZWxsKEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIGNl
bGxCbG9jayhjZWxsKS0+bWFya2VkLnNldChjZWxsT2Zmc2V0KGNlbGwpKTsKKyAgICAgICAgTWFy
a2VkU3BhY2U6Om1hcmtDZWxsKGNlbGwpOwogICAgIH0KIAogICAgIGlubGluZSB2b2lkIEhlYXA6
OnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCkKQEAgLTI5Niw2ICsxNTksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWFrR0NI
YW5kbGVQb29sKj4obV93ZWFrR0NIYW5kbGVQb29sc1tpbmRleF0uYmFzZSgpKTsKICAgICB9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLyogSGVhcF9oICovCisjZW5kaWYgLy8gSGVh
cF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24g
NzU3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpTQVBJVmFsdWVXcmFwcGVyOwogICAgICAgICBmcmllbmQgY2xhc3MgSlNab21iaWU7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgICAgIGZyaWVuZCBjbGFz
cyBNYXJrZWRTcGFjZTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGV4cGxpY2l0IEpTQ2VsbChT
dHJ1Y3R1cmUqKTsKQEAgLTM2Miw3ICszNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlu
bGluZSBIZWFwKiBIZWFwOjpoZWFwKEpTQ2VsbCogYykKICAgICB7Ci0gICAgICAgIHJldHVybiBj
ZWxsQmxvY2soYyktPmhlYXA7CisgICAgICAgIHJldHVybiBNYXJrZWRTcGFjZTo6Y2VsbEJsb2Nr
KGMpLT5oZWFwOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSlNDX1pPTUJJRVMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiA3NTc2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNzYzLDggKzc2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gYXNWYWx1
ZSgpID09IGpzTnVsbCgpOwogICAgIH0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IAotICAgIHR5cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWUsIFVTdHJpbmc+IFZhbHVlU3RyaW5nUGFp
cjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU1ZhbHVlX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9u
IDc1NDUzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFwLmNwcDo3NTQ1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZFNwYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDczMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisKKyNpbmNsdWRlICJBcmdMaXN0LmgiCisjaW5j
bHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29s
bGVjdG9ySGVhcEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCisj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0xvY2suaCIKKyNpbmNsdWRlICJKU09OT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5j
bHVkZSAiSlNab21iaWUuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNpbmNsdWRlICJOb2Rl
cy5oIgorI2luY2x1ZGUgIlRyYWNpbmcuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVk
ZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgorI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KKworI2RlZmluZSBDT0xMRUNUX09OX0VW
RVJZX0FMTE9DQVRJT04gMAorCit1c2luZyBzdGQ6Om1heDsKKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vIHR1bmFibGUgcGFyYW1ldGVycworCitjb25zdCBzaXplX3QgR1JPV1RIX0ZBQ1RPUiA9IDI7
Citjb25zdCBzaXplX3QgTE9XX1dBVEVSX0ZBQ1RPUiA9IDQ7Citjb25zdCBzaXplX3QgQUxMT0NB
VElPTlNfUEVSX0NPTExFQ1RJT04gPSAzNjAwOworLy8gVGhpcyB2YWx1ZSBoYXMgdG8gYmUgYSBt
YWNybyB0byBiZSB1c2VkIGluIG1heCgpIHdpdGhvdXQgaW50cm9kdWNpbmcKKy8vIGEgUElDIGJy
YW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCisj
ZGVmaW5lIE1JTl9BUlJBWV9TSVpFIChzdGF0aWNfY2FzdDxzaXplX3Q+KDE0KSkKKworSGVhcDo6
SGVhcChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgOiBtX21hcmtMaXN0U2V0KDApCisg
ICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fbWFjaGluZVN0YWNrTWFya2Vy
KHRoaXMpCit7CisgICAgQVNTRVJUKGdsb2JhbERhdGEpOworICAgIG1lbXNldCgmbV9oZWFwLCAw
LCBzaXplb2YoQ29sbGVjdG9ySGVhcCkpOworICAgIGFsbG9jYXRlQmxvY2soKTsKKyAgICBtX2Fj
dGl2aXR5Q2FsbGJhY2sgPSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUodGhpcyk7
CisgICAgKCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7Cit9CisKK0hlYXA6On5IZWFwKCkKK3sKKyAg
ICAvLyBUaGUgZGVzdHJveSBmdW5jdGlvbiBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIGNhbGxlZCwg
c28gYXNzZXJ0IHRoaXMuCisgICAgQVNTRVJUKCFtX2dsb2JhbERhdGEpOworfQorCit2b2lkIEhl
YXA6OmRlc3Ryb3koKQoreworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisKKyAgICBpZiAoIW1fZ2xvYmFsRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KCFtX2dsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghaXNCdXN5
KCkpOworICAgIAorICAgIC8vIFRoZSBnbG9iYWwgb2JqZWN0IGlzIG5vdCBHQyBwcm90ZWN0ZWQg
YXQgdGhpcyBwb2ludCwgc28gc3dlZXBpbmcgbWF5IGRlbGV0ZSBpdAorICAgIC8vIChhbmQgdGh1
cyB0aGUgZ2xvYmFsIGRhdGEpIGJlZm9yZSBvdGhlciBvYmplY3RzIHRoYXQgbWF5IHVzZSB0aGUg
Z2xvYmFsIGRhdGEuCisgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gcHJvdGVjdChtX2dsb2JhbERh
dGEpOworCisgICAgZGVsZXRlIG1fbWFya0xpc3RTZXQ7CisgICAgbV9tYXJrTGlzdFNldCA9IDA7
CisKKyAgICBmcmVlQmxvY2tzKCk7CisKKyAgICBtX2dsb2JhbERhdGEgPSAwOworfQorCitORVZF
Ul9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIEhlYXA6OmFsbG9jYXRlQmxvY2soKQoreworICAgIFBh
Z2VBbGxvY2F0aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjph
bGxvY2F0ZShCTE9DS19TSVpFLCBCTE9DS19TSVpFLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdl
cyk7CisgICAgQ29sbGVjdG9yQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxv
Y2sqPihhbGxvY2F0aW9uLmJhc2UoKSk7CisgICAgaWYgKCFibG9jaykKKyAgICAgICAgQ1JBU0go
KTsKKworICAgIC8vIEluaXRpYWxpemUgYmxvY2suCisKKyAgICBibG9jay0+aGVhcCA9IHRoaXM7
CisgICAgY2xlYXJNYXJrQml0cyhibG9jayk7CisKKyAgICBTdHJ1Y3R1cmUqIGR1bW15TWFya2Fi
bGVDZWxsU3RydWN0dXJlID0gbV9nbG9iYWxEYXRhLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVy
ZS5nZXQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhlYXBDb25zdGFudHM6OmNlbGxz
UGVyQmxvY2s7ICsraSkKKyAgICAgICAgbmV3ICgmYmxvY2stPmNlbGxzW2ldKSBKU0NlbGwoZHVt
bXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIEFkZCBibG9jayB0byBibG9j
a3MgdmVjdG9yLgorCisgICAgc2l6ZV90IG51bUJsb2NrcyA9IG1faGVhcC5udW1CbG9ja3M7Cisg
ICAgaWYgKG1faGVhcC51c2VkQmxvY2tzID09IG51bUJsb2NrcykgeworICAgICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IG1heE51bUJsb2NrcyA9IFVMT05HX01BWCAvIHNpemVvZihQYWdlQWxsb2Nh
dGlvbkFsaWduZWQpIC8gR1JPV1RIX0ZBQ1RPUjsKKyAgICAgICAgaWYgKG51bUJsb2NrcyA+IG1h
eE51bUJsb2NrcykKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIG51bUJsb2NrcyA9IG1h
eChNSU5fQVJSQVlfU0laRSwgbnVtQmxvY2tzICogR1JPV1RIX0ZBQ1RPUik7CisgICAgICAgIG1f
aGVhcC5udW1CbG9ja3MgPSBudW1CbG9ja3M7CisgICAgICAgIG1faGVhcC5ibG9ja3MgPSBzdGF0
aWNfY2FzdDxQYWdlQWxsb2NhdGlvbkFsaWduZWQqPihmYXN0UmVhbGxvYyhtX2hlYXAuYmxvY2tz
LCBudW1CbG9ja3MgKiBzaXplb2YoUGFnZUFsbG9jYXRpb25BbGlnbmVkKSkpOworICAgIH0KKyAg
ICBtX2hlYXAuYmxvY2tzW21faGVhcC51c2VkQmxvY2tzKytdID0gYWxsb2NhdGlvbjsKKworICAg
IHJldHVybiBibG9jazsKK30KKworTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6ZnJlZUJsb2NrKHNp
emVfdCBibG9jaykKK3sKKyAgICBtX2hlYXAuZGlkU2hyaW5rID0gdHJ1ZTsKKworICAgIE9iamVj
dEl0ZXJhdG9yIGl0KG1faGVhcCwgYmxvY2spOworICAgIE9iamVjdEl0ZXJhdG9yIGVuZChtX2hl
YXAsIGJsb2NrICsgMSk7CisgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgq
aXQpLT5+SlNDZWxsKCk7CisgICAgbV9oZWFwLmJsb2Nrc1tibG9ja10uZGVhbGxvY2F0ZSgpOwor
CisgICAgLy8gc3dhcCB3aXRoIHRoZSBsYXN0IGJsb2NrIHNvIHdlIGNvbXBhY3QgYXMgd2UgZ28K
KyAgICBtX2hlYXAuYmxvY2tzW2Jsb2NrXSA9IG1faGVhcC5ibG9ja3NbbV9oZWFwLnVzZWRCbG9j
a3MgLSAxXTsKKyAgICBtX2hlYXAudXNlZEJsb2Nrcy0tOworCisgICAgaWYgKG1faGVhcC5udW1C
bG9ja3MgPiBNSU5fQVJSQVlfU0laRSAmJiBtX2hlYXAudXNlZEJsb2NrcyA8IG1faGVhcC5udW1C
bG9ja3MgLyBMT1dfV0FURVJfRkFDVE9SKSB7CisgICAgICAgIG1faGVhcC5udW1CbG9ja3MgPSBt
X2hlYXAubnVtQmxvY2tzIC8gR1JPV1RIX0ZBQ1RPUjsgCisgICAgICAgIG1faGVhcC5ibG9ja3Mg
PSBzdGF0aWNfY2FzdDxQYWdlQWxsb2NhdGlvbkFsaWduZWQqPihmYXN0UmVhbGxvYyhtX2hlYXAu
YmxvY2tzLCBtX2hlYXAubnVtQmxvY2tzICogc2l6ZW9mKFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCkp
KTsKKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6ZnJlZUJsb2NrcygpCit7CisgICAgUHJvdGVjdENv
dW50U2V0IHByb3RlY3RlZFZhbHVlc0NvcHkgPSBtX3Byb3RlY3RlZFZhbHVlczsKKworICAgIGNs
ZWFyTWFya0JpdHMoKTsKKyAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIHByb3RlY3RlZFZh
bHVlc0VuZCA9IHByb3RlY3RlZFZhbHVlc0NvcHkuZW5kKCk7CisgICAgZm9yIChQcm90ZWN0Q291
bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gcHJvdGVjdGVkVmFsdWVzQ29weS5iZWdpbigpOyBpdCAhPSBw
cm90ZWN0ZWRWYWx1ZXNFbmQ7ICsraXQpCisgICAgICAgIG1hcmtDZWxsKGl0LT5maXJzdCk7CisK
KyAgICBtX2hlYXAubmV4dENlbGwgPSAwOworICAgIG1faGVhcC5uZXh0QmxvY2sgPSAwOworICAg
IERlYWRPYmplY3RJdGVyYXRvciBpdChtX2hlYXAsIG1faGVhcC5uZXh0QmxvY2ssIG1faGVhcC5u
ZXh0Q2VsbCk7CisgICAgRGVhZE9iamVjdEl0ZXJhdG9yIGVuZChtX2hlYXAsIG1faGVhcC51c2Vk
QmxvY2tzKTsKKyAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPn5K
U0NlbGwoKTsKKworICAgIEFTU0VSVCghcHJvdGVjdGVkT2JqZWN0Q291bnQoKSk7CisKKyAgICBw
cm90ZWN0ZWRWYWx1ZXNFbmQgPSBwcm90ZWN0ZWRWYWx1ZXNDb3B5LmVuZCgpOworICAgIGZvciAo
UHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IHByb3RlY3RlZFZhbHVlc0NvcHkuYmVnaW4o
KTsgaXQgIT0gcHJvdGVjdGVkVmFsdWVzRW5kOyArK2l0KQorICAgICAgICBpdC0+Zmlyc3QtPn5K
U0NlbGwoKTsKKworICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCBtX2hlYXAudXNl
ZEJsb2NrczsgKytibG9jaykKKyAgICAgICAgbV9oZWFwLmJsb2Nrc1tibG9ja10uZGVhbGxvY2F0
ZSgpOworCisgICAgZmFzdEZyZWUobV9oZWFwLmJsb2Nrcyk7CisKKyAgICBtZW1zZXQoJm1faGVh
cCwgMCwgc2l6ZW9mKENvbGxlY3RvckhlYXApKTsKK30KKwordm9pZCBIZWFwOjpyZWNvcmRFeHRy
YUNvc3Qoc2l6ZV90IGNvc3QpCit7CisgICAgLy8gT3VyIGZyZXF1ZW5jeSBvZiBnYXJiYWdlIGNv
bGxlY3Rpb24gdHJpZXMgdG8gYmFsYW5jZSBtZW1vcnkgdXNlIGFnYWluc3Qgc3BlZWQKKyAgICAv
LyBieSBjb2xsZWN0aW5nIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgbmV3bHkgY3JlYXRlZCB2YWx1
ZXMuIEhvd2V2ZXIsIGZvciB2YWx1ZXMKKyAgICAvLyB0aGF0IGhvbGQgb24gdG8gYSBncmVhdCBk
ZWFsIG9mIG1lbW9yeSB0aGF0J3Mgbm90IGluIHRoZSBmb3JtIG9mIG90aGVyIEpTIHZhbHVlcywK
KyAgICAvLyB0aGF0IGlzIG5vdCBnb29kIGVub3VnaCAtIGluIHNvbWUgY2FzZXMgYSBsb3Qgb2Yg
dGhvc2Ugb2JqZWN0cyBjYW4gcGlsZSB1cCBhbmQKKyAgICAvLyB1c2UgY3JhenkgYW1vdW50cyBv
ZiBtZW1vcnkgd2l0aG91dCBhIEdDIGhhcHBlbmluZy4gU28gd2UgdHJhY2sgdGhlc2UgZXh0cmEK
KyAgICAvLyBtZW1vcnkgY29zdHMuIE9ubHkgdW51c3VhbGx5IGxhcmdlIG9iamVjdHMgYXJlIG5v
dGVkLCBhbmQgd2Ugb25seSBrZWVwIHRyYWNrCisgICAgLy8gb2YgdGhpcyBleHRyYSBjb3N0IHVu
dGlsIHRoZSBuZXh0IEdDLiBJbiBnYXJiYWdlIGNvbGxlY3RlZCBsYW5ndWFnZXMsIG1vc3QgdmFs
dWVzCisgICAgLy8gYXJlIGVpdGhlciB2ZXJ5IHNob3J0IGxpdmVkIHRlbXBvcmFyaWVzLCBvciBo
YXZlIGV4dHJlbWVseSBsb25nIGxpZmV0aW1lcy4gU28KKyAgICAvLyBpZiBhIGxhcmdlIHZhbHVl
IHN1cnZpdmVzIG9uZSBnYXJiYWdlIGNvbGxlY3Rpb24sIHRoZXJlIGlzIG5vdCBtdWNoIHBvaW50
IHRvCisgICAgLy8gY29sbGVjdGluZyBtb3JlIGZyZXF1ZW50bHkgYXMgbG9uZyBhcyBpdCBzdGF5
cyBhbGl2ZS4KKworICAgIGlmIChtX2hlYXAuZXh0cmFDb3N0ID4gbWF4RXh0cmFDb3N0ICYmIG1f
aGVhcC5leHRyYUNvc3QgPiBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NLX1NJWkUgLyAyKSB7Cisg
ICAgICAgIC8vIElmIHRoZSBsYXN0IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBoZWFwIGRlYWxsb2Nh
dGVkIGJsb2Nrcywgd2UgbmVlZAorICAgICAgICAvLyB0byBjbGVhbiB1cCByZW1haW5pbmcgZ2Fy
YmFnZSBiZWZvcmUgbWFya2luZy4gT3RoZXJ3aXNlLCB0aGUgY29uc2VydmF0aXZlCisgICAgICAg
IC8vIG1hcmtpbmcgbWVjaGFuaXNtIG1pZ2h0IGZvbGxvdyBhIHBvaW50ZXIgdG8gdW5tYXBwZWQg
bWVtb3J5LgorICAgICAgICBpZiAobV9oZWFwLmRpZFNocmluaykKKyAgICAgICAgICAgIHN3ZWVw
KCk7CisgICAgICAgIHJlc2V0KCk7CisgICAgfQorICAgIG1faGVhcC5leHRyYUNvc3QgKz0gY29z
dDsKK30KKwordm9pZCogSGVhcDo6YWxsb2NhdGUoc2l6ZV90IHMpCit7CisgICAgQVNTRVJUKGds
b2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRl
bnRpZmllclRhYmxlKCkpOworICAgIHR5cGVkZWYgSGVhcENvbnN0YW50czo6QmxvY2sgQmxvY2s7
CisgICAgdHlwZWRlZiBIZWFwQ29uc3RhbnRzOjpDZWxsIENlbGw7CisgICAgCisgICAgQVNTRVJU
KEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKKyAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHMsIHMgPD0gSGVhcENvbnN0
YW50czo6Y2VsbFNpemUpOworCisgICAgQVNTRVJUKG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNz
ID09IE5vT3BlcmF0aW9uKTsKKworI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElPTgorICAg
IGNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgQVNTRVJUKG1faGVhcC5vcGVyYXRpb25JblByb2dy
ZXNzID09IE5vT3BlcmF0aW9uKTsKKyNlbmRpZgorCithbGxvY2F0ZToKKworICAgIC8vIEZhc3Qg
Y2FzZTogZmluZCB0aGUgbmV4dCBnYXJiYWdlIGNlbGwgYW5kIHJlY3ljbGUgaXQuCisKKyAgICBk
byB7CisgICAgICAgIEFTU0VSVChtX2hlYXAubmV4dEJsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3Mp
OworICAgICAgICBCbG9jayogYmxvY2sgPSBtX2hlYXAuY29sbGVjdG9yQmxvY2sobV9oZWFwLm5l
eHRCbG9jayk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2hlYXAubmV4dENl
bGwgPCBIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrKTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2stPm1hcmtlZC5nZXQobV9oZWFwLm5leHRDZWxsKSkgeyAvLyBBbHdheXMgZmFsc2UgZm9yIHRo
ZSBsYXN0IGNlbGwgaW4gdGhlIGJsb2NrCisgICAgICAgICAgICAgICAgQ2VsbCogY2VsbCA9ICZi
bG9jay0+Y2VsbHNbbV9oZWFwLm5leHRDZWxsXTsKKworICAgICAgICAgICAgICAgIG1faGVhcC5v
cGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBKU0NlbGwq
IGltcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oY2VsbCk7CisgICAgICAgICAgICAgICAg
aW1wLT5+SlNDZWxsKCk7CisgICAgICAgICAgICAgICAgbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jl
c3MgPSBOb09wZXJhdGlvbjsKKworICAgICAgICAgICAgICAgICsrbV9oZWFwLm5leHRDZWxsOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjZWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YmxvY2stPm1hcmtlZC5hZHZhbmNlVG9OZXh0UG9zc2libGVGcmVlQ2VsbChtX2hlYXAubmV4dENl
bGwpOworICAgICAgICB9IHdoaWxlIChtX2hlYXAubmV4dENlbGwgIT0gSGVhcENvbnN0YW50czo6
Y2VsbHNQZXJCbG9jayk7CisgICAgICAgIG1faGVhcC5uZXh0Q2VsbCA9IDA7CisgICAgfSB3aGls
ZSAoKyttX2hlYXAubmV4dEJsb2NrICE9IG1faGVhcC51c2VkQmxvY2tzKTsKKworICAgIC8vIFNs
b3cgY2FzZTogcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBoZWFwLiBNYXJrIGxpdmUgb2JqZWN0cyBh
bmQgc3RhcnQgb3Zlci4KKworICAgIHJlc2V0KCk7CisgICAgZ290byBhbGxvY2F0ZTsKK30KKwor
dm9pZCBIZWFwOjpyZXNpemVCbG9ja3MoKQoreworICAgIG1faGVhcC5kaWRTaHJpbmsgPSBmYWxz
ZTsKKworICAgIHNpemVfdCB1c2VkQ2VsbENvdW50ID0gbWFya2VkQ2VsbHMoKTsKKyAgICBzaXpl
X3QgbWluQ2VsbENvdW50ID0gdXNlZENlbGxDb3VudCArIG1heChBTExPQ0FUSU9OU19QRVJfQ09M
TEVDVElPTiwgdXNlZENlbGxDb3VudCk7CisgICAgc2l6ZV90IG1pbkJsb2NrQ291bnQgPSAobWlu
Q2VsbENvdW50ICsgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpIC8gSGVhcENvbnN0
YW50czo6Y2VsbHNQZXJCbG9jazsKKworICAgIHNpemVfdCBtYXhDZWxsQ291bnQgPSAxLjI1ZiAq
IG1pbkNlbGxDb3VudDsKKyAgICBzaXplX3QgbWF4QmxvY2tDb3VudCA9IChtYXhDZWxsQ291bnQg
KyBIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSkgLyBIZWFwQ29uc3RhbnRzOjpjZWxs
c1BlckJsb2NrOworCisgICAgaWYgKG1faGVhcC51c2VkQmxvY2tzIDwgbWluQmxvY2tDb3VudCkK
KyAgICAgICAgZ3Jvd0Jsb2NrcyhtaW5CbG9ja0NvdW50KTsKKyAgICBlbHNlIGlmIChtX2hlYXAu
dXNlZEJsb2NrcyA+IG1heEJsb2NrQ291bnQpCisgICAgICAgIHNocmlua0Jsb2NrcyhtYXhCbG9j
a0NvdW50KTsKK30KKwordm9pZCBIZWFwOjpncm93QmxvY2tzKHNpemVfdCBuZWVkZWRCbG9ja3Mp
Cit7CisgICAgQVNTRVJUKG1faGVhcC51c2VkQmxvY2tzIDwgbmVlZGVkQmxvY2tzKTsKKyAgICB3
aGlsZSAobV9oZWFwLnVzZWRCbG9ja3MgPCBuZWVkZWRCbG9ja3MpCisgICAgICAgIGFsbG9jYXRl
QmxvY2soKTsKK30KKwordm9pZCBIZWFwOjpzaHJpbmtCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2Nr
cykKK3sKKyAgICBBU1NFUlQobV9oZWFwLnVzZWRCbG9ja3MgPiBuZWVkZWRCbG9ja3MpOworICAg
IAorICAgIC8vIENsZWFyIHRoZSBhbHdheXMtb24gbGFzdCBiaXQsIHNvIGlzRW1wdHkoKSBpc24n
dCBmb29sZWQgYnkgaXQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hlYXAudXNlZEJs
b2NrczsgKytpKQorICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5jbGVh
cihIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSAhPSBtX2hlYXAudXNlZEJsb2NrcyAmJiBtX2hlYXAudXNlZEJsb2NrcyAhPSBuZWVk
ZWRCbG9ja3M7ICkgeworICAgICAgICBpZiAobV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpLT5tYXJr
ZWQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmcmVlQmxvY2soaSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgKytpOworICAgIH0KKworICAgIC8vIFJlc2V0IHRoZSBhbHdheXMtb24g
bGFzdCBiaXQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hlYXAudXNlZEJsb2Nrczsg
KytpKQorICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5zZXQoSGVhcENv
bnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOworfQorCitpbmxpbmUgYm9vbCBpc1BvaW50ZXJB
bGlnbmVkKHZvaWQqIHApCit7CisgICAgcmV0dXJuICgoKGludHB0cl90KShwKSAmIChzaXplb2Yo
Y2hhciopIC0gMSkpID09IDApOworfQorCisvLyBDZWxsIHNpemUgbmVlZHMgdG8gYmUgYSBwb3dl
ciBvZiB0d28gZm9yIGlzUG9zc2libGVDZWxsIHRvIGJlIHZhbGlkLgorQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKENvbGxlY3RvckNlbGwpICUgMiA9PSAwLCBDb2xsZWN0b3JfY2VsbF9zaXplX2lzX3Bv
d2VyX29mX3R3byk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0NlbGxBbGlnbmVkKHZvaWQgKnAp
Cit7CisgICAgcmV0dXJuICgoKGludHB0cl90KShwKSAmIENFTExfTUFTSykgPT0gMCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Bvc3NpYmxlQ2VsbCh2b2lkKiBwKQoreworICAgIHJldHVy
biBpc0NlbGxBbGlnbmVkKHApICYmIHA7Cit9CisKK3ZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2
ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQoreworI2lm
IE9TKFdJTkNFKQorICAgIGlmIChzdGFydCA+IGVuZCkgeworICAgICAgICB2b2lkKiB0bXAgPSBz
dGFydDsKKyAgICAgICAgc3RhcnQgPSBlbmQ7CisgICAgICAgIGVuZCA9IHRtcDsKKyAgICB9Cisj
ZWxzZQorICAgIEFTU0VSVChzdGFydCA8PSBlbmQpOworI2VuZGlmCisKKyAgICBBU1NFUlQoKHN0
YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YXJ0KSkgPCAweDEw
MDAwMDApOworICAgIEFTU0VSVChpc1BvaW50ZXJBbGlnbmVkKHN0YXJ0KSk7CisgICAgQVNTRVJU
KGlzUG9pbnRlckFsaWduZWQoZW5kKSk7CisKKyAgICBjaGFyKiogcCA9IHN0YXRpY19jYXN0PGNo
YXIqKj4oc3RhcnQpOworICAgIGNoYXIqKiBlID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihlbmQpOwor
CisgICAgd2hpbGUgKHAgIT0gZSkgeworICAgICAgICBjaGFyKiB4ID0gKnArKzsKKyAgICAgICAg
aWYgKGlzUG9zc2libGVDZWxsKHgpKSB7CisgICAgICAgICAgICBzaXplX3QgdXNlZEJsb2NrczsK
KyAgICAgICAgICAgIHVpbnRwdHJfdCB4QXNCaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHgpOworICAgICAgICAgICAgeEFzQml0cyAmPSBDRUxMX0FMSUdOX01BU0s7CisKKyAgICAg
ICAgICAgIHVpbnRwdHJfdCBvZmZzZXQgPSB4QXNCaXRzICYgQkxPQ0tfT0ZGU0VUX01BU0s7Cisg
ICAgICAgICAgICBjb25zdCBzaXplX3QgbGFzdENlbGxPZmZzZXQgPSBzaXplb2YoQ29sbGVjdG9y
Q2VsbCkgKiAoQ0VMTFNfUEVSX0JMT0NLIC0gMSk7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID4g
bGFzdENlbGxPZmZzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IENvbGxlY3RvckJsb2NrKiBibG9ja0FkZHIgPSByZWludGVycHJldF9jYXN0PENvbGxlY3RvckJs
b2NrKj4oeEFzQml0cyAtIG9mZnNldCk7CisgICAgICAgICAgICB1c2VkQmxvY2tzID0gbV9oZWFw
LnVzZWRCbG9ja3M7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwg
dXNlZEJsb2NrczsgYmxvY2srKykgeworICAgICAgICAgICAgICAgIGlmIChtX2hlYXAuY29sbGVj
dG9yQmxvY2soYmxvY2spICE9IGJsb2NrQWRkcikKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChyZWludGVycHJldF9jYXN0PEpT
Q2VsbCo+KHhBc0JpdHMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBIZWFwOjp1cGRhdGVXZWFrR0NIYW5kbGVzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV93ZWFrR0NIYW5kbGVQb29scy5zaXplKCk7ICsraSkKKyAgICAgICAgd2Vha0dD
SGFuZGxlUG9vbChpKS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgV2Vha0dDSGFuZGxlUG9vbDo6dXBk
YXRlKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgV2Vha0dDSGFuZGxlUG9vbDo6
bnVtUG9vbEVudHJpZXM7ICsraSkgeworICAgICAgICBpZiAobV9lbnRyaWVzW2ldLmlzVmFsaWRQ
dHIoKSkgeworICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gbV9lbnRyaWVzW2ldLmdldCgpOwor
ICAgICAgICAgICAgaWYgKCFjZWxsIHx8ICFIZWFwOjppc0NlbGxNYXJrZWQoY2VsbCkpCisgICAg
ICAgICAgICAgICAgbV9lbnRyaWVzW2ldLmludmFsaWRhdGUoKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworV2Vha0dDSGFuZGxlKiBIZWFwOjphZGRXZWFrR0NIYW5kbGUoSlNDZWxsKiBwdHIpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fd2Vha0dDSGFuZGxlUG9vbHMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGlmICghd2Vha0dDSGFuZGxlUG9vbChpKS0+aXNGdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gd2Vha0dDSGFuZGxlUG9vbChpKS0+YWxsb2NhdGUocHRyKTsKKworICAg
IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVk
OjphbGxvY2F0ZShXZWFrR0NIYW5kbGVQb29sOjpwb29sU2l6ZSwgV2Vha0dDSGFuZGxlUG9vbDo6
cG9vbFNpemUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKKyAgICBtX3dlYWtHQ0hhbmRs
ZVBvb2xzLmFwcGVuZChhbGxvY2F0aW9uKTsKKworICAgIFdlYWtHQ0hhbmRsZVBvb2wqIHBvb2wg
PSBuZXcgKGFsbG9jYXRpb24uYmFzZSgpKSBXZWFrR0NIYW5kbGVQb29sKCk7CisgICAgcmV0dXJu
IHBvb2wtPmFsbG9jYXRlKHB0cik7Cit9CisKK3ZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGsp
Cit7CisgICAgQVNTRVJUKGspOworICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpKTsKKworICAg
IGlmICghay5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm90ZWN0ZWRWYWx1
ZXMuYWRkKGsuYXNDZWxsKCkpOworfQorCitib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGsp
Cit7CisgICAgQVNTRVJUKGspOworICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpKTsKKworICAg
IGlmICghay5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1f
cHJvdGVjdGVkVmFsdWVzLnJlbW92ZShrLmFzQ2VsbCgpKTsKK30KKwordm9pZCBIZWFwOjptYXJr
UHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhY2smIG1hcmtTdGFjaykKK3sKKyAgICBQcm90ZWN0Q291
bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOworICAgIGZvciAo
UHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBtYXJrU3RhY2suYXBwZW5kKGl0LT5maXJzdCk7
CisgICAgICAgIG1hcmtTdGFjay5kcmFpbigpOworICAgIH0KK30KKwordm9pZCBIZWFwOjpwdXNo
VGVtcFNvcnRWZWN0b3IoVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qIHRlbXBWZWN0b3IpCit7Cisg
ICAgbV90ZW1wU29ydGluZ1ZlY3RvcnMuYXBwZW5kKHRlbXBWZWN0b3IpOworfQorCit2b2lkIEhl
YXA6OnBvcFRlbXBTb3J0VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9y
KQoreworICAgIEFTU0VSVF9VTlVTRUQodGVtcFZlY3RvciwgdGVtcFZlY3RvciA9PSBtX3RlbXBT
b3J0aW5nVmVjdG9ycy5sYXN0KCkpOworICAgIG1fdGVtcFNvcnRpbmdWZWN0b3JzLnJlbW92ZUxh
c3QoKTsKK30KKyAgICAKK3ZvaWQgSGVhcDo6bWFya1RlbXBTb3J0VmVjdG9ycyhNYXJrU3RhY2sm
IG1hcmtTdGFjaykKK3sKKyAgICB0eXBlZGVmIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWly
PiogPiBWZWN0b3JPZlZhbHVlU3RyaW5nVmVjdG9yczsKKworICAgIFZlY3Rvck9mVmFsdWVTdHJp
bmdWZWN0b3JzOjppdGVyYXRvciBlbmQgPSBtX3RlbXBTb3J0aW5nVmVjdG9ycy5lbmQoKTsKKyAg
ICBmb3IgKFZlY3Rvck9mVmFsdWVTdHJpbmdWZWN0b3JzOjppdGVyYXRvciBpdCA9IG1fdGVtcFNv
cnRpbmdWZWN0b3JzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBWZWN0b3I8
VmFsdWVTdHJpbmdQYWlyPiogdGVtcFNvcnRpbmdWZWN0b3IgPSAqaXQ7CisKKyAgICAgICAgVmVj
dG9yPFZhbHVlU3RyaW5nUGFpcj46Oml0ZXJhdG9yIHZlY3RvckVuZCA9IHRlbXBTb3J0aW5nVmVj
dG9yLT5lbmQoKTsKKyAgICAgICAgZm9yIChWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPjo6aXRlcmF0
b3IgdmVjdG9ySXQgPSB0ZW1wU29ydGluZ1ZlY3Rvci0+YmVnaW4oKTsgdmVjdG9ySXQgIT0gdmVj
dG9yRW5kOyArK3ZlY3Rvckl0KQorICAgICAgICAgICAgaWYgKHZlY3Rvckl0LT5maXJzdCkKKyAg
ICAgICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5kKHZlY3Rvckl0LT5maXJzdCk7CisgICAgICAg
IG1hcmtTdGFjay5kcmFpbigpOworICAgIH0KK30KKyAgICAKK3ZvaWQgSGVhcDo6Y2xlYXJNYXJr
Qml0cygpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hlYXAudXNlZEJsb2Nrczsg
KytpKQorICAgICAgICBjbGVhck1hcmtCaXRzKG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKSk7Cit9
CisKK3ZvaWQgSGVhcDo6Y2xlYXJNYXJrQml0cyhDb2xsZWN0b3JCbG9jayogYmxvY2spCit7Cisg
ICAgLy8gYWxsb2NhdGUgYXNzdW1lcyB0aGF0IHRoZSBsYXN0IGNlbGwgaW4gZXZlcnkgYmxvY2sg
aXMgbWFya2VkLgorICAgIGJsb2NrLT5tYXJrZWQuY2xlYXJBbGwoKTsKKyAgICBibG9jay0+bWFy
a2VkLnNldChIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7Cit9CisKK3NpemVfdCBI
ZWFwOjptYXJrZWRDZWxscyhzaXplX3Qgc3RhcnRCbG9jaywgc2l6ZV90IHN0YXJ0Q2VsbCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoc3RhcnRCbG9jayA8PSBtX2hlYXAudXNlZEJsb2Nrcyk7CisgICAg
QVNTRVJUKHN0YXJ0Q2VsbCA8IEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2spOworCisgICAg
aWYgKHN0YXJ0QmxvY2sgPj0gbV9oZWFwLnVzZWRCbG9ja3MpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgcmVzdWx0ICs9IG1faGVhcC5jb2xsZWN0b3JC
bG9jayhzdGFydEJsb2NrKS0+bWFya2VkLmNvdW50KHN0YXJ0Q2VsbCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IHN0YXJ0QmxvY2sgKyAxOyBpIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsraSkKKyAgICAg
ICAgcmVzdWx0ICs9IG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKS0+bWFya2VkLmNvdW50KCk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEhlYXA6OnN3ZWVwKCkKK3sKKyAgICBBU1NF
UlQobV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOworICAgIGlmICht
X2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbikKKyAgICAgICAgQ1JBU0go
KTsKKyAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CisgICAgCisj
aWYgIUVOQUJMRShKU0NfWk9NQklFUykKKyAgICBTdHJ1Y3R1cmUqIGR1bW15TWFya2FibGVDZWxs
U3RydWN0dXJlID0gbV9nbG9iYWxEYXRhLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQo
KTsKKyNlbmRpZgorCisgICAgRGVhZE9iamVjdEl0ZXJhdG9yIGl0KG1faGVhcCwgbV9oZWFwLm5l
eHRCbG9jaywgbV9oZWFwLm5leHRDZWxsKTsKKyAgICBEZWFkT2JqZWN0SXRlcmF0b3IgZW5kKG1f
aGVhcCwgbV9oZWFwLnVzZWRCbG9ja3MpOworICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIEpTQ2VsbCogY2VsbCA9ICppdDsKKyNpZiBFTkFCTEUoSlNDX1pPTUJJRVMpCisg
ICAgICAgIGlmICghY2VsbC0+aXNab21iaWUoKSkgeworICAgICAgICAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBpbmZvID0gY2VsbC0+Y2xhc3NJbmZvKCk7CisgICAgICAgICAgICBjZWxsLT5+SlNDZWxs
KCk7CisgICAgICAgICAgICBuZXcgKGNlbGwpIEpTWm9tYmllKGluZm8sIEpTWm9tYmllOjpsZWFr
ZWRab21iaWVTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBIZWFwOjptYXJrQ2VsbChjZWxsKTsK
KyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgY2VsbC0+fkpTQ2VsbCgpOworICAgICAgICAvLyBD
YWxsZXJzIG9mIHN3ZWVwIGFzc3VtZSBpdCdzIHNhZmUgdG8gbWFyayBhbnkgY2VsbCBpbiB0aGUg
aGVhcC4KKyAgICAgICAgbmV3IChjZWxsKSBKU0NlbGwoZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1
cmUpOworI2VuZGlmCisgICAgfQorCisgICAgbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBO
b09wZXJhdGlvbjsKK30KKwordm9pZCBIZWFwOjptYXJrUm9vdHMoKQoreworI2lmbmRlZiBOREVC
VUcKKyAgICBpZiAobV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkpIHsKKyAgICAgICAg
QVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKKyAgICAgICAgQVNTRVJUKEpTTG9jazo6
Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBBU1NF
UlQobV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOworICAgIGlmICht
X2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbikKKyAgICAgICAgQ1JBU0go
KTsKKworICAgIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKKworICAg
IE1hcmtTdGFjayYgbWFya1N0YWNrID0gbV9nbG9iYWxEYXRhLT5tYXJrU3RhY2s7CisKKyAgICAv
LyBSZXNldCBtYXJrIGJpdHMuCisgICAgY2xlYXJNYXJrQml0cygpOworCisgICAgLy8gTWFyayBz
dGFjayByb290cy4KKyAgICBtX21hY2hpbmVTdGFja01hcmtlci5tYXJrTWFjaGluZVN0YWNrQ29u
c2VydmF0aXZlbHkobWFya1N0YWNrKTsKKyAgICBtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5y
ZWdpc3RlckZpbGUoKS5tYXJrQ2FsbEZyYW1lcyhtYXJrU3RhY2ssIHRoaXMpOworCisgICAgLy8g
TWFyayBleHBsaWNpdGx5IHJlZ2lzdGVyZWQgcm9vdHMuCisgICAgbWFya1Byb3RlY3RlZE9iamVj
dHMobWFya1N0YWNrKTsKKyAgICAKKyAgICAvLyBNYXJrIHRlbXBvcmFyeSB2ZWN0b3IgZm9yIEFy
cmF5IHNvcnRpbmcKKyAgICBtYXJrVGVtcFNvcnRWZWN0b3JzKG1hcmtTdGFjayk7CisKKyAgICAv
LyBNYXJrIG1pc2MuIG90aGVyIHJvb3RzLgorICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFy
a0xpc3RTZXQtPnNpemUoKSkKKyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0
cyhtYXJrU3RhY2ssICptX21hcmtMaXN0U2V0KTsKKyAgICBpZiAobV9nbG9iYWxEYXRhLT5leGNl
cHRpb24pCisgICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9nbG9iYWxEYXRhLT5leGNlcHRpb24p
OworICAgIGlmIChtX2dsb2JhbERhdGEtPmZpcnN0U3RyaW5naWZpZXJUb01hcmspCisgICAgICAg
IEpTT05PYmplY3Q6Om1hcmtTdHJpbmdpZmllcnMobWFya1N0YWNrLCBtX2dsb2JhbERhdGEtPmZp
cnN0U3RyaW5naWZpZXJUb01hcmspOworCisgICAgLy8gTWFyayB0aGUgc21hbGwgc3RyaW5ncyBj
YWNoZSBsYXN0LCBzaW5jZSBpdCB3aWxsIGNsZWFyIGl0c2VsZiBpZiBub3RoaW5nCisgICAgLy8g
ZWxzZSBoYXMgbWFya2VkIGl0LgorICAgIG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm1hcmtD
aGlsZHJlbihtYXJrU3RhY2spOworCisgICAgbWFya1N0YWNrLmRyYWluKCk7CisgICAgbWFya1N0
YWNrLmNvbXBhY3QoKTsKKworICAgIHVwZGF0ZVdlYWtHQ0hhbmRsZXMoKTsKKworICAgIG1faGVh
cC5vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247Cit9CisKK3NpemVfdCBIZWFwOjpv
YmplY3RDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGVhcC5uZXh0QmxvY2sgKiBIZWFw
Q29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC8vIGFsbG9jYXRlZCBmdWxsIGJsb2NrcworICAgICAg
ICAgICArIG1faGVhcC5uZXh0Q2VsbCAvLyBhbGxvY2F0ZWQgY2VsbHMgaW4gY3VycmVudCBibG9j
aworICAgICAgICAgICArIG1hcmtlZENlbGxzKG1faGVhcC5uZXh0QmxvY2ssIG1faGVhcC5uZXh0
Q2VsbCkgLy8gbWFya2VkIGNlbGxzIGluIHJlbWFpbmRlciBvZiBtX2hlYXAKKyAgICAgICAgICAg
LSBtX2hlYXAudXNlZEJsb2NrczsgLy8gMSBjZWxsIHBlciBibG9jayBpcyBhIGR1bW15IHNlbnRp
bmVsCit9CisKK3ZvaWQgSGVhcDo6YWRkVG9TdGF0aXN0aWNzKEhlYXA6OlN0YXRpc3RpY3MmIHN0
YXRpc3RpY3MpIGNvbnN0Cit7CisgICAgc3RhdGlzdGljcy5zaXplICs9IG1faGVhcC51c2VkQmxv
Y2tzICogQkxPQ0tfU0laRTsKKyAgICBzdGF0aXN0aWNzLmZyZWUgKz0gbV9oZWFwLnVzZWRCbG9j
a3MgKiBCTE9DS19TSVpFIC0gKG9iamVjdENvdW50KCkgKiBIZWFwQ29uc3RhbnRzOjpjZWxsU2l6
ZSk7Cit9CisKK0hlYXA6OlN0YXRpc3RpY3MgSGVhcDo6c3RhdGlzdGljcygpIGNvbnN0Cit7Cisg
ICAgU3RhdGlzdGljcyBzdGF0aXN0aWNzID0geyAwLCAwIH07CisgICAgYWRkVG9TdGF0aXN0aWNz
KHN0YXRpc3RpY3MpOworICAgIHJldHVybiBzdGF0aXN0aWNzOworfQorCitzaXplX3QgSGVhcDo6
c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGVhcC51c2VkQmxvY2tzICogQkxPQ0tfU0la
RTsKK30KKworc2l6ZV90IEhlYXA6Omdsb2JhbE9iamVjdENvdW50KCkKK3sKKyAgICBzaXplX3Qg
Y291bnQgPSAwOworICAgIGlmIChKU0dsb2JhbE9iamVjdCogaGVhZCA9IG1fZ2xvYmFsRGF0YS0+
aGVhZCkgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogbyA9IGhlYWQ7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICBvID0gby0+bmV4dCgpOworICAgICAg
ICB9IHdoaWxlIChvICE9IGhlYWQpOworICAgIH0KKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3Np
emVfdCBIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCit7CisgICAgc2l6ZV90IGNv
dW50ID0gMDsKKyAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGhlYWQgPSBtX2dsb2JhbERhdGEtPmhl
YWQpIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIG8gPSBoZWFkOworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICBpZiAobV9wcm90ZWN0ZWRWYWx1ZXMuY29udGFpbnMobykpCisgICAgICAgICAg
ICAgICAgKytjb3VudDsKKyAgICAgICAgICAgIG8gPSBvLT5uZXh0KCk7CisgICAgICAgIH0gd2hp
bGUgKG8gIT0gaGVhZCk7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitzaXplX3Qg
SGVhcDo6cHJvdGVjdGVkT2JqZWN0Q291bnQoKQoreworICAgIHJldHVybiBtX3Byb3RlY3RlZFZh
bHVlcy5zaXplKCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0eXBlTmFtZShKU0NlbGwqIGNl
bGwpCit7CisgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiAic3RyaW5n
IjsKKyAgICBpZiAoY2VsbC0+aXNHZXR0ZXJTZXR0ZXIoKSkKKyAgICAgICAgcmV0dXJuICJHZXR0
ZXItU2V0dGVyIjsKKyAgICBpZiAoY2VsbC0+aXNBUElWYWx1ZVdyYXBwZXIoKSkKKyAgICAgICAg
cmV0dXJuICJBUEkgd3JhcHBlciI7CisgICAgaWYgKGNlbGwtPmlzUHJvcGVydHlOYW1lSXRlcmF0
b3IoKSkKKyAgICAgICAgcmV0dXJuICJGb3ItaW4gaXRlcmF0b3IiOworICAgIGlmICghY2VsbC0+
aXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuICJbZW1wdHkgY2VsbF0iOworICAgIGNvbnN0IENs
YXNzSW5mbyogaW5mbyA9IGNlbGwtPmNsYXNzSW5mbygpOworICAgIHJldHVybiBpbmZvID8gaW5m
by0+Y2xhc3NOYW1lIDogIk9iamVjdCI7Cit9CisKK0hhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIq
PiogSGVhcDo6cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpCit7CisgICAgSGFzaENvdW50ZWRT
ZXQ8Y29uc3QgY2hhcio+KiBjb3VudHMgPSBuZXcgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+
OworCisgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVl
cy5lbmQoKTsKKyAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3Rl
Y3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGNvdW50cy0+YWRk
KHR5cGVOYW1lKGl0LT5maXJzdCkpOworCisgICAgcmV0dXJuIGNvdW50czsKK30KKworSGFzaENv
dW50ZWRTZXQ8Y29uc3QgY2hhcio+KiBIZWFwOjpvYmplY3RUeXBlQ291bnRzKCkKK3sKKyAgICBI
YXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4qIGNvdW50cyA9IG5ldyBIYXNoQ291bnRlZFNldDxj
b25zdCBjaGFyKj47CisKKyAgICBMaXZlT2JqZWN0SXRlcmF0b3IgaXQgPSBwcmltYXJ5SGVhcEJl
Z2luKCk7CisgICAgTGl2ZU9iamVjdEl0ZXJhdG9yIGhlYXBFbmQgPSBwcmltYXJ5SGVhcEVuZCgp
OworICAgIGZvciAoIDsgaXQgIT0gaGVhcEVuZDsgKytpdCkKKyAgICAgICAgY291bnRzLT5hZGQo
dHlwZU5hbWUoKml0KSk7CisKKyAgICByZXR1cm4gY291bnRzOworfQorCitib29sIEhlYXA6Omlz
QnVzeSgpCit7CisgICAgcmV0dXJuIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzICE9IE5vT3Bl
cmF0aW9uOworfQorCit2b2lkIEhlYXA6OnJlc2V0KCkKK3sKKyAgICBBU1NFUlQoZ2xvYmFsRGF0
YSgpLT5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVy
VGFibGUoKSk7CisgICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKKworICAgIG1hcmtSb290
cygpOworCisgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CisKKyAgICBtX2hlYXAubmV4
dENlbGwgPSAwOworICAgIG1faGVhcC5uZXh0QmxvY2sgPSAwOworICAgIG1faGVhcC5leHRyYUNv
c3QgPSAwOworI2lmIEVOQUJMRShKU0NfWk9NQklFUykKKyAgICBzd2VlcCgpOworI2VuZGlmCisg
ICAgcmVzaXplQmxvY2tzKCk7CisKKyAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKKworICAg
ICgqbV9hY3Rpdml0eUNhbGxiYWNrKSgpOworfQorCit2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJi
YWdlKCkKK3sKKyAgICBBU1NFUlQoZ2xvYmFsRGF0YSgpLT5pZGVudGlmaWVyVGFibGUgPT0gd3Rm
VGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CisgICAgSkFWQVNDUklQVENP
UkVfR0NfQkVHSU4oKTsKKworICAgIC8vIElmIHRoZSBsYXN0IGl0ZXJhdGlvbiB0aHJvdWdoIHRo
ZSBoZWFwIGRlYWxsb2NhdGVkIGJsb2Nrcywgd2UgbmVlZAorICAgIC8vIHRvIGNsZWFuIHVwIHJl
bWFpbmluZyBnYXJiYWdlIGJlZm9yZSBtYXJraW5nLiBPdGhlcndpc2UsIHRoZSBjb25zZXJ2YXRp
dmUKKyAgICAvLyBtYXJraW5nIG1lY2hhbmlzbSBtaWdodCBmb2xsb3cgYSBwb2ludGVyIHRvIHVu
bWFwcGVkIG1lbW9yeS4KKyAgICBpZiAobV9oZWFwLmRpZFNocmluaykKKyAgICAgICAgc3dlZXAo
KTsKKworICAgIG1hcmtSb290cygpOworCisgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7
CisKKyAgICBtX2hlYXAubmV4dENlbGwgPSAwOworICAgIG1faGVhcC5uZXh0QmxvY2sgPSAwOwor
ICAgIG1faGVhcC5leHRyYUNvc3QgPSAwOworICAgIHN3ZWVwKCk7CisgICAgcmVzaXplQmxvY2tz
KCk7CisKKyAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKK30KKworTGl2ZU9iamVjdEl0ZXJh
dG9yIEhlYXA6OnByaW1hcnlIZWFwQmVnaW4oKQoreworICAgIHJldHVybiBMaXZlT2JqZWN0SXRl
cmF0b3IobV9oZWFwLCAwKTsKK30KKworTGl2ZU9iamVjdEl0ZXJhdG9yIEhlYXA6OnByaW1hcnlI
ZWFwRW5kKCkKK3sKKyAgICByZXR1cm4gTGl2ZU9iamVjdEl0ZXJhdG9yKG1faGVhcCwgbV9oZWFw
LnVzZWRCbG9ja3MpOworfQorCit2b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093
blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJhY2spCit7CisgICAgbV9hY3Rp
dml0eUNhbGxiYWNrID0gYWN0aXZpdHlDYWxsYmFjazsKK30KKworR0NBY3Rpdml0eUNhbGxiYWNr
KiBIZWFwOjphY3Rpdml0eUNhbGxiYWNrKCkKK3sKKyAgICByZXR1cm4gbV9hY3Rpdml0eUNhbGxi
YWNrLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDc1NDQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOSw0MCArMTksMTkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAKLSNpbmNsdWRlICJBcmdM
aXN0LmgiCi0jaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiR0NBY3Rpdml0eUNh
bGxiYWNrLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5Lmgi
Ci0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNs
dWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKLSNpbmNsdWRlICJKU09O
T2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0j
aW5jbHVkZSAiSlNab21iaWUuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJO
b2Rlcy5oIgotI2luY2x1ZGUgIlRyYWNpbmcuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5j
bHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+
Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRT
ZXQuaD4KLSNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgotI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgotI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KLQotI2RlZmluZSBDT0xMRUNUX09O
X0VWRVJZX0FMTE9DQVRJT04gMAogCiB1c2luZyBzdGQ6Om1heDsKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIFN0cnVjdHVyZTsKKwogLy8gdHVuYWJsZSBwYXJhbWV0ZXJzCiAKIGNvbnN0IHNp
emVfdCBHUk9XVEhfRkFDVE9SID0gMjsKQEAgLTYyLDQ3ICs0MSw0MCBAQCBjb25zdCBzaXplX3Qg
QUxMT0NBVElPTlNfUEVSX0NPTExFQ1RJT04gCiAvLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJp
bmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgogI2RlZmluZSBNSU5fQVJSQVlf
U0laRSAoc3RhdGljX2Nhc3Q8c2l6ZV90PigxNCkpCiAKLUhlYXA6OkhlYXAoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQotICAgIDogbV9tYXJrTGlzdFNldCgwKQotICAgICwgbV9nbG9iYWxEYXRh
KGdsb2JhbERhdGEpCi0gICAgLCBtX21hY2hpbmVTdGFja01hcmtlcih0aGlzKQorTWFya2VkU3Bh
Y2U6Ok1hcmtlZFNwYWNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICA6IG1fZ2xvYmFs
RGF0YShnbG9iYWxEYXRhKQogewotICAgIEFTU0VSVChnbG9iYWxEYXRhKTsKICAgICBtZW1zZXQo
Jm1faGVhcCwgMCwgc2l6ZW9mKENvbGxlY3RvckhlYXApKTsKICAgICBhbGxvY2F0ZUJsb2NrKCk7
Ci0gICAgbV9hY3Rpdml0eUNhbGxiYWNrID0gRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3Jl
YXRlKHRoaXMpOwotICAgICgqbV9hY3Rpdml0eUNhbGxiYWNrKSgpOwotfQotCi1IZWFwOjp+SGVh
cCgpCi17Ci0gICAgLy8gVGhlIGRlc3Ryb3kgZnVuY3Rpb24gbXVzdCBhbHJlYWR5IGhhdmUgYmVl
biBjYWxsZWQsIHNvIGFzc2VydCB0aGlzLgotICAgIEFTU0VSVCghbV9nbG9iYWxEYXRhKTsKIH0K
IAotdm9pZCBIZWFwOjpkZXN0cm95KCkKK3ZvaWQgTWFya2VkU3BhY2U6OmRlc3Ryb3koUHJvdGVj
dENvdW50U2V0JiBwcm90ZWN0ZWRWYWx1ZXNDb3B5KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgY2xlYXJNYXJrQml0cygpOworICAgIFByb3RlY3RDb3Vu
dFNldDo6aXRlcmF0b3IgcHJvdGVjdGVkVmFsdWVzRW5kID0gcHJvdGVjdGVkVmFsdWVzQ29weS5l
bmQoKTsKKyAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBwcm90ZWN0ZWRW
YWx1ZXNDb3B5LmJlZ2luKCk7IGl0ICE9IHByb3RlY3RlZFZhbHVlc0VuZDsgKytpdCkKKyAgICAg
ICAgbWFya0NlbGwoaXQtPmZpcnN0KTsKIAotICAgIGlmICghbV9nbG9iYWxEYXRhKQotICAgICAg
ICByZXR1cm47CisgICAgbV9oZWFwLm5leHRDZWxsID0gMDsKKyAgICBtX2hlYXAubmV4dEJsb2Nr
ID0gMDsKKyAgICBEZWFkT2JqZWN0SXRlcmF0b3IgaXQobV9oZWFwLCBtX2hlYXAubmV4dEJsb2Nr
LCBtX2hlYXAubmV4dENlbGwpOworICAgIERlYWRPYmplY3RJdGVyYXRvciBlbmQobV9oZWFwLCBt
X2hlYXAudXNlZEJsb2Nrcyk7CisgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICgqaXQpLT5+SlNDZWxsKCk7CiAKLSAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YS0+ZHluYW1pY0ds
b2JhbE9iamVjdCk7Ci0gICAgQVNTRVJUKCFpc0J1c3koKSk7Ci0gICAgCi0gICAgLy8gVGhlIGds
b2JhbCBvYmplY3QgaXMgbm90IEdDIHByb3RlY3RlZCBhdCB0aGlzIHBvaW50LCBzbyBzd2VlcGlu
ZyBtYXkgZGVsZXRlIGl0Ci0gICAgLy8gKGFuZCB0aHVzIHRoZSBnbG9iYWwgZGF0YSkgYmVmb3Jl
IG90aGVyIG9iamVjdHMgdGhhdCBtYXkgdXNlIHRoZSBnbG9iYWwgZGF0YS4KLSAgICBSZWZQdHI8
SlNHbG9iYWxEYXRhPiBwcm90ZWN0KG1fZ2xvYmFsRGF0YSk7CisgICAgcHJvdGVjdGVkVmFsdWVz
RW5kID0gcHJvdGVjdGVkVmFsdWVzQ29weS5lbmQoKTsKKyAgICBmb3IgKFByb3RlY3RDb3VudFNl
dDo6aXRlcmF0b3IgaXQgPSBwcm90ZWN0ZWRWYWx1ZXNDb3B5LmJlZ2luKCk7IGl0ICE9IHByb3Rl
Y3RlZFZhbHVlc0VuZDsgKytpdCkKKyAgICAgICAgaXQtPmZpcnN0LT5+SlNDZWxsKCk7CiAKLSAg
ICBkZWxldGUgbV9tYXJrTGlzdFNldDsKLSAgICBtX21hcmtMaXN0U2V0ID0gMDsKKyAgICBmb3Ig
KHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsrYmxvY2spCisg
ICAgICAgIG1faGVhcC5ibG9ja3NbYmxvY2tdLmRlYWxsb2NhdGUoKTsKIAotICAgIGZyZWVCbG9j
a3MoKTsKKyAgICBmYXN0RnJlZShtX2hlYXAuYmxvY2tzKTsKIAotICAgIG1fZ2xvYmFsRGF0YSA9
IDA7CisgICAgbWVtc2V0KCZtX2hlYXAsIDAsIHNpemVvZihDb2xsZWN0b3JIZWFwKSk7CiB9CiAK
LU5FVkVSX0lOTElORSBDb2xsZWN0b3JCbG9jayogSGVhcDo6YWxsb2NhdGVCbG9jaygpCitORVZF
Ul9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKIHsK
ICAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZDo6YWxsb2NhdGUoQkxPQ0tfU0laRSwgQkxPQ0tfU0laRSwgT1NBbGxvY2F0b3I6OkpTR0NI
ZWFwUGFnZXMpOwogICAgIENvbGxlY3RvckJsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PENvbGxl
Y3RvckJsb2NrKj4oYWxsb2NhdGlvbi5iYXNlKCkpOwpAQCAtMTExLDEwICs4MywxMCBAQCBORVZF
Ul9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIEhlYXA6OmFsbG9jCiAKICAgICAvLyBJbml0aWFsaXpl
IGJsb2NrLgogCi0gICAgYmxvY2stPmhlYXAgPSB0aGlzOworICAgIGJsb2NrLT5oZWFwID0gJmds
b2JhbERhdGEoKS0+aGVhcDsKICAgICBjbGVhck1hcmtCaXRzKGJsb2NrKTsKIAotICAgIFN0cnVj
dHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBtX2dsb2JhbERhdGEtPmR1bW15TWFy
a2FibGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNl
bGxTdHJ1Y3R1cmUgPSBnbG9iYWxEYXRhKCktPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdl
dCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJC
bG9jazsgKytpKQogICAgICAgICBuZXcgKCZibG9jay0+Y2VsbHNbaV0pIEpTQ2VsbChkdW1teU1h
cmthYmxlQ2VsbFN0cnVjdHVyZSk7CiAgICAgCkBAIC0xMzQsNyArMTA2LDcgQEAgTkVWRVJfSU5M
SU5FIENvbGxlY3RvckJsb2NrKiBIZWFwOjphbGxvYwogICAgIHJldHVybiBibG9jazsKIH0KIAot
TkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6ZnJlZUJsb2NrKHNpemVfdCBibG9jaykKK05FVkVSX0lO
TElORSB2b2lkIE1hcmtlZFNwYWNlOjpmcmVlQmxvY2soc2l6ZV90IGJsb2NrKQogewogICAgIG1f
aGVhcC5kaWRTaHJpbmsgPSB0cnVlOwogCkBAIC0xNTQsNjEgKzEyNiw3IEBAIE5FVkVSX0lOTElO
RSB2b2lkIEhlYXA6OmZyZWVCbG9jayhzaXplX3QKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6ZnJl
ZUJsb2NrcygpCi17Ci0gICAgUHJvdGVjdENvdW50U2V0IHByb3RlY3RlZFZhbHVlc0NvcHkgPSBt
X3Byb3RlY3RlZFZhbHVlczsKLQotICAgIGNsZWFyTWFya0JpdHMoKTsKLSAgICBQcm90ZWN0Q291
bnRTZXQ6Oml0ZXJhdG9yIHByb3RlY3RlZFZhbHVlc0VuZCA9IHByb3RlY3RlZFZhbHVlc0NvcHku
ZW5kKCk7Ci0gICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gcHJvdGVjdGVk
VmFsdWVzQ29weS5iZWdpbigpOyBpdCAhPSBwcm90ZWN0ZWRWYWx1ZXNFbmQ7ICsraXQpCi0gICAg
ICAgIG1hcmtDZWxsKGl0LT5maXJzdCk7Ci0KLSAgICBtX2hlYXAubmV4dENlbGwgPSAwOwotICAg
IG1faGVhcC5uZXh0QmxvY2sgPSAwOwotICAgIERlYWRPYmplY3RJdGVyYXRvciBpdChtX2hlYXAs
IG1faGVhcC5uZXh0QmxvY2ssIG1faGVhcC5uZXh0Q2VsbCk7Ci0gICAgRGVhZE9iamVjdEl0ZXJh
dG9yIGVuZChtX2hlYXAsIG1faGVhcC51c2VkQmxvY2tzKTsKLSAgICBmb3IgKCA7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgKCppdCktPn5KU0NlbGwoKTsKLQotICAgIEFTU0VSVCghcHJvdGVj
dGVkT2JqZWN0Q291bnQoKSk7Ci0KLSAgICBwcm90ZWN0ZWRWYWx1ZXNFbmQgPSBwcm90ZWN0ZWRW
YWx1ZXNDb3B5LmVuZCgpOwotICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9
IHByb3RlY3RlZFZhbHVlc0NvcHkuYmVnaW4oKTsgaXQgIT0gcHJvdGVjdGVkVmFsdWVzRW5kOyAr
K2l0KQotICAgICAgICBpdC0+Zmlyc3QtPn5KU0NlbGwoKTsKLQotICAgIGZvciAoc2l6ZV90IGJs
b2NrID0gMDsgYmxvY2sgPCBtX2hlYXAudXNlZEJsb2NrczsgKytibG9jaykKLSAgICAgICAgbV9o
ZWFwLmJsb2Nrc1tibG9ja10uZGVhbGxvY2F0ZSgpOwotCi0gICAgZmFzdEZyZWUobV9oZWFwLmJs
b2Nrcyk7Ci0KLSAgICBtZW1zZXQoJm1faGVhcCwgMCwgc2l6ZW9mKENvbGxlY3RvckhlYXApKTsK
LX0KLQotdm9pZCBIZWFwOjpyZWNvcmRFeHRyYUNvc3Qoc2l6ZV90IGNvc3QpCi17Ci0gICAgLy8g
T3VyIGZyZXF1ZW5jeSBvZiBnYXJiYWdlIGNvbGxlY3Rpb24gdHJpZXMgdG8gYmFsYW5jZSBtZW1v
cnkgdXNlIGFnYWluc3Qgc3BlZWQKLSAgICAvLyBieSBjb2xsZWN0aW5nIGJhc2VkIG9uIHRoZSBu
dW1iZXIgb2YgbmV3bHkgY3JlYXRlZCB2YWx1ZXMuIEhvd2V2ZXIsIGZvciB2YWx1ZXMKLSAgICAv
LyB0aGF0IGhvbGQgb24gdG8gYSBncmVhdCBkZWFsIG9mIG1lbW9yeSB0aGF0J3Mgbm90IGluIHRo
ZSBmb3JtIG9mIG90aGVyIEpTIHZhbHVlcywKLSAgICAvLyB0aGF0IGlzIG5vdCBnb29kIGVub3Vn
aCAtIGluIHNvbWUgY2FzZXMgYSBsb3Qgb2YgdGhvc2Ugb2JqZWN0cyBjYW4gcGlsZSB1cCBhbmQK
LSAgICAvLyB1c2UgY3JhenkgYW1vdW50cyBvZiBtZW1vcnkgd2l0aG91dCBhIEdDIGhhcHBlbmlu
Zy4gU28gd2UgdHJhY2sgdGhlc2UgZXh0cmEKLSAgICAvLyBtZW1vcnkgY29zdHMuIE9ubHkgdW51
c3VhbGx5IGxhcmdlIG9iamVjdHMgYXJlIG5vdGVkLCBhbmQgd2Ugb25seSBrZWVwIHRyYWNrCi0g
ICAgLy8gb2YgdGhpcyBleHRyYSBjb3N0IHVudGlsIHRoZSBuZXh0IEdDLiBJbiBnYXJiYWdlIGNv
bGxlY3RlZCBsYW5ndWFnZXMsIG1vc3QgdmFsdWVzCi0gICAgLy8gYXJlIGVpdGhlciB2ZXJ5IHNo
b3J0IGxpdmVkIHRlbXBvcmFyaWVzLCBvciBoYXZlIGV4dHJlbWVseSBsb25nIGxpZmV0aW1lcy4g
U28KLSAgICAvLyBpZiBhIGxhcmdlIHZhbHVlIHN1cnZpdmVzIG9uZSBnYXJiYWdlIGNvbGxlY3Rp
b24sIHRoZXJlIGlzIG5vdCBtdWNoIHBvaW50IHRvCi0gICAgLy8gY29sbGVjdGluZyBtb3JlIGZy
ZXF1ZW50bHkgYXMgbG9uZyBhcyBpdCBzdGF5cyBhbGl2ZS4KLQotICAgIGlmIChtX2hlYXAuZXh0
cmFDb3N0ID4gbWF4RXh0cmFDb3N0ICYmIG1faGVhcC5leHRyYUNvc3QgPiBtX2hlYXAudXNlZEJs
b2NrcyAqIEJMT0NLX1NJWkUgLyAyKSB7Ci0gICAgICAgIC8vIElmIHRoZSBsYXN0IGl0ZXJhdGlv
biB0aHJvdWdoIHRoZSBoZWFwIGRlYWxsb2NhdGVkIGJsb2Nrcywgd2UgbmVlZAotICAgICAgICAv
LyB0byBjbGVhbiB1cCByZW1haW5pbmcgZ2FyYmFnZSBiZWZvcmUgbWFya2luZy4gT3RoZXJ3aXNl
LCB0aGUgY29uc2VydmF0aXZlCi0gICAgICAgIC8vIG1hcmtpbmcgbWVjaGFuaXNtIG1pZ2h0IGZv
bGxvdyBhIHBvaW50ZXIgdG8gdW5tYXBwZWQgbWVtb3J5LgotICAgICAgICBpZiAobV9oZWFwLmRp
ZFNocmluaykKLSAgICAgICAgICAgIHN3ZWVwKCk7Ci0gICAgICAgIHJlc2V0KCk7Ci0gICAgfQot
ICAgIG1faGVhcC5leHRyYUNvc3QgKz0gY29zdDsKLX0KLQotdm9pZCogSGVhcDo6YWxsb2NhdGUo
c2l6ZV90IHMpCit2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGUoc2l6ZV90IHMpCiB7CiAgICAg
QVNTRVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5j
dXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogICAgIHR5cGVkZWYgSGVhcENvbnN0YW50czo6Qmxv
Y2sgQmxvY2s7CkBAIC0yMTgsMTUgKzEzNiw2IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlKHNpemVf
dCBzKQogICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwog
ICAgIEFTU0VSVF9VTlVTRUQocywgcyA8PSBIZWFwQ29uc3RhbnRzOjpjZWxsU2l6ZSk7CiAKLSAg
ICBBU1NFUlQobV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwotCi0j
aWYgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCi0gICAgY29sbGVjdEFsbEdhcmJhZ2UoKTsK
LSAgICBBU1NFUlQobV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwot
I2VuZGlmCi0KLWFsbG9jYXRlOgotCiAgICAgLy8gRmFzdCBjYXNlOiBmaW5kIHRoZSBuZXh0IGdh
cmJhZ2UgY2VsbCBhbmQgcmVjeWNsZSBpdC4KIAogICAgIGRvIHsKQEAgLTIzNywxMCArMTQ2LDgg
QEAgYWxsb2NhdGU6CiAgICAgICAgICAgICBpZiAoIWJsb2NrLT5tYXJrZWQuZ2V0KG1faGVhcC5u
ZXh0Q2VsbCkpIHsgLy8gQWx3YXlzIGZhbHNlIGZvciB0aGUgbGFzdCBjZWxsIGluIHRoZSBibG9j
awogICAgICAgICAgICAgICAgIENlbGwqIGNlbGwgPSAmYmxvY2stPmNlbGxzW21faGVhcC5uZXh0
Q2VsbF07CiAKLSAgICAgICAgICAgICAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEFs
bG9jYXRpb247CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBpbXAgPSByZWludGVycHJldF9jYXN0
PEpTQ2VsbCo+KGNlbGwpOwogICAgICAgICAgICAgICAgIGltcC0+fkpTQ2VsbCgpOwotICAgICAg
ICAgICAgICAgIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247CiAKICAg
ICAgICAgICAgICAgICArK21faGVhcC5uZXh0Q2VsbDsKICAgICAgICAgICAgICAgICByZXR1cm4g
Y2VsbDsKQEAgLTI0OSwxNCArMTU2LDExIEBAIGFsbG9jYXRlOgogICAgICAgICB9IHdoaWxlICht
X2hlYXAubmV4dENlbGwgIT0gSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayk7CiAgICAgICAg
IG1faGVhcC5uZXh0Q2VsbCA9IDA7CiAgICAgfSB3aGlsZSAoKyttX2hlYXAubmV4dEJsb2NrICE9
IG1faGVhcC51c2VkQmxvY2tzKTsKLQotICAgIC8vIFNsb3cgY2FzZTogcmVhY2hlZCB0aGUgZW5k
IG9mIHRoZSBoZWFwLiBNYXJrIGxpdmUgb2JqZWN0cyBhbmQgc3RhcnQgb3Zlci4KLQotICAgIHJl
c2V0KCk7Ci0gICAgZ290byBhbGxvY2F0ZTsKKyAgICAKKyAgICByZXR1cm4gMDsKIH0KIAotdm9p
ZCBIZWFwOjpyZXNpemVCbG9ja3MoKQordm9pZCBNYXJrZWRTcGFjZTo6cmVzaXplQmxvY2tzKCkK
IHsKICAgICBtX2hlYXAuZGlkU2hyaW5rID0gZmFsc2U7CiAKQEAgLTI3MywxNCArMTc3LDE0IEBA
IHZvaWQgSGVhcDo6cmVzaXplQmxvY2tzKCkKICAgICAgICAgc2hyaW5rQmxvY2tzKG1heEJsb2Nr
Q291bnQpOwogfQogCi12b2lkIEhlYXA6Omdyb3dCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2NrcykK
K3ZvaWQgTWFya2VkU3BhY2U6Omdyb3dCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2NrcykKIHsKICAg
ICBBU1NFUlQobV9oZWFwLnVzZWRCbG9ja3MgPCBuZWVkZWRCbG9ja3MpOwogICAgIHdoaWxlICht
X2hlYXAudXNlZEJsb2NrcyA8IG5lZWRlZEJsb2NrcykKICAgICAgICAgYWxsb2NhdGVCbG9jaygp
OwogfQogCi12b2lkIEhlYXA6OnNocmlua0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKQordm9p
ZCBNYXJrZWRTcGFjZTo6c2hyaW5rQmxvY2tzKHNpemVfdCBuZWVkZWRCbG9ja3MpCiB7CiAgICAg
QVNTRVJUKG1faGVhcC51c2VkQmxvY2tzID4gbmVlZGVkQmxvY2tzKTsKICAgICAKQEAgLTMxOCw3
ICsyMjIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNQb3NzaWJsZUNlbGwodm9pZCogCiAgICAg
cmV0dXJuIGlzQ2VsbEFsaWduZWQocCkgJiYgcDsKIH0KIAotdm9pZCBIZWFwOjptYXJrQ29uc2Vy
dmF0aXZlbHkoTWFya1N0YWNrJiBtYXJrU3RhY2ssIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit2
b2lkIE1hcmtlZFNwYWNlOjptYXJrQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiBtYXJrU3RhY2ss
IHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCiB7CiAjaWYgT1MoV0lOQ0UpCiAgICAgaWYgKHN0YXJ0
ID4gZW5kKSB7CkBAIC0zNjAsMTA4ICsyNjQsMjAgQEAgdm9pZCBIZWFwOjptYXJrQ29uc2VydmF0
aXZlbHkoTWFya1N0YWNrJgogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp1cGRhdGVXZWFrR0NIYW5k
bGVzKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV93ZWFrR0NIYW5kbGVQb29s
cy5zaXplKCk7ICsraSkKLSAgICAgICAgd2Vha0dDSGFuZGxlUG9vbChpKS0+dXBkYXRlKCk7Ci19
Ci0KLXZvaWQgV2Vha0dDSGFuZGxlUG9vbDo6dXBkYXRlKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgV2Vha0dDSGFuZGxlUG9vbDo6bnVtUG9vbEVudHJpZXM7ICsraSkgewotICAg
ICAgICBpZiAobV9lbnRyaWVzW2ldLmlzVmFsaWRQdHIoKSkgewotICAgICAgICAgICAgSlNDZWxs
KiBjZWxsID0gbV9lbnRyaWVzW2ldLmdldCgpOwotICAgICAgICAgICAgaWYgKCFjZWxsIHx8ICFI
ZWFwOjppc0NlbGxNYXJrZWQoY2VsbCkpCi0gICAgICAgICAgICAgICAgbV9lbnRyaWVzW2ldLmlu
dmFsaWRhdGUoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotV2Vha0dDSGFuZGxlKiBIZWFwOjph
ZGRXZWFrR0NIYW5kbGUoSlNDZWxsKiBwdHIpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fd2Vha0dDSGFuZGxlUG9vbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGlmICghd2Vha0dD
SGFuZGxlUG9vbChpKS0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gd2Vha0dDSGFuZGxl
UG9vbChpKS0+YWxsb2NhdGUocHRyKTsKLQotICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBhbGxv
Y2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxvY2F0ZShXZWFrR0NIYW5kbGVQb29s
Ojpwb29sU2l6ZSwgV2Vha0dDSGFuZGxlUG9vbDo6cG9vbFNpemUsIE9TQWxsb2NhdG9yOjpKU0dD
SGVhcFBhZ2VzKTsKLSAgICBtX3dlYWtHQ0hhbmRsZVBvb2xzLmFwcGVuZChhbGxvY2F0aW9uKTsK
LQotICAgIFdlYWtHQ0hhbmRsZVBvb2wqIHBvb2wgPSBuZXcgKGFsbG9jYXRpb24uYmFzZSgpKSBX
ZWFrR0NIYW5kbGVQb29sKCk7Ci0gICAgcmV0dXJuIHBvb2wtPmFsbG9jYXRlKHB0cik7Ci19Ci0K
LXZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCi17Ci0gICAgQVNTRVJUKGspOwotICAgIEFT
U0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0
YS0+aXNTaGFyZWRJbnN0YW5jZSgpKTsKLQotICAgIGlmICghay5pc0NlbGwoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9wcm90ZWN0ZWRWYWx1ZXMuYWRkKGsuYXNDZWxsKCkpOwotfQotCi1i
b29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCi17Ci0gICAgQVNTRVJUKGspOwotICAgIEFT
U0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0
YS0+aXNTaGFyZWRJbnN0YW5jZSgpKTsKLQotICAgIGlmICghay5pc0NlbGwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fcHJvdGVjdGVkVmFsdWVzLnJlbW92ZShrLmFz
Q2VsbCgpKTsKLX0KLQotdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhY2sm
IG1hcmtTdGFjaykKLXsKLSAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJv
dGVjdGVkVmFsdWVzLmVuZCgpOwotICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBp
dCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBtYXJrU3RhY2suYXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgIG1hcmtTdGFjay5kcmFpbigp
OwotICAgIH0KLX0KLQotdm9pZCBIZWFwOjpwdXNoVGVtcFNvcnRWZWN0b3IoVmVjdG9yPFZhbHVl
U3RyaW5nUGFpcj4qIHRlbXBWZWN0b3IpCi17Ci0gICAgbV90ZW1wU29ydGluZ1ZlY3RvcnMuYXBw
ZW5kKHRlbXBWZWN0b3IpOwotfQotCi12b2lkIEhlYXA6OnBvcFRlbXBTb3J0VmVjdG9yKFZlY3Rv
cjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9yKQotewotICAgIEFTU0VSVF9VTlVTRUQodGVt
cFZlY3RvciwgdGVtcFZlY3RvciA9PSBtX3RlbXBTb3J0aW5nVmVjdG9ycy5sYXN0KCkpOwotICAg
IG1fdGVtcFNvcnRpbmdWZWN0b3JzLnJlbW92ZUxhc3QoKTsKLX0KLSAgICAKLXZvaWQgSGVhcDo6
bWFya1RlbXBTb3J0VmVjdG9ycyhNYXJrU3RhY2smIG1hcmtTdGFjaykKLXsKLSAgICB0eXBlZGVm
IFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogPiBWZWN0b3JPZlZhbHVlU3RyaW5nVmVj
dG9yczsKLQotICAgIFZlY3Rvck9mVmFsdWVTdHJpbmdWZWN0b3JzOjppdGVyYXRvciBlbmQgPSBt
X3RlbXBTb3J0aW5nVmVjdG9ycy5lbmQoKTsKLSAgICBmb3IgKFZlY3Rvck9mVmFsdWVTdHJpbmdW
ZWN0b3JzOjppdGVyYXRvciBpdCA9IG1fdGVtcFNvcnRpbmdWZWN0b3JzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFNvcnRp
bmdWZWN0b3IgPSAqaXQ7Ci0KLSAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj46Oml0ZXJh
dG9yIHZlY3RvckVuZCA9IHRlbXBTb3J0aW5nVmVjdG9yLT5lbmQoKTsKLSAgICAgICAgZm9yIChW
ZWN0b3I8VmFsdWVTdHJpbmdQYWlyPjo6aXRlcmF0b3IgdmVjdG9ySXQgPSB0ZW1wU29ydGluZ1Zl
Y3Rvci0+YmVnaW4oKTsgdmVjdG9ySXQgIT0gdmVjdG9yRW5kOyArK3ZlY3Rvckl0KQotICAgICAg
ICAgICAgaWYgKHZlY3Rvckl0LT5maXJzdCkKLSAgICAgICAgICAgICAgICBtYXJrU3RhY2suYXBw
ZW5kKHZlY3Rvckl0LT5maXJzdCk7Ci0gICAgICAgIG1hcmtTdGFjay5kcmFpbigpOwotICAgIH0K
LX0KLSAgICAKLXZvaWQgSGVhcDo6Y2xlYXJNYXJrQml0cygpCit2b2lkIE1hcmtlZFNwYWNlOjpj
bGVhck1hcmtCaXRzKCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faGVhcC51c2Vk
QmxvY2tzOyArK2kpCiAgICAgICAgIGNsZWFyTWFya0JpdHMobV9oZWFwLmNvbGxlY3RvckJsb2Nr
KGkpKTsKIH0KIAotdm9pZCBIZWFwOjpjbGVhck1hcmtCaXRzKENvbGxlY3RvckJsb2NrKiBibG9j
aykKK3ZvaWQgTWFya2VkU3BhY2U6OmNsZWFyTWFya0JpdHMoQ29sbGVjdG9yQmxvY2sqIGJsb2Nr
KQogewogICAgIC8vIGFsbG9jYXRlIGFzc3VtZXMgdGhhdCB0aGUgbGFzdCBjZWxsIGluIGV2ZXJ5
IGJsb2NrIGlzIG1hcmtlZC4KICAgICBibG9jay0+bWFya2VkLmNsZWFyQWxsKCk7CiAgICAgYmxv
Y2stPm1hcmtlZC5zZXQoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOwogfQogCi1z
aXplX3QgSGVhcDo6bWFya2VkQ2VsbHMoc2l6ZV90IHN0YXJ0QmxvY2ssIHNpemVfdCBzdGFydENl
bGwpIGNvbnN0CitzaXplX3QgTWFya2VkU3BhY2U6Om1hcmtlZENlbGxzKHNpemVfdCBzdGFydEJs
b2NrLCBzaXplX3Qgc3RhcnRDZWxsKSBjb25zdAogewogICAgIEFTU0VSVChzdGFydEJsb2NrIDw9
IG1faGVhcC51c2VkQmxvY2tzKTsKICAgICBBU1NFUlQoc3RhcnRDZWxsIDwgSGVhcENvbnN0YW50
czo6Y2VsbHNQZXJCbG9jayk7CkBAIC00NzcsMTUgKzI5MywxMCBAQCBzaXplX3QgSGVhcDo6bWFy
a2VkQ2VsbHMoc2l6ZV90IHN0YXJ0QmxvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBI
ZWFwOjpzd2VlcCgpCit2b2lkIE1hcmtlZFNwYWNlOjpzd2VlcCgpCiB7Ci0gICAgQVNTRVJUKG1f
aGVhcC5vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKLSAgICBpZiAobV9oZWFw
Lm9wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOwotICAgIAogI2lmICFF
TkFCTEUoSlNDX1pPTUJJRVMpCi0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVj
dHVyZSA9IG1fZ2xvYmFsRGF0YS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7Cisg
ICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSA9IGdsb2JhbERhdGEoKS0+
ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7CiAjZW5kaWYKIAogICAgIERlYWRPYmpl
Y3RJdGVyYXRvciBpdChtX2hlYXAsIG1faGVhcC5uZXh0QmxvY2ssIG1faGVhcC5uZXh0Q2VsbCk7
CkBAIC01MDUsNjEgKzMxNiw5IEBAIHZvaWQgSGVhcDo6c3dlZXAoKQogICAgICAgICBuZXcgKGNl
bGwpIEpTQ2VsbChkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSk7CiAjZW5kaWYKICAgICB9Ci0K
LSAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwotfQotCi12b2lk
IEhlYXA6Om1hcmtSb290cygpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGlmIChtX2dsb2JhbERh
dGEtPmlzU2hhcmVkSW5zdGFuY2UoKSkgewotICAgICAgICBBU1NFUlQoSlNMb2NrOjpsb2NrQ291
bnQoKSA+IDApOwotICAgICAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEFTU0VSVChtX2hlYXAub3BlcmF0aW9uSW5Q
cm9ncmVzcyA9PSBOb09wZXJhdGlvbik7Ci0gICAgaWYgKG1faGVhcC5vcGVyYXRpb25JblByb2dy
ZXNzICE9IE5vT3BlcmF0aW9uKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgbV9oZWFwLm9wZXJh
dGlvbkluUHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOwotCi0gICAgTWFya1N0YWNrJiBtYXJrU3RhY2sg
PSBtX2dsb2JhbERhdGEtPm1hcmtTdGFjazsKLQotICAgIC8vIFJlc2V0IG1hcmsgYml0cy4KLSAg
ICBjbGVhck1hcmtCaXRzKCk7Ci0KLSAgICAvLyBNYXJrIHN0YWNrIHJvb3RzLgotICAgIG1fbWFj
aGluZVN0YWNrTWFya2VyLm1hcmtNYWNoaW5lU3RhY2tDb25zZXJ2YXRpdmVseShtYXJrU3RhY2sp
OwotICAgIG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLm1hcmtDYWxs
RnJhbWVzKG1hcmtTdGFjaywgdGhpcyk7Ci0KLSAgICAvLyBNYXJrIGV4cGxpY2l0bHkgcmVnaXN0
ZXJlZCByb290cy4KLSAgICBtYXJrUHJvdGVjdGVkT2JqZWN0cyhtYXJrU3RhY2spOwotICAgIAot
ICAgIC8vIE1hcmsgdGVtcG9yYXJ5IHZlY3RvciBmb3IgQXJyYXkgc29ydGluZwotICAgIG1hcmtU
ZW1wU29ydFZlY3RvcnMobWFya1N0YWNrKTsKLQotICAgIC8vIE1hcmsgbWlzYy4gb3RoZXIgcm9v
dHMuCi0gICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQotICAg
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKG1hcmtTdGFjaywgKm1fbWFya0xp
c3RTZXQpOwotICAgIGlmIChtX2dsb2JhbERhdGEtPmV4Y2VwdGlvbikKLSAgICAgICAgbWFya1N0
YWNrLmFwcGVuZChtX2dsb2JhbERhdGEtPmV4Y2VwdGlvbik7Ci0gICAgaWYgKG1fZ2xvYmFsRGF0
YS0+Zmlyc3RTdHJpbmdpZmllclRvTWFyaykKLSAgICAgICAgSlNPTk9iamVjdDo6bWFya1N0cmlu
Z2lmaWVycyhtYXJrU3RhY2ssIG1fZ2xvYmFsRGF0YS0+Zmlyc3RTdHJpbmdpZmllclRvTWFyayk7
Ci0KLSAgICAvLyBNYXJrIHRoZSBzbWFsbCBzdHJpbmdzIGNhY2hlIGxhc3QsIHNpbmNlIGl0IHdp
bGwgY2xlYXIgaXRzZWxmIGlmIG5vdGhpbmcKLSAgICAvLyBlbHNlIGhhcyBtYXJrZWQgaXQuCi0g
ICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubWFya0NoaWxkcmVuKG1hcmtTdGFjayk7Ci0K
LSAgICBtYXJrU3RhY2suZHJhaW4oKTsKLSAgICBtYXJrU3RhY2suY29tcGFjdCgpOwotCi0gICAg
dXBkYXRlV2Vha0dDSGFuZGxlcygpOwotCi0gICAgbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3Mg
PSBOb09wZXJhdGlvbjsKIH0KIAotc2l6ZV90IEhlYXA6Om9iamVjdENvdW50KCkgY29uc3QKK3Np
emVfdCBNYXJrZWRTcGFjZTo6b2JqZWN0Q291bnQoKSBjb25zdAogewogICAgIHJldHVybiBtX2hl
YXAubmV4dEJsb2NrICogSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAvLyBhbGxvY2F0ZWQg
ZnVsbCBibG9ja3MKICAgICAgICAgICAgKyBtX2hlYXAubmV4dENlbGwgLy8gYWxsb2NhdGVkIGNl
bGxzIGluIGN1cnJlbnQgYmxvY2sKQEAgLTU2NywxNjUgKzMyNiw0MiBAQCBzaXplX3QgSGVhcDo6
b2JqZWN0Q291bnQoKSBjb25zdAogICAgICAgICAgICAtIG1faGVhcC51c2VkQmxvY2tzOyAvLyAx
IGNlbGwgcGVyIGJsb2NrIGlzIGEgZHVtbXkgc2VudGluZWwKIH0KIAotdm9pZCBIZWFwOjphZGRU
b1N0YXRpc3RpY3MoSGVhcDo6U3RhdGlzdGljcyYgc3RhdGlzdGljcykgY29uc3QKK3ZvaWQgTWFy
a2VkU3BhY2U6OmFkZFRvU3RhdGlzdGljcyhTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25zdAog
ewogICAgIHN0YXRpc3RpY3Muc2l6ZSArPSBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NLX1NJWkU7
CiAgICAgc3RhdGlzdGljcy5mcmVlICs9IG1faGVhcC51c2VkQmxvY2tzICogQkxPQ0tfU0laRSAt
IChvYmplY3RDb3VudCgpICogSGVhcENvbnN0YW50czo6Y2VsbFNpemUpOwogfQogCi1IZWFwOjpT
dGF0aXN0aWNzIEhlYXA6OnN0YXRpc3RpY3MoKSBjb25zdAorTWFya2VkU3BhY2U6OlN0YXRpc3Rp
Y3MgTWFya2VkU3BhY2U6OnN0YXRpc3RpY3MoKSBjb25zdAogewogICAgIFN0YXRpc3RpY3Mgc3Rh
dGlzdGljcyA9IHsgMCwgMCB9OwogICAgIGFkZFRvU3RhdGlzdGljcyhzdGF0aXN0aWNzKTsKICAg
ICByZXR1cm4gc3RhdGlzdGljczsKIH0KIAotc2l6ZV90IEhlYXA6OnNpemUoKSBjb25zdAorc2l6
ZV90IE1hcmtlZFNwYWNlOjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9oZWFwLnVzZWRC
bG9ja3MgKiBCTE9DS19TSVpFOwogfQogCi1zaXplX3QgSGVhcDo6Z2xvYmFsT2JqZWN0Q291bnQo
KQotewotICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgaWYgKEpTR2xvYmFsT2JqZWN0KiBoZWFk
ID0gbV9nbG9iYWxEYXRhLT5oZWFkKSB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBvID0gaGVh
ZDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgKytjb3VudDsKLSAgICAgICAgICAgIG8gPSBv
LT5uZXh0KCk7Ci0gICAgICAgIH0gd2hpbGUgKG8gIT0gaGVhZCk7Ci0gICAgfQotICAgIHJldHVy
biBjb3VudDsKLX0KLQotc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCkK
LXsKLSAgICBzaXplX3QgY291bnQgPSAwOwotICAgIGlmIChKU0dsb2JhbE9iamVjdCogaGVhZCA9
IG1fZ2xvYmFsRGF0YS0+aGVhZCkgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogbyA9IGhlYWQ7
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChtX3Byb3RlY3RlZFZhbHVlcy5jb250YWlu
cyhvKSkKLSAgICAgICAgICAgICAgICArK2NvdW50OwotICAgICAgICAgICAgbyA9IG8tPm5leHQo
KTsKLSAgICAgICAgfSB3aGlsZSAobyAhPSBoZWFkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291
bnQ7Ci19Ci0KLXNpemVfdCBIZWFwOjpwcm90ZWN0ZWRPYmplY3RDb3VudCgpCit2b2lkIE1hcmtl
ZFNwYWNlOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIG1fcHJvdGVjdGVkVmFsdWVzLnNpemUoKTsK
LX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBp
ZiAoY2VsbC0+aXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuICJzdHJpbmciOwotICAgIGlmIChj
ZWxsLT5pc0dldHRlclNldHRlcigpKQotICAgICAgICByZXR1cm4gIkdldHRlci1TZXR0ZXIiOwot
ICAgIGlmIChjZWxsLT5pc0FQSVZhbHVlV3JhcHBlcigpKQotICAgICAgICByZXR1cm4gIkFQSSB3
cmFwcGVyIjsKLSAgICBpZiAoY2VsbC0+aXNQcm9wZXJ0eU5hbWVJdGVyYXRvcigpKQotICAgICAg
ICByZXR1cm4gIkZvci1pbiBpdGVyYXRvciI7Ci0gICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQot
ICAgICAgICByZXR1cm4gIltlbXB0eSBjZWxsXSI7Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZv
ID0gY2VsbC0+Y2xhc3NJbmZvKCk7Ci0gICAgcmV0dXJuIGluZm8gPyBpbmZvLT5jbGFzc05hbWUg
OiAiT2JqZWN0IjsKLX0KLQotSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+KiBIZWFwOjpwcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkKLXsKLSAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFy
Kj4qIGNvdW50cyA9IG5ldyBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj47Ci0KLSAgICBQcm90
ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwotICAg
IGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY291bnRzLT5hZGQodHlwZU5hbWUoaXQt
PmZpcnN0KSk7Ci0KLSAgICByZXR1cm4gY291bnRzOwotfQotCi1IYXNoQ291bnRlZFNldDxjb25z
dCBjaGFyKj4qIEhlYXA6Om9iamVjdFR5cGVDb3VudHMoKQotewotICAgIEhhc2hDb3VudGVkU2V0
PGNvbnN0IGNoYXIqPiogY291bnRzID0gbmV3IEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjsK
LQotICAgIExpdmVPYmplY3RJdGVyYXRvciBpdCA9IHByaW1hcnlIZWFwQmVnaW4oKTsKLSAgICBM
aXZlT2JqZWN0SXRlcmF0b3IgaGVhcEVuZCA9IHByaW1hcnlIZWFwRW5kKCk7Ci0gICAgZm9yICgg
OyBpdCAhPSBoZWFwRW5kOyArK2l0KQotICAgICAgICBjb3VudHMtPmFkZCh0eXBlTmFtZSgqaXQp
KTsKLQotICAgIHJldHVybiBjb3VudHM7Ci19Ci0KLWJvb2wgSGVhcDo6aXNCdXN5KCkKLXsKLSAg
ICByZXR1cm4gbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb247Ci19Ci0K
LXZvaWQgSGVhcDo6cmVzZXQoKQotewotICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmlkZW50aWZp
ZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKLSAg
ICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwotCi0gICAgbWFya1Jvb3RzKCk7Ci0KLSAgICBK
QVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKLQogICAgIG1faGVhcC5uZXh0Q2VsbCA9IDA7CiAg
ICAgbV9oZWFwLm5leHRCbG9jayA9IDA7Ci0gICAgbV9oZWFwLmV4dHJhQ29zdCA9IDA7CiAjaWYg
RU5BQkxFKEpTQ19aT01CSUVTKQogICAgIHN3ZWVwKCk7CiAjZW5kaWYKICAgICByZXNpemVCbG9j
a3MoKTsKLQotICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwotCi0gICAgKCptX2FjdGl2aXR5
Q2FsbGJhY2spKCk7Ci19Ci0KLXZvaWQgSGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UoKQotewotICAg
IEFTU0VSVChnbG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCku
Y3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKLSAgICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigp
OwotCi0gICAgLy8gSWYgdGhlIGxhc3QgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGhlYXAgZGVhbGxv
Y2F0ZWQgYmxvY2tzLCB3ZSBuZWVkCi0gICAgLy8gdG8gY2xlYW4gdXAgcmVtYWluaW5nIGdhcmJh
Z2UgYmVmb3JlIG1hcmtpbmcuIE90aGVyd2lzZSwgdGhlIGNvbnNlcnZhdGl2ZQotICAgIC8vIG1h
cmtpbmcgbWVjaGFuaXNtIG1pZ2h0IGZvbGxvdyBhIHBvaW50ZXIgdG8gdW5tYXBwZWQgbWVtb3J5
LgotICAgIGlmIChtX2hlYXAuZGlkU2hyaW5rKQotICAgICAgICBzd2VlcCgpOwotCi0gICAgbWFy
a1Jvb3RzKCk7Ci0KLSAgICBKQVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKLQotICAgIG1faGVh
cC5uZXh0Q2VsbCA9IDA7Ci0gICAgbV9oZWFwLm5leHRCbG9jayA9IDA7Ci0gICAgbV9oZWFwLmV4
dHJhQ29zdCA9IDA7Ci0gICAgc3dlZXAoKTsKLSAgICByZXNpemVCbG9ja3MoKTsKLQotICAgIEpB
VkFTQ1JJUFRDT1JFX0dDX0VORCgpOwogfQogCi1MaXZlT2JqZWN0SXRlcmF0b3IgSGVhcDo6cHJp
bWFyeUhlYXBCZWdpbigpCitMaXZlT2JqZWN0SXRlcmF0b3IgTWFya2VkU3BhY2U6OnByaW1hcnlI
ZWFwQmVnaW4oKQogewogICAgIHJldHVybiBMaXZlT2JqZWN0SXRlcmF0b3IobV9oZWFwLCAwKTsK
IH0KIAotTGl2ZU9iamVjdEl0ZXJhdG9yIEhlYXA6OnByaW1hcnlIZWFwRW5kKCkKK0xpdmVPYmpl
Y3RJdGVyYXRvciBNYXJrZWRTcGFjZTo6cHJpbWFyeUhlYXBFbmQoKQogewogICAgIHJldHVybiBM
aXZlT2JqZWN0SXRlcmF0b3IobV9oZWFwLCBtX2hlYXAudXNlZEJsb2Nrcyk7CiB9CiAKLXZvaWQg
SGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4g
YWN0aXZpdHlDYWxsYmFjaykKLXsKLSAgICBtX2FjdGl2aXR5Q2FsbGJhY2sgPSBhY3Rpdml0eUNh
bGxiYWNrOwotfQotCi1HQ0FjdGl2aXR5Q2FsbGJhY2sqIEhlYXA6OmFjdGl2aXR5Q2FsbGJhY2so
KQotewotICAgIHJldHVybiBtX2FjdGl2aXR5Q2FsbGJhY2suZ2V0KCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3Bh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRT
cGFjZS5oCShyZXZpc2lvbiA3NTQ1MSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGVhcC5oOjc1NDUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2Vk
U3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKwor
I2lmbmRlZiBIZWFwX2gKKyNkZWZpbmUgSGVhcF9oCisKKyNpbmNsdWRlICJHQ0hhbmRsZS5oIgor
I2luY2x1ZGUgIkpTVmFsdWUuaCIKKyNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKKyNp
bmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQml0
bWFwLmg+CisjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaENv
dW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFnZUFs
bG9jYXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisK
KyNkZWZpbmUgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChjbGFzcykgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKGNsYXNzKSA8PSBDRUxMX1NJWkUsIGNsYXNzX2ZpdHNfaW5fY2VsbCkKKworbmFtZXNw
YWNlIEpTQyB7CisKKyAgICBjbGFzcyBDb2xsZWN0b3JCbG9jazsKKyAgICBjbGFzcyBHQ0FjdGl2
aXR5Q2FsbGJhY2s7CisgICAgY2xhc3MgSlNDZWxsOworICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsK
KyAgICBjbGFzcyBKU1ZhbHVlOworICAgIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOworICAg
IGNsYXNzIE1hcmtTdGFjazsKKworICAgIGVudW0gT3BlcmF0aW9uSW5Qcm9ncmVzcyB7IE5vT3Bl
cmF0aW9uLCBBbGxvY2F0aW9uLCBDb2xsZWN0aW9uIH07CisKKyAgICBjbGFzcyBMaXZlT2JqZWN0
SXRlcmF0b3I7CisKKyNpZiBPUyhXSU5DRSkgfHwgT1MoU1lNQklBTikgfHwgUExBVEZPUk0oQlJF
V01QKQorICAgIGNvbnN0IHNpemVfdCBCTE9DS19TSVpFID0gNjQgKiAxMDI0OyAvLyA2NGsKKyNl
bHNlCisgICAgY29uc3Qgc2l6ZV90IEJMT0NLX1NJWkUgPSAyNTYgKiAxMDI0OyAvLyAyNTZrCisj
ZW5kaWYKKworICAgIHN0cnVjdCBDb2xsZWN0b3JIZWFwIHsKKyAgICAgICAgc2l6ZV90IG5leHRC
bG9jazsKKyAgICAgICAgc2l6ZV90IG5leHRDZWxsOworICAgICAgICBQYWdlQWxsb2NhdGlvbkFs
aWduZWQqIGJsb2NrczsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBudW1CbG9ja3M7CisgICAg
ICAgIHNpemVfdCB1c2VkQmxvY2tzOworCisgICAgICAgIHNpemVfdCBleHRyYUNvc3Q7CisgICAg
ICAgIGJvb2wgZGlkU2hyaW5rOworCisgICAgICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0
aW9uSW5Qcm9ncmVzczsKKworICAgICAgICBDb2xsZWN0b3JCbG9jayogY29sbGVjdG9yQmxvY2so
c2l6ZV90IGluZGV4KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPihibG9ja3NbaW5kZXhdLmJhc2UoKSk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgY2xhc3MgSGVhcCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgcHVi
bGljOgorICAgICAgICB2b2lkIGRlc3Ryb3koKTsKKworICAgICAgICB2b2lkKiBhbGxvY2F0ZShz
aXplX3QpOworCisgICAgICAgIGJvb2wgaXNCdXN5KCk7IC8vIHRydWUgaWYgYW4gYWxsb2NhdGlv
biBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCisgICAgICAgIHZvaWQgY29sbGVjdEFsbEdh
cmJhZ2UoKTsKKworICAgICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGFjdGl2aXR5Q2FsbGJhY2so
KTsKKyAgICAgICAgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0
eUNhbGxiYWNrPik7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5FeHRyYUNvc3Qg
PSAyNTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RXh0cmFDb3N0ID0gMTAyNCAq
IDEwMjQ7CisKKyAgICAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3Qp
OworCisgICAgICAgIHNpemVfdCBvYmplY3RDb3VudCgpIGNvbnN0OworICAgICAgICBzdHJ1Y3Qg
U3RhdGlzdGljcyB7CisgICAgICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgICAgIHNpemVf
dCBmcmVlOworICAgICAgICB9OworICAgICAgICBTdGF0aXN0aWNzIHN0YXRpc3RpY3MoKSBjb25z
dDsKKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKKworICAgICAgICB2b2lkIHByb3RlY3Qo
SlNWYWx1ZSk7CisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgbm8gbG9u
Z2VyIHByb3RlY3RlZCBieSBhbnkgcHJvdGVjdCBwb2ludGVycworICAgICAgICAvLyAodGhvdWdo
IGl0IG1heSBzdGlsbCBiZSBhbGl2ZSBkdWUgdG8gaGVhcC9zdGFjayByZWZlcmVuY2VzKS4KKyAg
ICAgICAgYm9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7CisKKyAgICAgICAgc3RhdGljIEhlYXAqIGhl
YXAoSlNWYWx1ZSk7IC8vIDAgZm9yIGltbWVkaWF0ZSB2YWx1ZXMKKyAgICAgICAgc3RhdGljIEhl
YXAqIGhlYXAoSlNDZWxsKik7CisKKyAgICAgICAgc2l6ZV90IGdsb2JhbE9iamVjdENvdW50KCk7
CisgICAgICAgIHNpemVfdCBwcm90ZWN0ZWRPYmplY3RDb3VudCgpOworICAgICAgICBzaXplX3Qg
cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKKyAgICAgICAgSGFzaENvdW50ZWRTZXQ8Y29u
c3QgY2hhcio+KiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCk7CisgICAgICAgIEhhc2hDb3Vu
dGVkU2V0PGNvbnN0IGNoYXIqPiogb2JqZWN0VHlwZUNvdW50cygpOworCisgICAgICAgIHN0YXRp
YyBib29sIGlzQ2VsbE1hcmtlZChjb25zdCBKU0NlbGwqKTsKKyAgICAgICAgc3RhdGljIGJvb2wg
Y2hlY2tNYXJrQ2VsbChjb25zdCBKU0NlbGwqKTsKKyAgICAgICAgc3RhdGljIHZvaWQgbWFya0Nl
bGwoSlNDZWxsKik7CisKKyAgICAgICAgV2Vha0dDSGFuZGxlKiBhZGRXZWFrR0NIYW5kbGUoSlND
ZWxsKik7CisKKyAgICAgICAgdm9pZCBtYXJrQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiwgdm9p
ZCogc3RhcnQsIHZvaWQqIGVuZCk7CisKKyAgICAgICAgdm9pZCBwdXNoVGVtcFNvcnRWZWN0b3Io
V1RGOjpWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiopOworICAgICAgICB2b2lkIHBvcFRlbXBTb3J0
VmVjdG9yKFdURjo6VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qKTsgICAgICAgIAorCisgICAgICAg
IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPiYgbWFya0xpc3RTZXQoKSB7IGlmICghbV9t
YXJrTGlzdFNldCkgbV9tYXJrTGlzdFNldCA9IG5ldyBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVm
ZmVyKj47IHJldHVybiAqbV9tYXJrTGlzdFNldDsgfQorCisgICAgICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgICAgICBzdGF0
aWMgYm9vbCBpc051bWJlcihKU0NlbGwqKTsKKyAgICAgICAgCisgICAgICAgIExpdmVPYmplY3RJ
dGVyYXRvciBwcmltYXJ5SGVhcEJlZ2luKCk7CisgICAgICAgIExpdmVPYmplY3RJdGVyYXRvciBw
cmltYXJ5SGVhcEVuZCgpOworCisgICAgICAgIE1hY2hpbmVTdGFja01hcmtlciYgbWFjaGluZVN0
YWNrTWFya2VyKCkgeyByZXR1cm4gbV9tYWNoaW5lU3RhY2tNYXJrZXI7IH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAgICAgdm9pZCBzd2VlcCgpOworICAgICAg
ICBzdGF0aWMgQ29sbGVjdG9yQmxvY2sqIGNlbGxCbG9jayhjb25zdCBKU0NlbGwqKTsKKyAgICAg
ICAgc3RhdGljIHNpemVfdCBjZWxsT2Zmc2V0KGNvbnN0IEpTQ2VsbCopOworCisgICAgICAgIGZy
aWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgICAgIEhlYXAoSlNHbG9iYWxEYXRhKik7Cisg
ICAgICAgIH5IZWFwKCk7CisKKyAgICAgICAgTkVWRVJfSU5MSU5FIENvbGxlY3RvckJsb2NrKiBh
bGxvY2F0ZUJsb2NrKCk7CisgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGZyZWVCbG9jayhzaXpl
X3QpOworICAgICAgICB2b2lkIGZyZWVCbG9ja3MoKTsKKyAgICAgICAgdm9pZCByZXNpemVCbG9j
a3MoKTsKKyAgICAgICAgdm9pZCBncm93QmxvY2tzKHNpemVfdCBuZWVkZWRCbG9ja3MpOworICAg
ICAgICB2b2lkIHNocmlua0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKTsKKyAgICAgICAgdm9p
ZCBjbGVhck1hcmtCaXRzKCk7CisgICAgICAgIHZvaWQgY2xlYXJNYXJrQml0cyhDb2xsZWN0b3JC
bG9jayopOworICAgICAgICBzaXplX3QgbWFya2VkQ2VsbHMoc2l6ZV90IHN0YXJ0QmxvY2sgPSAw
LCBzaXplX3Qgc3RhcnRDZWxsID0gMCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCByZWNvcmRFeHRy
YUNvc3Qoc2l6ZV90KTsKKworICAgICAgICB2b2lkIGFkZFRvU3RhdGlzdGljcyhTdGF0aXN0aWNz
JikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBtYXJrUm9vdHMoKTsKKyAgICAgICAgdm9pZCBtYXJr
UHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhY2smKTsKKyAgICAgICAgdm9pZCBtYXJrVGVtcFNvcnRW
ZWN0b3JzKE1hcmtTdGFjayYpOworCisgICAgICAgIHZvaWQgdXBkYXRlV2Vha0dDSGFuZGxlcygp
OworICAgICAgICBXZWFrR0NIYW5kbGVQb29sKiB3ZWFrR0NIYW5kbGVQb29sKHNpemVfdCBpbmRl
eCk7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiBQcm90ZWN0Q291
bnRTZXQ7CisKKyAgICAgICAgQ29sbGVjdG9ySGVhcCBtX2hlYXA7CisKKyAgICAgICAgUHJvdGVj
dENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOworICAgICAgICBXVEY6OlZlY3RvcjxQYWdlQWxs
b2NhdGlvbkFsaWduZWQ+IG1fd2Vha0dDSGFuZGxlUG9vbHM7CisgICAgICAgIFdURjo6VmVjdG9y
PFdURjo6VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qID4gbV90ZW1wU29ydGluZ1ZlY3RvcnM7CisK
KyAgICAgICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+KiBtX21hcmtMaXN0U2V0Owor
CisgICAgICAgIE93blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IG1fYWN0aXZpdHlDYWxsYmFjazsK
KworICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgCisgICAgICAg
IE1hY2hpbmVTdGFja01hcmtlciBtX21hY2hpbmVTdGFja01hcmtlcjsKKyAgICB9OworCisgICAg
Ly8gdHVuYWJsZSBwYXJhbWV0ZXJzCisgICAgLy8gZGVyaXZlZCBjb25zdGFudHMKKyAgICBjb25z
dCBzaXplX3QgQkxPQ0tfT0ZGU0VUX01BU0sgPSBCTE9DS19TSVpFIC0gMTsKKyAgICBjb25zdCBz
aXplX3QgQkxPQ0tfTUFTSyA9IH5CTE9DS19PRkZTRVRfTUFTSzsKKyAgICBjb25zdCBzaXplX3Qg
TUlOSU1VTV9DRUxMX1NJWkUgPSA2NDsKKyAgICBjb25zdCBzaXplX3QgQ0VMTF9BUlJBWV9MRU5H
VEggPSAoTUlOSU1VTV9DRUxMX1NJWkUgLyBzaXplb2YoZG91YmxlKSkgKyAoTUlOSU1VTV9DRUxM
X1NJWkUgJSBzaXplb2YoZG91YmxlKSAhPSAwID8gc2l6ZW9mKGRvdWJsZSkgOiAwKTsKKyAgICBj
b25zdCBzaXplX3QgQ0VMTF9TSVpFID0gQ0VMTF9BUlJBWV9MRU5HVEggKiBzaXplb2YoZG91Ymxl
KTsKKyAgICBjb25zdCBzaXplX3QgU01BTExfQ0VMTF9TSVpFID0gQ0VMTF9TSVpFIC8gMjsKKyAg
ICBjb25zdCBzaXplX3QgQ0VMTF9NQVNLID0gQ0VMTF9TSVpFIC0gMTsKKyAgICBjb25zdCBzaXpl
X3QgQ0VMTF9BTElHTl9NQVNLID0gfkNFTExfTUFTSzsKKyAgICBjb25zdCBzaXplX3QgQ0VMTFNf
UEVSX0JMT0NLID0gKEJMT0NLX1NJWkUgLSBzaXplb2YoSGVhcCopKSAqIDggKiBDRUxMX1NJWkUg
LyAoOCAqIENFTExfU0laRSArIDEpIC8gQ0VMTF9TSVpFOyAvLyBvbmUgYml0bWFwIGJ5dGUgY2Fu
IHJlcHJlc2VudCA4IGNlbGxzLgorICAgIAorICAgIGNvbnN0IHNpemVfdCBCSVRNQVBfU0laRSA9
IChDRUxMU19QRVJfQkxPQ0sgKyA3KSAvIDg7CisgICAgY29uc3Qgc2l6ZV90IEJJVE1BUF9XT1JE
UyA9IChCSVRNQVBfU0laRSArIDMpIC8gc2l6ZW9mKHVpbnQzMl90KTsKKworICAgIHN0cnVjdCBD
b2xsZWN0b3JCaXRtYXAgeworICAgICAgICBGaXhlZEFycmF5PHVpbnQzMl90LCBCSVRNQVBfV09S
RFM+IGJpdHM7CisgICAgICAgIGJvb2wgZ2V0KHNpemVfdCBuKSBjb25zdCB7IHJldHVybiAhIShi
aXRzW24gPj4gNV0gJiAoMSA8PCAobiAmIDB4MUYpKSk7IH0gCisgICAgICAgIHZvaWQgc2V0KHNp
emVfdCBuKSB7IGJpdHNbbiA+PiA1XSB8PSAoMSA8PCAobiAmIDB4MUYpKTsgfSAKKyAgICAgICAg
Ym9vbCBnZXRzZXQoc2l6ZV90IG4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkg
PSAoMSA8PCAobiAmIDB4MUYpKTsKKyAgICAgICAgICAgIHVpbnQzMl90JiBiID0gYml0c1tuID4+
IDVdOworICAgICAgICAgICAgYm9vbCByID0gISEoYiAmIGkpOworICAgICAgICAgICAgYiB8PSBp
OworICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgIH0gCisgICAgICAgIHZvaWQgY2xlYXIo
c2l6ZV90IG4pIHsgYml0c1tuID4+IDVdICY9IH4oMSA8PCAobiAmIDB4MUYpKTsgfSAKKyAgICAg
ICAgdm9pZCBjbGVhckFsbCgpIHsgbWVtc2V0KGJpdHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykp
OyB9CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZHZhbmNlVG9OZXh0UG9zc2libGVGcmVl
Q2VsbChzaXplX3QmIHN0YXJ0Q2VsbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF+Yml0
c1tzdGFydENlbGwgPj4gNV0pCisgICAgICAgICAgICAgICAgc3RhcnRDZWxsID0gKHN0YXJ0Q2Vs
bCAmICh+MHgxRikpICsgMzI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKytz
dGFydENlbGw7CisgICAgICAgIH0KKyAgICAgICAgc2l6ZV90IGNvdW50KHNpemVfdCBzdGFydENl
bGwgPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAg
ICAgICAgIGZvciAoIDsgKHN0YXJ0Q2VsbCAmIDB4MUYpICE9IDA7ICsrc3RhcnRDZWxsKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGdldChzdGFydENlbGwpKQorICAgICAgICAgICAgICAgICAgICAr
K3Jlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzdGFy
dENlbGwgPj4gNTsgaSA8IEJJVE1BUF9XT1JEUzsgKytpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBXVEY6OmJpdENvdW50KGJpdHNbaV0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgICAgICBzaXplX3QgaXNFbXB0eSgpIC8vIE11Y2ggbW9yZSBlZmZpY2ll
bnQgdGhhbiB0ZXN0aW5nIGNvdW50KCkgPT0gMC4KKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBCSVRNQVBfV09SRFM7ICsraSkKKyAgICAgICAgICAgICAgICBp
ZiAoYml0c1tpXSAhPSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisgIAorICAgIHN0cnVjdCBD
b2xsZWN0b3JDZWxsIHsKKyAgICAgICAgRml4ZWRBcnJheTxkb3VibGUsIENFTExfQVJSQVlfTEVO
R1RIPiBtZW1vcnk7CisgICAgfTsKKworICAgIGNsYXNzIENvbGxlY3RvckJsb2NrIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIEZpeGVkQXJyYXk8Q29sbGVjdG9yQ2VsbCwgQ0VMTFNfUEVSX0JMT0NL
PiBjZWxsczsKKyAgICAgICAgQ29sbGVjdG9yQml0bWFwIG1hcmtlZDsKKyAgICAgICAgSGVhcCog
aGVhcDsKKyAgICB9OworCisgICAgc3RydWN0IEhlYXBDb25zdGFudHMgeworICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGNlbGxTaXplID0gQ0VMTF9TSVpFOworICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGNlbGxzUGVyQmxvY2sgPSBDRUxMU19QRVJfQkxPQ0s7CisgICAgICAgIHR5cGVk
ZWYgQ29sbGVjdG9yQ2VsbCBDZWxsOworICAgICAgICB0eXBlZGVmIENvbGxlY3RvckJsb2NrIEJs
b2NrOworICAgIH07CisKKyAgICBpbmxpbmUgQ29sbGVjdG9yQmxvY2sqIEhlYXA6OmNlbGxCbG9j
ayhjb25zdCBKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxDb2xsZWN0b3JCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxsKSAm
IEJMT0NLX01BU0spOworICAgIH0KKworICAgIGlubGluZSBzaXplX3QgSGVhcDo6Y2VsbE9mZnNl
dChjb25zdCBKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihjZWxsKSAmIEJMT0NLX09GRlNFVF9NQVNLKSAvIENFTExfU0laRTsK
KyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBIZWFwOjppc0NlbGxNYXJrZWQoY29uc3QgSlNDZWxs
KiBjZWxsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNlbGxCbG9jayhjZWxsKS0+bWFya2VkLmdl
dChjZWxsT2Zmc2V0KGNlbGwpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBIZWFwOjpjaGVj
a01hcmtDZWxsKGNvbnN0IEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHJldHVybiBjZWxs
QmxvY2soY2VsbCktPm1hcmtlZC5nZXRzZXQoY2VsbE9mZnNldChjZWxsKSk7CisgICAgfQorCisg
ICAgaW5saW5lIHZvaWQgSGVhcDo6bWFya0NlbGwoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAg
ICAgY2VsbEJsb2NrKGNlbGwpLT5tYXJrZWQuc2V0KGNlbGxPZmZzZXQoY2VsbCkpOworICAgIH0K
KworICAgIGlubGluZSB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29z
dCkKKyAgICB7CisgICAgICAgIGlmIChjb3N0ID4gbWluRXh0cmFDb3N0KSAKKyAgICAgICAgICAg
IHJlY29yZEV4dHJhQ29zdChjb3N0KTsKKyAgICB9CisgICAgCisgICAgaW5saW5lIFdlYWtHQ0hh
bmRsZVBvb2wqIEhlYXA6OndlYWtHQ0hhbmRsZVBvb2woc2l6ZV90IGluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYWtHQ0hhbmRsZVBvb2wqPihtX3dlYWtHQ0hhbmRs
ZVBvb2xzW2luZGV4XS5iYXNlKCkpOworICAgIH0KK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLyogSGVhcF9oICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJr
ZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
cmtlZFNwYWNlLmgJKHJldmlzaW9uIDc1NDQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTksNDAgKzE5LDI1IEBACiAg
KgogICovCiAKLSNpZm5kZWYgSGVhcF9oCi0jZGVmaW5lIEhlYXBfaAorI2lmbmRlZiBNYXJrZWRT
cGFjZV9oCisjZGVmaW5lIE1hcmtlZFNwYWNlX2gKIAotI2luY2x1ZGUgIkdDSGFuZGxlLmgiCi0j
aW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgotI2lu
Y2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9CaXRt
YXAuaD4KKyNpbmNsdWRlICJQYWdlQWxsb2NhdGlvbkFsaWduZWQuaCIKICNpbmNsdWRlIDx3dGYv
Rml4ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgotI2luY2x1ZGUg
PHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotI2RlZmluZSBBU1NFUlRfQ0xBU1Nf
RklUU19JTl9DRUxMKGNsYXNzKSBDT01QSUxFX0FTU0VSVChzaXplb2YoY2xhc3MpIDw9IENFTExf
U0laRSwgY2xhc3NfZml0c19pbl9jZWxsKQorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb2xsZWN0b3JCbG9jazsKLSAgICBjbGFzcyBHQ0Fj
dGl2aXR5Q2FsbGJhY2s7CisgICAgY2xhc3MgSGVhcDsKICAgICBjbGFzcyBKU0NlbGw7CiAgICAg
Y2xhc3MgSlNHbG9iYWxEYXRhOwotICAgIGNsYXNzIEpTVmFsdWU7Ci0gICAgY2xhc3MgTWFya2Vk
QXJndW1lbnRCdWZmZXI7Ci0gICAgY2xhc3MgTWFya1N0YWNrOwotCi0gICAgZW51bSBPcGVyYXRp
b25JblByb2dyZXNzIHsgTm9PcGVyYXRpb24sIEFsbG9jYXRpb24sIENvbGxlY3Rpb24gfTsKLQog
ICAgIGNsYXNzIExpdmVPYmplY3RJdGVyYXRvcjsKKyAgICBjbGFzcyBNYXJrU3RhY2s7CisgICAg
Y2xhc3MgV2Vha0dDSGFuZGxlOwogCiAjaWYgT1MoV0lOQ0UpIHx8IE9TKFNZTUJJQU4pIHx8IFBM
QVRGT1JNKEJSRVdNUCkKICAgICBjb25zdCBzaXplX3QgQkxPQ0tfU0laRSA9IDY0ICogMTAyNDsg
Ly8gNjRrCkBAIC02MCw2ICs0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNvbnN0IHNpemVf
dCBCTE9DS19TSVpFID0gMjU2ICogMTAyNDsgLy8gMjU2awogI2VuZGlmCiAKKyAgICB0eXBlZGVm
IEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RDb3VudFNldDsKKwogICAgIHN0cnVjdCBD
b2xsZWN0b3JIZWFwIHsKICAgICAgICAgc2l6ZV90IG5leHRCbG9jazsKICAgICAgICAgc2l6ZV90
IG5leHRDZWxsOwpAQCAtNjgsMzQgKzU1LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
aXplX3QgbnVtQmxvY2tzOwogICAgICAgICBzaXplX3QgdXNlZEJsb2NrczsKIAotICAgICAgICBz
aXplX3QgZXh0cmFDb3N0OwogICAgICAgICBib29sIGRpZFNocmluazsKIAotICAgICAgICBPcGVy
YXRpb25JblByb2dyZXNzIG9wZXJhdGlvbkluUHJvZ3Jlc3M7Ci0KICAgICAgICAgQ29sbGVjdG9y
QmxvY2sqIGNvbGxlY3RvckJsb2NrKHNpemVfdCBpbmRleCkgY29uc3QKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbGxlY3RvckJsb2NrKj4oYmxvY2tzW2luZGV4
XS5iYXNlKCkpOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGNsYXNzIEhlYXAgOiBwdWJsaWMg
Tm9uY29weWFibGUgeworICAgIGNsYXNzIE1hcmtlZFNwYWNlIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgZGVzdHJveSgpOworICAgICAgICBNYXJrZWRT
cGFjZShKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgdm9pZCBkZXN0cm95KFByb3RlY3RDb3VudFNl
dCYpOwogCiAgICAgICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CiAKLSAgICAgICAgYm9vbCBp
c0J1c3koKTsgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9uIG9yIGNvbGxlY3Rpb24gaXMgaW4gcHJv
Z3Jlc3MKLSAgICAgICAgdm9pZCBjb2xsZWN0QWxsR2FyYmFnZSgpOwotCi0gICAgICAgIEdDQWN0
aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICB2b2lkIHNldEFjdGl2
aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+KTsKLQotICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1pbkV4dHJhQ29zdCA9IDI1NjsKLSAgICAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBtYXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsKLQotICAgICAgICB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCk7Ci0KICAgICAgICAgc2l6ZV90IG9iamVj
dENvdW50KCkgY29uc3Q7CiAgICAgICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAgICAgICAgICAg
IHNpemVfdCBzaXplOwpAQCAtMTA0LDIwICs3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBTdGF0aXN0aWNzIHN0YXRpc3RpY3MoKSBjb25zdDsKICAgICAgICAgc2l6ZV90IHNpemUoKSBj
b25zdDsKIAotICAgICAgICB2b2lkIHByb3RlY3QoSlNWYWx1ZSk7Ci0gICAgICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBhbnkgcHJvdGVj
dCBwb2ludGVycwotICAgICAgICAvLyAodGhvdWdoIGl0IG1heSBzdGlsbCBiZSBhbGl2ZSBkdWUg
dG8gaGVhcC9zdGFjayByZWZlcmVuY2VzKS4KLSAgICAgICAgYm9vbCB1bnByb3RlY3QoSlNWYWx1
ZSk7Ci0KLSAgICAgICAgc3RhdGljIEhlYXAqIGhlYXAoSlNWYWx1ZSk7IC8vIDAgZm9yIGltbWVk
aWF0ZSB2YWx1ZXMKICAgICAgICAgc3RhdGljIEhlYXAqIGhlYXAoSlNDZWxsKik7CiAKLSAgICAg
ICAgc2l6ZV90IGdsb2JhbE9iamVjdENvdW50KCk7Ci0gICAgICAgIHNpemVfdCBwcm90ZWN0ZWRP
YmplY3RDb3VudCgpOwotICAgICAgICBzaXplX3QgcHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQo
KTsKLSAgICAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+KiBwcm90ZWN0ZWRPYmplY3RU
eXBlQ291bnRzKCk7Ci0gICAgICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiogb2JqZWN0
VHlwZUNvdW50cygpOwotCiAgICAgICAgIHN0YXRpYyBib29sIGlzQ2VsbE1hcmtlZChjb25zdCBK
U0NlbGwqKTsKICAgICAgICAgc3RhdGljIGJvb2wgY2hlY2tNYXJrQ2VsbChjb25zdCBKU0NlbGwq
KTsKICAgICAgICAgc3RhdGljIHZvaWQgbWFya0NlbGwoSlNDZWxsKik7CkBAIC0xMjYsMzIgKzg4
LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgbWFya0NvbnNlcnZhdGl2ZWx5
KE1hcmtTdGFjayYsIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwogCi0gICAgICAgIHZvaWQgcHVz
aFRlbXBTb3J0VmVjdG9yKFdURjo6VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qKTsKLSAgICAgICAg
dm9pZCBwb3BUZW1wU29ydFZlY3RvcihXVEY6OlZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+Kik7ICAg
ICAgICAKLQotICAgICAgICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4mIG1hcmtMaXN0
U2V0KCkgeyBpZiAoIW1fbWFya0xpc3RTZXQpIG1fbWFya0xpc3RTZXQgPSBuZXcgSGFzaFNldDxN
YXJrZWRBcmd1bWVudEJ1ZmZlcio+OyByZXR1cm4gKm1fbWFya0xpc3RTZXQ7IH0KLQotICAgICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7
IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNOdW1iZXIoSlNDZWxsKik7CiAgICAgICAgIAogICAg
ICAgICBMaXZlT2JqZWN0SXRlcmF0b3IgcHJpbWFyeUhlYXBCZWdpbigpOwogICAgICAgICBMaXZl
T2JqZWN0SXRlcmF0b3IgcHJpbWFyeUhlYXBFbmQoKTsKIAotICAgICAgICBNYWNoaW5lU3RhY2tN
YXJrZXImIG1hY2hpbmVTdGFja01hcmtlcigpIHsgcmV0dXJuIG1fbWFjaGluZVN0YWNrTWFya2Vy
OyB9CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFs
RGF0YTsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCByZXNldCgpOwotICAgICAgICB2
b2lkIHN3ZWVwKCk7CiAgICAgICAgIHN0YXRpYyBDb2xsZWN0b3JCbG9jayogY2VsbEJsb2NrKGNv
bnN0IEpTQ2VsbCopOwogICAgICAgICBzdGF0aWMgc2l6ZV90IGNlbGxPZmZzZXQoY29uc3QgSlND
ZWxsKik7CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKLSAgICAgICAgSGVh
cChKU0dsb2JhbERhdGEqKTsKLSAgICAgICAgfkhlYXAoKTsKKyAgICAgICAgdm9pZCByZXNldCgp
OworICAgICAgICB2b2lkIHN3ZWVwKCk7CiAKICAgICAgICAgTkVWRVJfSU5MSU5FIENvbGxlY3Rv
ckJsb2NrKiBhbGxvY2F0ZUJsb2NrKCk7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGZyZWVC
bG9jayhzaXplX3QpOwotICAgICAgICB2b2lkIGZyZWVCbG9ja3MoKTsKICAgICAgICAgdm9pZCBy
ZXNpemVCbG9ja3MoKTsKICAgICAgICAgdm9pZCBncm93QmxvY2tzKHNpemVfdCBuZWVkZWRCbG9j
a3MpOwogICAgICAgICB2b2lkIHNocmlua0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKTsKQEAg
LTE1OSwzMiArMTEwLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNsZWFyTWFy
a0JpdHMoQ29sbGVjdG9yQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IG1hcmtlZENlbGxzKHNpemVf
dCBzdGFydEJsb2NrID0gMCwgc2l6ZV90IHN0YXJ0Q2VsbCA9IDApIGNvbnN0OwogCi0gICAgICAg
IHZvaWQgcmVjb3JkRXh0cmFDb3N0KHNpemVfdCk7Ci0KICAgICAgICAgdm9pZCBhZGRUb1N0YXRp
c3RpY3MoU3RhdGlzdGljcyYpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgbWFya1Jvb3RzKCk7Ci0g
ICAgICAgIHZvaWQgbWFya1Byb3RlY3RlZE9iamVjdHMoTWFya1N0YWNrJik7Ci0gICAgICAgIHZv
aWQgbWFya1RlbXBTb3J0VmVjdG9ycyhNYXJrU3RhY2smKTsKLQotICAgICAgICB2b2lkIHVwZGF0
ZVdlYWtHQ0hhbmRsZXMoKTsKLSAgICAgICAgV2Vha0dDSGFuZGxlUG9vbCogd2Vha0dDSGFuZGxl
UG9vbChzaXplX3QgaW5kZXgpOwotCi0gICAgICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8SlND
ZWxsKj4gUHJvdGVjdENvdW50U2V0OwogCisgICAgICAgIGJvb2wgZGlkU2hyaW5rKCkgeyByZXR1
cm4gbV9oZWFwLmRpZFNocmluazsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgogICAgICAgICBD
b2xsZWN0b3JIZWFwIG1faGVhcDsKLQotICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0
ZWRWYWx1ZXM7Ci0gICAgICAgIFdURjo6VmVjdG9yPFBhZ2VBbGxvY2F0aW9uQWxpZ25lZD4gbV93
ZWFrR0NIYW5kbGVQb29sczsKLSAgICAgICAgV1RGOjpWZWN0b3I8V1RGOjpWZWN0b3I8VmFsdWVT
dHJpbmdQYWlyPiogPiBtX3RlbXBTb3J0aW5nVmVjdG9yczsKLQotICAgICAgICBIYXNoU2V0PE1h
cmtlZEFyZ3VtZW50QnVmZmVyKj4qIG1fbWFya0xpc3RTZXQ7Ci0KLSAgICAgICAgT3duUHRyPEdD
QWN0aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNhbGxiYWNrOwotCiAgICAgICAgIEpTR2xvYmFs
RGF0YSogbV9nbG9iYWxEYXRhOwotICAgICAgICAKLSAgICAgICAgTWFjaGluZVN0YWNrTWFya2Vy
IG1fbWFjaGluZVN0YWNrTWFya2VyOwogICAgIH07CiAKICAgICAvLyB0dW5hYmxlIHBhcmFtZXRl
cnMKQEAgLTE5Nyw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjb25zdCBzaXplX3Qg
U01BTExfQ0VMTF9TSVpFID0gQ0VMTF9TSVpFIC8gMjsKICAgICBjb25zdCBzaXplX3QgQ0VMTF9N
QVNLID0gQ0VMTF9TSVpFIC0gMTsKICAgICBjb25zdCBzaXplX3QgQ0VMTF9BTElHTl9NQVNLID0g
fkNFTExfTUFTSzsKLSAgICBjb25zdCBzaXplX3QgQ0VMTFNfUEVSX0JMT0NLID0gKEJMT0NLX1NJ
WkUgLSBzaXplb2YoSGVhcCopKSAqIDggKiBDRUxMX1NJWkUgLyAoOCAqIENFTExfU0laRSArIDEp
IC8gQ0VMTF9TSVpFOyAvLyBvbmUgYml0bWFwIGJ5dGUgY2FuIHJlcHJlc2VudCA4IGNlbGxzLgor
ICAgIGNvbnN0IHNpemVfdCBDRUxMU19QRVJfQkxPQ0sgPSAoQkxPQ0tfU0laRSAtIHNpemVvZihN
YXJrZWRTcGFjZSopKSAqIDggKiBDRUxMX1NJWkUgLyAoOCAqIENFTExfU0laRSArIDEpIC8gQ0VM
TF9TSVpFOyAvLyBvbmUgYml0bWFwIGJ5dGUgY2FuIHJlcHJlc2VudCA4IGNlbGxzLgogICAgIAog
ICAgIGNvbnN0IHNpemVfdCBCSVRNQVBfU0laRSA9IChDRUxMU19QRVJfQkxPQ0sgKyA3KSAvIDg7
CiAgICAgY29uc3Qgc2l6ZV90IEJJVE1BUF9XT1JEUyA9IChCSVRNQVBfU0laRSArIDMpIC8gc2l6
ZW9mKHVpbnQzMl90KTsKQEAgLTI2MSw0MSArMTk1LDMxIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB0eXBlZGVmIENvbGxlY3RvckJsb2NrIEJsb2NrOwogICAgIH07CiAKLSAgICBpbmxpbmUg
Q29sbGVjdG9yQmxvY2sqIEhlYXA6OmNlbGxCbG9jayhjb25zdCBKU0NlbGwqIGNlbGwpCisgICAg
aW5saW5lIENvbGxlY3RvckJsb2NrKiBNYXJrZWRTcGFjZTo6Y2VsbEJsb2NrKGNvbnN0IEpTQ2Vs
bCogY2VsbCkKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvbGxlY3Rv
ckJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNlbGwpICYgQkxPQ0tfTUFTSyk7
CiAgICAgfQogCi0gICAgaW5saW5lIHNpemVfdCBIZWFwOjpjZWxsT2Zmc2V0KGNvbnN0IEpTQ2Vs
bCogY2VsbCkKKyAgICBpbmxpbmUgc2l6ZV90IE1hcmtlZFNwYWNlOjpjZWxsT2Zmc2V0KGNvbnN0
IEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGNlbGwpICYgQkxPQ0tfT0ZGU0VUX01BU0spIC8gQ0VMTF9TSVpFOwogICAgIH0K
IAotICAgIGlubGluZSBib29sIEhlYXA6OmlzQ2VsbE1hcmtlZChjb25zdCBKU0NlbGwqIGNlbGwp
CisgICAgaW5saW5lIGJvb2wgTWFya2VkU3BhY2U6OmlzQ2VsbE1hcmtlZChjb25zdCBKU0NlbGwq
IGNlbGwpCiAgICAgewogICAgICAgICByZXR1cm4gY2VsbEJsb2NrKGNlbGwpLT5tYXJrZWQuZ2V0
KGNlbGxPZmZzZXQoY2VsbCkpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIEhlYXA6OmNoZWNr
TWFya0NlbGwoY29uc3QgSlNDZWxsKiBjZWxsKQorICAgIGlubGluZSBib29sIE1hcmtlZFNwYWNl
OjpjaGVja01hcmtDZWxsKGNvbnN0IEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIHJldHVy
biBjZWxsQmxvY2soY2VsbCktPm1hcmtlZC5nZXRzZXQoY2VsbE9mZnNldChjZWxsKSk7CiAgICAg
fQogCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6bWFya0NlbGwoSlNDZWxsKiBjZWxsKQorICAgIGlu
bGluZSB2b2lkIE1hcmtlZFNwYWNlOjptYXJrQ2VsbChKU0NlbGwqIGNlbGwpCiAgICAgewogICAg
ICAgICBjZWxsQmxvY2soY2VsbCktPm1hcmtlZC5zZXQoY2VsbE9mZnNldChjZWxsKSk7CiAgICAg
fQogCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBj
b3N0KQotICAgIHsKLSAgICAgICAgaWYgKGNvc3QgPiBtaW5FeHRyYUNvc3QpIAotICAgICAgICAg
ICAgcmVjb3JkRXh0cmFDb3N0KGNvc3QpOwotICAgIH0KLSAgICAKLSAgICBpbmxpbmUgV2Vha0dD
SGFuZGxlUG9vbCogSGVhcDo6d2Vha0dDSGFuZGxlUG9vbChzaXplX3QgaW5kZXgpCi0gICAgewot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vha0dDSGFuZGxlUG9vbCo+KG1fd2Vha0dDSGFu
ZGxlUG9vbHNbaW5kZXhdLmJhc2UoKSk7Ci0gICAgfQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNl
bmRpZiAvKiBIZWFwX2ggKi8KKyNlbmRpZiAvLyBNYXJrZWRTcGFjZV9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcAkocmV2
aXNpb24gNzU3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NZW1vcnlTdGF0
aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotSGVhcDo6U3RhdGlzdGljcyBoZWFwU3RhdGlzdGljcyhKU0dsb2JhbERhdGEqIGNv
bW1vbkdsb2JhbERhdGEpCitNYXJrZWRTcGFjZTo6U3RhdGlzdGljcyBoZWFwU3RhdGlzdGljcyhK
U0dsb2JhbERhdGEqIGNvbW1vbkdsb2JhbERhdGEpCiB7CiAgICAgcmV0dXJuIGNvbW1vbkdsb2Jh
bERhdGEtPmhlYXAuc3RhdGlzdGljcygpOwogfSAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWVtb3J5U3RhdGlzdGljcy5oCShyZXZpc2lvbiA3NTc2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01lbW9yeVN0YXRpc3RpY3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBzdHJ1Y3QgR2xvYmFsTWVtb3J5U3RhdGlz
dGljcyB7CiAgICAgc2l6ZV90IEpJVEJ5dGVzOwogfTsKIAotSGVhcDo6U3RhdGlzdGljcyBoZWFw
U3RhdGlzdGljcyhKU0dsb2JhbERhdGEqIGNvbW1vbkdsb2JhbERhdGEpOworTWFya2VkU3BhY2U6
OlN0YXRpc3RpY3MgaGVhcFN0YXRpc3RpY3MoSlNHbG9iYWxEYXRhKiBjb21tb25HbG9iYWxEYXRh
KTsKIEdsb2JhbE1lbW9yeVN0YXRpc3RpY3MgZ2xvYmFsTWVtb3J5U3RhdGlzdGljcygpOwogCiB9
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNzUyNzUpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNzkyOSw4ICs3OTI5LDYgQEAKIAkJNkVCRjBFNTMxMkE4OTI5ODAw
REIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYkdMRXh0ZW5zaW9uLmg7IHBhdGggPSBjYW52YXMvV2ViR0xFeHRlbnNpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNzQxMkE5ODY4ODAwREIxNzA5IC8qIEpT
T0VTVGV4dHVyZUZsb2F0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTT0VTVGV4dHVyZUZsb2F0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVC
RjBFNzUxMkE5ODY4ODAwREIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT0VTVGV4dHVyZUZsb2F0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTkzRjFENUJFMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYktpdExvc2VD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViS2l0
TG9zZUNvbnRleHQuY3BwOyBwYXRoID0gSlNXZWJLaXRMb3NlQ29udGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzRjFENUJGMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYktp
dExvc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViS2l0
TG9zZUNvbnRleHQuaDsgcGF0aCA9IEpTV2ViS2l0TG9zZUNvbnRleHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjYyNkUwMTBFRjAyMkZFMDBBMDdF
MjAgLyogRm9udEZhc3RQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvbnRGYXN0UGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzA0
LDYgKzkzMDIsOCBAQAogCQk5M0YxRDVCNzEyRDUzMkM0MDA4MzJCRUMgLyogV2ViS2l0TG9zZUNv
bnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViS2l0TG9z
ZUNvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYktpdExvc2VDb250ZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGMUQ1QjgxMkQ1MzJDNDAwODMyQkVDIC8qIFdlYktp
dExvc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYktpdExv
c2VDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMvV2ViS2l0TG9zZUNvbnRleHQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGMUQ1QjkxMkQ1MzJDNDAwODMyQkVDIC8qIFdlYktpdExv
c2VDb250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJLaXRMb3NlQ29udGV4dC5p
ZGw7IHBhdGggPSBjYW52YXMvV2ViS2l0TG9zZUNvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5M0YxRDVCRTEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJLaXRMb3NlQ29u
dGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdExv
c2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNGMUQ1QkYxMkQ1
MzM1NjAwODMyQkVDIC8qIEpTV2ViS2l0TG9zZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRMb3NlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0Y2RjFFQTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xDb250ZXh0RXZl
bnQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNGNkYxRUIxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4
dEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMQ29udGV4dEV2
ZW50Lmg7IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTNGNkYxRUMxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTENvbnRleHRFdmVudC5pZGw7IHBh
dGggPSBjYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDc1NzY3KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMS0xMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFNwbGl0IG91dCBhIE1hcmtlZFNwYWNlIHN0cmF0ZWd5IG9iamVjdCBmcm9tIEhlYXAuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjQyMQorCisg
ICAgICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0KTogVXBkYXRlZCBmb3IgY2xhc3Mg
bW92ZS4KKwogMjAxMS0wMS0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0Mi9TaGFyZWQv
bWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVk
L21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkocmV2aXNpb24gNzU3NjYpCisrKyBXZWJLaXQy
L1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEx
NSw3ICsxMTUsNyBAQCBXZWJNZW1vcnlTdGF0aXN0aWNzIFdlYk1lbW9yeVNhbXBsZXI6OnNhCiAg
ICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CiAgICAg
CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBIZWFwOjpTdGF0
aXN0aWNzIGhlYXBNZW1vcnlTdGF0cyA9IGhlYXBTdGF0aXN0aWNzKEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisgICAgTWFya2VkU3BhY2U6OlN0YXRpc3RpY3MgaGVhcE1lbW9y
eVN0YXRzID0gaGVhcFN0YXRpc3RpY3MoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBoZWFwTWVtb3J5U3RhdHMuc2l6ZSAt
IGhlYXBNZW1vcnlTdGF0cy5mcmVlOwogICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0ZWQg
PSBoZWFwTWVtb3J5U3RhdHMuc2l6ZTsKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0ganNjSGVhcEJ5
dGVzSW5Vc2U7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzU3NjcpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTAxLTEzICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU3BsaXQgb3V0IGEgTWFya2VkU3BhY2Ugc3RyYXRlZ3kgb2JqZWN0
IGZyb20gSGVhcC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUyNDIxCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAg
ICAoK1tXZWJDb3JlU3RhdGlzdGljcyBtZW1vcnlTdGF0aXN0aWNzXSk6IFVwZGF0ZWQgZm9yIGNs
YXNzIG1vdmUuCisKKzIwMTEtMDEtMTMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVk
IGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgICogTWlz
Yy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgbWVt
b3J5U3RhdGlzdGljc10pOgorCiAyMDExLTAxLTEyICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJL
aXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiA3NTc2NikKKysrIFdlYktpdC9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5
Nyw3IEBAICsgKE5TRGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKICAgICBXVEY6OkZhc3RN
YWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3Rh
dGlzdGljcygpOwogICAgIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
Ci0gICAgSGVhcDo6U3RhdGlzdGljcyBoZWFwTWVtb3J5U3RhdHMgPSBoZWFwU3RhdGlzdGljcyhK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIE1hcmtlZFNwYWNlOjpTdGF0
aXN0aWNzIGhlYXBNZW1vcnlTdGF0cyA9IGhlYXBTdGF0aXN0aWNzKEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgR2xvYmFsTWVtb3J5U3RhdGlzdGljcyBnbG9iYWxNZW1v
cnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKICAgICAKICAgICByZXR1cm4gW05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgo=
</data>
<flag name="review"
          id="70259"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>