<?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>21962</bug_id>
          
          <creation_ts>2008-10-29 16:24:24 -0700</creation_ts>
          <short_desc>AST uses way too much memory</short_desc>
          <delta_ts>2012-09-06 12:00:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>InRadar</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>barraclough</cc>
    
    <cc>gyuyoung</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>97072</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-29 16:24:24 -0700</bug_when>
    <thetext>2 possible solutions:
1. Throw away function ASTs right after parsing. Reparse when compiling to bytecode. Use an AST cache to reduce performance hit.
2. Parse function bodies just enough to determine they&apos;re syntactically valid. Parse for real the first time the function executes.

Also
* Eagerly compiling to bytecode might work if we shrink bytecode footprint; for now, it&apos;s even worse than AST footprint.
* There&apos;s low-hanging fruit for reducing the size of AST nodes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97211</commentid>
    <comment_count>1</comment_count>
      <attachid>24792</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-30 21:28:34 -0700</bug_when>
    <thetext>Created attachment 24792
patch - remove LabelStack from AST</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97212</commentid>
    <comment_count>2</comment_count>
      <attachid>24792</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-10-30 21:31:09 -0700</bug_when>
    <thetext>Comment on attachment 24792
patch - remove LabelStack from AST

r=mw assuming perf is okay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97213</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-30 21:32:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/6170161&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97290</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-31 13:00:08 -0700</bug_when>
    <thetext>Committed attachment 24792 as revision 38047.

I&apos;ll keep this bug open to monitor the rest of the work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97346</commentid>
    <comment_count>5</comment_count>
      <attachid>24828</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-31 18:27:49 -0700</bug_when>
    <thetext>Created attachment 24828
patch - remove reference count and symbol table from FunctionBodyNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97376</commentid>
    <comment_count>6</comment_count>
      <attachid>24828</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-01 14:42:22 -0700</bug_when>
    <thetext>Comment on attachment 24828
patch - remove reference count and symbol table from FunctionBodyNode

Clearing the review flag because this patch turned out to be a performance regression. Maybe someone else can finish it off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98898</commentid>
    <comment_count>7</comment_count>
      <attachid>24792</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-15 14:35:53 -0800</bug_when>
    <thetext>Comment on attachment 24792
patch - remove LabelStack from AST

Clearing review flag on landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713543</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-09-06 12:00:28 -0700</bug_when>
    <thetext>This was fixed in r38047</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24792</attachid>
            <date>2008-10-30 21:28:34 -0700</date>
            <delta_ts>2010-06-10 16:40:46 -0700</delta_ts>
            <desc>patch - remove LabelStack from AST</desc>
            <filename>patch-label-stack.txt</filename>
            <type>text/plain</type>
            <size>43895</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4MDIx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjkgQEAKKzIwMDgtMTAt
MzAgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEZpeGVkIGEgc21hbGwgYml0
IG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2MgorICAgICAg
ICBBU1QgdXNlcyB3YXkgdG9vIG11Y2ggbWVtb3J5CisgICAgICAgIAorICAgICAgICBSZW1vdmVk
IGEgd29yZCBmcm9tIFN0YXRlbWVudE5vZGUgYnkgbml4aW5nIExhYmVsU3RhY2sgYW5kIHR1cm5p
bmcgaXQKKyAgICAgICAgaW50byBhIGNvbXBpbGUtdGltZSBkYXRhIHN0cnVjdHVyZSBtYW5hZ2Vk
IGJ5IENvZGVHZW5lcmF0b3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5vcmRlcjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGtqcy9BbGxJbk9uZUZpbGUuY3BwOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlU291cmNlcy5ia2w6IEkgc3VyZSBob3BlIHRoaXMgYnVpbGRzIQorICAgICAgICAK
KyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUdlbmVy
YXRvcjo6Q29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkNvZGVHZW5lcmF0b3I6Om5ld0xh
YmVsU2NvcGUpOgorICAgICAgICAoSlNDOjpDb2RlR2VuZXJhdG9yOjpicmVha1RhcmdldCk6Cisg
ICAgICAgIChKU0M6OkNvZGVHZW5lcmF0b3I6OmNvbnRpbnVlVGFyZ2V0KToKKyAgICAgICAgKiBW
TS9Db2RlR2VuZXJhdG9yLmg6IE5peGVkIHRoZSBKdW1wQ29udGV4dCBzeXN0ZW0gYmVjYXVzZSBp
dCBkZXBlbmRlZAorICAgICAgICBvbiBhIExhYmVsU3RhY2sgaW4gdGhlIEFTVCwgYW5kIGl0IHdh
cyBhIGxpdHRsZSBjdW1iZXJzb21lIG9uIHRoZSBjbGllbnQKKyAgICAgICAgc2lkZS4gUmVwbGFj
ZWQgd2l0aCBMYWJlbFNjb3BlLCB3aGljaCB0cmFja3MgYWxsIGJyZWFrIC8gY29udGludWUKKyAg
ICAgICAgaW5mb3JtYXRpb24gaW4gdGhlIENvZGVHZW5lcmF0b3IsIGp1c3QgbGlrZSB3ZSB0cmFj
ayBMYWJlbElEcyBhbmQgb3RoZXIKKyAgICAgICAgc3RhY2tzIG9mIGNvbXBpbGUtdGltZSBkYXRh
LgorCisgICAgICAgICoga2pzL0xhYmVsU2NvcGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6Okxh
YmVsU2NvcGU6Oik6CisgICAgICAgIChKU0M6OkxhYmVsU2NvcGU6OkxhYmVsU2NvcGUpOgorICAg
ICAgICAoSlNDOjpMYWJlbFNjb3BlOjpyZWYpOgorICAgICAgICAoSlNDOjpMYWJlbFNjb3BlOjpk
ZXJlZik6CisgICAgICAgIChKU0M6OkxhYmVsU2NvcGU6OnJlZkNvdW50KToKKyAgICAgICAgKEpT
Qzo6TGFiZWxTY29wZTo6YnJlYWtUYXJnZXQpOgorICAgICAgICAoSlNDOjpMYWJlbFNjb3BlOjpj
b250aW51ZVRhcmdldCk6CisgICAgICAgIChKU0M6OkxhYmVsU2NvcGU6OnR5cGUpOgorICAgICAg
ICAoSlNDOjpMYWJlbFNjb3BlOjpuYW1lKToKKyAgICAgICAgKEpTQzo6TGFiZWxTY29wZTo6c2Nv
cGVEZXB0aCk6IFNpbXBsZSBhYnN0cmFjdGlvbiBmb3IgaG9sZGluZyBldmVyeXRoaW5nCisgICAg
ICAgIHlvdSBtaWdodCB3YW50IHRvIGtub3cgYWJvdXQgYSBicmVhay1hYmxlIC8gY29udGludWUt
YWJsZSBzY29wZS4KKworICAgICAgICAqIGtqcy9MYWJlbFN0YWNrLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBranMvTGFiZWxTdGFjay5oOiBSZW1vdmVkLgorCisgICAgICAgICoga2pzL2dyYW1t
YXIueTogTm8gbmVlZCB0byBwdXNoIGxhYmVscyBhdCBwYXJzZSB0aW1lIC0tIHdlIGRvbid0IHN0
b3JlCisgICAgICAgIExhYmVsU3RhY2tzIGluIHRoZSBBU1QgYW55bW9yZS4KKworICAgICAgICAq
IGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkRvV2hpbGVOb2RlOjplbWl0Q29kZSk6Cisg
ICAgICAgIChKU0M6OldoaWxlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpGb3JOb2Rl
OjplbWl0Q29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdENvZGUpOgorICAgICAg
ICAoSlNDOjpDb250aW51ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEpTQzo6QnJlYWtOb2Rl
OjplbWl0Q29kZSk6CisgICAgICAgIChKU0M6OlN3aXRjaE5vZGU6OmVtaXRDb2RlKToKKyAgICAg
ICAgKEpTQzo6TGFiZWxOb2RlOjplbWl0Q29kZSk6CisgICAgICAgICoga2pzL25vZGVzLmg6Cisg
ICAgICAgIChKU0M6OlN0YXRlbWVudE5vZGU6Oik6CisgICAgICAgIChKU0M6OkxhYmVsTm9kZTo6
KTogVXNlIExhYmVsU2NvcGUgd2hlcmUgd2UgdXNlZCB0byB1c2UgSnVtcENvbnRleHQuCisgICAg
ICAgIFNpbXBsaWZpZWQgYSBidW5jaCBvZiBjb2RlLiBUb3VjaGVkIHVwIGxhYmVsLXJlbGF0ZWQg
ZXJyb3IgbWVzc2FnZXMgYQorICAgICAgICBiaXQuCisKKyAgICAgICAgKiBranMvbm9kZXMyc3Ry
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6TGFiZWxOb2RlOjpzdHJlYW1Ubyk6IFVwZGF0ZWQgZm9y
IHJlbmFtZS4KKwogMjAwOC0xMC0zMCAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZp
ZXJzLmNvbT4KIAogICAgICAgICB3eCBidWlsZCBmaXggYWZ0ZXIgUHJvcGVydHlNYXAgYW5kIFN0
cnVjdHVyZUlEIG1lcmdlLgpJbmRleDogR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gR05V
bWFrZWZpbGUuYW0JKHJldmlzaW9uIDM3OTkwKQorKysgR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTMxNCw4ICszMTQsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlK
YXZhU2NyaXB0Q29yZS9ranMvSlNMb2NrLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUva2pzL0pTTG9j
ay5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ranMvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAgXAotCUph
dmFTY3JpcHRDb3JlL2tqcy9MYWJlbFN0YWNrLmNwcCBcCi0JSmF2YVNjcmlwdENvcmUva2pzL0xh
YmVsU3RhY2suaCBcCisJSmF2YVNjcmlwdENvcmUva2pzL0xhYmVsU2NvcGUuaCBcCiAJSmF2YVNj
cmlwdENvcmUva2pzL1BhcnNlci5jcHAgXAogCUphdmFTY3JpcHRDb3JlL2tqcy9Qcm9wZXJ0eU5h
bWVBcnJheS5jcHAgXAogCUphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAg
XApJbmRleDogSmF2YVNjcmlwdENvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUub3JkZXIJKHJldmlzaW9uIDM3OTkwKQorKysgSmF2YVNjcmlwdENvcmUub3JkZXIJKHdvcmtp
bmcgY29weSkKQEAgLTkzMyw3ICs5MzMsNiBAQCBfX1pOSzNLSlMxMkNvbnRpbnVlTm9kZThzdHJl
YW1Ub0VSTlNfMTJTCiBfX1pOM0tKUzExRnVuY3Rpb25JbXAxMmNhbGxlckdldHRlckVQTlNfOUV4
ZWNTdGF0ZUVQTlNfOEpTT2JqZWN0RVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfMTJQcm9wZXJ0eVNs
b3RFCiBfX1pOM0tKUzlCcmVha05vZGVDMUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zS0pTMTNT
dGF0ZW1lbnROb2RlOXB1c2hMYWJlbEVSS05TXzEwSWRlbnRpZmllckUKLV9fWk4zS0pTMTBMYWJl
bFN0YWNrNHB1c2hFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0tKUzlUaHJvd05vZGU3ZXhlY3V0
ZUVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0tKUzE1TnVtYmVyT2JqZWN0SW1wMTlpbXBsZW1lbnRz
Q29uc3RydWN0RXYKIF9fWk4zS0pTMjJudW1iZXJQcm90b0Z1bmNWYWx1ZU9mRVBOU185RXhlY1N0
YXRlRVBOU184SlNPYmplY3RFUktOU180TGlzdEUKSW5kZXg6IEphdmFTY3JpcHRDb3JlLnByaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5wcmkJKHJldmlzaW9uIDM3OTkwKQorKysgSmF2
YVNjcmlwdENvcmUucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDYgQEAgU09VUkNF
UyArPSBcCiAgICAgcnVudGltZS9KU1N0cmluZy5jcHAgXAogICAgIHJ1bnRpbWUvSlNWYWx1ZS5j
cHAgXAogICAgIHJ1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcCBcCi0gICAga2pzL0xhYmVsU3Rh
Y2suY3BwIFwKICAgICBranMvbGV4ZXIuY3BwIFwKICAgICBranMvbG9va3VwLmNwcCBcCiAgICAg
cnVudGltZS9NYXRoT2JqZWN0LmNwcCBcCkluZGV4OiBKYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmts
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDM3OTkw
KQorKysgSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNiBAQCBTb3VyY2UgZmlsZXMgZm9yIEpTQ29yZS4KICAgICAgICAga2pzL0pTR2xvYmFsRGF0
YS5jcHAKICAgICAgICAga2pzL0pTTG9jay5jcHAKICAgICAgICAga2pzL0pTU3RhdGljU2NvcGVP
YmplY3QuY3BwCi0gICAgICAgIGtqcy9MYWJlbFN0YWNrLmNwcAogICAgICAgICBranMvbGV4ZXIu
Y3BwCiAgICAgICAgIGtqcy9sb29rdXAuY3BwCiAgICAgICAgIGtqcy9ub2Rlcy5jcHAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gMzc5OTApCisrKyBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC02NTcsMTEgKzY1Nyw3IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGtqc1xMYWJlbFN0YWNrLmNwcCINCi0JCQkJPg0KLQkJCTwv
RmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGtqc1xMYWJlbFN0YWNr
LmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ca2pzXExhYmVsU2NvcGUuaCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KSW5kZXg6IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMzc5OTApCisrKyBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAKIAkJ
OTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1OTg4QkE5MEU0NzdCRUMw
MEQyOEQ0RCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgKi87IH07CiAJCTk1RkRGQTE0MEUyMjk5
OEYwMDA2RkIwMCAvKiBIZWF2eVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTVGREZBMTMwRTIyOTk4RjAwMDZGQjAwIC8qIEhlYXZ5UHJv
ZmlsZS5jcHAgKi87IH07CiAJCTk1RkRGQTE2MEUyMjk5OTgwMDA2RkIwMCAvKiBIZWF2eVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1RkRG
QTE1MEUyMjk5OTgwMDA2RkIwMCAvKiBIZWF2eVByb2ZpbGUuaCAqLzsgfTsKKwkJOTYwMDk3QTYw
RUJBQkI1ODAwN0E3Mjk3IC8qIExhYmVsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2MDA5N0E1MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNj
b3BlLmggKi87IH07CiAJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Mjcw
MDc4MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCAqLzsgfTsKIAkJQTcyNzAx
QjYwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcyNzAxQjQwREFERTk0OTAwRTU0OEQ3
IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovOyB9OwogCQlBNzI3MDFCOTBEQURFOTQ5MDBFNTQ4
RDcgLyogRXhjZXB0aW9uSGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBl
cnMuaCAqLzsgfTsKQEAgLTE5OSw3ICsyMDAsNiBAQAogCQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTRGMjUyNTYwRDA4REQ4RDAwNEVDRkZGIC8qIEpTVmFyaWFibGVPYmpl
Y3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
QzE4QzQyRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUM3QTE3MjBBOEVBQUNCMDBGQTM3
RUEgLyogSlNXcmFwcGVyT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0MkYwRTE2RjVDRDAwQjM0NDYwIC8qIExhYmVsSUQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OUIyMEQ3MEQ4
QTA4OTEwMDlDQjhDNyAvKiBMYWJlbElELmggKi87IH07Ci0JCUJDMThDNDMwMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBMYWJlbFN0YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NUI4MTNBODBDRDFEMDE5MDBERjU5RDYgLyogTGFiZWxTdGFjay5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDMxMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBsZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjY5MkE4NjYwMjU1NTk3RDAxRkY2MEY3IC8qIGxleGVyLmggKi87IH07
CiAJCUJDMThDNDM0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBMaXN0SGFzaFNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3RUI3NDUwQjcwOEY1NDAwNjM0
NjFCIC8qIExpc3RIYXNoU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkMxOEM0MzUwRTE2RjVDRDAwQjM0NDYwIC8qIExpc3RSZWZQdHIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OEExNjI2MDk1
RDE2QkIwMDY2NkQwRCAvKiBMaXN0UmVmUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ5MSw3ICs0OTEsNiBAQAogCQk2NTkyQzMxNjA5OEI3
REUxMDAwM0Q0RjYgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU5MkMzMTcwOThCN0RF
MTAwMDNENEY2IC8qIFZlY3RvclRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmVjdG9yVHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1QjE3
NEJFMDlEMTAwMDIwMDgyMDMzOSAvKiBjaGFydGFibGVzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgcGF0aCA9IGNoYXJ0YWJsZXMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NjVCODEzQTgwQ0QxRDAxOTAwREY1OUQ2IC8qIExhYmVsU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2NUMwMkZCQjA2Mzc0NjJBMDAzRTdFRTYgLyogcHJvdGVjdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcm90ZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJNjVDNjQ3QjMwOTNFRjhENjAwMjJD
MzgwIC8qIFJlZlB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWZQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB9OwogCQk2NUM3QTE3MTBBOEVBQUNCMDBGQTM3RUEgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dyYXBwZXJPYmplY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc4LDYgKzU3Nyw3IEBACiAJCTk1RTNC
QzA0MEUxQUU2ODIwMEIyRDFDMSAvKiBDYWxsSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBDYWxsSWRlbnRpZmllci5oOyBwYXRoID0gcHJvZmlsZXIvQ2FsbElk
ZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTVGREZBMTMwRTIyOTk4
RjAwMDZGQjAwIC8qIEhlYXZ5UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBIZWF2eVByb2ZpbGUuY3BwOyBwYXRoID0gcHJvZmlsZXIvSGVhdnlQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTVGREZBMTUwRTIyOTk5ODAwMDZG
QjAwIC8qIEhlYXZ5UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBI
ZWF2eVByb2ZpbGUuaDsgcGF0aCA9IHByb2ZpbGVyL0hlYXZ5UHJvZmlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NjAwOTdBNTBFQkFCQjU4MDA3QTcyOTcgLyogTGFiZWxTY29w
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYWJlbFNjb3BlLmg7IHBhdGgg
PSBranMvTGFiZWxTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzI3MDA3
NzBEQUM2MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU05vdEFuT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3MjcwMDc4MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTm90QW5PYmplY3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNzI3MDFCMzBEQURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0
aW9uSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGNlcHRpb25I
ZWxwZXJzLmg7IHBhdGggPSBWTS9FeGNlcHRpb25IZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02MDAsNyArNjAwLDYgQEAKIAkJQkMwMkU5OEEwRTE4M0UzODAwMEY5Mjk3
IC8qIEVycm9ySW5zdGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRXJyb3JJbnN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDJF
OThCMEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVycm9ySW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkMwMkU5QjYwRTE4NDJGQTAwMEY5Mjk3IC8qIEpTU3RyaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQkMwMkU5QjcwRTE4NDRDRjAwMEY5Mjk3IC8qIExhYmVsU3RhY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGFiZWxTdGFjay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDJFOUI4MEUxODQ1NDUwMDBGOTI5NyAvKiBH
ZXR0ZXJTZXR0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2V0
dGVyU2V0dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkU5QjkwRTE4
NDU4MDAwMEY5Mjk3IC8qIEpTTnVtYmVyQ2VsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU051bWJlckNlbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzExNjYwMDBFMTk5N0IxMDA4MDY2REQgLyogRGF0ZUluc3RhbmNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVJbnN0YW5jZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzAsNiArOTI5LDcgQEAKIAkJMTQ5QjE1REYwRDgxRjg4
NzAwOUNCOEM3IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQk5NjAwOTdBNTBFQkFCQjU4MDA3QTcyOTcgLyogTGFiZWxTY29wZS5oICov
LAogCQkJCTE0OUIxNUU5MEQ4MUY5ODYwMDlDQjhDNyAvKiBDb2RlR2VuZXJhdG9yLmNwcCAqLywK
IAkJCQkxNDlCMTVFODBEODFGOTg2MDA5Q0I4QzcgLyogQ29kZUdlbmVyYXRvci5oICovLAogCQkJ
CTE0OUIyMEQ3MEQ4QTA4OTEwMDlDQjhDNyAvKiBMYWJlbElELmggKi8sCkBAIC0xMTA3LDggKzEx
MDcsNiBAQAogCQkJCUE3RTQyQzE4MEUzOTM4ODMwMDY1QTU0NCAvKiBKU1N0YXRpY1Njb3BlT2Jq
ZWN0LmggKi8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAog
CQkJCTkzRjE5ODFBMDgyNDVBQUUwMDFFOUFCQyAvKiBrZXl3b3Jkcy50YWJsZSAqLywKLQkJCQlC
QzAyRTlCNzBFMTg0NENGMDAwRjkyOTcgLyogTGFiZWxTdGFjay5jcHAgKi8sCi0JCQkJNjVCODEz
QTgwQ0QxRDAxOTAwREY1OUQ2IC8qIExhYmVsU3RhY2suaCAqLywKIAkJCQlGNjkyQTg2ODAyNTU1
OTdEMDFGRjYwRjcgLyogbG9va3VwLmNwcCAqLywKIAkJCQlGNjkyQTg2OTAyNTU1OTdEMDFGRjYw
RjcgLyogbG9va3VwLmggKi8sCiAJCQkJRjY5MkE4NzcwMjU1NTk3RDAxRkY2MEY3IC8qIG9wZXJh
dGlvbnMuY3BwICovLApAQCAtMTQzMCw3ICsxNDI4LDYgQEAKIAkJCQlCQzE4QzQyRDBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MkYwRTE2RjVDRDAwQjM0NDYwIC8qIExhYmVsSUQuaCBpbiBIZWFkZXJzICovLAot
CQkJCUJDMThDNDMwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBMYWJlbFN0YWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQzMTBFMTZGNUNEMDBCMzQ0NjAgLyogbGV4ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDM0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBMaXN0SGFzaFNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MzUwRTE2RjVDRDAwQjM0NDYwIC8qIExpc3RSZWZQdHIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTU1MSw2ICsxNTQ4LDcgQEAKIAkJCQk4NjlFQkNCNzBFOEM2RDRBMDA4
NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGMzQ4OEYwRTk1RUY4
QTAwMzY0OEJDIC8qIENvbGxlY3RvckhlYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZUlEVHJhbnNpdGlvblRhYmxlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk5NjAwOTdBNjBFQkFCQjU4MDA3QTcyOTcgLyogTGFiZWxTY29w
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzc5OTApCisrKyBWTS9Db2RlR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDcgKzIwNCw2IEBAIENvZGVHZW5lcmF0
b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUKICAgICAsIG1fZmluYWxseURlcHRoKDApCiAg
ICAgLCBtX2R5bmFtaWNTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVUeXBlKEdsb2JhbENvZGUp
Ci0gICAgLCBtX2NvbnRpbnVlRGVwdGgoMCkKICAgICAsIG1fbmV4dEdsb2JhbCgtMSkKICAgICAs
IG1fZ2xvYmFsRGF0YSgmc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLT5n
bG9iYWxEYXRhKCkpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCkBAIC0yODIsNyArMjgx
LDYgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9m
aW5hbGx5RGVwdGgoMCkKICAgICAsIG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKICAgICAsIG1fY29k
ZVR5cGUoRnVuY3Rpb25Db2RlKQotICAgICwgbV9jb250aW51ZURlcHRoKDApCiAgICAgLCBtX2ds
b2JhbERhdGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKS0+Z2xvYmFs
RGF0YSgpKQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQogewpAQCAtMzUzLDcgKzM1MSw2
IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGUKICAgICAsIG1fZmlu
YWxseURlcHRoKDApCiAgICAgLCBtX2R5bmFtaWNTY29wZURlcHRoKDApCiAgICAgLCBtX2NvZGVU
eXBlKEV2YWxDb2RlKQotICAgICwgbV9jb250aW51ZURlcHRoKDApCiAgICAgLCBtX2dsb2JhbERh
dGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKS0+Z2xvYmFsRGF0YSgp
KQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQogewpAQCAtNDUxLDYgKzQ0OCwxOCBAQCBS
ZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpoaWdoZXN0VXNlZFJlCiAgICAgcmV0dXJuICZtX2Nh
bGxlZVJlZ2lzdGVycy5sYXN0KCk7CiB9CiAKK1Bhc3NSZWZQdHI8TGFiZWxTY29wZT4gQ29kZUdl
bmVyYXRvcjo6bmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpUeXBlIHR5cGUsIGNvbnN0IElkZW50
aWZpZXIqIG5hbWUpCit7CisgICAgLy8gUmVjbGFpbSBmcmVlIGxhYmVsIHNjb3Blcy4KKyAgICB3
aGlsZSAobV9sYWJlbFNjb3Blcy5zaXplKCkgJiYgIW1fbGFiZWxTY29wZXMubGFzdCgpLnJlZkNv
dW50KCkpCisgICAgICAgIG1fbGFiZWxTY29wZXMucmVtb3ZlTGFzdCgpOworCisgICAgLy8gQWxs
b2NhdGUgbmV3IGxhYmVsIHNjb3Blcy4KKyAgICBMYWJlbFNjb3BlIHNjb3BlKHR5cGUsIG5hbWUs
IHNjb3BlRGVwdGgoKSwgbmV3TGFiZWwoKSwgdHlwZSA9PSBMYWJlbFNjb3BlOjpMb29wID8gbmV3
TGFiZWwoKSA6IDApOyAvLyBPbmx5IGxvb3BzIGhhdmUgY29udGludWUgdGFyZ2V0cy4KKyAgICBt
X2xhYmVsU2NvcGVzLmFwcGVuZChzY29wZSk7CisgICAgcmV0dXJuICZtX2xhYmVsU2NvcGVzLmxh
c3QoKTsKK30KKwogUGFzc1JlZlB0cjxMYWJlbElEPiBDb2RlR2VuZXJhdG9yOjpuZXdMYWJlbCgp
CiB7CiAgICAgLy8gUmVjbGFpbSBmcmVlIGxhYmVsIElEcy4KQEAgLTEzNTQsNjIgKzEzNjMsNzAg
QEAgdm9pZCBDb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udGV4dCgpCiAgICAgbV9maW5hbGx5
RGVwdGgtLTsKIH0KIAotdm9pZCBDb2RlR2VuZXJhdG9yOjpwdXNoSnVtcENvbnRleHQoTGFiZWxT
dGFjayogbGFiZWxzLCBMYWJlbElEKiBjb250aW51ZVRhcmdldCwgTGFiZWxJRCogYnJlYWtUYXJn
ZXQsIGJvb2wgaXNWYWxpZFVubGFiZWxlZEJyZWFrVGFyZ2V0KQorTGFiZWxTY29wZSogQ29kZUdl
bmVyYXRvcjo6YnJlYWtUYXJnZXQoY29uc3QgSWRlbnRpZmllciYgbmFtZSkKIHsKLSAgICBKdW1w
Q29udGV4dCBjb250ZXh0ID0geyBsYWJlbHMsIGNvbnRpbnVlVGFyZ2V0LCBicmVha1RhcmdldCwg
c2NvcGVEZXB0aCgpLCBpc1ZhbGlkVW5sYWJlbGVkQnJlYWtUYXJnZXQgfTsKLSAgICBtX2p1bXBD
b250ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgIGlmIChjb250aW51ZVRhcmdldCkKLSAg
ICAgICAgbV9jb250aW51ZURlcHRoKys7Ci19Ci0KLXZvaWQgQ29kZUdlbmVyYXRvcjo6cG9wSnVt
cENvbnRleHQoKQotewotICAgIEFTU0VSVChtX2p1bXBDb250ZXh0U3RhY2suc2l6ZSgpKTsKLSAg
ICBpZiAobV9qdW1wQ29udGV4dFN0YWNrLmxhc3QoKS5jb250aW51ZVRhcmdldCkKLSAgICAgICAg
bV9jb250aW51ZURlcHRoLS07Ci0gICAgbV9qdW1wQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsK
LX0KKyAgICAvLyBSZWNsYWltIGZyZWUgbGFiZWwgY29udGV4dHMuCisgICAgd2hpbGUgKG1fbGFi
ZWxTY29wZXMuc2l6ZSgpICYmICFtX2xhYmVsU2NvcGVzLmxhc3QoKS5yZWZDb3VudCgpKQorICAg
ICAgICBtX2xhYmVsU2NvcGVzLnJlbW92ZUxhc3QoKTsKIAotSnVtcENvbnRleHQqIENvZGVHZW5l
cmF0b3I6Omp1bXBDb250ZXh0Rm9yQ29udGludWUoY29uc3QgSWRlbnRpZmllciYgbGFiZWwpCi17
Ci0gICAgaWYoIW1fanVtcENvbnRleHRTdGFjay5zaXplKCkpCisgICAgaWYgKCFtX2xhYmVsU2Nv
cGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobGFiZWwuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBtX2p1bXBDb250ZXh0U3RhY2suc2l6ZSgpIC0gMTsg
aSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIEp1bXBDb250ZXh0KiBzY29wZSA9ICZtX2p1bXBD
b250ZXh0U3RhY2tbaV07Ci0gICAgICAgICAgICBpZiAoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KQor
ICAgIC8vIFdlIHNwZWNpYWwtY2FzZSB0aGUgZm9sbG93aW5nLCB3aGljaCBpcyBhIHN5bnRheCBl
cnJvciBpbiBGaXJlZm94OgorICAgIC8vIGxhYmVsOgorICAgIC8vICAgICBicmVhazsKKyAgICBp
ZiAobmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1fbGFiZWxTY29wZXMu
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIExhYmVsU2NvcGUqIHNjb3Bl
ID0gJm1fbGFiZWxTY29wZXNbaV07CisgICAgICAgICAgICBpZiAoc2NvcGUtPnR5cGUoKSAhPSBM
YWJlbFNjb3BlOjpOYW1lZExhYmVsKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGU7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgZm9yIChpbnQg
aSA9IG1fanVtcENvbnRleHRTdGFjay5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAg
ICBKdW1wQ29udGV4dCogc2NvcGUgPSAmbV9qdW1wQ29udGV4dFN0YWNrW2ldOwotICAgICAgICBp
ZiAoc2NvcGUtPmxhYmVscy0+Y29udGFpbnMobGFiZWwpKQorICAgIGZvciAoaW50IGkgPSBtX2xh
YmVsU2NvcGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIExhYmVsU2NvcGUq
IHNjb3BlID0gJm1fbGFiZWxTY29wZXNbaV07CisgICAgICAgIGlmIChzY29wZS0+bmFtZSgpICYm
ICpzY29wZS0+bmFtZSgpID09IG5hbWUpIHsKKyAgICAgICAgICAgIEFTU0VSVChzY29wZS0+YnJl
YWtUYXJnZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gc2NvcGU7CisgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIDA7CiB9CiAKLUp1bXBDb250ZXh0KiBDb2RlR2VuZXJhdG9yOjpqdW1wQ29u
dGV4dEZvckJyZWFrKGNvbnN0IElkZW50aWZpZXImIGxhYmVsKQorTGFiZWxTY29wZSogQ29kZUdl
bmVyYXRvcjo6Y29udGludWVUYXJnZXQoY29uc3QgSWRlbnRpZmllciYgbmFtZSkKIHsKLSAgICBp
ZighbV9qdW1wQ29udGV4dFN0YWNrLnNpemUoKSkKKyAgICAvLyBSZWNsYWltIGZyZWUgbGFiZWwg
c2NvcGVzLgorICAgIHdoaWxlIChtX2xhYmVsU2NvcGVzLnNpemUoKSAmJiAhbV9sYWJlbFNjb3Bl
cy5sYXN0KCkucmVmQ291bnQoKSkKKyAgICAgICAgbV9sYWJlbFNjb3Blcy5yZW1vdmVMYXN0KCk7
CisKKyAgICBpZiAoIW1fbGFiZWxTY29wZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGlmIChsYWJlbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IG1fanVtcENv
bnRleHRTdGFjay5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgSnVtcENv
bnRleHQqIHNjb3BlID0gJm1fanVtcENvbnRleHRTdGFja1tpXTsKLSAgICAgICAgICAgIGlmIChz
Y29wZS0+aXNWYWxpZFVubGFiZWxlZEJyZWFrVGFyZ2V0KQorICAgIGlmIChuYW1lLmlzRW1wdHko
KSkgeworICAgICAgICBmb3IgKGludCBpID0gbV9sYWJlbFNjb3Blcy5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkgeworICAgICAgICAgICAgTGFiZWxTY29wZSogc2NvcGUgPSAmbV9sYWJlbFNjb3Bl
c1tpXTsKKyAgICAgICAgICAgIGlmIChzY29wZS0+dHlwZSgpID09IExhYmVsU2NvcGU6Okxvb3Ap
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBzY29wZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gbV9qdW1wQ29udGV4dFN0
YWNrLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIEp1bXBDb250ZXh0KiBzY29w
ZSA9ICZtX2p1bXBDb250ZXh0U3RhY2tbaV07Ci0gICAgICAgIGlmIChzY29wZS0+bGFiZWxzLT5j
b250YWlucyhsYWJlbCkpCi0gICAgICAgICAgICByZXR1cm4gc2NvcGU7CisgICAgLy8gQ29udGlu
dWUgdG8gdGhlIGxvb3AgbmVzdGVkIG5lYXJlc3QgdG8gdGhlIGxhYmVsIHNjb3BlIHRoYXQgbWF0
Y2hlcworICAgIC8vICduYW1lJy4KKyAgICBMYWJlbFNjb3BlKiByZXN1bHQgPSAwOworICAgIGZv
ciAoaW50IGkgPSBtX2xhYmVsU2NvcGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgIExhYmVsU2NvcGUqIHNjb3BlID0gJm1fbGFiZWxTY29wZXNbaV07CisgICAgICAgIGlmIChz
Y29wZS0+dHlwZSgpID09IExhYmVsU2NvcGU6Okxvb3ApIHsKKyAgICAgICAgICAgIEFTU0VSVChz
Y29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgICAgICByZXN1bHQgPSBzY29wZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc2NvcGUtPm5hbWUoKSAmJiAqc2NvcGUtPm5hbWUoKSA9PSBu
YW1lKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgLy8gbWF5IGJlIDAKICAgICB9CiAgICAg
cmV0dXJuIDA7CiB9CkluZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0v
Q29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAzNzk5MCkKKysrIFZNL0NvZGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkhhc2hUcmFpdHMuaCIK
ICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkxhYmVsSUQuaCIKKyNpbmNsdWRl
ICJMYWJlbFNjb3BlLmgiCiAjaW5jbHVkZSAiTWFjaGluZS5oIgogI2luY2x1ZGUgIlJlZ2lzdGVy
SUQuaCIKICNpbmNsdWRlICJTZWdtZW50ZWRWZWN0b3IuaCIKQEAgLTQ5LDE1ICs1MCw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNjb3BlQ2hhaW47CiAgICAgY2xhc3MgU2NvcGVOb2Rl
OwogCi0gICAgLy8gSnVtcENvbnRleHRzIGFyZSB1c2VkIHRvIHRyYWNrIGVudHJ5IGFuZCBleGl0
IHBvaW50cyBmb3IgamF2YXNjcmlwdCBsb29wcyBhbmQgc3dpdGNoIHN0YXRlbWVudHMKLSAgICBz
dHJ1Y3QgSnVtcENvbnRleHQgewotICAgICAgICBMYWJlbFN0YWNrKiBsYWJlbHM7Ci0gICAgICAg
IExhYmVsSUQqIGNvbnRpbnVlVGFyZ2V0OwotICAgICAgICBMYWJlbElEKiBicmVha1RhcmdldDsK
LSAgICAgICAgaW50IHNjb3BlRGVwdGg7Ci0gICAgICAgIGJvb2wgaXNWYWxpZFVubGFiZWxlZEJy
ZWFrVGFyZ2V0OwotICAgIH07Ci0KICAgICBzdHJ1Y3QgRmluYWxseUNvbnRleHQgewogICAgICAg
ICBMYWJlbElEKiBmaW5hbGx5QWRkcjsKICAgICAgICAgUmVnaXN0ZXJJRCogcmV0QWRkckRzdDsK
QEAgLTE1Nyw2ICsxNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBk
c3QgPT0gaWdub3JlZFJlc3VsdCgpID8gMCA6IChkc3QgJiYgZHN0ICE9IHNyYykgPyBlbWl0TW92
ZShkc3QsIHNyYykgOiBzcmM7CiAgICAgICAgIH0KIAorICAgICAgICBQYXNzUmVmUHRyPExhYmVs
U2NvcGU+IG5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6VHlwZSwgY29uc3QgSWRlbnRpZmllciog
PSAwKTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbElEPiBuZXdMYWJlbCgpOwogCiAgICAgICAg
IC8vIFRoZSBlbWl0Tm9kZSBmdW5jdGlvbnMgYXJlIGp1c3Qgc3ludGFjdGljIHN1Z2FyIGZvciBj
YWxsaW5nCkBAIC0zMDksMTIgKzMwMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZv
aWQgcHVzaEZpbmFsbHlDb250ZXh0KExhYmVsSUQqIHRhcmdldCwgUmVnaXN0ZXJJRCogcmV0dXJu
QWRkckRzdCk7CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRleHQoKTsKLSAgICAgICAgYm9v
bCBpbkNvbnRpbnVlQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGludWVEZXB0aCA+IDA7IH07Ci0g
ICAgICAgIGJvb2wgaW5KdW1wQ29udGV4dCgpIHsgcmV0dXJuIG1fanVtcENvbnRleHRTdGFjay5z
aXplKCkgPiAwOyB9OwotICAgICAgICB2b2lkIHB1c2hKdW1wQ29udGV4dChMYWJlbFN0YWNrKiwg
TGFiZWxJRCogY29udGludWVUYXJnZXQsIExhYmVsSUQqIGJyZWFrVGFyZ2V0LCBib29sIGlzVmFs
aWRVbmxhYmVsZWRCcmVha1RhcmdldCk7Ci0gICAgICAgIHZvaWQgcG9wSnVtcENvbnRleHQoKTsK
LSAgICAgICAgSnVtcENvbnRleHQqIGp1bXBDb250ZXh0Rm9yQ29udGludWUoY29uc3QgSWRlbnRp
ZmllciYpOwotICAgICAgICBKdW1wQ29udGV4dCoganVtcENvbnRleHRGb3JCcmVhayhjb25zdCBJ
ZGVudGlmaWVyJik7CisKKyAgICAgICAgTGFiZWxTY29wZSogYnJlYWtUYXJnZXQoY29uc3QgSWRl
bnRpZmllciYpOworICAgICAgICBMYWJlbFNjb3BlKiBjb250aW51ZVRhcmdldChjb25zdCBJZGVu
dGlmaWVyJik7CiAKICAgICAgICAgdm9pZCBiZWdpblN3aXRjaChSZWdpc3RlcklEKiwgU3dpdGNo
SW5mbzo6U3dpdGNoVHlwZSk7CiAgICAgICAgIHZvaWQgZW5kU3dpdGNoKHVpbnQzMl90IGNsYXVz
ZUNvdW50LCBSZWZQdHI8TGFiZWxJRD4qLCBFeHByZXNzaW9uTm9kZSoqLCBMYWJlbElEKiBkZWZh
dWx0TGFiZWwsIGludDMyX3QgbWluLCBpbnQzMl90IHJhbmdlKTsKQEAgLTQyNSwxNCArNDE1LDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwg
NTEyPiBtX2NhbGxlZVJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVy
SUQsIDUxMj4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJ
RCwgNTEyPiBtX2dsb2JhbHM7Ci0gICAgICAgIFNlZ21lbnRlZFZlY3RvcjxMYWJlbElELCA1MTI+
IG1fbGFiZWxzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TGFiZWxTY29wZSwgMjU2PiBtX2xh
YmVsU2NvcGVzOworICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TGFiZWxJRCwgMjU2PiBtX2xhYmVs
czsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbGFzdENvbnN0YW50OwogICAgICAgICBp
bnQgbV9maW5hbGx5RGVwdGg7CiAgICAgICAgIGludCBtX2R5bmFtaWNTY29wZURlcHRoOwogICAg
ICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwogCi0gICAgICAgIFZlY3RvcjxKdW1wQ29udGV4dD4g
bV9qdW1wQ29udGV4dFN0YWNrOwotICAgICAgICBpbnQgbV9jb250aW51ZURlcHRoOwogICAgICAg
ICBWZWN0b3I8Q29udHJvbEZsb3dDb250ZXh0PiBtX3Njb3BlQ29udGV4dFN0YWNrOwogICAgICAg
ICBWZWN0b3I8U3dpdGNoSW5mbz4gbV9zd2l0Y2hDb250ZXh0U3RhY2s7CiAKSW5kZXg6IGtqcy9B
bGxJbk9uZUZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9BbGxJbk9uZUZpbGUuY3BwCShyZXZp
c2lvbiAzNzk5MCkKKysrIGtqcy9BbGxJbk9uZUZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw3ICs2MSw2IEBACiAjaW5jbHVkZSAicnVudGltZS9KU1N0cmluZy5jcHAiCiAjaW5jbHVkZSAi
cnVudGltZS9KU051bWJlckNlbGwuY3BwIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5jcHAiCi0j
aW5jbHVkZSAiTGFiZWxTdGFjay5jcHAiCiAjaW5jbHVkZSAicnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmNwcCIKICNpbmNsdWRlICJpbnRlcnByZXRlci5jcHAiCiAjaW5jbHVkZSAicnVudGltZS9K
U0ltbWVkaWF0ZS5jcHAiCkluZGV4OiBranMvTGFiZWxTY29wZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtq
cy9MYWJlbFNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBranMvTGFiZWxTY29wZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExhYmVsU2NvcGVfaAorI2RlZmluZSBMYWJl
bFNjb3BlX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSAiTGFiZWxJ
RC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworICAgIGNsYXNzIElkZW50aWZpZXI7CisKKyAgICBj
bGFzcyBMYWJlbFNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gVHlwZSB7IExvb3As
IFN3aXRjaCwgTmFtZWRMYWJlbCB9OworCisgICAgICAgIExhYmVsU2NvcGUoVHlwZSB0eXBlLCBj
b25zdCBJZGVudGlmaWVyKiBuYW1lLCBpbnQgc2NvcGVEZXB0aCwgUGFzc1JlZlB0cjxMYWJlbElE
PiBicmVha1RhcmdldCwgUGFzc1JlZlB0cjxMYWJlbElEPiBjb250aW51ZVRhcmdldCkKKyAgICAg
ICAgICAgIDogbV9yZWZDb3VudCgwKQorICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAg
ICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgICAgICAgICAsIG1fc2NvcGVEZXB0aChzY29wZURl
cHRoKQorICAgICAgICAgICAgLCBtX2JyZWFrVGFyZ2V0KGJyZWFrVGFyZ2V0KQorICAgICAgICAg
ICAgLCBtX2NvbnRpbnVlVGFyZ2V0KGNvbnRpbnVlVGFyZ2V0KQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICAvLyBJdCBkb2Vzbid0IHJlYWxseSBtYWtlIHNlbnNlIHRvIGNvcHkgYSBM
YWJlbFNjb3BlLCBidXQgd2UgbmVlZCB0aGlzIGNvcHkKKyAgICAgICAgLy8gY29uc3RydWN0b3Ig
dG8gc3VwcG9ydCBtb3ZpbmcgTGFiZWxTY29wZXMgaW4gYSBWZWN0b3IuCisKKyAgICAgICAgTGFi
ZWxTY29wZShjb25zdCBMYWJlbFNjb3BlJiBvdGhlcikKKyAgICAgICAgICAgIDogbV9yZWZDb3Vu
dChvdGhlci5tX3JlZkNvdW50KQorICAgICAgICAgICAgLCBtX3R5cGUob3RoZXIubV90eXBlKQor
ICAgICAgICAgICAgLCBtX25hbWUob3RoZXIubV9uYW1lKQorICAgICAgICAgICAgLCBtX3Njb3Bl
RGVwdGgob3RoZXIubV9zY29wZURlcHRoKQorICAgICAgICAgICAgLCBtX2JyZWFrVGFyZ2V0KG90
aGVyLm1fYnJlYWtUYXJnZXQpCisgICAgICAgICAgICAsIG1fY29udGludWVUYXJnZXQob3RoZXIu
bV9jb250aW51ZVRhcmdldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBy
ZWYoKSB7ICsrbV9yZWZDb3VudDsgfQorICAgICAgICB2b2lkIGRlcmVmKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgLS1tX3JlZkNvdW50OworICAgICAgICAgICAgQVNTRVJUKG1fcmVmQ291bnQg
Pj0gMCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IHJlZkNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9yZWZDb3VudDsgfQorCisgICAgICAgIExhYmVsSUQqIGJyZWFrVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9icmVha1RhcmdldC5nZXQoKTsgfQorICAgICAgICBMYWJlbElEKiBjb250aW51ZVRh
cmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludWVUYXJnZXQuZ2V0KCk7IH0KKworICAgICAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAgICAgY29uc3QgSWRl
bnRpZmllciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgICAgICBpbnQgc2Nv
cGVEZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVEZXB0aDsgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgaW50IG1fcmVmQ291bnQ7CisgICAgICAgIFR5cGUgbV90eXBlOworICAgICAgICBj
b25zdCBJZGVudGlmaWVyKiBtX25hbWU7CisgICAgICAgIGludCBtX3Njb3BlRGVwdGg7CisgICAg
ICAgIFJlZlB0cjxMYWJlbElEPiBtX2JyZWFrVGFyZ2V0OworICAgICAgICBSZWZQdHI8TGFiZWxJ
RD4gbV9jb250aW51ZVRhcmdldDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIExhYmVsU2NvcGVfaApJbmRleDoga2pzL0xhYmVsU3RhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtqcy9MYWJlbFN0YWNrLmNwcAkocmV2aXNpb24gMzc5OTApCisrKyBranMvTGFiZWxTdGFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGFiZWxTdGFjay5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotYm9vbCBMYWJlbFN0YWNrOjpwdXNoKGNvbnN0IElkZW50aWZpZXIm
IGlkKQotewotICAgIGlmIChjb250YWlucyhpZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFN0YWNrRWxlbSogbmV3VG9wT2ZTdGFjayA9IG5ldyBTdGFja0VsZW07Ci0gICAgbmV3VG9w
T2ZTdGFjay0+aWQgPSBpZDsKLSAgICBuZXdUb3BPZlN0YWNrLT5wcmV2ID0gbV90b3BPZlN0YWNr
OwotICAgIG1fdG9wT2ZTdGFjayA9IG5ld1RvcE9mU3RhY2s7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgTGFiZWxTdGFjazo6Y29udGFpbnMoY29uc3QgSWRlbnRpZmllciAmaWQpIGNvbnN0
Ci17Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBm
b3IgKFN0YWNrRWxlbSogY3VyciA9IG1fdG9wT2ZTdGFjazsgY3VycjsgY3VyciA9IGN1cnItPnBy
ZXYpIHsKLSAgICAgICAgaWYgKGN1cnItPmlkID09IGlkKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IGtqcy9MYWJlbFN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0xhYmVsU3RhY2suaAko
cmV2aXNpb24gMzc5OTApCisrKyBranMvTGFiZWxTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQot
I2lmbmRlZiBMYWJlbFN0YWNrX2gKLSNkZWZpbmUgTGFiZWxTdGFja19oCi0KLSNpbmNsdWRlICJp
ZGVudGlmaWVyLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi0gICAgY2xhc3MgTGFiZWxTdGFjayA6IE5vbmNvcHlhYmxlIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIExhYmVsU3RhY2soKQotICAgICAgICAgICAgOiBtX3RvcE9mU3RhY2soMCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgICAgIH5MYWJlbFN0YWNrKCk7Ci0KLSAgICAgICAgYm9v
bCBwdXNoKGNvbnN0IElkZW50aWZpZXIgJmlkKTsKLSAgICAgICAgYm9vbCBjb250YWlucyhjb25z
dCBJZGVudGlmaWVyICZpZCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgcG9wKCk7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBzdHJ1Y3QgU3RhY2tFbGVtIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIg
aWQ7Ci0gICAgICAgICAgICBTdGFja0VsZW0qIHByZXY7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
U3RhY2tFbGVtKiBtX3RvcE9mU3RhY2s7Ci0gICAgfTsKLQotICAgIGlubGluZSBMYWJlbFN0YWNr
Ojp+TGFiZWxTdGFjaygpCi0gICAgewotICAgICAgICBTdGFja0VsZW0qIHByZXY7Ci0gICAgICAg
IGZvciAoU3RhY2tFbGVtKiBlID0gbV90b3BPZlN0YWNrOyBlOyBlID0gcHJldikgewotICAgICAg
ICAgICAgcHJldiA9IGUtPnByZXY7Ci0gICAgICAgICAgICBkZWxldGUgZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlubGluZSB2b2lkIExhYmVsU3RhY2s6OnBvcCgpCi0gICAgewotICAgICAg
ICBpZiAoU3RhY2tFbGVtKiBlID0gbV90b3BPZlN0YWNrKSB7Ci0gICAgICAgICAgICBtX3RvcE9m
U3RhY2sgPSBlLT5wcmV2OwotICAgICAgICAgICAgZGVsZXRlIGU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gTGFiZWxTdGFja19oCkluZGV4OiBr
anMvZ3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ncmFtbWFyLnkJKHJldmlzaW9uIDM3OTkw
KQorKysga2pzL2dyYW1tYXIueQkod29ya2luZyBjb3B5KQpAQCAtMTExOCw4ICsxMTE4LDcgQEAg
RGVmYXVsdENsYXVzZToKIDsKIAogTGFiZWxsZWRTdGF0ZW1lbnQ6Ci0gICAgSURFTlQgJzonIFN0
YXRlbWVudCAgICAgICAgICAgICAgICAgeyAkMy5tX25vZGUtPnB1c2hMYWJlbCgqJDEpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWxOb2RlKiBub2RlID0g
bmV3IExhYmVsTm9kZShHTE9CQUxfREFUQSwgKiQxLCAkMy5tX25vZGUpOworICAgIElERU5UICc6
JyBTdGF0ZW1lbnQgICAgICAgICAgICAgICAgIHsgTGFiZWxOb2RlKiBub2RlID0gbmV3IExhYmVs
Tm9kZShHTE9CQUxfREFUQSwgKiQxLCAkMy5tX25vZGUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0VUX0VYQ0VQVElPTl9MT0NBVElPTihub2RlLCBAMS5maXJz
dF9jb2x1bW4sIEAyLmxhc3RfY29sdW1uLCBAMi5sYXN0X2NvbHVtbik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNyZWF0ZU5vZGVEZWNsYXJhdGlvbklu
Zm88U3RhdGVtZW50Tm9kZSo+KG5vZGUsICQzLm1fdmFyRGVjbGFyYXRpb25zLCAkMy5tX2Z1bmNE
ZWNsYXJhdGlvbnMsICQzLm1fZmVhdHVyZXMsICQzLm1fbnVtQ29uc3RhbnRzKTsgfQogOwpJbmRl
eDoga2pzL25vZGVzMnN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzMnN0cmluZy5j
cHAJKHJldmlzaW9uIDM3OTkwKQorKysga2pzL25vZGVzMnN0cmluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5OSw3ICs4OTksNyBAQCB2b2lkIFN3aXRjaE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgCiAKIHZvaWQgTGFiZWxOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0
CiB7Ci0gICAgcyA8PCBFbmRsIDw8IG1fbGFiZWwgPDwgIjoiIDw8IEluZGVudCA8PCBtX3N0YXRl
bWVudCA8PCBVbmluZGVudDsKKyAgICBzIDw8IEVuZGwgPDwgbV9uYW1lIDw8ICI6IiA8PCBJbmRl
bnQgPDwgbV9zdGF0ZW1lbnQgPDwgVW5pbmRlbnQ7CiB9CiAKIHZvaWQgVGhyb3dOb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM3OTkwKQorKysga2pzL25vZGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdGF0aWNTY29wZU9iamVj
dC5oIgorI2luY2x1ZGUgIkxhYmVsU2NvcGUuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNs
dWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgpAQCAt
MTE3NCw2ICsxMTc1LDggQEAgUmVnaXN0ZXJJRCogSWZFbHNlTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bgogCiBSZWdpc3RlcklEKiBEb1doaWxlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgUmVmUHRyPExhYmVsU2NvcGU+IHNjb3Bl
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisKICAgICBSZWZQ
dHI8TGFiZWxJRD4gdG9wT2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0KCkpOwogCkBAIC0xMTgxLDIwICsxMTg0LDE1IEBA
IFJlZ2lzdGVySUQqIERvV2hpbGVOb2RlOjplbWl0Q29kZShDb2RlR2UKIAogICAgIGlmICghbV9z
dGF0ZW1lbnQtPmlzQmxvY2soKSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2ls
bEV4ZWN1dGVTdGF0ZW1lbnQsIG1fc3RhdGVtZW50LT5maXJzdExpbmUoKSwgbV9zdGF0ZW1lbnQt
Pmxhc3RMaW5lKCkpOwotCi0gICAgUmVmUHRyPExhYmVsSUQ+IGNvbnRpbnVlVGFyZ2V0ID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgUmVmUHRyPExhYmVsSUQ+IGJyZWFrVGFyZ2V0ID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7Ci0KLSAgICBnZW5lcmF0b3IucHVzaEp1bXBDb250ZXh0KCZtX2xh
YmVsU3RhY2ssIGNvbnRpbnVlVGFyZ2V0LmdldCgpLCBicmVha1RhcmdldC5nZXQoKSwgdHJ1ZSk7
CisgICAgICAgIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1p
dE5vZGUoZHN0LCBtX3N0YXRlbWVudC5nZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLnBvcEp1bXBDb250
ZXh0KCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNvbnRpbnVlVGFyZ2V0LmdldCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKICAgICBn
ZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbV9leHByLT5saW5l
Tm8oKSwgbV9leHByLT5saW5lTm8oKSk7CiAgICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShj
b25kLCB0b3BPZkxvb3AuZ2V0KCkpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChicmVha1Rh
cmdldC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKIH0KIApAQCAtMTIwMiwyNiArMTIwMCwyNCBA
QCBSZWdpc3RlcklEKiBEb1doaWxlTm9kZTo6ZW1pdENvZGUoQ29kZUdlCiAKIFJlZ2lzdGVySUQq
IFdoaWxlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7Ci0gICAgUmVmUHRyPExhYmVsSUQ+IHRvcE9mTG9vcCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgIFJlZlB0cjxMYWJlbElEPiBjb250aW51ZVRhcmdldCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotICAgIFJlZlB0cjxMYWJlbElEPiBicmVha1RhcmdldCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOworICAgIFJlZlB0cjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdM
YWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGNv
bnRpbnVlVGFyZ2V0LmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEp1bXAoc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOworCisgICAgUmVmUHRyPExhYmVsSUQ+IHRvcE9mTG9vcCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsK
IAogICAgIGlmICghbV9zdGF0ZW1lbnQtPmlzQmxvY2soKSkKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIG1fc3RhdGVtZW50LT5maXJzdExpbmUo
KSwgbV9zdGF0ZW1lbnQtPmxhc3RMaW5lKCkpOwogIAotICAgIGdlbmVyYXRvci5wdXNoSnVtcENv
bnRleHQoJm1fbGFiZWxTdGFjaywgY29udGludWVUYXJnZXQuZ2V0KCksIGJyZWFrVGFyZ2V0Lmdl
dCgpLCB0cnVlKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudC5nZXQo
KSk7Ci0gICAgZ2VuZXJhdG9yLnBvcEp1bXBDb250ZXh0KCk7CiAKLSAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGNvbnRpbnVlVGFyZ2V0LmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNj
b3BlLT5jb250aW51ZVRhcmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxs
RXhlY3V0ZVN0YXRlbWVudCwgbV9leHByLT5saW5lTm8oKSwgbV9leHByLT5saW5lTm8oKSk7CiAg
ICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShjb25kLCB0b3BPZkxvb3AuZ2V0KCkpOwogCi0g
ICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChicmVha1RhcmdldC5nZXQoKSk7CisgICAgZ2VuZXJhdG9y
LmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBzdGF0ZW1lbnQgZXhlY3V0ZWQgc28gdGhhdCBpdCBj
YW4gYmUgcmV0dXJuZWQgYXMgYSBDb21wbGV0aW9uCiAgICAgcmV0dXJuIDA7CkBAIC0xMjM0LDM4
ICsxMjMwLDM2IEBAIFJlZ2lzdGVySUQqIEZvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmEKICAg
ICBpZiAoZHN0ID09IGlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgZHN0ID0gMDsKIAorICAgIFJl
ZlB0cjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOworCiAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0
ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKIAogICAgIGlmIChtX2V4cHIxKQogICAg
ICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoaWdub3JlZFJlc3VsdCgpLCBtX2V4cHIxLmdldCgpKTsK
IAotICAgIFJlZlB0cjxMYWJlbElEPiB0b3BPZkxvb3AgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsK
LSAgICBSZWZQdHI8TGFiZWxJRD4gYmVmb3JlQ29uZGl0aW9uID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7Ci0gICAgUmVmUHRyPExhYmVsSUQ+IGNvbnRpbnVlVGFyZ2V0ID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7IAotICAgIFJlZlB0cjxMYWJlbElEPiBicmVha1RhcmdldCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOyAKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXAoYmVmb3JlQ29uZGl0aW9uLmdldCgpKTsK
KyAgICBSZWZQdHI8TGFiZWxJRD4gY29uZGl0aW9uID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGNvbmRpdGlvbi5nZXQoKSk7CiAKKyAgICBSZWZQdHI8TGFi
ZWxJRD4gdG9wT2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbCh0b3BPZkxvb3AuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5wdXNoSnVtcENvbnRleHQo
Jm1fbGFiZWxTdGFjaywgY29udGludWVUYXJnZXQuZ2V0KCksIGJyZWFrVGFyZ2V0LmdldCgpLCB0
cnVlKTsKKwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUoZHN0LCBtX3N0YXRlbWVudC5nZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLnBvcEp1bXBDb250ZXh0
KCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChjb250aW51ZVRhcmdldC5nZXQoKSk7CisKKyAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKICAgICBpZiAo
bV9leHByMykKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGlnbm9yZWRSZXN1bHQoKSwgbV9l
eHByMy5nZXQoKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGJlZm9yZUNvbmRpdGlvbi5n
ZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChjb25kaXRpb24uZ2V0KCkpOwogICAgIGlm
IChtX2V4cHIyKSB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9leHByMi5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShjb25k
LCB0b3BPZkxvb3AuZ2V0KCkpOwotICAgIH0gZWxzZSB7CisgICAgfSBlbHNlCiAgICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcCh0b3BPZkxvb3AuZ2V0KCkpOwotICAgIH0KIAogICAgIGlmICghbV9z
dGF0ZW1lbnQtPmlzQmxvY2soKSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2ls
bEV4ZWN1dGVTdGF0ZW1lbnQsIG1fc3RhdGVtZW50LT5maXJzdExpbmUoKSwgbV9zdGF0ZW1lbnQt
Pmxhc3RMaW5lKCkpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChicmVha1RhcmdldC5nZXQo
KSk7Ci0gICAgCisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKIH0KIApAQCAtMTI5OSwxOCArMTI5MywyMiBAQCBG
b3JJbk5vZGU6OkZvckluTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhCiAKIFJlZ2lzdGVySUQqIEZv
ckluTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7CisgICAgUmVmUHRyPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVs
U2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisKICAgICBpZiAoIW1fbGV4cHItPmlzTG9jYXRpb24o
KSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgUmVmZXJlbmNlRXJy
b3IsICJMZWZ0IHNpZGUgb2YgZm9yLWluIHN0YXRlbWVudCBpcyBub3QgYSByZWZlcmVuY2UuIik7
Ci0gICAgUmVmUHRyPExhYmVsSUQ+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwor
CiAgICAgUmVmUHRyPExhYmVsSUQ+IGNvbnRpbnVlVGFyZ2V0ID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7IAotICAgIFJlZlB0cjxMYWJlbElEPiBicmVha1RhcmdldCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOyAKIAogICAgIGlmIChtX2luaXQpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShpZ25v
cmVkUmVzdWx0KCksIG1faW5pdC5nZXQoKSk7CiAgICAgUmVnaXN0ZXJJRCogZm9ySW5CYXNlID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGl0ZXIgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5TmFtZXMoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBmb3JJbkJhc2UpOwotICAgIGdlbmVyYXRvci5lbWl0SnVtcChjb250aW51ZVRhcmdl
dC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgp
KTsKKworICAgIFJlZlB0cjxMYWJlbElEPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CisKICAgICBSZWdp
c3RlcklEKiBwcm9wZXJ0eU5hbWU7CiAgICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkg
ewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PFJlc29sdmVO
b2RlKj4obV9sZXhwci5nZXQoKSktPmlkZW50aWZpZXIoKTsKQEAgLTEzNDQsMTggKzEzNDIsMTUg
QEAgUmVnaXN0ZXJJRCogRm9ySW5Ob2RlOjplbWl0Q29kZShDb2RlR2VuZQogICAgICAgICBnZW5l
cmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHN1YnNjcmlwdCwgcHJvcGVydHlOYW1lKTsK
ICAgICB9ICAgCiAgICAgCi0gICAgZ2VuZXJhdG9yLnB1c2hKdW1wQ29udGV4dCgmbV9sYWJlbFN0
YWNrLCBjb250aW51ZVRhcmdldC5nZXQoKSwgYnJlYWtUYXJnZXQuZ2V0KCksIHRydWUpOwogICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50LmdldCgpKTsKLSAgICBnZW5lcmF0
b3IucG9wSnVtcENvbnRleHQoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxF
eGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7Ci0KICAgICBpZiAoIW1f
c3RhdGVtZW50LT5pc0Jsb2NrKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdp
bGxFeGVjdXRlU3RhdGVtZW50LCBtX3N0YXRlbWVudC0+Zmlyc3RMaW5lKCksIG1fc3RhdGVtZW50
LT5sYXN0TGluZSgpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoY29udGludWVUYXJnZXQu
Z2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkp
OwogICAgIGdlbmVyYXRvci5lbWl0TmV4dFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUsIGl0ZXIu
Z2V0KCksIGxvb3BTdGFydC5nZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChicmVha1Rh
cmdldC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQo
KSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTM2NCwyMyArMTM1OSwxNCBAQCBSZWdpc3Rl
cklEKiBGb3JJbk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAvLyBFQ01BIDEyLjcKIFJlZ2lzdGVy
SUQqIENvbnRpbnVlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7Ci0gICAgaWYgKCFnZW5lcmF0b3IuaW5Db250aW51ZUNvbnRleHQoKSkK
LSAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgU3ludGF4RXJyb3IsICJJ
bnZhbGlkIGNvbnRpbnVlIHN0YXRlbWVudC4iKTsKLQotICAgIEp1bXBDb250ZXh0KiB0YXJnZXRD
b250ZXh0ID0gZ2VuZXJhdG9yLmp1bXBDb250ZXh0Rm9yQ29udGludWUobV9pZGVudCk7CisgICAg
TGFiZWxTY29wZSogc2NvcGUgPSBnZW5lcmF0b3IuY29udGludWVUYXJnZXQobV9pZGVudCk7CiAK
LSAgICBpZiAoIXRhcmdldENvbnRleHQpIHsKLSAgICAgICAgaWYgKG1faWRlbnQuaXNFbXB0eSgp
KQotICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgU3ludGF4RXJy
b3IsICJJbnZhbGlkIGNvbnRpbnVlIHN0YXRlbWVudC4iKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgU3ludGF4RXJyb3IsICJMYWJl
bCAlcyBub3QgZm91bmQuIiwgbV9pZGVudCk7Ci0gICAgfQotCi0gICAgaWYgKCF0YXJnZXRDb250
ZXh0LT5jb250aW51ZVRhcmdldCkKLSAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVy
YXRvciwgU3ludGF4RXJyb3IsICJJbnZhbGlkIGNvbnRpbnVlIHN0YXRlbWVudC4iKTsgICAgICAg
IAorICAgIGlmICghc2NvcGUpCisgICAgICAgIHJldHVybiBtX2lkZW50LmlzRW1wdHkoKQorICAg
ICAgICAgICAgPyBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3IsIFN5bnRheEVycm9yLCAiSW52YWxp
ZCBjb250aW51ZSBzdGF0ZW1lbnQuIikKKyAgICAgICAgICAgIDogZW1pdFRocm93RXJyb3IoZ2Vu
ZXJhdG9yLCBTeW50YXhFcnJvciwgIlVuZGVmaW5lZCBsYWJlbDogJyVzJy4iLCBtX2lkZW50KTsK
IAotICAgIGdlbmVyYXRvci5lbWl0SnVtcFNjb3Blcyh0YXJnZXRDb250ZXh0LT5jb250aW51ZVRh
cmdldCwgdGFyZ2V0Q29udGV4dC0+c2NvcGVEZXB0aCk7Ci0gICAgCisgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wU2NvcGVzKHNjb3BlLT5jb250aW51ZVRhcmdldCgpLCBzY29wZS0+c2NvcGVEZXB0aCgp
KTsKICAgICByZXR1cm4gZHN0OwogfQogCkBAIC0xMzg5LDIyICsxMzc1LDE0IEBAIFJlZ2lzdGVy
SUQqIENvbnRpbnVlTm9kZTo6ZW1pdENvZGUoQ29kZUcKIC8vIEVDTUEgMTIuOAogUmVnaXN0ZXJJ
RCogQnJlYWtOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKLSAgICBpZiAoIWdlbmVyYXRvci5pbkp1bXBDb250ZXh0KCkpCi0gICAgICAg
IHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3IsIFN5bnRheEVycm9yLCAiSW52YWxpZCBi
cmVhayBzdGF0ZW1lbnQuIik7Ci0gICAgCi0gICAgSnVtcENvbnRleHQqIHRhcmdldENvbnRleHQg
PSBnZW5lcmF0b3IuanVtcENvbnRleHRGb3JCcmVhayhtX2lkZW50KTsKKyAgICBMYWJlbFNjb3Bl
KiBzY29wZSA9IGdlbmVyYXRvci5icmVha1RhcmdldChtX2lkZW50KTsKICAgICAKLSAgICBpZiAo
IXRhcmdldENvbnRleHQpIHsKLSAgICAgICAgaWYgKG1faWRlbnQuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgU3ludGF4RXJyb3IsICJJbnZh
bGlkIGJyZWFrIHN0YXRlbWVudC4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJu
IGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgU3ludGF4RXJyb3IsICJMYWJlbCAlcyBub3QgZm91
bmQuIiwgbV9pZGVudCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHRhcmdldENvbnRleHQtPmJyZWFr
VGFyZ2V0KTsKLQotICAgIGdlbmVyYXRvci5lbWl0SnVtcFNjb3Blcyh0YXJnZXRDb250ZXh0LT5i
cmVha1RhcmdldCwgdGFyZ2V0Q29udGV4dC0+c2NvcGVEZXB0aCk7CisgICAgaWYgKCFzY29wZSkK
KyAgICAgICAgcmV0dXJuIG1faWRlbnQuaXNFbXB0eSgpCisgICAgICAgICAgICA/IGVtaXRUaHJv
d0Vycm9yKGdlbmVyYXRvciwgU3ludGF4RXJyb3IsICJJbnZhbGlkIGJyZWFrIHN0YXRlbWVudC4i
KQorICAgICAgICAgICAgOiBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3IsIFN5bnRheEVycm9yLCAi
VW5kZWZpbmVkIGxhYmVsOiAnJXMnLiIsIG1faWRlbnQpOwogCisgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wU2NvcGVzKHNjb3BlLT5icmVha1RhcmdldCgpLCBzY29wZS0+c2NvcGVEZXB0aCgpKTsKICAg
ICByZXR1cm4gZHN0OwogfQogCkBAIC0xNTg1LDE1ICsxNTYzLDEyIEBAIFJlZ2lzdGVySUQqIENh
c2VCbG9ja05vZGU6OmVtaXRDb2RlRm9yQmwKIAogUmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAg
UmVmUHRyPExhYmVsSUQ+IGJyZWFrVGFyZ2V0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAg
UmVmUHRyPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxT
Y29wZTo6U3dpdGNoKTsKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5wdXNoSnVtcENvbnRleHQoJm1f
bGFiZWxTdGFjaywgMCwgYnJlYWtUYXJnZXQuZ2V0KCksIHRydWUpOwogICAgIFJlZ2lzdGVySUQq
IHIxID0gbV9ibG9jay0+ZW1pdENvZGVGb3JCbG9jayhnZW5lcmF0b3IsIHIwLmdldCgpLCBkc3Qp
OwotICAgIGdlbmVyYXRvci5wb3BKdW1wQ29udGV4dCgpOwotCi0gICAgZ2VuZXJhdG9yLmVtaXRM
YWJlbChicmVha1RhcmdldC5nZXQoKSk7CiAKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3Bl
LT5icmVha1RhcmdldCgpKTsKICAgICByZXR1cm4gcjE7CiB9CiAKQEAgLTE2MDEsMTkgKzE1NzYs
MTMgQEAgUmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgogCiBSZWdpc3Rl
cklEKiBMYWJlbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogewotICAgIGlmIChnZW5lcmF0b3IuanVtcENvbnRleHRGb3JCcmVhayhtX2xh
YmVsKSkKLSAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgU3ludGF4RXJy
b3IsICJEdXBsaWNhdGVkIGxhYmVsICVzIGZvdW5kLiIsIG1fbGFiZWwpOworICAgIGlmIChnZW5l
cmF0b3IuYnJlYWtUYXJnZXQobV9uYW1lKSkKKyAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9y
KGdlbmVyYXRvciwgU3ludGF4RXJyb3IsICJEdXBsaWNhdGUgbGFiZWw6ICVzLiIsIG1fbmFtZSk7
CiAKLSAgICBSZWZQdHI8TGFiZWxJRD4gbDAgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICBt
X2xhYmVsU3RhY2sucHVzaChtX2xhYmVsKTsKLSAgICBnZW5lcmF0b3IucHVzaEp1bXBDb250ZXh0
KCZtX2xhYmVsU3RhY2ssIDAsIGwwLmdldCgpLCBmYWxzZSk7Ci0gICAgCisgICAgUmVmUHRyPExh
YmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TmFt
ZWRMYWJlbCwgJm1fbmFtZSk7CiAgICAgUmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUoZHN0LCBtX3N0YXRlbWVudC5nZXQoKSk7Ci0gICAgCi0gICAgZ2VuZXJhdG9yLnBvcEp1bXBD
b250ZXh0KCk7Ci0gICAgbV9sYWJlbFN0YWNrLnBvcCgpOwotICAgIAotICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwobDAuZ2V0KCkpOworCisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJl
YWtUYXJnZXQoKSk7CiAgICAgcmV0dXJuIHIwOwogfQogCkluZGV4OiBranMvbm9kZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBranMvbm9kZXMuaAkocmV2aXNpb24gMzc5OTApCisrKyBranMvbm9kZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKLSNpbmNsdWRlICJMYWJlbFN0
YWNrLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJJRC5oIgogI2lu
Y2x1ZGUgIlJlc3VsdFR5cGUuaCIKQEAgLTIzMSwxNCArMjMwLDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBpbnQgZmlyc3RMaW5lKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBs
aW5lTm8oKTsgfQogICAgICAgICBpbnQgbGFzdExpbmUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsg
cmV0dXJuIG1fbGFzdExpbmU7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaExhYmVsKGNv
bnN0IElkZW50aWZpZXImIGlkZW50KSBKU0NfRkFTVF9DQUxMIHsgbV9sYWJlbFN0YWNrLnB1c2go
aWRlbnQpOyB9CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0VtcHR5U3RhdGVtZW50KCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Jsb2NrKCkgY29uc3QgSlND
X0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb29w
KCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQotICAgIHByb3RlY3RlZDoK
LSAgICAgICAgTGFiZWxTdGFjayBtX2xhYmVsU3RhY2s7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBpbnQgbV9sYXN0TGluZTsKQEAgLTIwODcsMTkgKzIwODMsMTggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBMYWJlbE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRo
cm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIExhYmVsTm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIGxhYmVsLCBTdGF0ZW1l
bnROb2RlKiBzdGF0ZW1lbnQpIEpTQ19GQVNUX0NBTEwKKyAgICAgICAgTGFiZWxOb2RlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgU3RhdGVtZW50Tm9k
ZSogc3RhdGVtZW50KSBKU0NfRkFTVF9DQUxMCiAgICAgICAgICAgICA6IFN0YXRlbWVudE5vZGUo
Z2xvYmFsRGF0YSkKLSAgICAgICAgICAgICwgbV9sYWJlbChsYWJlbCkKKyAgICAgICAgICAgICwg
bV9uYW1lKG5hbWUpCiAgICAgICAgICAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKICAgICAg
ICAgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hMYWJlbChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkg
SlNDX0ZBU1RfQ0FMTCB7IG1fc3RhdGVtZW50LT5wdXNoTGFiZWwoaWRlbnQpOyB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICBJZGVudGlmaWVyIG1fbGFiZWw7CisgICAgICAgIElkZW50aWZpZXIg
bV9uYW1lOwogICAgICAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gbV9zdGF0ZW1lbnQ7CiAgICAg
fTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24828</attachid>
            <date>2008-10-31 18:27:49 -0700</date>
            <delta_ts>2008-11-01 14:42:22 -0700</delta_ts>
            <desc>patch - remove reference count and symbol table from FunctionBodyNode</desc>
            <filename>patch-symboltable.txt</filename>
            <type>text/plain</type>
            <size>12144</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4MDYx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMDgtMTAt
MzEgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1vdmVkIEZ1bmN0aW9uQm9k
eU5vZGUgc3ltYm9sIHRhYmxlIHRvIEZ1bmN0aW9uQ29kZUJsb2NrLCByZW1vdmVkCisgICAgICAg
IGN1c3RvbSByZWZlcmVuY2UgY291bnQgZnJvbSBGdW5jdGlvbkJvZHlOb2RlLgorICAgICAgICAK
KyAgICAgICAgVG90YWwgRnVuY3Rpb25Cb2R5Tm9kZSBzaXplIG5vdzogMjgwIGJ5dGVzLgorCisg
ICAgICAgICogVk0vQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2Nr
OjpGdW5jdGlvbkNvZGVCbG9jayk6IFNwbGl0IG91dCBGdW5jdGlvbkNvZGVCbG9jaywKKyAgICAg
ICAganVzdCBsaWtlIEV2YWxDb2RlQmxvY2sgYW5kIFByb2dyYW1Db2RlQmxvY2suIE1hZGUgRnVu
Y3Rpb25Db2RlQmxvY2sKKyAgICAgICAgcmVmZXJlbmNlLWNvdW50ZWQsIHNvIEFjdGl2YXRpb24g
b2JqZWN0cyBjYW4gaGFuZyBvbiB0byBpdC4gKEkgZGVjaWRlZAorICAgICAgICBub3QgdG8gbWFr
ZSBhbGwgQ29kZUJsb2NrcyByZWZlcmVuY2UgY291bnRlZCBiZWNhdXNlIEkgZGlkbid0IHdhbnQg
dG8KKyAgICAgICAgbWFrZSB0aGUgZGVzdHJ1Y3RvciB2aXJ0dWFsLikgU2luY2UgQWN0aXZhdGlv
bnMgbm8gbG9uZ2VyIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSwgcmVm
ZXJlbmNlIGNvdW50IGNodXJuIGlzIG5vdCBzaWduaWZpY2FudCwgYW5kIHdlIGNhbgorICAgICAg
ICByZW1vdmUgRnVuY3Rpb25Cb2R5Tm9kZSdzIGN1c3RvbSByZWZlcmVuY2UgY291bnQuCisKKyAg
ICAgICAgKiBWTS9NYWNoaW5lLmNwcDoKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpyZXRyaWV2ZUFyZ3VtZW50cyk6CisgICAg
ICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9wdXNoX2FjdGl2YXRpb24pOiBVc2UgdGhlIEZ1bmN0
aW9uQ29kZUJsb2NrIHRvCisgICAgICAgIGFjY2VzcyB0aGUgc3ltYm9sIHRhYmxlIGFuZCBjcmVh
dGUgQWN0aXZhdGlvbiBvYmplY3RzLgorCisgICAgICAgICoga2pzL0FyZ3VtZW50cy5oOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmNvcHlSZWdpc3RlcnMpOiBkaXR0bworCisgICAgICAg
ICoga2pzL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6SlNB
Y3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjptYXJrKToKKyAgICAgICAg
KEpTQzo6SlNBY3RpdmF0aW9uOjppc0R5bmFtaWNTY29wZSk6CisgICAgICAgIChKU0M6OkpTQWN0
aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAgKiBranMvSlNBY3RpdmF0aW9uLmg6
CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uRGF0YTo6SlNBY3RpdmF0
aW9uRGF0YSk6IGRpdHRvCisKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25Cb2R5Tm9kZTo6Z2VuZXJhdGVDb2RlKTogZGl0dG8KKworICAgICAgICAqIGtqcy9ub2Rl
cy5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjopOiBOaXhlZCBzeW1ib2wgdGFi
bGUgYW5kIGN1c3RvbSByZWZlcmVuY2UgY291bnQuCisKIDIwMDgtMTAtMzEgIENhbWVyb24gWndh
cmljaCAgPHp3YXJpY2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEdl
b2ZmIEdhcmVuLgpJbmRleDogVk0vQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDM4MDU0KQorKysgVk0vQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2Nyw2ICszNjcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB9OwogCisgICAgc3Ry
dWN0IEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jaywgcHVibGljIFJlZkNvdW50
ZWQ8RnVuY3Rpb25Db2RlQmxvY2s+IHsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soU2NvcGVO
b2RlKiBvd25lck5vZGVfLCBDb2RlVHlwZSBjb2RlVHlwZV8sIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZV8sIHVuc2lnbmVkIHNvdXJjZU9mZnNldF8pCisgICAgICAgICAgICA6IENv
ZGVCbG9jayhvd25lck5vZGVfLCBjb2RlVHlwZV8sIHNvdXJjZV8sIHNvdXJjZU9mZnNldF8pCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3ltYm9sVGFibGUgc3ltYm9s
VGFibGU7CisgICAgfTsKKwogICAgIC8vIFByb2dyYW0gY29kZSBpcyBub3QgbWFya2VkIGJ5IGFu
eSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9iamVjdAogICAgIC8vIHJlc3BvbnNp
YmxlIGZvciBtYXJraW5nIGl0LgogCkluZGV4OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBWTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzgwNTQpCisrKyBWTS9NYWNoaW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUxMCw3ICszNTEwLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAqLwogCiAgICAgICAgIHNpemVfdCBpID0gMDsKLSAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAg
ICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25D
b2RlQmxvY2sqPihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKIAogICAgICAgICBmb3IgKHNpemVf
dCBjb3VudCA9IGNvZGVCbG9jay0+bnVtVmFyczsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgICAg
ICBjYWxsRnJhbWVbaV0gPSBqc1VuZGVmaW5lZCgpOwpAQCAtMzUxOSw3ICszNTE5LDcgQEAgSlNW
YWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgY2FsbEZy
YW1lW2ldID0gY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyc1tqXTsKIAogICAgICAgICBpbnQg
ZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRp
b24gPSBuZXcgKGdsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIHN0YXRpY19jYXN0
PEZ1bmN0aW9uQm9keU5vZGUqPihjb2RlQmxvY2stPm93bmVyTm9kZSkpOworICAgICAgICBKU0Fj
dGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKGdsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihjYWxs
RnJhbWUsIGNvZGVCbG9jayk7CiAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gYWN0aXZhdGlvbjsK
ICAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
LT5jb3B5KCktPnB1c2goYWN0aXZhdGlvbikpOwogCkBAIC00MDEwLDEwICs0MDEwLDEwIEBAIEpT
VmFsdWUqIE1hY2hpbmU6OnJldHJpZXZlQXJndW1lbnRzKENhbGwKICAgICBpZiAoIWZ1bmN0aW9u
Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGZ1bmN0aW9uQ2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBGdW5jdGlvbkNv
ZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihmdW5j
dGlvbkNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwogICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1
bWVudHMpIHsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUgPT0gRnVuY3Rpb25D
b2RlKTsKLSAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25Cb2R5Tm9kZSo+KGNvZGVCbG9jay0+b3duZXJOb2RlKS0+c3ltYm9sVGFibGUoKTsKKyAg
ICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZTsK
ICAgICAgICAgaW50IGFyZ3VtZW50c0luZGV4ID0gc3ltYm9sVGFibGUuZ2V0KGZ1bmN0aW9uQ2Fs
bEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLnVzdHJpbmcoKS5yZXAoKSkuZ2V0SW5k
ZXgoKTsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbEZyYW1lW2FyZ3VtZW50c0luZGV4XS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgfQpAQCAtNDc4Nyw3ICs0Nzg3LDcgQEAgSlNPYmplY3Qq
IE1hY2hpbmU6OmN0aV9vcF9wdXNoX2FjdGl2YXRpbwogewogICAgIENUSV9TVEFDS19IQUNLKCk7
CiAKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKEFSR19nbG9iYWxEYXRhKSBK
U0FjdGl2YXRpb24oQVJHX2NhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Cb2R5Tm9kZSo+
KEFSR19jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lck5vZGUpKTsKKyAgICBKU0FjdGl2YXRp
b24qIGFjdGl2YXRpb24gPSBuZXcgKEFSR19nbG9iYWxEYXRhKSBKU0FjdGl2YXRpb24oQVJHX2Nh
bGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihBUkdfY2FsbEZyYW1lLT5j
b2RlQmxvY2soKSkpOwogICAgIEFSR19jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oQVJHX2NhbGxG
cmFtZS0+c2NvcGVDaGFpbigpLT5jb3B5KCktPnB1c2goYWN0aXZhdGlvbikpOwogICAgIHJldHVy
biBhY3RpdmF0aW9uOwogfQpJbmRleDoga2pzL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtq
cy9Bcmd1bWVudHMuaAkocmV2aXNpb24gMzgwNTQpCisrKyBranMvQXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwNiw4ICsyMDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAg
ICAgIEFTU0VSVCghZCgpLT5yZWdpc3RlckFycmF5KTsKIAotICAgICAgICBzaXplX3QgbnVtUGFy
YW1ldGVyc01pbnVzVGhpcyA9IGQoKS0+ZnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRlQ29kZSgp
Lm51bVBhcmFtZXRlcnMgLSAxOwotICAgICAgICBzaXplX3QgbnVtVmFycyA9IGQoKS0+ZnVuY3Rp
b25Cb2R5LT5nZW5lcmF0ZWRCeXRlQ29kZSgpLm51bVZhcnM7CisgICAgICAgIHNpemVfdCBudW1Q
YXJhbWV0ZXJzTWludXNUaGlzID0gZCgpLT5jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMgLSAxOwor
ICAgICAgICBzaXplX3QgbnVtVmFycyA9IGQoKS0+Y29kZUJsb2NrLT5udW1WYXJzOwogICAgICAg
ICBzaXplX3QgbnVtTG9jYWxzID0gbnVtVmFycyArIG51bVBhcmFtZXRlcnNNaW51c1RoaXM7CiAK
ICAgICAgICAgaWYgKCFudW1Mb2NhbHMpCkluZGV4OiBranMvSlNBY3RpdmF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBranMvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMzgwNTQpCisrKyBranMv
SlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBBU1NFUlRf
Q0xBU1NfRklUU19JTl9DRUxMKEpTQWN0aXZhdGlvbik7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0Fj
dGl2YXRpb246OmluZm8gPSB7ICJKU0FjdGl2YXRpb24iLCAwLCAwLCAwIH07CiAKLUpTQWN0aXZh
dGlvbjo6SlNBY3RpdmF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBQYXNzUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSkKLSAgICA6IEJhc2UoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuYWN0aXZhdGlvblN0cnVjdHVyZUlELCBuZXcgSlNBY3RpdmF0aW9uRGF0YShmdW5jdGlv
bkJvZHksIGNhbGxGcmFtZSkpCitKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlvbihDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgUGFzc1JlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gY29kZUJsb2NrKQorICAg
IDogQmFzZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5hY3RpdmF0aW9uU3RydWN0dXJlSUQsIG5l
dyBKU0FjdGl2YXRpb25EYXRhKGNvZGVCbG9jaywgY2FsbEZyYW1lKSkKIHsKIH0KIApAQCAtNTcs
NyArNTcsNyBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6bWFyaygpCiAgICAgaWYgKCFyZWdpc3RlckFy
cmF5KQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgbnVtUGFyYW1ldGVyc01pbnVzVGhp
cyA9IGQoKS0+ZnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRlQ29kZSgpLm51bVBhcmFtZXRlcnMg
LSAxOworICAgIHNpemVfdCBudW1QYXJhbWV0ZXJzTWludXNUaGlzID0gZCgpLT5jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMgLSAxOwogCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIHNpemVfdCBjb3Vu
dCA9IG51bVBhcmFtZXRlcnNNaW51c1RoaXM7IApAQCAtNjcsNyArNjcsNyBAQCB2b2lkIEpTQWN0
aXZhdGlvbjo6bWFyaygpCiAgICAgICAgICAgICByLm1hcmsoKTsKICAgICB9CiAKLSAgICBzaXpl
X3QgbnVtVmFycyA9IGQoKS0+ZnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRlQ29kZSgpLm51bVZh
cnM7CisgICAgc2l6ZV90IG51bVZhcnMgPSBkKCktPmNvZGVCbG9jay0+bnVtVmFyczsKIAogICAg
IC8vIFNraXAgdGhlIGNhbGwgZnJhbWUsIHdoaWNoIHNpdHMgYmV0d2VlbiB0aGUgcGFyYW1ldGVy
cyBhbmQgdmFycy4KICAgICBpICs9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
QEAgLTE0OCwxNCArMTQ4LDE0IEBAIEpTT2JqZWN0KiBKU0FjdGl2YXRpb246OnRvVGhpc09iamVj
dChFeGUKIAogYm9vbCBKU0FjdGl2YXRpb246OmlzRHluYW1pY1Njb3BlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZCgpLT5mdW5jdGlvbkJvZHktPnVzZXNFdmFsKCk7CisgICAgcmV0dXJuIGQoKS0+
Y29kZUJsb2NrLT5vd25lck5vZGUtPnVzZXNFdmFsKCk7CiB9CiAKIEpTVmFsdWUqIEpTQWN0aXZh
dGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRp
b24gPSBhc0FjdGl2YXRpb24oc2xvdC5zbG90QmFzZSgpKTsKIAotICAgIGlmIChhY3RpdmF0aW9u
LT5kKCktPmZ1bmN0aW9uQm9keS0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAgaWYgKGFjdGl2YXRp
b24tPmQoKS0+Y29kZUJsb2NrLT5vd25lck5vZGUtPnVzZXNBcmd1bWVudHMoKSkgewogICAgICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgYWN0aXZhdGlvbi0+c3ltYm9sVGFibGVHZXQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgc2xvdCk7CiAgICAgICAgIHJldHVybiBz
bG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpOwpJbmRl
eDoga2pzL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU0FjdGl2YXRpb24uaAko
cmV2aXNpb24gMzgwNTQpCisrKyBranMvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBY3RpdmF0aW9uIDog
cHVibGljIEpTVmFyaWFibGVPYmplY3QgewogICAgICAgICB0eXBlZGVmIEpTVmFyaWFibGVPYmpl
Y3QgQmFzZTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTQWN0aXZhdGlvbihDYWxsRnJhbWUqLCBQ
YXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+KTsKKyAgICAgICAgSlNBY3RpdmF0aW9uKENhbGxG
cmFtZSosIFBhc3NSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+KTsKICAgICAgICAgdmlydHVhbCB+
SlNBY3RpdmF0aW9uKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKQEAgLTY4LDEz
ICs2OCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVj
dCBKU0FjdGl2YXRpb25EYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmplY3REYXRhIHsKLSAgICAg
ICAgICAgIEpTQWN0aXZhdGlvbkRhdGEoUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5j
dGlvbkJvZHksIFJlZ2lzdGVyKiByZWdpc3RlcnMpCi0gICAgICAgICAgICAgICAgOiBKU1Zhcmlh
YmxlT2JqZWN0RGF0YSgmZnVuY3Rpb25Cb2R5LT5zeW1ib2xUYWJsZSgpLCByZWdpc3RlcnMpCi0g
ICAgICAgICAgICAgICAgLCBmdW5jdGlvbkJvZHkoZnVuY3Rpb25Cb2R5KQorICAgICAgICAgICAg
SlNBY3RpdmF0aW9uRGF0YShQYXNzUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBjb2RlQmxvY2ss
IFJlZ2lzdGVyKiByZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0
RGF0YSgmY29kZUJsb2NrLT5zeW1ib2xUYWJsZSwgcmVnaXN0ZXJzKQorICAgICAgICAgICAgICAg
ICwgY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keTsKKyAgICAg
ICAgICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgICAgICB9Owog
ICAgICAgICAKICAgICAgICAgc3RhdGljIEpTVmFsdWUqIGFyZ3VtZW50c0dldHRlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CkluZGV4OiBranMv
bm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM4MDU0KQor
Kysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczMCw3ICsxNzMwLDYgQEAgRnVu
Y3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShKU0dsbwogICAgIDogU2NvcGVOb2RlKGds
b2JhbERhdGEsIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBmZWF0
dXJlcywgbnVtQ29uc3RhbnRzKQogICAgICwgbV9wYXJhbWV0ZXJzKDApCiAgICAgLCBtX3BhcmFt
ZXRlckNvdW50KDApCi0gICAgLCBtX3JlZkNvdW50KDApCiB7CiB9CiAKQEAgLTE3NzksOSArMTc3
OCw5IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3AKICAgICBTY29w
ZUNoYWluIHNjb3BlQ2hhaW4oc2NvcGVDaGFpbk5vZGUpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpOwogCi0gICAgbV9jb2RlLnNl
dChuZXcgQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgc291cmNlKCkucHJvdmlkZXIoKSwg
c291cmNlKCkuc3RhcnRPZmZzZXQoKSkpOworICAgIG1fY29kZSA9IGFkb3B0UmVmKG5ldyBGdW5j
dGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNv
dXJjZSgpLnN0YXJ0T2Zmc2V0KCkpKTsKIAotICAgIENvZGVHZW5lcmF0b3IgZ2VuZXJhdG9yKHRo
aXMsIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgJm1fc3ltYm9sVGFibGUs
IG1fY29kZS5nZXQoKSk7CisgICAgQ29kZUdlbmVyYXRvciBnZW5lcmF0b3IodGhpcywgZ2xvYmFs
T2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCAmbV9jb2RlLT5zeW1ib2xUYWJsZSwgbV9j
b2RlLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZ2VuZXJhdGUoKTsKIH0KIApJbmRleDoga2pzL25v
ZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmgJKHJldmlzaW9uIDM4MDU0KQorKysga2pz
L25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgRnVuY0RlY2xOb2RlOwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgRXZh
bENvZGVCbG9jazsKKyAgICBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKICAgICBjbGFzcyBKU0Z1
bmN0aW9uOwogICAgIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAgICAgY2xhc3MgUHJvcGVydHlM
aXN0Tm9kZTsKQEAgLTIyNTcsOSArMjI1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgCi0gICAgICAgIFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSgpIHsgcmV0dXJuIG1fc3ltYm9sVGFibGU7IH0gLy8gRklYTUU6IFJlbW92ZSB0aGlz
Ci0gICAgICAgIAotICAgICAgICBDb2RlQmxvY2smIGJ5dGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluKSBKU0NfRkFTVF9DQUxMCisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrJiBieXRl
Q29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikgSlNDX0ZBU1RfQ0FMTAogICAgICAgICB7
CiAgICAgICAgICAgICBBU1NFUlQoc2NvcGVDaGFpbik7CiAgICAgICAgICAgICBpZiAoIW1fY29k
ZSkKQEAgLTIyNjcsNyArMjI2Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuICptX2NvZGU7CiAgICAgICAgIH0KIAotICAgICAgICBDb2RlQmxvY2smIGdlbmVyYXRlZEJ5
dGVDb2RlKCkgSlNDX0ZBU1RfQ0FMTAorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayYgZ2VuZXJh
dGVkQnl0ZUNvZGUoKSBKU0NfRkFTVF9DQUxMCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VS
VChtX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuICptX2NvZGU7CkBAIC0yMjg1LDIwICsyMjg0
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBVU3RyaW5nIHRvU291cmNl
U3RyaW5nKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBVU3RyaW5nKCJ7IikgKyBzb3Vy
Y2UoKS50b1N0cmluZygpICsgVVN0cmluZygifSIpOyB9CiAKLSAgICAgICAgLy8gVGhlc2Ugb2Jq
ZWN0cyBhcmUgcmVmL2RlcmVmJ2QgYSBsb3QgaW4gdGhlIHNjb3BlIGNoYWluLCBzbyB0aGlzIGlz
IGEgZmFzdGVyIHJlZi9kZXJlZi4KLSAgICAgICAgLy8gSWYgdGhlIHZpcnR1YWwgbWFjaGluZSBj
aGFuZ2VzIHNvIHRoaXMgZG9lc24ndCBoYXBwZW4gYXMgbXVjaCB3ZSBjYW4gY2hhbmdlIGJhY2su
Ci0gICAgICAgIHZvaWQgcmVmKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCsrbV9yZWZD
b3VudCA9PSAxKQotICAgICAgICAgICAgICAgIFNjb3BlTm9kZTo6cmVmKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCBkZXJlZigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3Jl
ZkNvdW50KTsKLSAgICAgICAgICAgIGlmICghLS1tX3JlZkNvdW50KQotICAgICAgICAgICAgICAg
IFNjb3BlTm9kZTo6ZGVyZWYoKTsKLSAgICAgICAgfQotCiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3Rh
Y2sqLCBGdW5jdGlvblN0YWNrKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50
IG51bUNvbnN0YW50cykgSlNDX0ZBU1RfQ0FMTDsKIApAQCAtMjMwNyw5ICsyMjkyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSWRlbnRpZmllciogbV9wYXJhbWV0ZXJzOwogICAgICAg
ICBzaXplX3QgbV9wYXJhbWV0ZXJDb3VudDsKLSAgICAgICAgU3ltYm9sVGFibGUgbV9zeW1ib2xU
YWJsZTsKLSAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9jb2RlOwotICAgICAgICB1bnNpZ25l
ZCBtX3JlZkNvdW50OworICAgICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZTsK
ICAgICB9OwogCiAgICAgY2xhc3MgRnVuY0V4cHJOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
IHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>