<?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>76682</bug_id>
          
          <creation_ts>2012-01-19 19:24:35 -0800</creation_ts>
          <short_desc>Bytecode instructions that may have value profiling should have a direct inline link to the ValueProfile instance</short_desc>
          <delta_ts>2012-01-20 12:29:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>539244</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-19 19:24:35 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539248</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-19 19:28:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/10727689&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539251</commentid>
    <comment_count>2</comment_count>
      <attachid>123243</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-19 19:37:52 -0800</bug_when>
    <thetext>Created attachment 123243
the patch

The performance is neutral.



[pizlo@nitroflex bencher] ./bencher TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc RefactorVP:/Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc --remote bigmac --local
Copying TipOfTree into /Volumes/Data/pizlo/bencher/temp/benchdata...
Copying RefactorVP into /Volumes/Data/pizlo/bencher/temp/benchdata...
All VMs are in place.
Packaging benchmarking directory for remote hosts...
Sending benchmark payload to bigmac...
Running on bigmac...
376/376                                                         
Generating benchmark report at TipOfTree_RefactorVP_SunSpiderV8Kraken_bigmac_20120119_1920_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on bigmac (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r105374)
&quot;RefactorVP&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r105374)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                            TipOfTree               RefactorVP                                   
SunSpider:
   3d-cube                                5.8634+-0.0206    !     6.0485+-0.0439       ! definitely 1.0316x slower
   3d-morph                               8.6965+-0.1629    ?     8.7333+-0.1215       ?
   3d-raytrace                            7.7781+-0.0488          7.7672+-0.0717       
   access-binary-trees                    1.6054+-0.0122    ?     1.6197+-0.0168       ?
   access-fannkuch                        7.4979+-0.0440    ?     7.5356+-0.0583       ?
   access-nbody                           3.9902+-0.0066    ?     3.9943+-0.0066       ?
   access-nsieve                          3.1396+-0.0465          3.1328+-0.0464       
   bitops-3bit-bits-in-byte               1.2701+-0.0112    ?     1.2751+-0.0139       ?
   bitops-bits-in-byte                    5.2411+-0.0167    ?     5.2642+-0.0247       ?
   bitops-bitwise-and                     3.3953+-0.0946    ?     3.3989+-0.1008       ?
   bitops-nsieve-bits                     5.7180+-0.0574    ?     5.7267+-0.0503       ?
   controlflow-recursive                  2.3400+-0.0091    ?     2.3429+-0.0087       ?
   crypto-aes                             7.4993+-0.0653          7.4074+-0.0320         might be 1.0124x faster
   crypto-md5                             2.4998+-0.0167    ?     2.5069+-0.0182       ?
   crypto-sha1                            2.3242+-0.0308          2.3143+-0.0326       
   date-format-tofte                     10.5878+-0.1337         10.5788+-0.1164       
   date-format-xparb                      9.7339+-0.1049          9.5497+-0.1196         might be 1.0193x faster
   math-cordic                            8.3132+-1.2386          7.3278+-0.0618         might be 1.1345x faster
   math-partial-sums                     10.4352+-0.0251         10.4252+-0.0290       
   math-spectral-norm                     2.6544+-0.0053          2.6544+-0.0054       
   regexp-dna                             8.9072+-0.0239          8.8984+-0.0220       
   string-base64                          4.3703+-0.0168    !     4.4134+-0.0227       ! definitely 1.0099x slower
   string-fasta                           7.2495+-0.0356    ?     7.2813+-0.0320       ?
   string-tagcloud                       12.5367+-0.0348    ?    12.6171+-0.1074       ?
   string-unpack-code                    20.5214+-0.0837         20.4369+-0.0817       
   string-validate-input                  5.7967+-0.0734    ?     5.8595+-0.0446       ? might be 1.0108x slower

   &lt;arithmetic&gt; *                         6.5371+-0.0592          6.5042+-0.0214         might be 1.0051x faster
   &lt;geometric&gt;                            5.3257+-0.0369          5.3145+-0.0213         might be 1.0021x faster
   &lt;harmonic&gt;                             4.2248+-0.0227    ?     4.2283+-0.0205       ? might be 1.0008x slower

                                            TipOfTree               RefactorVP                                   
V8:
   crypto                                77.6710+-0.3253    ?    78.0594+-0.4033       ?
   deltablue                            168.2033+-0.7674    ?   171.0422+-2.6337       ? might be 1.0169x slower
   earley-boyer                          99.8762+-1.4712    ?   100.4837+-1.1987       ?
   raytrace                              51.9744+-0.1112    !    52.4662+-0.3277       ! definitely 1.0095x slower
   regexp                               102.3581+-0.4396        101.8639+-0.3289       
   richards                             137.6229+-0.7022    ^   135.6362+-0.4544       ^ definitely 1.0146x faster
   splay                                 92.0874+-1.3249         91.7429+-0.9564       

   &lt;arithmetic&gt;                         104.2562+-0.3139    ?   104.4707+-0.4715       ? might be 1.0021x slower
   &lt;geometric&gt; *                         98.1794+-0.3127    ?    98.3765+-0.3653       ? might be 1.0020x slower
   &lt;harmonic&gt;                            92.1321+-0.2796    ?    92.3868+-0.3240       ? might be 1.0028x slower

                                            TipOfTree               RefactorVP                                   
Kraken:
   ai-astar                             820.3124+-10.8860       820.1025+-11.2875      
   audio-beat-detection                 192.1315+-0.9980    ?   193.2688+-0.8973       ?
   audio-dft                            283.5880+-9.3144        278.5317+-2.9456         might be 1.0182x faster
   audio-fft                            121.3906+-1.2264        120.5656+-0.9075       
   audio-oscillator                     288.9685+-3.3290        287.9650+-5.7311       
   imaging-darkroom                     302.6476+-7.2927        301.1763+-6.8883       
   imaging-desaturate                   230.0327+-0.1749    ?   230.1040+-0.1712       ?
   imaging-gaussian-blur                519.4203+-0.3934        519.3887+-0.3033       
   json-parse-financial                  68.4661+-0.1802    ?    68.5393+-0.2251       ?
   json-stringify-tinderbox              87.0458+-0.3688    ^    79.9404+-0.4321       ^ definitely 1.0889x faster
   stanford-crypto-aes                  114.1460+-0.5823    ?   115.0209+-0.5995       ?
   stanford-crypto-ccm                  109.9459+-0.8376    !   111.9609+-1.0850       ! definitely 1.0183x slower
   stanford-crypto-pbkdf2               217.7857+-0.6801    ?   218.4054+-0.4090       ?
   stanford-crypto-sha256-iterative      93.9370+-0.5104    ?    94.6560+-0.7031       ?

   &lt;arithmetic&gt; *                       246.4156+-1.0461        245.6875+-1.2675         might be 1.0030x faster
   &lt;geometric&gt;                          191.0876+-0.6132        190.0781+-0.8218         might be 1.0053x faster
   &lt;harmonic&gt;                           154.8155+-0.4398    ^   153.4713+-0.5828       ^ definitely 1.0088x faster

                                            TipOfTree               RefactorVP                                   
All benchmarks:
   &lt;arithmetic&gt;                          92.5442+-0.3124         92.3411+-0.3783         might be 1.0022x faster
   &lt;geometric&gt;                           23.8792+-0.1015         23.8211+-0.0861         might be 1.0024x faster
   &lt;harmonic&gt;                             7.4361+-0.0391    ?     7.4415+-0.0357       ? might be 1.0007x slower

                                            TipOfTree               RefactorVP                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       54.0769+-0.1645         53.9701+-0.1682         might be 1.0020x faster

Running locally...
376/376                                                         
Generating benchmark report at TipOfTree_RefactorVP_SunSpiderV8Kraken_nitroflex_20120119_1923_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on nitroflex (MacBookPro8,2).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r105374)
&quot;RefactorVP&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r105374)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                            TipOfTree               RefactorVP                                   
SunSpider:
   3d-cube                                5.1460+-0.1321    ?     5.6900+-0.4699       ? might be 1.1057x slower
   3d-morph                               8.0431+-0.2230          7.9939+-0.1424       
   3d-raytrace                            7.4788+-0.2023          7.4300+-0.1346       
   access-binary-trees                    1.4941+-0.0750    ?     1.6648+-0.2177       ? might be 1.1143x slower
   access-fannkuch                        6.4486+-0.4360          6.1187+-0.1138         might be 1.0539x faster
   access-nbody                           3.4448+-0.2728          3.3485+-0.0754         might be 1.0288x faster
   access-nsieve                          2.6061+-0.0824          2.5866+-0.0860       
   bitops-3bit-bits-in-byte               1.3897+-0.0294    ?     1.4013+-0.0362       ?
   bitops-bits-in-byte                    2.3449+-0.0467    ?     2.3796+-0.0723       ? might be 1.0148x slower
   bitops-bitwise-and                     3.2294+-0.0595          3.1743+-0.0598         might be 1.0173x faster
   bitops-nsieve-bits                     5.3911+-0.0756    ?     5.4692+-0.1442       ? might be 1.0145x slower
   controlflow-recursive                  2.0558+-0.0327    ^     1.9791+-0.0378       ^ definitely 1.0387x faster
   crypto-aes                             7.3393+-0.2581    ?     7.4624+-0.2028       ? might be 1.0168x slower
   crypto-md5                             2.4339+-0.0570          2.3905+-0.0524         might be 1.0182x faster
   crypto-sha1                            2.1170+-0.0513    ?     2.1204+-0.0539       ?
   date-format-tofte                     10.3760+-0.1993         10.1305+-0.2197         might be 1.0242x faster
   date-format-xparb                      9.2474+-0.1731    ?     9.2480+-0.1975       ?
   math-cordic                            6.4670+-0.1280    ?     6.5033+-0.1784       ?
   math-partial-sums                      7.6053+-0.1733    ?     7.6195+-0.1632       ?
   math-spectral-norm                     2.3515+-0.0580    ?     2.3708+-0.0637       ?
   regexp-dna                             7.9017+-0.1564    ?     8.3078+-0.3820       ? might be 1.0514x slower
   string-base64                          4.5504+-0.1505          4.5174+-0.1232       
   string-fasta                           6.6874+-0.1184          6.6285+-0.1672       
   string-tagcloud                       11.1461+-0.2172    ?    11.2586+-0.2599       ? might be 1.0101x slower
   string-unpack-code                    18.5671+-0.2287    ?    18.9946+-0.4255       ? might be 1.0230x slower
   string-validate-input                  5.9061+-0.2496          5.8404+-0.3283         might be 1.0112x faster

   &lt;arithmetic&gt; *                         5.8372+-0.0263    ?     5.8703+-0.0571       ? might be 1.0057x slower
   &lt;geometric&gt;                            4.7413+-0.0198    ?     4.7643+-0.0394       ? might be 1.0049x slower
   &lt;harmonic&gt;                             3.8023+-0.0214    ?     3.8286+-0.0379       ? might be 1.0069x slower

                                            TipOfTree               RefactorVP                                   
V8:
   crypto                                70.8071+-0.3390    ?    71.8558+-0.8462       ? might be 1.0148x slower
   deltablue                            151.1672+-1.5456    ?   156.9753+-7.6126       ? might be 1.0384x slower
   earley-boyer                          83.9958+-3.7087         82.8518+-1.9315         might be 1.0138x faster
   raytrace                              49.5077+-1.3787         48.4820+-0.4497         might be 1.0212x faster
   regexp                                89.5554+-1.4171         88.2384+-0.6532         might be 1.0149x faster
   richards                             118.7168+-0.8751    ^   115.4227+-0.7959       ^ definitely 1.0285x faster
   splay                                 78.5892+-1.2981    ?    78.6190+-1.4605       ?

   &lt;arithmetic&gt;                          91.7628+-0.8444    ?    91.7779+-1.2957       ? might be 1.0002x slower
   &lt;geometric&gt; *                         86.7865+-0.8583         86.4775+-0.9001         might be 1.0036x faster
   &lt;harmonic&gt;                            82.1286+-0.8840         81.6316+-0.7246         might be 1.0061x faster

                                            TipOfTree               RefactorVP                                   
Kraken:
   ai-astar                             492.2743+-4.0499        488.2833+-5.4134       
   audio-beat-detection                 172.2378+-0.5194    ?   174.3829+-1.7299       ? might be 1.0125x slower
   audio-dft                            299.0619+-18.2679   ?   306.8655+-16.2793      ? might be 1.0261x slower
   audio-fft                            108.3165+-1.1732        107.8160+-0.7386       
   audio-oscillator                     252.3542+-2.4364        252.3474+-2.1770       
   imaging-darkroom                     270.6131+-5.7337    ?   270.7454+-5.8467       ?
   imaging-desaturate                   207.8335+-1.0322    ?   210.7710+-2.2144       ? might be 1.0141x slower
   imaging-gaussian-blur                488.8171+-2.6681    ?   496.9054+-9.3358       ? might be 1.0165x slower
   json-parse-financial                  56.4802+-1.3518         55.6299+-1.0906         might be 1.0153x faster
   json-stringify-tinderbox              72.9771+-0.7455    ?    74.6335+-2.9665       ? might be 1.0227x slower
   stanford-crypto-aes                   99.8975+-4.1310         98.3900+-1.8893         might be 1.0153x faster
   stanford-crypto-ccm                   97.1797+-1.5932    ?    97.6862+-1.3682       ?
   stanford-crypto-pbkdf2               182.0891+-2.6681    ?   182.5062+-1.3129       ?
   stanford-crypto-sha256-iterative      81.7224+-0.4930    ?    82.8778+-0.7039       ? might be 1.0141x slower

   &lt;arithmetic&gt; *                       205.8467+-1.3832    ?   207.1315+-1.7042       ? might be 1.0062x slower
   &lt;geometric&gt;                          165.1879+-1.1484    ?   166.0180+-0.9161       ? might be 1.0050x slower
   &lt;harmonic&gt;                           134.0311+-1.1204    ?   134.4238+-0.7649       ? might be 1.0029x slower

                                            TipOfTree               RefactorVP                                   
All benchmarks:
   &lt;arithmetic&gt;                          78.2120+-0.4719    ?    78.6152+-0.4774       ? might be 1.0052x slower
   &lt;geometric&gt;                           21.0509+-0.0941    ?    21.1274+-0.1115       ? might be 1.0036x slower
   &lt;harmonic&gt;                             6.6879+-0.0373    ?     6.7326+-0.0647       ? might be 1.0067x slower

                                            TipOfTree               RefactorVP                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       47.0676+-0.2541    ?    47.1962+-0.2507       ? might be 1.0027x slower

[pizlo@nitroflex bencher]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539253</commentid>
    <comment_count>3</comment_count>
      <attachid>123243</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-01-19 19:46:02 -0800</bug_when>
    <thetext>Comment on attachment 123243
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=123243&amp;action=review

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1745
&gt;                  set(getInstruction[1].u.operand, cellConstant(methodCall.cachedFunction.get()));
&gt; +
&gt;              } else

Remove this weird newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539705</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-20 12:29:40 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/105533</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123243</attachid>
            <date>2012-01-19 19:37:52 -0800</date>
            <delta_ts>2012-01-19 19:46:01 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>refactorvp_patch_1.diff</filename>
            <type>text/plain</type>
            <size>55991</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NDc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNyBA
QAorMjAxMi0wMS0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEJ5dGVjb2RlIGluc3RydWN0aW9ucyB0aGF0IG1heSBoYXZlIHZhbHVlIHByb2ZpbGluZyBzaG91
bGQgaGF2ZSBhIGRpcmVjdCBpbmxpbmUKKyAgICAgICAgbGluayB0byB0aGUgVmFsdWVQcm9maWxl
IGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NjY4MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA3Mjc2ODk+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBFYWNoIG9wY29kZSB0
aGF0IGdldHMgdmFsdWUgcHJvZmlsZWQgbm93IGhhcyBhIGxpbmsgdG8gaXRzIFZhbHVlUHJvZmls
ZS4gVGhpcworICAgICAgICByZXF1aXJlZCByYXRpb25hbGl6aW5nIHRoZSBlbWlzc2lvbiBvZiB2
YWx1ZSBwcm9maWxlcyBmb3Igb3Bjb2RlIGNvbWJvcywgbGlrZQorICAgICAgICBvcF9tZXRob2Rf
Y2hlY2svb3BfZ2V0X2J5X2lkIGFuZCBvcF9jYWxsL29wX2NhbGxfcHV0X3Jlc3VsdC4gSXQgb25s
eSBtYWtlcworICAgICAgICBzZW5zZSBmb3Igb25lIG9mIHRoZW0gdG8gaGF2ZSBhIHZhbHVlIHBy
b2ZpbGUgbGluaywgYW5kIGl0IG1ha2VzIG1vc3Qgc2Vuc2UKKyAgICAgICAgZm9yIGl0IHRvIGJl
IHRoZSBvbmUgdGhhdCBhY3R1YWxseSBzZXRzIHRoZSByZXN1bHQuIFRoZSBwcmV2aW91cyBiZWhh
dmlvciB3YXMKKyAgICAgICAgdG8gaGF2ZSBvcF9tZXRob2RfY2hlY2sgcHJvZmlsZSBmb3Igb3Bf
Z2V0X2J5X2lkIHdoZW4gdGhleSB3ZXJlIHVzZWQgdG9nZXRoZXIsCisgICAgICAgIGJ1dCBvdGhl
cndpc2UgZm9yIG9wX2dldF9ieV9pZCB0byBoYXZlIGl0cyBvd24gcHJvZmlsZXMuIG9wX2NhbGwg
YWxyZWFkeSBkaWQKKyAgICAgICAgdGhlIHJpZ2h0IHRoaW5nOyBhbGwgcHJvZmlsaW5nIHdhcyBk
b25lIGJ5IG9wX2NhbGxfcHV0X3Jlc3VsdC4KKyAgICAgICAgCisgICAgICAgIEJ1dCByYXRpb25h
bGl6aW5nIHRoaXMgY29kZSByZXF1aXJlZCBicmVha2luZyBzb21lIG9mIHRoZSBuYXR1cmFsIGJv
dW5kYXJpZXMKKyAgICAgICAgdGhhdCB0aGUgY29kZSBoYWQ7IGZvciBpbnN0YW5jZSB0aGUgY29k
ZSBpbiBERkcgdGhhdCBlbWl0cyBhIEdldEJ5SWQgaW4gcGxhY2UKKyAgICAgICAgb2YgYm90aCBv
cF9tZXRob2RfY2hlY2sgYW5kIG9wX2dldF9ieV9pZCBtdXN0IG5vdyBrbm93IHRoYXQgaXQncyB0
aGUgbGF0dGVyIG9mCisgICAgICAgIHRob3NlIHRoYXQgaGFzIHRoZSB2YWx1ZSBwcm9maWxlLCB3
aGlsZSB0aGUgZmlyc3Qgb2YgdGhvc2UgY29uc3RpdHV0ZXMgdGhlIE9TUgorICAgICAgICB0YXJn
ZXQuIEhlbmNlIGVhY2ggQ29kZU9yaWdpbiBtdXN0IG5vdyBoYXZlIHR3byBieXRlY29kZSBpbmRp
Y2VzIC0gb25lIGZvcgorICAgICAgICBPU1IgZXhpdCBhbmQgb25lIGZvciBwcm9maWxpbmcuCisg
ICAgICAgIAorICAgICAgICBGaW5hbGx5IHRoaXMgY2hhbmdlIHJlcXVpcmVkIHNvbWUgcmVmaWRk
bGluZyBvZiBvdXIgb3B0aW1pemF0aW9uIGhldXJpc3RpY3MsCisgICAgICAgIGJlY2F1c2Ugbm93
IGFsbCBjb2RlIGJsb2NrcyBoYXZlICJtb3JlIGluc3RydWN0aW9ucyIgZHVlIHRvIHRoZSB2YWx1
ZSBwcm9maWxlCisgICAgICAgIHNsb3RzLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRPcCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9y
aWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmJ5dGVjb2RlSW5k
ZXhGb3JWYWx1ZVByb2ZpbGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6Cisg
ICAgICAgIChKU0M6Okluc3RydWN0aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNv
ZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlZE9wY29kZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZSk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U2NvcGVkVmFyKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZUJhc2VGb3JQdXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVXaXRoQmFzZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhUaGlzKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpj
dXJyZW50Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFk
ZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRQcmVkaWN0aW9u
V2l0aG91dE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVQcm9maWxlRm9yKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZSk6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2FsbF9wdXRfcmVzdWx0KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhbGxfcHV0X3Jlc3VsdCk6CisgICAgICAgICogaml0
L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9yZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVf
YmFzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3NraXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9nbG9iYWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3Jlc29sdmVfZ2xvYmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3Jlc29sdmVfd2l0aF9iYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVf
d2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9yZXNvbHZlX2dsb2Jh
bF9keW5hbWljKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9iYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2tpcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV93aXRoX2Jhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV93aXRoX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X21ldGhvZF9jaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9kX2No
ZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2dldF9zY29wZWRfdmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9nbG9i
YWxfdmFyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tZXRob2RfY2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX21ldGhvZF9jaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9zY29wZWRfdmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFy
KToKKyAgICAgICAgKiBqaXQvSklUU3R1YkNhbGwuaDoKKyAgICAgICAgKEpTQzo6SklUU3R1YkNh
bGw6OmNhbGxXaXRoVmFsdWVQcm9maWxpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemVPcHRpb25zKToKKwogMjAxMi0w
MS0xOSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gUmVtb3ZlIGFuIG9ic29sZXRlIGNvbW1lbnQgYWJvdXQgZmVhdHVyZXMuZ3lwaQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDEwNTM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50
R2V0QnlJZE9wKEV4ZWNTdGF0ZQogICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
IGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBwcmludGYoIlslNGRdICVzXHQgJXMs
ICVzLCAlc1xuIiwgbG9jYXRpb24sIG9wLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNb
aWQwXSkuZGF0YSgpKTsKLSAgICBpdCArPSA0OworICAgIGl0ICs9IDU7CiB9CiAKIHZvaWQgQ29k
ZUJsb2NrOjpwcmludENhbGxPcChFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgVmVjdG9y
PEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGl0LCBjb25zdCBjaGFyKiBvcCkgY29uc3QK
QEAgLTc0Myw2ICs3NDMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMs
IGNvCiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAg
IGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0g
cmVzb2x2ZVx0XHQgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5k
YXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9w
X3Jlc29sdmVfc2tpcDogewpAQCAtNzUwLDEzICs3NTEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgICAgICAgICAgaW50IHNraXBMZXZlbHMgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gcmVzb2x2ZV9za2lwXHQgJXMsICVzLCAlZFxuIiwg
bG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lk
ZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgc2tpcExldmVscyk7CisgICAgICAgICAgICBpdCsrOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2ds
b2JhbDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlsl
NGRdIHJlc29sdmVfZ2xvYmFsXHQgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuZGF0YSgpKTsK
LSAgICAgICAgICAgIGl0ICs9IDI7CisgICAgICAgICAgICBpdCArPSAzOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWlj
OiB7CkBAIC03NjYsNiArNzY4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBl
eGVjLCBjbwogICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIGludCBkZXB0aCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSByZXNvbHZlX2dsb2JhbF9k
eW5hbWljXHQgJXMsICVzLCAlcywgJWRcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywg
cjApLmRhdGEoKSwgdmFsdWVUb1NvdXJjZVN0cmluZyhleGVjLCBzY29wZSkudXRmOCgpLmRhdGEo
KSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCksIGRlcHRoKTsKKyAgICAg
ICAgICAgICsraXQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IG9wX2dldF9zY29wZWRfdmFyOiB7CkBAIC03NzMsNiArNzc2LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAgaW50IGluZGV4ID0gKCsraXQp
LT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgc2tpcExldmVscyA9ICgrK2l0KS0+dS5vcGVy
YW5kOwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBnZXRfc2NvcGVkX3Zhclx0ICVzLCAlZCwg
JWRcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgaW5kZXgsIHNr
aXBMZXZlbHMpOworICAgICAgICAgICAgaXQrKzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6IHsKQEAgLTc4Niw2ICs3OTAsNyBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBpbmRleCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBnZXRfZ2xvYmFsX3Zhclx0
ICVzLCAlZFxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpbmRl
eCk7CisgICAgICAgICAgICBpdCsrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewpAQCAtNzk5LDYgKzgwNCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAgIGludCBpZDAg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBpc1N0cmljdCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSByZXNvbHZlX2Jhc2Ulc1x0ICVz
LCAlc1xuIiwgbG9jYXRpb24sIGlzU3RyaWN0ID8gIl9zdHJpY3QiIDogIiIsIHJlZ2lzdGVyTmFt
ZShleGVjLCByMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEo
KSk7CisgICAgICAgICAgICBpdCsrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9lbnN1cmVfcHJvcGVydHlfZXhpc3RzOiB7CkBAIC04MTIsNiArODE4LDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJlc29sdmVfd2l0aF9iYXNl
ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNb
aWQwXSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF90aGlzOiB7CkBAIC04MTksNiAr
ODI2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAg
ICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgaWQwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJlc29sdmVfd2l0
aF90aGlzICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRp
ZmllcnNbaWQwXSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDogewpAQCAtOTI0LDYgKzkz
Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIyID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIGdldF9ieV92YWxcdCAl
cywgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjIpLmRhdGEo
KSk7CisgICAgICAgICAgICBpdCsrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOiB7CkBAIC0xMTYyLDYgKzExNzEsNyBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgIGNhc2Ug
b3BfY2FsbF9wdXRfcmVzdWx0OiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gb3BfY2FsbF9wdXRfcmVzdWx0XHRcdCAl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9w
X3JldF9vYmplY3Rfb3JfdGhpczogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTA1Mzc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjEsNiArNTIxLDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUq
IHJlc3VsdCA9IFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludCwgZ2V0
VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+KG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2Zp
bGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+
bV9ieXRlY29kZU9mZnNldCAhPSAtMSk7CisgICAgICAgICAgICBBU1NFUlQoIWhhc0luc3RydWN0
aW9ucygpCisgICAgICAgICAgICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZz
ZXQgKyBvcGNvZGVMZW5ndGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dsb2JhbERh
dGEtPmludGVycHJldGVyLT5nZXRPcGNvZGVJRCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnMoKVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ynl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDEwNTM3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDI5ICszOCwzNyBAQCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNz
IEpTRnVuY3Rpb247CiAKIHN0cnVjdCBDb2RlT3JpZ2luIHsKLSAgICB1aW50MzJfdCBieXRlY29k
ZUluZGV4OworICAgIC8vIEJ5dGVjb2RlIG9mZnNldCB0aGF0IHlvdSdkIHVzZSB0byByZS1leGVj
dXRlIHRoaXMgaW5zdHJ1Y3Rpb24uCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA6IDI5Owor
ICAgIC8vIEJ5dGVjb2RlIG9mZnNldCBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcGNvZGUgdGhhdCBn
aXZlcyB0aGUgcmVzdWx0IChuZWVkZWQgdG8gaGFuZGxlCisgICAgLy8gb3BfY2FsbC9vcF9jYWxs
X3B1dF9yZXN1bHQgYW5kIG9wX21ldGhvZF9jaGVjay9vcF9nZXRfYnlfaWQpLgorICAgIHVuc2ln
bmVkIHZhbHVlUHJvZmlsZU9mZnNldCA6IDM7CisgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWU7CiAgICAgCiAgICAgQ29kZU9yaWdpbigpCiAgICAgICAgIDogYnl0ZWNv
ZGVJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgICAgICwg
dmFsdWVQcm9maWxlT2Zmc2V0KDApCiAgICAgICAgICwgaW5saW5lQ2FsbEZyYW1lKDApCiAgICAg
ewogICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBDb2RlT3JpZ2luKHVpbnQzMl90IGJ5dGVjb2Rl
SW5kZXgpCi0gICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQotICAgICAgICAs
IGlubGluZUNhbGxGcmFtZSgwKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgQ29k
ZU9yaWdpbih1aW50MzJfdCBieXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSkKKyAgICBleHBsaWNpdCBDb2RlT3JpZ2luKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gMCwgdW5zaWduZWQgdmFsdWVQcm9m
aWxlT2Zmc2V0ID0gMCkKICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisg
ICAgICAgICwgdmFsdWVQcm9maWxlT2Zmc2V0KHZhbHVlUHJvZmlsZU9mZnNldCkKICAgICAgICAg
LCBpbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKKyAgICAgICAgQVNTRVJU
KGJ5dGVjb2RlSW5kZXggPCAoMXUgPDwgMjkpKTsKKyAgICAgICAgQVNTRVJUKHZhbHVlUHJvZmls
ZU9mZnNldCA8ICgxdSA8PCAzKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25z
dCB7IHJldHVybiBieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsgfQogICAgIAorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXhGb3JWYWx1ZVByb2Zp
bGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXggKyB2YWx1ZVBy
b2ZpbGVPZmZzZXQ7CisgICAgfQorICAgIAogICAgIC8vIFRoZSBpbmxpbmUgZGVwdGggaXMgdGhl
IGRlcHRoIG9mIHRoZSBpbmxpbmUgc3RhY2ssIHNvIDEgPSBub3QgaW5saW5lZCwKICAgICAvLyAy
ID0gaW5saW5lZCBvbmUgZGVlcCwgZXRjLgogICAgIHVuc2lnbmVkIGlubGluZURlcHRoKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24u
aAkocmV2aXNpb24gMTA1Mzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
c3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgSlNDZWxsOwogICAgIGNsYXNzIFN0cnVjdHVyZTsKICAgICBjbGFzcyBT
dHJ1Y3R1cmVDaGFpbjsKKyAgICBzdHJ1Y3QgVmFsdWVQcm9maWxlOwogCiAjaWYgRU5BQkxFKEpJ
VCkKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGU7CkBAIC0xODAsNiArMTgxLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBJbnN0cnVjdGlvbihQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYyBnZXR0ZXJGdW5jKSB7IHUuZ2V0dGVyRnVuYyA9IGdldHRlckZ1bmM7IH0KKyAg
ICAgICAgCisgICAgICAgIEluc3RydWN0aW9uKFZhbHVlUHJvZmlsZSogcHJvZmlsZSkgeyB1LnBy
b2ZpbGUgPSBwcm9maWxlOyB9CiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgT3Bjb2Rl
IG9wY29kZTsKQEAgLTE4OCw2ICsxOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IHN0cnVjdHVyZUNoYWluOwogICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+IGpzQ2VsbDsKICAgICAgICAgICAgIFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlckZ1bmM7CisgICAgICAgICAgICBWYWx1ZVByb2Zp
bGUqIHByb2ZpbGU7CiAgICAgICAgIH0gdTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDEwNTM3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtOTUsMzggKzk1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9p
c19mdW5jdGlvbiwgMykgXAogICAgICAgICBtYWNybyhvcF9pbiwgNCkgXAogICAgICAgICBcCi0g
ICAgICAgIG1hY3JvKG9wX3Jlc29sdmUsIDMpIFwKLSAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV9z
a2lwLCA0KSBcCi0gICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfZ2xvYmFsLCA1KSBcCi0gICAgICAg
IG1hY3JvKG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMsIDYpIFwKLSAgICAgICAgbWFjcm8ob3Bf
Z2V0X3Njb3BlZF92YXIsIDQpIFwKKyAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZSwgNCkgLyogaGFz
IHZhbHVlIHByb2ZpbGluZyAqLyAgXAorICAgICAgICBtYWNybyhvcF9yZXNvbHZlX3NraXAsIDUp
IC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAorICAgICAgICBtYWNybyhvcF9yZXNvbHZlX2ds
b2JhbCwgNikgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCisgICAgICAgIG1hY3JvKG9wX3Jl
c29sdmVfZ2xvYmFsX2R5bmFtaWMsIDcpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAorICAg
ICAgICBtYWNybyhvcF9nZXRfc2NvcGVkX3ZhciwgNSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAq
LyBcCiAgICAgICAgIG1hY3JvKG9wX3B1dF9zY29wZWRfdmFyLCA0KSBcCi0gICAgICAgIG1hY3Jv
KG9wX2dldF9nbG9iYWxfdmFyLCAzKSBcCisgICAgICAgIG1hY3JvKG9wX2dldF9nbG9iYWxfdmFy
LCA0KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKICAgICAgICAgbWFjcm8ob3BfcHV0X2ds
b2JhbF92YXIsIDMpIFwKLSAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV9iYXNlLCA0KSBcCisgICAg
ICAgIG1hY3JvKG9wX3Jlc29sdmVfYmFzZSwgNSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBc
CiAgICAgICAgIG1hY3JvKG9wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHMsIDMpIFwKLSAgICAgICAg
bWFjcm8ob3BfcmVzb2x2ZV93aXRoX2Jhc2UsIDQpIFwKLSAgICAgICAgbWFjcm8ob3BfcmVzb2x2
ZV93aXRoX3RoaXMsIDQpIFwKLSAgICAgICAgbWFjcm8ob3BfZ2V0X2J5X2lkLCA4KSBcCi0gICAg
ICAgIG1hY3JvKG9wX2dldF9ieV9pZF9zZWxmLCA4KSBcCi0gICAgICAgIG1hY3JvKG9wX2dldF9i
eV9pZF9wcm90bywgOCkgXAotICAgICAgICBtYWNybyhvcF9nZXRfYnlfaWRfY2hhaW4sIDgpIFwK
LSAgICAgICAgbWFjcm8ob3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmLCA4KSBcCi0gICAgICAgIG1h
Y3JvKG9wX2dldF9ieV9pZF9nZXR0ZXJfcHJvdG8sIDgpIFwKLSAgICAgICAgbWFjcm8ob3BfZ2V0
X2J5X2lkX2dldHRlcl9jaGFpbiwgOCkgXAotICAgICAgICBtYWNybyhvcF9nZXRfYnlfaWRfY3Vz
dG9tX3NlbGYsIDgpIFwKLSAgICAgICAgbWFjcm8ob3BfZ2V0X2J5X2lkX2N1c3RvbV9wcm90bywg
OCkgXAotICAgICAgICBtYWNybyhvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluLCA4KSBcCi0gICAg
ICAgIG1hY3JvKG9wX2dldF9ieV9pZF9nZW5lcmljLCA4KSBcCi0gICAgICAgIG1hY3JvKG9wX2dl
dF9hcnJheV9sZW5ndGgsIDgpIFwKLSAgICAgICAgbWFjcm8ob3BfZ2V0X3N0cmluZ19sZW5ndGgs
IDgpIFwKKyAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV93aXRoX2Jhc2UsIDUpIC8qIGhhcyB2YWx1
ZSBwcm9maWxpbmcgKi8gXAorICAgICAgICBtYWNybyhvcF9yZXNvbHZlX3dpdGhfdGhpcywgNSkg
LyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCisgICAgICAgIG1hY3JvKG9wX2dldF9ieV9pZCwg
OSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCisgICAgICAgIG1hY3JvKG9wX2dldF9ieV9p
ZF9zZWxmLCA5KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKKyAgICAgICAgbWFjcm8ob3Bf
Z2V0X2J5X2lkX3Byb3RvLCA5KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKKyAgICAgICAg
bWFjcm8ob3BfZ2V0X2J5X2lkX2NoYWluLCA5KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwK
KyAgICAgICAgbWFjcm8ob3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmLCA5KSAvKiBoYXMgdmFsdWUg
cHJvZmlsaW5nICovIFwKKyAgICAgICAgbWFjcm8ob3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90bywg
OSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCisgICAgICAgIG1hY3JvKG9wX2dldF9ieV9p
ZF9nZXR0ZXJfY2hhaW4sIDkpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAorICAgICAgICBt
YWNybyhvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGYsIDkpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcg
Ki8gXAorICAgICAgICBtYWNybyhvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3RvLCA5KSAvKiBoYXMg
dmFsdWUgcHJvZmlsaW5nICovIFwKKyAgICAgICAgbWFjcm8ob3BfZ2V0X2J5X2lkX2N1c3RvbV9j
aGFpbiwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCisgICAgICAgIG1hY3JvKG9wX2dl
dF9ieV9pZF9nZW5lcmljLCA5KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKKyAgICAgICAg
bWFjcm8ob3BfZ2V0X2FycmF5X2xlbmd0aCwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBc
CisgICAgICAgIG1hY3JvKG9wX2dldF9zdHJpbmdfbGVuZ3RoLCA5KSAvKiBoYXMgdmFsdWUgcHJv
ZmlsaW5nICovIFwKICAgICAgICAgbWFjcm8ob3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgsIDQpIFwK
ICAgICAgICAgbWFjcm8ob3BfcHV0X2J5X2lkLCA5KSBcCiAgICAgICAgIG1hY3JvKG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uLCA5KSBcCiAgICAgICAgIG1hY3JvKG9wX3B1dF9ieV9pZF9yZXBsYWNl
LCA5KSBcCiAgICAgICAgIG1hY3JvKG9wX3B1dF9ieV9pZF9nZW5lcmljLCA5KSBcCiAgICAgICAg
IG1hY3JvKG9wX2RlbF9ieV9pZCwgNCkgXAotICAgICAgICBtYWNybyhvcF9nZXRfYnlfdmFsLCA0
KSBcCisgICAgICAgIG1hY3JvKG9wX2dldF9ieV92YWwsIDUpIC8qIGhhcyB2YWx1ZSBwcm9maWxp
bmcgKi8gXAogICAgICAgICBtYWNybyhvcF9nZXRfYXJndW1lbnRfYnlfdmFsLCA0KSBcCiAgICAg
ICAgIG1hY3JvKG9wX2dldF9ieV9wbmFtZSwgNykgXAogICAgICAgICBtYWNybyhvcF9wdXRfYnlf
dmFsLCA0KSBcCkBAIC0xNzAsNyArMTcwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1h
Y3JvKG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24sIDMpIFwKICAgICAgICAgbWFjcm8ob3BfdGVhcl9v
ZmZfYXJndW1lbnRzLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX3JldCwgMikgXAotICAgICAgICBt
YWNybyhvcF9jYWxsX3B1dF9yZXN1bHQsIDIpIFwKKyAgICAgICAgbWFjcm8ob3BfY2FsbF9wdXRf
cmVzdWx0LCAzKSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKICAgICAgICAgbWFjcm8ob3Bf
cmV0X29iamVjdF9vcl90aGlzLCAzKSBcCiAgICAgICAgIG1hY3JvKG9wX21ldGhvZF9jaGVjaywg
MSkgXAogICAgICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTA1Mzc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2OCw2ICs2NjgsMTMgQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE9wY29kZShPcGNvZAogICAgIG1fbGFzdE9wY29kZUlEID0gb3Bjb2RlSUQ7CiB9
CiAKK1ZhbHVlUHJvZmlsZSogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlZE9wY29kZShP
cGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IG1fY29kZUJs
b2NrLT5hZGRWYWx1ZVByb2ZpbGUoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICBlbWl0T3Bj
b2RlKG9wY29kZUlEKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TG9vcEhpbnQoKQogewogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTI0NSw5
ICsxMjUyLDEwIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2wKICAg
ICBib29sIHJlcXVpcmVzRHluYW1pY0NoZWNrcyA9IGZhbHNlOwogICAgIGlmICghZmluZFNjb3Bl
ZFByb3BlcnR5KHByb3BlcnR5LCBpbmRleCwgZGVwdGgsIGZhbHNlLCByZXF1aXJlc0R5bmFtaWND
aGVja3MsIGdsb2JhbE9iamVjdCkgJiYgIWdsb2JhbE9iamVjdCkgewogICAgICAgICAvLyBXZSBj
YW4ndCBvcHRpbWlzZSBhdCBhbGwgOi0oCi0gICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZSk7
CisgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9y
ZXNvbHZlKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgICAgIHJldHVybiBkc3Q7
CiAgICAgfQogICAgIGlmIChzaG91bGRBdm9pZFJlc29sdmVHbG9iYWwoKSkgewpAQCAtMTI2Nywy
MSArMTI3NSwyMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAj
aWYgRU5BQkxFKElOVEVSUFJFVEVSKQogICAgICAgICBtX2NvZGVCbG9jay0+YWRkR2xvYmFsUmVz
b2x2ZUluc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CiAjZW5kaWYKLSAgICAgICAg
ZW1pdE9wY29kZShyZXF1aXJlc0R5bmFtaWNDaGVja3MgPyBvcF9yZXNvbHZlX2dsb2JhbF9keW5h
bWljIDogb3BfcmVzb2x2ZV9nbG9iYWwpOworICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUg
PSBlbWl0UHJvZmlsZWRPcGNvZGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzID8gb3BfcmVzb2x2ZV9n
bG9iYWxfZHluYW1pYyA6IG9wX3Jlc29sdmVfZ2xvYmFsKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
ZGRDb25zdGFudChwcm9wZXJ0eSkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7
CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICAgICAgaWYgKHJlcXVpcmVz
RHluYW1pY0NoZWNrcykKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkZXB0aCk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICAgICAgcmV0dXJu
IGRzdDsKICAgICB9CiAKICAgICBpZiAocmVxdWlyZXNEeW5hbWljQ2hlY2tzKSB7CiAgICAgICAg
IC8vIElmIHdlIGdldCBoZXJlIHdlIGhhdmUgZXZhbCBuZXN0ZWQgaW5zaWRlIGEgfHdpdGh8IGp1
c3QgZ2l2ZSB1cAotICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmUpOworICAgICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZSk7CiAgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAt
MTI5MiwxMCArMTMwMiwxMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJl
c29sCiAKICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgYXJlIGF0IGxlYXN0IGFibGUgdG8gZHJvcCBh
IGZldyBzY29wZSBjaGFpbnMgZnJvbSB0aGUKICAgICAvLyBsb29rdXAgY2hhaW4sIGFsdGhvdWdo
IHdlIHN0aWxsIG5lZWQgdG8gaGFzaCBmcm9tIHRoZW4gb24uCi0gICAgZW1pdE9wY29kZShvcF9y
ZXNvbHZlX3NraXApOworICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9w
Y29kZShvcF9yZXNvbHZlX3NraXApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkZXB0aCk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHByb2ZpbGUpOwogICAgIHJldHVybiBkc3Q7CiB9CiAKQEAgLTEzMTEsMTYgKzEzMjIs
MTggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTYwogICAgICAgICAg
ICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIAotICAgICAgICBlbWl0T3Bjb2RlKG9wX2dl
dF9nbG9iYWxfdmFyKTsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2Zp
bGVkT3Bjb2RlKG9wX2dldF9nbG9iYWxfdmFyKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleCk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICAgICAgcmV0dXJu
IGRzdDsKICAgICB9CiAKLSAgICBlbWl0T3Bjb2RlKG9wX2dldF9zY29wZWRfdmFyKTsKKyAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X3Njb3BlZF92
YXIpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChpbmRleCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRlcHRo
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgcmV0dXJuIGRzdDsK
IH0KIApAQCAtMTM0OCwxMCArMTM2MSwxMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFJlc29sCiAgICAgZmluZFNjb3BlZFByb3BlcnR5KHByb3BlcnR5LCBpbmRleCwgZGVw
dGgsIGZhbHNlLCByZXF1aXJlc0R5bmFtaWNDaGVja3MsIGdsb2JhbE9iamVjdCk7CiAgICAgaWYg
KCFnbG9iYWxPYmplY3QgfHwgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSB7CiAgICAgICAgIC8vIFdl
IGNhbid0IG9wdGltaXNlIGF0IGFsbCA6LSgKLSAgICAgICAgZW1pdE9wY29kZShvcF9yZXNvbHZl
X2Jhc2UpOworICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9w
ZXJ0eSkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0xMzcwLDEwICsxMzg0LDExIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVzb2wKICAgICBmaW5kU2NvcGVkUHJvcGVydHkocHJvcGVydHksIGluZGV4LCBkZXB0
aCwgZmFsc2UsIHJlcXVpcmVzRHluYW1pY0NoZWNrcywgZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAo
IWdsb2JhbE9iamVjdCB8fCByZXF1aXJlc0R5bmFtaWNDaGVja3MpIHsKICAgICAgICAgLy8gV2Ug
Y2FuJ3Qgb3B0aW1pc2UgYXQgYWxsIDotKAotICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVf
YmFzZSk7CisgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29k
ZShvcF9yZXNvbHZlX2Jhc2UpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3Bl
cnR5KSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0cnVlKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0K
ICAgICAKQEAgLTEzOTMsMTAgKzE0MDgsMTEgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRSZXNvbAogICAgIGJvb2wgcmVxdWlyZXNEeW5hbWljQ2hlY2tzID0gZmFsc2U7CiAg
ICAgaWYgKCFmaW5kU2NvcGVkUHJvcGVydHkocHJvcGVydHksIGluZGV4LCBkZXB0aCwgZmFsc2Us
IHJlcXVpcmVzRHluYW1pY0NoZWNrcywgZ2xvYmFsT2JqZWN0KSB8fCAhZ2xvYmFsT2JqZWN0IHx8
IHJlcXVpcmVzRHluYW1pY0NoZWNrcykgewogICAgICAgICAvLyBXZSBjYW4ndCBvcHRpbWlzZSBh
dCBhbGwgOi0oCi0gICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX2Jhc2UpOworICAg
ICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2
ZV93aXRoX2Jhc2UpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZURzdC0+aW5k
ZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wRHN0LT5pbmRleCgpKTsK
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICAgICAgcmV0dXJuIGJh
c2VEc3Q7CiAgICAgfQogCkBAIC0xNDExLDkgKzE0MjcsMTAgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgICAgICByZXR1cm4gYmFzZURzdDsKICAgICB9CiAg
ICAgaWYgKHNob3VsZEF2b2lkUmVzb2x2ZUdsb2JhbCgpKSB7Ci0gICAgICAgIGVtaXRPcGNvZGUo
b3BfcmVzb2x2ZSk7CisgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGVtaXRQcm9maWxl
ZE9wY29kZShvcF9yZXNvbHZlKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BE
c3QtPmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQo
cHJvcGVydHkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAg
ICAgICByZXR1cm4gYmFzZURzdDsKICAgICB9CiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE0MjIsMTMg
KzE0MzksMTQgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogI2lm
IEVOQUJMRShJTlRFUlBSRVRFUikKICAgICBtX2NvZGVCbG9jay0+YWRkR2xvYmFsUmVzb2x2ZUlu
c3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CiAjZW5kaWYKLSAgICBlbWl0T3Bjb2Rl
KHJlcXVpcmVzRHluYW1pY0NoZWNrcyA/IG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMgOiBvcF9y
ZXNvbHZlX2dsb2JhbCk7CisgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVk
T3Bjb2RlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyA/IG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMg
OiBvcF9yZXNvbHZlX2dsb2JhbCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BEc3Qt
PmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0
eSkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoMCk7CiAgICAgaWYgKHJlcXVpcmVzRHluYW1pY0NoZWNrcykKICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGRlcHRoKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmls
ZSk7CiAgICAgcmV0dXJuIGJhc2VEc3Q7CiB9CiAKQEAgLTE0NDAsMTAgKzE0NTgsMTEgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgIGJvb2wgcmVxdWlyZXNE
eW5hbWljQ2hlY2tzID0gZmFsc2U7CiAgICAgaWYgKCFmaW5kU2NvcGVkUHJvcGVydHkocHJvcGVy
dHksIGluZGV4LCBkZXB0aCwgZmFsc2UsIHJlcXVpcmVzRHluYW1pY0NoZWNrcywgZ2xvYmFsT2Jq
ZWN0KSB8fCAhZ2xvYmFsT2JqZWN0IHx8IHJlcXVpcmVzRHluYW1pY0NoZWNrcykgewogICAgICAg
ICAvLyBXZSBjYW4ndCBvcHRpbWlzZSBhdCBhbGwgOi0oCi0gICAgICAgIGVtaXRPcGNvZGUob3Bf
cmVzb2x2ZV93aXRoX3RoaXMpOworICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBlbWl0
UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX3RoaXMpOwogICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYmFzZURzdC0+aW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChwcm9wRHN0LT5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFk
ZENvbnN0YW50KHByb3BlcnR5KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9m
aWxlKTsKICAgICAgICAgcmV0dXJuIGJhc2VEc3Q7CiAgICAgfQogCkBAIC0xNDU4LDkgKzE0Nzcs
MTAgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgICAgICBy
ZXR1cm4gYmFzZURzdDsKICAgICB9CiAgICAgaWYgKHNob3VsZEF2b2lkUmVzb2x2ZUdsb2JhbCgp
KSB7Ci0gICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZSk7CisgICAgICAgIFZhbHVlUHJvZmls
ZSogcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlKTsKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BEc3QtPmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICByZXR1cm4gYmFzZURzdDsKICAgICB9CiAjaWYg
RU5BQkxFKEpJVCkKQEAgLTE0NjksMTMgKzE0ODksMTQgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRSZXNvbAogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKICAgICBtX2NvZGVC
bG9jay0+YWRkR2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7
CiAjZW5kaWYKLSAgICBlbWl0T3Bjb2RlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyA/IG9wX3Jlc29s
dmVfZ2xvYmFsX2R5bmFtaWMgOiBvcF9yZXNvbHZlX2dsb2JhbCk7CisgICAgVmFsdWVQcm9maWxl
KiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyA/IG9w
X3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMgOiBvcF9yZXNvbHZlX2dsb2JhbCk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb3BEc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgw
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaWYgKHJlcXVpcmVzRHluYW1p
Y0NoZWNrcykKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRlcHRoKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgcmV0dXJuIGJhc2VEc3Q7CiB9CiAKQEAg
LTE0OTAsNyArMTUxMSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0
QnkKICAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVj
dGlvbnMoKS5zaXplKCkpOwogI2VuZGlmCiAKLSAgICBlbWl0T3Bjb2RlKG9wX2dldF9ieV9pZCk7
CisgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9i
eV9pZCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwpAQCAtMTQ5OCw2ICsxNTE5LDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeQogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICBy
ZXR1cm4gZHN0OwogfQogCkBAIC0xNTk5LDEwICsxNjIxLDExIEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0R2V0QnkKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgZW1pdE9wY29kZShvcF9nZXRfYnlfdmFsKTsKKyAgICBWYWx1ZVByb2Zp
bGUqIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X3ZhbCk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+
aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIHJldHVy
biBkc3Q7CiB9CiAKQEAgLTE4MjQsOCArMTg0Nyw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0Q2FsbCgKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7
Ci0gICAgICAgIGVtaXRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgVmFsdWVQ
cm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7
CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOyAvLyBkc3QKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIH0KIAogICAgIGlmICht
X3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKQEAgLTE4NTMsOCArMTg3Nyw5IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFYKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYXJndW1lbnRzLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmlyc3RG
cmVlUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7
Ci0gICAgICAgIGVtaXRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgVmFsdWVQ
cm9maWxlKiBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7
CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgfQogICAgIGlmIChtX3Nob3VsZEVt
aXRQcm9maWxlSG9va3MpIHsKICAgICAgICAgZW1pdE9wY29kZShvcF9wcm9maWxlX2RpZF9jYWxs
KTsKQEAgLTE5MjYsOCArMTk1MSw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q29uc3QKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOwogICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7Ci0gICAgICAg
IGVtaXRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBw
cm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOyAvLyBkc3QKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIH0KIAogICAgIGlmIChtX3Nob3VsZEVt
aXRQcm9maWxlSG9va3MpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDEwNTM3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDA5LDYgKzQwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBlbWl0T3Bjb2RlKE9wY29kZUlEKTsKKyAgICAgICAgVmFs
dWVQcm9maWxlKiBlbWl0UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQpOwogICAgICAgICB2b2lkIHJl
dHJpZXZlTGFzdEJpbmFyeU9wKGludCYgZHN0SW5kZXgsIGludCYgc3JjMUluZGV4LCBpbnQmIHNy
YzJJbmRleCk7CiAgICAgICAgIHZvaWQgcmV0cmlldmVMYXN0VW5hcnlPcChpbnQmIGRzdEluZGV4
LCBpbnQmIHNyY0luZGV4KTsKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJld2luZEJpbmFy
eU9wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTA1Mzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAg
cHVibGljOgogICAgICAgICAsIG1fZ3JhcGgoZ3JhcGgpCiAgICAgICAgICwgbV9jdXJyZW50Qmxv
Y2soMCkKICAgICAgICAgLCBtX2N1cnJlbnRJbmRleCgwKQorICAgICAgICAsIG1fY3VycmVudFBy
b2ZpbGluZ0luZGV4KDApCiAgICAgICAgICwgbV9jb25zdGFudFVuZGVmaW5lZChVSU5UX01BWCkK
ICAgICAgICAgLCBtX2NvbnN0YW50TnVsbChVSU5UX01BWCkKICAgICAgICAgLCBtX2NvbnN0YW50
TmFOKFVJTlRfTUFYKQpAQCAtNTE5LDcgKzUyMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQ29k
ZU9yaWdpbiBjdXJyZW50Q29kZU9yaWdpbigpCiAgICAgewotICAgICAgICByZXR1cm4gQ29kZU9y
aWdpbihtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICByZXR1cm4gQ29kZU9yaWdpbihtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUsIG1fY3VycmVudFByb2ZpbGluZ0luZGV4IC0gbV9jdXJy
ZW50SW5kZXgpOwogICAgIH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgY3JlYXRlIGEgbm9kZSBh
bmQgYWRkIGl0IHRvIHRoZSBncmFwaC4gSWYgbm9kZXMgb2YgdGhpcyB0eXBlIGFyZQpAQCAtNTc0
LDggKzU3NSwxMCBAQCBwcml2YXRlOgogICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rp
b24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwogCiAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IFByZWRpY3ROb25lOwotICAgICAgICBpZiAo
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3Bf
Y2FsbF9wdXRfcmVzdWx0KQotICAgICAgICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24o
bV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSk7
CisgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUu
b3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFBy
b2ZpbGluZ0luZGV4ID0gbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwor
ICAgICAgICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKQEAgLTYyMiwxMiArNjI1LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgUHJl
ZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChtX2dyYXBoLnNpemUoKSwgbV9jdXJy
ZW50SW5kZXgpOworICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KG1f
Z3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7CiAgICAgfQogICAgIAogICAg
IFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0
UHJlZGljdGlvbihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgpOworICAgICAgICByZXR1
cm4gZ2V0UHJlZGljdGlvbihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgp
OwogICAgIH0KIAogICAgIE5vZGVJbmRleCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUluZGV4KQpA
QCAtNzUwLDYgKzc1Myw4IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50Qmxv
Y2s7CiAgICAgLy8gVGhlIGJ5dGVjb2RlIGluZGV4IG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9u
IGJlaW5nIGdlbmVyYXRlZC4KICAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKKyAgICAvLyBU
aGUgYnl0ZWNvZGUgaW5kZXggb2YgdGhlIHZhbHVlIHByb2ZpbGUgb2YgdGhlIGN1cnJlbnQgaW5z
dHJ1Y3Rpb24gYmVpbmcgZ2VuZXJhdGVkLgorICAgIHVuc2lnbmVkIG1fY3VycmVudFByb2ZpbGlu
Z0luZGV4OwogCiAgICAgLy8gV2UgdXNlIHRoZXNlIHZhbHVlcyBkdXJpbmcgY29kZSBnZW5lcmF0
aW9uLCBhbmQgdG8gYXZvaWQgdGhlIG5lZWQgZm9yCiAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyB3
ZSBtYWtlIHN1cmUgdGhleSBhcmUgYXZhaWxhYmxlIGFzIGNvbnN0YW50cyBpbiB0aGUKQEAgLTk0
NSw3ICs5NTAsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiAg
ICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKICAgICAgICAgICAgIHJlc3VsdE9wZXJhbmQg
PSBwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICB1c2VzUmVzdWx0ID0g
dHJ1ZTsKLSAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6
ZSgpLCBuZXh0T2Zmc2V0KTsKKyAgICAgICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0g
bmV4dE9mZnNldDsKKyAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAg
ICAgICAgICAgICBuZXh0T2Zmc2V0ICs9IE9QQ09ERV9MRU5HVEgob3BfY2FsbF9wdXRfcmVzdWx0
KTsKICAgICAgICAgfQogICAgICAgICBKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0aW9uOwpAQCAt
MTA2NywxMyArMTA3MywxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhi
b29sCiAgICAgCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxs
eSBoYXBwZW5zLgogICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAg
dW5zaWduZWQgb2xkUHJvZmlsaW5nSW5kZXggPSBtX2N1cnJlbnRQcm9maWxpbmdJbmRleDsKICAg
ICBtX2N1cnJlbnRJbmRleCA9IDA7CisgICAgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXggPSAwOwog
CiAgICAgYWRkVG9HcmFwaChJbmxpbmVTdGFydCk7CiAgICAgCiAgICAgcGFyc2VDb2RlQmxvY2so
KTsKICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIG1fY3VycmVudFBy
b2ZpbGluZ0luZGV4ID0gb2xkUHJvZmlsaW5nSW5kZXg7CiAgICAgCiAgICAgLy8gSWYgdGhlIGlu
bGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxp
bmtpbmcgdG8gZG8uCiAgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVh
ZCAhPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpIHsKQEAgLTEzMzEsNiArMTM0MCw4IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICB9CiAKICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCA9IG1fY3VycmVu
dEluZGV4OworCiAgICAgICAgIC8vIERvbid0IGV4dGVuZCBvdmVyIGp1bXAgZGVzdGluYXRpb25z
LgogICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPT0gbGltaXQpIHsKICAgICAgICAgICAgIC8v
IE9yZGluYXJpbHkgd2Ugd2FudCB0byBwbGFudCBhIGp1bXAuIEJ1dCByZWZ1c2UgdG8gZG8gdGhp
cyBpZiB0aGUgYmxvY2sgaXMKQEAgLTE3MDMsNiArMTcxNCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2Ugb3BfbWV0aG9kX2NoZWNrOiB7CisgICAgICAgICAgICBtX2N1cnJlbnRQcm9maWxpbmdJ
bmRleCArPSBPUENPREVfTEVOR1RIKG9wX21ldGhvZF9jaGVjayk7CiAgICAgICAgICAgICBJbnN0
cnVjdGlvbiogZ2V0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVO
R1RIKG9wX21ldGhvZF9jaGVjayk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFByZWRpY3Rl
ZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKQEAgLTE3MjksNiArMTc0MSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KG1ldGhvZENhbGwuY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlLmdldCgpKSksIGNlbGxD
b25zdGFudChtZXRob2RDYWxsLmNhY2hlZFByb3RvdHlwZS5nZXQoKSkpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNl
bGxDb25zdGFudChtZXRob2RDYWxsLmNhY2hlZEZ1bmN0aW9uLmdldCgpKSk7CisKICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIGFkZFRvR3JhcGgod2lsbE5lZWRGbHVzaChzdHViSW5mbykgPyBHZXRCeUlkRmx1c2ggOiBH
ZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwog
ICAgICAgICAgICAgCkBAIC0yNjQzLDYgKzI2NTYsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSgpCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgIHBy
aW50ZigiUHJvY2Vzc2luZyBsb2NhbCB2YXJpYWJsZSBwaGlzLlxuIik7CiAjZW5kaWYKKyAgICAK
KyAgICBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCA9IG1fY3VycmVudEluZGV4OworICAgIAogICAg
IHByb2Nlc3NQaGlTdGFjazxMb2NhbFBoaVN0YWNrPigpOwogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICBwcmludGYoIlByb2Nlc3NpbmcgYXJndW1lbnQgcGhp
cy5cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTA1Mzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjMsOCArMjIzLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgTm9k
ZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGUu
b3ApIHsKLSAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICBpZiAobm9kZS5vcCA9PSBH
ZXRMb2NhbCkgewogICAgICAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLmxvY2Fs
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgaW50IGFyZ3VtZW50
ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS5sb2NhbCgpKTsKQEAgLTIzMywyMSArMjMyLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVG
b3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIE5v
ZGVzIGRlcml2ZXMgZnJvbSBjYWxscyBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZSB0aGUg
dmFsdWUgcHJvZmlsZSBpcwotICAgICAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIG9wX2NhbGxf
cHV0X3Jlc3VsdCBpbnN0cnVjdGlvbi4KLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNl
IENvbnN0cnVjdDoKLSAgICAgICAgY2FzZSBBcnJheVBvcDoKLSAgICAgICAgY2FzZSBBcnJheVB1
c2g6IHsKLSAgICAgICAgICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09E
RV9MRU5HVEgob3BfY29uc3RydWN0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBpZiAobm9kZS5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgfQorICAgICAgICBpZiAobm9kZS5oYXNIZWFwUHJlZGljdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFz
aWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMTA1Mzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMzLDE0ICszMzMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVj
dHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAg
IHZvaWQgZW1pdEFsbG9jYXRlSlNGdW5jdGlvbihGdW5jdGlvbkV4ZWN1dGFibGUqLCBSZWdpc3Rl
cklEIHNjb3BlQ2hhaW4sIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIp
OwogICAgICAgICAKLSAgICAgICAgZW51bSBWYWx1ZVByb2ZpbGluZ1NpdGVLaW5kIHsgRmlyc3RQ
cm9maWxpbmdTaXRlLCBTdWJzZXF1ZW50UHJvZmlsaW5nU2l0ZSB9OwogI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHBy
b2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAg
ICAvLyBzY3JhdGNoLgogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2Zp
bGluZ1NpdGVLaW5kKTsKKyAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7CiAjZWxzZQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9m
aWxpbmdTaXRlS2luZCkgeyB9CisgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgp
IHsgfQogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTA1Mzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF9w
dXRfcmVzdWx0KEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoRmlyc3RQ
cm9maWxpbmdTaXRlKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxMDUzNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFj
ZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF9wdXRfcmVzdWx0KEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoRmlyc3RQcm9maWxpbmdTaXRlKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMu
aAkocmV2aXNpb24gMTA1Mzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4NiwyMCArNDg2LDE2IEBAIGlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgKICNlbmRpZgogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxpbmdTaXRlS2luZCBzaXRl
S2luZCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlOwotICAgIGlm
IChzaXRlS2luZCA9PSBGaXJzdFByb2ZpbGluZ1NpdGUpCi0gICAgICAgIHZhbHVlUHJvZmlsZSA9
IG1fY29kZUJsb2NrLT5hZGRWYWx1ZVByb2ZpbGUobV9ieXRlY29kZU9mZnNldCk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEFTU0VSVChzaXRlS2luZCA9PSBTdWJzZXF1ZW50UHJvZmlsaW5nU2l0ZSk7
Ci0gICAgICAgIHZhbHVlUHJvZmlsZSA9IG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChtX2J5dGVjb2RlT2Zmc2V0KTsKLSAgICB9Ci0gICAgCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
KSk7Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpCit7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2J5dGVjb2RlT2Zmc2V0KTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CShyZXZpc2lvbiAxMDUzNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2MCw3ICs2NjAsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlKEluc3RydWN0aW9uKiBjCiB7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX3Jlc29sdmUpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0
ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBGaXJzdFByb2ZpbGluZ1NpdGUpOworICAgIHN0dWJD
YWxsLmNhbGxXaXRoVmFsdWVQcm9maWxpbmcoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNzAyLDcgKzcwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
c29sdmVfYmFzZShJbnN0cnVjdGkKIHsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kID8gY3RpX29wX3Jlc29sdmVfYmFzZV9zdHJp
Y3RfcHV0IDogY3RpX29wX3Jlc29sdmVfYmFzZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIEZpcnN0UHJvZmlsaW5nU2l0ZSk7CisgICAg
c3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE4LDcgKzcxOCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2tpcChJbnN0cnVjdGkKICAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV9za2lwKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSkpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVl
UHJvZmlsaW5nKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIEZpcnN0UHJvZmlsaW5n
U2l0ZSk7CisgICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9nbG9i
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgYm9vbCBkeW5hbWljKQpAQCAtNzQz
LDcgKzc0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsKEluc3RydWMKICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEdsb2JhbFJlc29sdmVJbmZv
LCBvZmZzZXQpKSwgcmVnVDMpOwogICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDIsIHJlZ1QzLCBU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBy
ZWdUMCk7IC8vIHBheWxvYWQKICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMywgVGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7
IC8vIHRhZwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoRmlyc3RQcm9maWxpbmdTaXRlKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKICAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIChkeW5hbWljID8gT1BDT0RFX0xF
TkdUSChvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKSA6IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2
ZV9nbG9iYWwpKSwgZHN0LCByZWdUMSwgcmVnVDApOwogfQpAQCAtNzU5LDcgKzc1OSw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9yZXNvbHZlX2dsb2JhbChJbnMKICAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV9nbG9iYWwpOwogICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIoaWRlbnQpKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJ
bW0zMihjdXJyZW50SW5kZXgpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5n
KGRzdCwgU3Vic2VxdWVudFByb2ZpbGluZ1NpdGUpOworICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFs
dWVQcm9maWxpbmcoZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTU3LDcgKzExNTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3dpdGhfYmFzZShJbnN0CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX3Jlc29sdmVfd2l0aF9iYXNlKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChU
cnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSkpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJv
ZmlsaW5nKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIEZpcnN0UHJvZmlsaW5nU2l0
ZSk7CisgICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV93aXRoX3Ro
aXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjUsNyArMTE2NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfd2l0aF90aGlzKEluc3QKICAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcmVzb2x2ZV93aXRoX3RoaXMpOwogICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
SW1tMzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNh
bGxXaXRoVmFsdWVQcm9maWxpbmcoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgRmly
c3RQcm9maWxpbmdTaXRlKTsKKyAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
aHJvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMDUzNzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Njgs
NyArNTY4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZShJbnN0cnVjdGlvbiogYwogewog
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlKTsKICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwotICAgIHN0dWJDYWxsLmNhbGxXaXRo
VmFsdWVQcm9maWxpbmcoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgRmlyc3RQcm9m
aWxpbmdTaXRlKTsKKyAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmlt
aXRpdmUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTU5OSw3ICs1OTksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2Jhc2UoSW5zdHJ1Y3RpCiB7CiAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA/IGN0
aV9vcF9yZXNvbHZlX2Jhc2Vfc3RyaWN0X3B1dCA6IGN0aV9vcF9yZXNvbHZlX2Jhc2UpOwogICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuY2Fs
bFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBGaXJz
dFByb2ZpbGluZ1NpdGUpOworICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFsdWVQcm9maWxpbmcoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Vu
c3VyZV9wcm9wZXJ0eV9leGlzdHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTYxNSw3ICs2MTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3NraXAoSW5zdHJ1Y3Rp
CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVfc2tpcCk7CiAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAg
c3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCBGaXJzdFByb2ZpbGluZ1NpdGUpOworICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFsdWVQ
cm9maWxpbmcoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJvb2wpCkBAIC02MzYsNyArNjM2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9nbG9i
YWwoSW5zdHJ1YwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSkpLCByZWdUMCk7CiAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgb2Zmc2V0KSks
IHJlZ1QxKTsKICAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFNjYWxlUHRyKSwg
cmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoRmlyc3RQcm9maWxpbmdTaXRlKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIApAQCAtNjUyLDcgKzY1Miw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9yZXNvbHZlX2dsb2JhbChJbnMKICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGlkZW50KSk7CiAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoSW1tMzIoY3VycmVudEluZGV4KSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVn
VDApOwotICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFsdWVQcm9maWxpbmcoZHN0LCBTdWJzZXF1ZW50
UHJvZmlsaW5nU2l0ZSk7CisgICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhkc3Qp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTc3Myw3ICs3NzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3dpdGhf
YmFzZShJbnN0CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVf
d2l0aF9iYXNlKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwog
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQsIEZpcnN0UHJvZmlsaW5nU2l0ZSk7CisgICAgc3R1YkNhbGwu
Y2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV93aXRoX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc4MSw3ICs3ODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3dpdGhfdGhpcyhJbnN0CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X29wX3Jlc29sdmVfd2l0aF90aGlzKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSkpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5n
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIEZpcnN0UHJvZmlsaW5nU2l0ZSk7Cisg
ICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1NjMsNyArMTU2Myw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9yZXNvbHZlX2dsb2JhbF9keW4KICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tUHRyKGlkZW50KSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudElu
ZGV4KSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgIHN0dWJDYWxsLmNh
bGxXaXRoVmFsdWVQcm9maWxpbmcoZHN0LCBTdWJzZXF1ZW50UHJvZmlsaW5nU2l0ZSk7IC8vIFRo
ZSBmaXJzdCBwcm9maWxpbmcgc2l0ZSBpcyBpbiBlbWl0X29wX3Jlc29sdmVfZ2xvYmFsCisgICAg
c3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhkc3QpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfcmVnZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHJldmlzaW9uIDEwNTM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9tZXRob2RfY2hlY2soSW5zdHJ1Y3RpCiAgICAgY29tcGlsZUdl
dEJ5SWRIb3RQYXRoKCk7CiAgICAgCiAgICAgbWF0Y2gubGluayh0aGlzKTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKEZpcnN0UHJvZmlsaW5nU2l0ZSk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2sp
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIG1hcChtX2J5dGVjb2Rl
T2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChv
cF9nZXRfYnlfaWQpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgCkBAIC0xNjEsNyArMTYxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21ldGhvZF9jaGVjayhJbnN0cgogICAgIGludCBpZGVu
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgCiAgICAgY29tcGlsZUdl
dEJ5SWRTbG93Q2FzZShkc3QsIGJhc2UsICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnQp
KSwgaXRlciwgdHJ1ZSk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShTdWJzZXF1ZW50UHJv
ZmlsaW5nU2l0ZSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2J5dGVjb2RlT2Zmc2V0
ICsgT1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spKTsKICAgICAKICAgICAvLyBXZSd2ZSBh
bHJlYWR5IGdlbmVyYXRlZCB0aGUgZm9sbG93aW5nIGdldF9ieV9pZCwgc28gbWFrZSBzdXJlIGl0
J3Mgc2tpcHBlZCBvdmVyLgogICAgIG1fYnl0ZWNvZGVPZmZzZXQgKz0gT1BDT0RFX0xFTkdUSChv
cF9nZXRfYnlfaWQpOwpAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoSW5zdHJ1Y3Rpb24KICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXls
b2FkCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKEZpcnN0UHJvZmlsaW5nU2l0ZSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwog
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgbWFwKG1fYnl0ZWNvZGVPZmZz
ZXQgKyBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CiB9
CkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5z
dHJ1YwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5KTsKICAgICBzdHViQ2FsbC5j
YWxsKGRzdCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFN1YnNlcXVlbnRQcm9maWxp
bmdTaXRlKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMy
NSw3ICszMjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAg
ICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIGNvbXBpbGVHZXRCeUlkSG90UGF0aCgpOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoRmlyc3RQcm9maWxpbmdTaXRlKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKSwgZHN0
LCByZWdUMSwgcmVnVDApOwogfQpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3QKICAgICBpbnQgaWRlbnQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwogICAgIAogICAgIGNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoZHN0LCBi
YXNlLCAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50KSksIGl0ZXIpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoU3Vic2VxdWVudFByb2ZpbGluZ1NpdGUpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoKTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2Uo
aW50IGRzdCwgaW50IGJhc2UsIElkZW50aWZpZXIqIGlkZW50LCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyLCBib29sIGlzTWV0aG9kQ2hlY2spCkBAIC0xMDQzLDcgKzEwNDMs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVkX3ZhcihJbnN0cnVjCiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwg
cmVnVDIpOwogCiAgICAgZW1pdExvYWQoaW5kZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoRmlyc3RQcm9maWxpbmdTaXRlKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X3Njb3BlZF92YXIp
LCBkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC0xMDg1LDcgKzEwODUsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjCiAgICAgbG9hZFB0cigmZ2xvYmFsT2JqZWN0
LT5tX3JlZ2lzdGVycywgcmVnVDIpOwogCiAgICAgZW1pdExvYWQoaW5kZXgsIHJlZ1QxLCByZWdU
MCwgcmVnVDIpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoRmlyc3RQcm9maWxpbmdTaXRl
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVn
VDEsIHJlZ1QwKTsKICAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X2dsb2JhbF92YXIpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTA1
Mzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfdmFsKEluc3RydWN0aW9uCiAgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVn
VDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoRmlyc3RQcm9maWxpbmdTaXRlKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5z
dHJ1YwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCByZWdUMik7CiAgICAgc3R1
YkNhbGwuY2FsbChkc3QpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShTdWJzZXF1ZW50
UHJvZmlsaW5nU2l0ZSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQogCiB2b2lk
IEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
cmVzdWx0LCBSZWdpc3RlcklEIG9mZnNldCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQpAQCAtMzMyLDcg
KzMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX21ldGhvZF9jaGVjayhJbnN0cnVjdGkKICAgICBj
b21waWxlR2V0QnlJZEhvdFBhdGgoYmFzZVZSZWcsIGlkZW50KTsKIAogICAgIG1hdGNoLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShGaXJzdFByb2ZpbGluZ1NpdGUpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5H
VEgob3BfbWV0aG9kX2NoZWNrKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKIAogICAgIC8vIFdlJ3ZlIGFscmVhZHkgZ2VuZXJhdGVkIHRoZSBmb2xsb3dpbmcgZ2V0
X2J5X2lkLCBzbyBtYWtlIHN1cmUgaXQncyBza2lwcGVkIG92ZXIuCkBAIC0zNDcsNyArMzQ3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21ldGhvZF9jaGVjayhJbnN0cgogICAgIElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSk7CiAKICAgICBjb21waWxlR2V0QnlJZFNsb3dDYXNlKHJlc3VsdFZSZWcs
IGJhc2VWUmVnLCBpZGVudCwgaXRlciwgdHJ1ZSk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShTdWJzZXF1ZW50UHJvZmlsaW5nU2l0ZSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
X2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spKTsKIAogICAg
IC8vIFdlJ3ZlIGFscmVhZHkgZ2VuZXJhdGVkIHRoZSBmb2xsb3dpbmcgZ2V0X2J5X2lkLCBzbyBt
YWtlIHN1cmUgaXQncyBza2lwcGVkIG92ZXIuCiAgICAgbV9ieXRlY29kZU9mZnNldCArPSBPUENP
REVfTEVOR1RIKG9wX2dldF9ieV9pZCk7CkBAIC0zNjEsNyArMzYxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwogICAgIGNvbXBpbGVHZXRCeUlkSG90UGF0aChiYXNlVlJlZywg
aWRlbnQpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoRmlyc3RQcm9maWxpbmdTaXRlKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKIH0KIApAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3QKICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwogCiAg
ICAgY29tcGlsZUdldEJ5SWRTbG93Q2FzZShyZXN1bHRWUmVnLCBiYXNlVlJlZywgaWRlbnQsIGl0
ZXIsIGZhbHNlKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFN1YnNlcXVlbnRQcm9maWxp
bmdTaXRlKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiB9CiAKIHZvaWQgSklUOjpj
b21waWxlR2V0QnlJZFNsb3dDYXNlKGludCByZXN1bHRWUmVnLCBpbnQgYmFzZVZSZWcsIElkZW50
aWZpZXIqIGlkZW50LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBib29s
IGlzTWV0aG9kQ2hlY2spCkBAIC05OTQsNyArOTk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Njb3BlZF92YXIoSW5zdHJ1YwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09G
RlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoRmlyc3RQcm9maWxpbmdTaXRlKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKIH0KIApAQCAtMTAyOSw3ICsxMDI5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ds
b2JhbF92YXIoSW5zdHJ1YwogICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICBsb2FkUHRyKCZnbG9iYWxPYmplY3QtPm1f
cmVnaXN0ZXJzLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKEZpcnN0UHJvZmlsaW5nU2l0ZSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YkNhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJDYWxsLmgJKHJldmlzaW9uIDEwNTM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDE0ICsyMDEsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gY2FsbDsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgSklUOjpDYWxsIGNhbGxXaXRoVmFsdWVQcm9maWxpbmcodW5zaWduZWQg
ZHN0LCBKSVQ6OlZhbHVlUHJvZmlsaW5nU2l0ZUtpbmQga2luZCkKKyAgICAgICAgSklUOjpDYWxs
IGNhbGxXaXRoVmFsdWVQcm9maWxpbmcodW5zaWduZWQgZHN0KQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQobV9yZXR1cm5UeXBlID09IFZhbHVlIHx8IG1fcmV0dXJuVHlwZSA9PSBDZWxs
KTsKICAgICAgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gdGhpcy0+Y2FsbCgpOwogICAgICAgICAg
ICAgQVNTRVJUKEpJVDo6cmV0dXJuVmFsdWVSZWdpc3RlciA9PSBKSVQ6OnJlZ1QwKTsKICAgICAg
ICAgICAgIGlmIChtX3JldHVyblR5cGUgPT0gQ2VsbCkKICAgICAgICAgICAgICAgICBtX2ppdC0+
bW92ZShKSVQ6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgSklUOjpyZWdUMSk7Ci0g
ICAgICAgICAgICBtX2ppdC0+ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShraW5kKTsKKyAgICAgICAg
ICAgIG1faml0LT5lbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgICAgICAgICBpZiAobV9y
ZXR1cm5UeXBlID09IFZhbHVlKQogICAgICAgICAgICAgICAgIG1faml0LT5lbWl0U3RvcmUoZHN0
LCBKSVQ6OnJlZ1QxLCBKSVQ6OnJlZ1QwKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTIyNCwxMiAr
MjI0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIEpJVDo6Q2FsbCBjYWxsV2l0aFZhbHVlUHJvZmlsaW5n
KHVuc2lnbmVkIGRzdCwgSklUOjpWYWx1ZVByb2ZpbGluZ1NpdGVLaW5kIGtpbmQpCisgICAgICAg
IEpJVDo6Q2FsbCBjYWxsV2l0aFZhbHVlUHJvZmlsaW5nKHVuc2lnbmVkIGRzdCkKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKG1fcmV0dXJuVHlwZSA9PSBWb2lkUHRyIHx8IG1fcmV0dXJu
VHlwZSA9PSBDZWxsKTsKICAgICAgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gdGhpcy0+Y2FsbCgp
OwogICAgICAgICAgICAgQVNTRVJUKEpJVDo6cmV0dXJuVmFsdWVSZWdpc3RlciA9PSBKSVQ6OnJl
Z1QwKTsKLSAgICAgICAgICAgIG1faml0LT5lbWl0VmFsdWVQcm9maWxpbmdTaXRlKGtpbmQpOwor
ICAgICAgICAgICAgbV9qaXQtPmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICAgICAgICAg
IG1faml0LT5lbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FsbDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAJKHJldmlzaW9uIDEwNTM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTAgKzEzMCwxMCBAQCB2b2lk
IHNldEhldXJpc3RpYyhUJiB2YXJpYWJsZSwgY29uc3QgY2hhCiAKIHZvaWQgaW5pdGlhbGl6ZU9w
dGlvbnMoKQogewotICAgIFNFVChtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudCwgMTAwMCk7CisgICAgU0VUKG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50LCAxMTAwKTsKICAgICAKLSAgICBTRVQobWF4aW11bUZ1bmN0aW9uRm9yQ2Fs
bElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDE1MCk7Ci0gICAgU0VUKG1heGltdW1G
dW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDgwKTsK
KyAgICBTRVQobWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9u
Q291bnQsIDE4MCk7CisgICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMCk7CiAgICAgCiAgICAgU0VUKG1heGltdW1Jbmxp
bmluZ0RlcHRoLCA1KTsKIAo=
</data>
<flag name="review"
          id="124263"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>