<?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>68582</bug_id>
          
          <creation_ts>2011-09-21 16:08:16 -0700</creation_ts>
          <short_desc>DFG JIT does not support to_primitive or strcat</short_desc>
          <delta_ts>2011-09-22 15:42:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>68597</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>471239</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 16:08:16 -0700</bug_when>
    <thetext>The lack of support for to_primitive or strcat means that if a code block has expressions like &quot;foo &quot; + bar + &quot; baz&quot; then the DFG cannot optimize the code block at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471349</commentid>
    <comment_count>1</comment_count>
      <attachid>108274</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 21:23:01 -0700</bug_when>
    <thetext>Created attachment 108274
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471350</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-21 21:24:27 -0700</bug_when>
    <thetext>Attachment 108274 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:170:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGOperations.h:79:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471352</commentid>
    <comment_count>3</comment_count>
      <attachid>108274</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 21:32:45 -0700</bug_when>
    <thetext>Comment on attachment 108274
the patch

Cleared review flag, because I didn&apos;t really mean to set it.  This is still a work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471435</commentid>
    <comment_count>4</comment_count>
      <attachid>108296</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 02:10:44 -0700</bug_when>
    <thetext>Created attachment 108296
the patch

When combined with https://bugs.webkit.org/show_bug.cgi?id=68597, it&apos;s a 14% speed-up on Kraken.


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;IntDiv&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc
&quot;IntDivStrCat&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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                 IntDiv               IntDivStrCat        IntDivStrCat v. TipOfTree 
SunSpider:
   3d-cube                                7.7031+-0.2217    ?     7.8395+-0.2910          7.6701+-0.1962       
   3d-morph                               7.5458+-0.1330          7.5094+-0.2132          7.4666+-0.2495         might be 1.0106x faster
   3d-raytrace                            7.5513+-0.2014    ?     7.8452+-0.3016          7.7827+-0.1491       ? might be 1.0306x slower
   access-binary-trees                    2.0995+-0.0579          2.0684+-0.0596    ?     2.1379+-0.1433       ? might be 1.0183x slower
   access-fannkuch                       11.8476+-0.3710         11.7814+-0.2936    ?    11.8475+-0.3008       
   access-nbody                           3.5674+-0.0885          3.4518+-0.0559    ?     3.5763+-0.0967       ?
   access-nsieve                          2.5801+-0.0738    ?     2.6087+-0.0895          2.5845+-0.0629       ?
   bitops-3bit-bits-in-byte               1.8394+-0.0448    ?     1.8507+-0.0570          1.8055+-0.0425         might be 1.0188x faster
   bitops-bits-in-byte                    2.8397+-0.0606    ?     2.8577+-0.0704          2.8486+-0.0719       ?
   bitops-bitwise-and                     3.7522+-0.1308          3.6579+-0.1029          3.6303+-0.1049         might be 1.0336x faster
   bitops-nsieve-bits                     5.3488+-0.1198          5.2944+-0.1290    ?     5.4255+-0.1257       ? might be 1.0143x slower
   controlflow-recursive                  2.2455+-0.0651          2.2167+-0.0437          2.2005+-0.0542         might be 1.0204x faster
   crypto-aes                             6.8923+-0.3697          6.3176+-0.2402          6.1573+-0.1484       ^ definitely 1.1194x faster
   crypto-md5                             2.8049+-0.0709    ^     2.5663+-0.0668          2.4669+-0.0729       ^ definitely 1.1370x faster
   crypto-sha1                            2.3478+-0.0652    ^     2.1351+-0.0607    ?     2.1476+-0.0806       ^ definitely 1.0932x faster
   date-format-tofte                     10.3161+-0.2810         10.2830+-0.2989    ?    10.4249+-0.2628       ? might be 1.0105x slower
   date-format-xparb                      8.7798+-0.2838          8.7494+-0.2496    ?     8.9220+-0.2599       ? might be 1.0162x slower
   math-cordic                            6.3076+-0.1537          6.1111+-0.1149          6.0745+-0.0764       ^ definitely 1.0384x faster
   math-partial-sums                      7.3659+-0.1267    ?     7.4812+-0.1393    ?     7.6897+-0.2075       ? might be 1.0440x slower
   math-spectral-norm                     2.7030+-0.1058    !     2.9985+-0.0863    ?     3.0546+-0.0794       ! definitely 1.1300x slower
   regexp-dna                            10.8762+-0.1921         10.8190+-0.1663    ?    10.9030+-0.2224       ?
   string-base64                          5.8533+-0.1371    ?     5.8618+-0.1759    ?     5.9906+-0.2396       ? might be 1.0235x slower
   string-fasta                           7.2075+-0.1744          7.1327+-0.1970          7.1087+-0.1609         might be 1.0139x faster
   string-tagcloud                       11.9179+-0.3311    ?    11.9804+-0.3916    ?    12.0016+-0.3266       ?
   string-unpack-code                    18.7440+-0.3804    ?    18.8508+-0.5263    ?    19.2606+-0.6360       ? might be 1.0276x slower
   string-validate-input                  6.4930+-0.0958    ?     6.6237+-0.2460          6.4775+-0.1372       

   &lt;arithmetic&gt;                           6.4435+-0.0377          6.4189+-0.0338    ?     6.4483+-0.0393       ?
   &lt;geometric&gt;                            5.3328+-0.0319          5.2913+-0.0219    ?     5.3018+-0.0402       
   &lt;harmonic&gt;                             4.3898+-0.0353          4.3388+-0.0330          4.3374+-0.0541         might be 1.0121x faster

                                            TipOfTree                 IntDiv               IntDivStrCat        IntDivStrCat v. TipOfTree 
V8:
   crypto                                71.2496+-0.2918    ?    71.3862+-0.3429         71.1184+-0.5196       
   deltablue                            237.3015+-1.4425    ?   237.3798+-1.0827        236.5956+-1.3604       
   earley-boyer                          88.2273+-0.3942         88.1260+-0.3059         87.9492+-0.3159       
   raytrace                              64.1057+-0.6186    ?    65.0615+-0.5036    ^    62.6563+-0.4224       ^ definitely 1.0231x faster
   regexp                               105.5161+-0.4444    !   106.6996+-0.3355    !   108.3552+-0.6639       ! definitely 1.0269x slower
   richards                             198.5336+-0.7411    ?   199.2889+-0.7026        199.0919+-0.6748       ?
   splay                                 98.3329+-0.2213    ?    98.5661+-0.5356         98.0713+-0.4491       

   &lt;arithmetic&gt;                         123.3238+-0.2493    ?   123.7869+-0.2621        123.4054+-0.1661       ?
   &lt;geometric&gt;                          110.1665+-0.2139    !   110.6913+-0.2509    ^   110.1008+-0.1791       
   &lt;harmonic&gt;                           100.1846+-0.2352    !   100.7525+-0.2618    ^    99.8989+-0.2373       

                                            TipOfTree                 IntDiv               IntDivStrCat        IntDivStrCat v. TipOfTree 
Kraken:
   ai-astar                             616.6539+-2.9734        611.4591+-4.2299    ?   615.3805+-4.1636       
   audio-beat-detection                 467.0274+-4.0021    ^   377.9344+-1.6609    ^   204.5658+-1.0722       ^ definitely 2.2830x faster
   audio-dft                            422.0664+-1.7690        421.1265+-2.1315        419.6968+-2.5885       
   audio-fft                            363.5815+-2.0561    ^   312.9141+-0.8157    ^   141.5586+-0.9472       ^ definitely 2.5684x faster
   audio-oscillator                     254.2253+-1.3820    !   258.3617+-1.3677    ?   258.4752+-1.0439       ! definitely 1.0167x slower
   imaging-darkroom                     422.4535+-1.9687        420.4771+-1.1829    ?   421.7214+-0.7025       
   imaging-desaturate                   208.7662+-0.5285    ?   208.9123+-0.7579    ?   210.1087+-1.2589       ?
   imaging-gaussian-blur                594.3785+-1.2263        594.0332+-0.8333    !   598.2852+-3.3919       ?
   json-parse-financial                  48.0277+-0.2236    !    48.6539+-0.3093         48.6490+-0.2884       ! definitely 1.0129x slower
   json-stringify-tinderbox              68.8110+-0.2238    ^    68.0999+-0.3462    !    70.1338+-0.5934       ! definitely 1.0192x slower
   stanford-crypto-aes                  137.5441+-0.4898    ^   134.0939+-1.0359    ?   135.0720+-0.7700       ^ definitely 1.0183x faster
   stanford-crypto-ccm                  109.4925+-0.5785    ^   104.6828+-0.9352    !   105.8698+-0.2324       ^ definitely 1.0342x faster
   stanford-crypto-pbkdf2               208.6068+-3.2304        204.5755+-0.9357    ?   205.3682+-1.0130         might be 1.0158x faster
   stanford-crypto-sha256-iterative      84.5903+-0.2556    ?    84.9048+-0.5000    ?    85.2254+-0.4590       ?

   &lt;arithmetic&gt;                         286.1589+-0.5195    ^   275.0164+-0.4482    ^   251.4365+-0.4675       ^ definitely 1.1381x faster
   &lt;geometric&gt;                          217.1089+-0.4842    ^   210.3265+-0.3279    ^   191.2333+-0.3325       ^ definitely 1.1353x faster
   &lt;harmonic&gt;                           155.4981+-0.3995    ^   153.0205+-0.3357    ^   144.4740+-0.3776       ^ definitely 1.0763x faster

                                            TipOfTree                 IntDiv               IntDivStrCat        IntDivStrCat v. TipOfTree 
All benchmarks:
   &lt;arithmetic&gt;                         107.1707+-0.1773    ^   103.9070+-0.1572    ^    96.8426+-0.1626       ^ definitely 1.1066x faster
   &lt;geometric&gt;                           25.2527+-0.0971    ^    24.9250+-0.0673    ^    24.2354+-0.1112       ^ definitely 1.0420x faster
   &lt;harmonic&gt;                             7.7267+-0.0608          7.6381+-0.0568          7.6281+-0.0927         might be 1.0129x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471440</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 02:14:12 -0700</bug_when>
    <thetext>Attachment 108296 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGOperations.h:79:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471441</commentid>
    <comment_count>6</comment_count>
      <attachid>108297</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 02:15:37 -0700</bug_when>
    <thetext>Created attachment 108297
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471681</commentid>
    <comment_count>7</comment_count>
      <attachid>108297</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-22 10:36:14 -0700</bug_when>
    <thetext>Comment on attachment 108297
the patch - fix style

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

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:166
&gt; +        // This is only here so that TrustedImmPtr(0) does not confuse the C++
&gt; +        // overload handling rules.

I am a little confused by this. Why is it important to be able to compile conversion from the constant 0 and not the constant 1?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1552
&gt; +        // FIXME: add string speculation here.

Should capitalize the &quot;a&quot; in &quot;Add&quot;.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1611
&gt; +        for (int operandIdx = 0; operandIdx &lt; (int)node.numChildren(); ++operandIdx) {

Could we use size_t for this type instead of int, or is there a good reason to use int and cast numChildren? Is it just that we don’t want to use a 64-bit index?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471749</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 11:50:46 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 108297 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108297&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:166
&gt; &gt; +        // This is only here so that TrustedImmPtr(0) does not confuse the C++
&gt; &gt; +        // overload handling rules.
&gt; 
&gt; I am a little confused by this. Why is it important to be able to compile conversion from the constant 0 and not the constant 1?

You should never use TrustedImmPtr(1) to assemble an int constant; that&apos;s what Imm32() and friends are for.

What happened is that if you only have one overload for TrustedImmPtr(), and it takes void*, then you can safely call TrustedImmPtr(0).  But when I added a size_t overload for TrustedImmPtr(), it meant that the compiler would reject the conversion from 0 to void*, and loads of code failed to compile.  So I added an int overload, but wanted to have this overload assert that it&apos;s not being used to store real int32s. 

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1552
&gt; &gt; +        // FIXME: add string speculation here.
&gt; 
&gt; Should capitalize the &quot;a&quot; in &quot;Add&quot;.

Got it!

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1611
&gt; &gt; +        for (int operandIdx = 0; operandIdx &lt; (int)node.numChildren(); ++operandIdx) {
&gt; 
&gt; Could we use size_t for this type instead of int, or is there a good reason to use int and cast numChildren? Is it just that we don’t want to use a 64-bit index?

Yeah, of course, that would be better.  I think actually numChildren() is unsigned, so I should use that.  (It&apos;s unsigned and not size_t because we try to pack things tightly in DFG::Node, and because if we have a DFG with more than 2 billion nodes in it, we&apos;re probably dead already.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471915</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 15:42:32 -0700</bug_when>
    <thetext>Landed in r95758.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108274</attachid>
            <date>2011-09-21 21:23:01 -0700</date>
            <delta_ts>2011-09-22 02:10:44 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>strcat_patch_1.diff</filename>
            <type>text/plain</type>
            <size>19813</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDktMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IHN1cHBvcnQgdG9fcHJpbWl0aXZlIG9yIHN0cmNhdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1ODIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBm
dW5jdGlvbmFsIHN1cHBvcnQgZm9yIHRvX3ByaW1pdGl2ZSBhbmQgc3RyY2F0LiBJdCBmb2N1c2Vz
CisgICAgICAgIG9uIG1pbmltaXppbmcgdGhlIGFtb3VudCBvZiBjb2RlIGVtaXR0ZWQgb24gdG9f
cHJpbWl0aXZlIChpZiB3ZSBrbm93CisgICAgICAgIHRoYXQgaXQgaXMgYSBwcmltaXRpdmUgb3Ig
Y2FuIHNwZWN1bGF0ZSBjaGVhcGx5LCB0aGVuIHdlIG9taXQgdGhlCisgICAgICAgIHNsb3cgcGF0
aCkgYW5kIG9uIGtlZXBpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHN0cmNhdCBzaW1wbGUgd2hp
bGUKKyAgICAgICAgbGV2ZXJhZ2luZyB3aGF0ZXZlciBvcHRpbWl6YXRpb25zIHdlIGhhdmUgYWxy
ZWFkeS4gSW4gcGFydGljdWxhciwKKyAgICAgICAgdW5saWtlIHRoZSBDYWxsIGFuZCBDb25zdHJ1
Y3Qgbm9kZXMgd2hpY2ggcmVxdWlyZSBleHRlbmRpbmcgdGhlIHNpemUKKyAgICAgICAgb2YgdGhl
IERGRydzIGNhbGxlZSByZWdpc3RlcnMsIFN0ckNhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZh
Y3QKKyAgICAgICAgdGhhdCBubyBKUyBjb2RlIGNhbiBydW4gd2hpbGUgU3RyQ2F0IGlzIGluIHBy
b2dyZXNzIGFuZCB1c2VzIGEKKyAgICAgICAgc2NyYXRjaCBidWZmZXIsIHJhdGhlciB0aGFuIHRo
ZSByZWdpc3RlciBmaWxlLCB0byBzdG9yZSB0aGUgbGlzdCBvZgorICAgICAgICB2YWx1ZXMgdG8g
Y29uY2F0ZW5hdGUuIFRoaXMgd2FzIGRvbmUgbWFpbmx5IHRvIGtlZXAgdGhlIGNvZGUgc2ltcGxl
LAorICAgICAgICBidXQgdGhlcmUgYXJlIHByb2JhYmx5IG90aGVyIGJlbmVmaXRzIHRvIGtlZXBp
bmcgY2FsbCBmcmFtZSBzaXplcworICAgICAgICBkb3duLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRj
aCBlbnN1cmVzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGFuCisgICAgICAgIG9wX3N0cmNhdCBkb2Vz
IG5vdCBtZXNzIHVwIGFueSBvdGhlciBvcHRpbWl6YXRpb25zIHdlIG1pZ2h0IGRvIHdoaWxlCisg
ICAgICAgIGVuc3VyaW5nIHRoYXQgaWYgeW91IGRvIGV4ZWN1dGUgaXQsIGl0J2xsIHdvcmsgYWJv
dXQgYXMgd2VsbCBhcyB5b3UnZAorICAgICAgICBleHBlY3QuCisgICAgICAgIAorICAgICAgICBQ
ZXJmb3JtYW5jZSBub3QgeWV0IG1lYXN1cmVkLCBzdGlsbCBydW5uaW5nIHRlc3RzLgorCisgICAg
ICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cjo6VHJ1c3RlZEltbVB0cik6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGll
cy5oOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNvbXBpbGVPcGNvZGUpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUik6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJv
cGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9k
ZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtTm9k
ZUNTRSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpzY3Jh
dGNoQnVmZmVyRm9yU2l6ZSk6CisKIDIwMTEtMDktMjEgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFy
cmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBtaXNzaW5nIGFkZFB0ci0+YWRkMzIg
bWFwcGluZyBmb3IgWDg2LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDk1Njk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsMTkgQEAgcHVibGljOgogICAgICAgICAg
ICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIFRoaXMgaXMgb25seSBoZXJlIHNvIHRoYXQgVHJ1c3RlZEltbVB0cigwKSBkb2VzIG5v
dCBjb25mdXNlIHRoZSBDKysKKyAgICAgICAgLy8gb3ZlcmxvYWQgaGFuZGxpbmcgcnVsZXMuCisg
ICAgICAgIGV4cGxpY2l0IFRydXN0ZWRJbW1QdHIoaW50IHZhbHVlKQorICAgICAgICAgICAgOiBt
X3ZhbHVlKDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSA9PSAwKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IFRydXN0ZWRJbW1QdHIoc2l6ZV90IHZhbHVlKQor
ICAgICAgICAgICAgOiBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKSkKKyAg
ICAgICAgeworICAgICAgICB9CiAKICAgICAgICAgaW50cHRyX3QgYXNJbnRwdHIoKQogICAgICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkocmV2aXNpb24gOTU2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUwLDYgKzk1MCwyMSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCB2
YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfbm90KTsKICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7CisgICAgICAgICAgICBO
b2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChUb1ByaW1pdGl2ZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX3By
aW1pdGl2ZSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX3N0cmNh
dDogeworICAgICAgICAgICAgaW50IHN0YXJ0T3BlcmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbnVtT3BlcmFuZHMgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICAgICAgZm9yIChpbnQgb3BlcmFuZElkeCA9IHN0
YXJ0T3BlcmFuZDsgb3BlcmFuZElkeCA8IHN0YXJ0T3BlcmFuZCArIG51bU9wZXJhbmRzOyArK29w
ZXJhbmRJZHgpCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KG9wZXJhbmRJZHgp
KTsKKyAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgU3RyQ2F0LCBPcEluZm8oMCksIE9wSW5mbygwKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3Bfc3RyY2F0KTsKKyAgICAgICAgfQogCiAgICAgICAgIGNh
c2Ugb3BfbGVzczogewogICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gOTU2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0
LDggQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcAogICAgIGNhc2Ug
b3BfY2FsbF9wdXRfcmVzdWx0OgogICAgIGNhc2Ugb3BfcmVzb2x2ZToKICAgICBjYXNlIG9wX3Jl
c29sdmVfYmFzZToKKyAgICBjYXNlIG9wX3N0cmNhdDoKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2
ZToKICAgICBjYXNlIG9wX3Rocm93OgogICAgIGNhc2Ugb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9y
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04ODksNiArODg5LDE3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIGNhbGxPcGVyYXRp
b24oKEpfREZHT3BlcmF0aW9uX0VQKW9wZXJhdGlvbiwgcmVzdWx0LCBpZGVudGlmaWVyKTsKICAg
ICB9CisgICAgdm9pZCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tUHRyKHNpemUpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBt
X2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworCisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAgICB9CiAgICAgdm9pZCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VKUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB2b2lk
KiBwb2ludGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5
NTY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNw
ZWN1bGF0aXZlV2l0aE9TUgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEVuY29kZWRKU1Zh
bHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihnbG9iYWxE
YXRhKCktPm9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAo
bnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0
dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9m
RGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKSk7CisgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0
Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2JhbERhdGEoKS0+c2Ny
YXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChudW1iZXJPZlBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMg
PD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0
dWFsUmVnaXN0ZXJzKSkpKTsKIAogICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1l
cyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCiAgICAgLy8g
YmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9yZWQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTU2OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjkzLDYgKzI5Myw4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3MK
ICAgICBtYWNybyhDaGVja0hhc0luc3RhbmNlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oSW5zdGFuY2VPZiwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhMb2dpY2FsTm90
LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNaWdodENsb2JiZXIpIFwKKyAgICBtYWNybyhUb1By
aW1pdGl2ZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dv
cmxkKSBcCisgICAgbWFjcm8oU3RyQ2F0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKICAgICAvKiBC
bG9jayB0ZXJtaW5hbHMuICovXAogICAgIG1hY3JvKEp1bXAsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSXNUZXJtaW5hbCB8IE5vZGVJc0p1bXApIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gOTU2OTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzQs
NiArNjc0LDE2IEBAIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWMKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2UpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBvcGVy
YXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQor
eworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1By
aW1pdGl2ZShleGVjKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblN0ckNhdChFeGVj
U3RhdGUqIGV4ZWMsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4oc3RhcnQp
LCBzaXplKSk7Cit9CisKIHZvaWQgb3BlcmF0aW9uVGhyb3dIYXNJbnN0YW5jZUVycm9yKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UpCiB7CiAgICAgSlNWYWx1ZSBi
YXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSw3IEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpKX0RGR09wZXJhdGlvbl8KIHR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgKCpKX0RGR09wZXJhdGlvbl9FSlApKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCB2b2lkKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqSl9ERkdPcGVyYXRp
b25fRUpJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciopOwogdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSAoKkpfREZHT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7
Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqSl9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUq
LCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpKX0RGR09wZXJhdGlv
bl9FSSkoRXhlY1N0YXRlKiwgSWRlbnRpZmllciopOwogdHlwZWRlZiBSZWdpc3RlclNpemVkQm9v
bGVhbiAoKlpfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0
eXBlZGVmIFJlZ2lzdGVyU2l6ZWRCb29sZWFuICgqWl9ERkdPcGVyYXRpb25fRUpKKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtNzQsNiArNzUsOCBAQCBF
bmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25JbnN0YW5jZU9mKEV4ZWNTCiBFbmNvZGVkSlNWYWx1ZSBv
cGVyYXRpb25SZXNvbHZlKEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqKTsKIEVuY29kZWRKU1ZhbHVl
IG9wZXJhdGlvblJlc29sdmVCYXNlKEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqKTsKIEVuY29kZWRK
U1ZhbHVlIG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0KEV4ZWNTdGF0ZSosIElkZW50aWZp
ZXIqKTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlKTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblN0ckNhdChFeGVjU3RhdGUq
LCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUpOwogdm9pZCBvcGVyYXRpb25UaHJvd0hhc0luc3Rh
bmNlRXJyb3IoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYmFzZSk7CiB2b2lkIG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSk7CiB2b2lkIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk1Njk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ0LDYgKzU0
NCwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3RGaW5hbE9iamVjdCwgU3Ryb25nUHJlZGljdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFN0
ckNhdDogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0
aW9uKFByZWRpY3RTdHJpbmcsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewor
ICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBjaGlsZCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGls
ZDEoKV07CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGNoaWxkKSkgeworICAg
ICAgICAgICAgICAgIGlmIChjaGlsZCAmIFByZWRpY3RPYmplY3RNYXNrKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIE9iamVjdHMgZ2V0IHR1cm5lZCBpbnRvIHN0cmluZ3MuIFNvIGlmIHRoZSBp
bnB1dCBoYXMgaGludHMgb2Ygb2JqZWN0bmVzcywKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IG91dHB1dCB3aWxsIGhhdmUgaGluc3RzIG9mIHN0cmluZ2luZXNzLgorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGNoaWxkICYg
flByZWRpY3RPYmplY3RNYXNrLCBtYWtlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nLCBTdHJvbmdQ
cmVkaWN0aW9uKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBU
aGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgpAQCAt
MTAxMiw3ICsxMDMwLDE2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICBwcmludGYoIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFt
ZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCksIG1fY29tcGlsZUluZGV4KTsKICNlbmRpZgot
CisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB0aGVyZSBhcmUgc29tZSBub2RlcyB0aGF0IHdl
IGRlbGliZXJhdGVseSBkb24ndCBDU0UgZXZlbiB0aG91Z2ggd2UKKyAgICAgICAgLy8gcHJvYmFi
bHkgY291bGQsIGxpa2UgU3RyQ2F0IGFuZCBUb1ByaW1pdGl2ZS4gVGhhdCdzIGJlY2F1c2UgdGhl
cmUgaXMgbm8KKyAgICAgICAgLy8gZXZpZGVuY2UgdGhhdCBkb2luZyBDU0Ugb24gdGhlc2Ugbm9k
ZXMgd291bGQgcmVzdWx0IGluIGEgcGVyZm9ybWFuY2UKKyAgICAgICAgLy8gcHJvZ3Jlc3Npb24u
IEhlbmNlIGNvbnNpZGVyaW5nIHRoZXNlIG5vZGVzIGluIENTRSB3b3VsZCBqdXN0IG1lYW4gdGhh
dCB0aGlzCisgICAgICAgIC8vIGNvZGUgZG9lcyBtb3JlIHdvcmsgd2l0aCBubyB3aW4uIE9mIGNv
dXJzZSwgd2UgbWF5IHdhbnQgdG8gcmVjb25zaWRlciB0aGlzLAorICAgICAgICAvLyBzaW5jZSBT
dHJDYXQgaXMgdHJpdmlhbGx5IENTRS1hYmxlLiBJdCdzIG5vdCB0cml2aWFsbHkgZG9hYmxlIGZv
cgorICAgICAgICAvLyBUb1ByaW1pdGl2ZSwgYnV0IHdlIGNvdWxkIGNoYW5nZSB0aGF0IHdpdGgg
c29tZSBzcGVjdWxhdGlvbnMgaWYgd2UgcmVhbGx5CisgICAgICAgIC8vIG5lZWRlZCB0by4KKyAg
ICAgICAgCiAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgICAgICAKICAgICAgICAgLy8g
SGFuZGxlIHRoZSBwdXJlIG5vZGVzLiBUaGVzZSBub2RlcyBuZXZlciBoYXZlIGFueSBzaWRlLWVm
ZmVjdHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gOTU2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzMiw2ICsxNTMyLDk4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICAvLyBJdCdzIHJlYWxseSBw
cm9maXRhYmxlIHRvIHNwZWN1bGF0ZSBpbnRlZ2VyLCBzaW5jZSBpdCdzIHJlYWxseSBjaGVhcCwK
KyAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IHJlYWwgd29y
aywgYW5kIHdlIGVtaXQgYSBsb3QgbGVzcyBjb2RlLgorICAgICAgICAgICAgCisgICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAg
ICAgaWYgKG9wMS5mb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAg
ICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBhZGQgc3RyaW5nIHNwZWN1bGF0aW9uIGhlcmUuCisgICAgICAgIAorICAgICAgICBib29sIHdh
c1ByaW1pdGl2ZSA9IGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Cb29s
ZWFuKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAg
b3AxLnVzZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKHdhc1ByaW1pdGl2ZSkKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBhbHJlYWR5UHJpbWl0aXZlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlcikpOworICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5hcHBlbmQobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ax
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRvUHJpbWl0aXZlKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBTdHJDYXQ6IHsKKyAgICAgICAgLy8gV2UgcmVhbGx5IGRvbid0IHdhbnQgdG8gZ3JvdyB0
aGUgcmVnaXN0ZXIgZmlsZSBqdXN0IHRvIGRvIGEgU3RyQ2F0LiBTYXkgd2UKKyAgICAgICAgLy8g
aGF2ZSA1MCBmdW5jdGlvbnMgb24gdGhlIHN0YWNrIHRoYXQgYWxsIGhhdmUgYSBTdHJDYXQgaW4g
dGhlbSB0aGF0IGhhcworICAgICAgICAvLyB1cHdhcmRzIG9mIDEwIG9wZXJhbmRzLiBJbiB0aGUg
REZHIHRoaXMgd291bGQgbWVhbiB0aGF0IGVhY2ggb25lIGdldHMKKyAgICAgICAgLy8gc29tZSBy
YW5kb20gdmlydHVhbCByZWdpc3RlciwgYW5kIHRoZW4gdG8gZG8gdGhlIFN0ckNhdCB3ZSdkIG5l
ZWQgYSBzZWNvbmQKKyAgICAgICAgLy8gc3BhbiBvZiAxMCBvcGVyYW5kcyBqdXN0IHRvIGhhdmUg
c29tZXdoZXJlIHRvIGNvcHkgdGhlIDEwIG9wZXJhbmRzIHRvLCB3aGVyZQorICAgICAgICAvLyB0
aGV5J2QgYmUgY29udGlndW91cyBhbmQgd2UgY291bGQgZWFzaWx5IHRlbGwgdGhlIEMgY29kZSBo
b3cgdG8gZmluZCB0aGVtLgorICAgICAgICAvLyBVZ2x5ISBTbyBpbnN0ZWFkIHdlIHVzZSB0aGUg
c2NyYXRjaEJ1ZmZlciBpbmZyYXN0cnVjdHVyZSBpbiBKU0dsb2JhbERhdGEuIFRoYXQKKyAgICAg
ICAgLy8gd2F5LCB0aG9zZSA1MCBmdW5jdGlvbnMgd2lsbCBzaGFyZSB0aGUgc2FtZSBzY3JhdGNo
QnVmZmVyIGZvciBvZmZsb2FkaW5nIHRoZWlyCisgICAgICAgIC8vIFN0ckNhdCBvcGVyYW5kcy4g
SXQncyBhYm91dCBhcyBnb29kIGFzIHdlIGNhbiBkbywgdW5sZXNzIHdlIHN0YXJ0IGRvaW5nCisg
ICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgY29hbGVzY2luZyB0byBlbnN1cmUgdGhhdCBvcGVy
YW5kcyB0byBTdHJDYXQgZ2V0IHNwaWxsZWQKKyAgICAgICAgLy8gaW4gZXhhY3RseSB0aGUgcGxh
Y2Ugd2hlcmUgU3RyQ2F0IHdhbnRzIHRoZW0sIG9yIGVsc2UgaGF2ZSB0aGUgU3RyQ2F0CisgICAg
ICAgIC8vIHJlZmVyIHRvIHRob3NlIG9wZXJhbmRzJyBTZXRMb2NhbCBpbnN0cnVjdGlvbnMgdG8g
Zm9yY2UgdGhlbSB0byBzcGlsbCBpbgorICAgICAgICAvLyB0aGUgcmlnaHQgcGxhY2UuIEJhc2lj
YWxseSwgYW55IHdheSB5b3UgY3V0IGl0LCB0aGUgY3VycmVudCBhcHByb2FjaAorICAgICAgICAv
LyBwcm9iYWJseSBoYXMgdGhlIGJlc3QgYmFsYW5jZSBvZiBwZXJmb3JtYW5jZSBhbmQgc2Vuc2li
aWxpdHkgaW4gdGhlIHNlbnNlCisgICAgICAgIC8vIHRoYXQgaXQgZG9lcyBub3QgaW5jcmVhc2Ug
dGhlIGNvbXBsZXhpdHkgb2YgdGhlIERGRyBKSVQganVzdCB0byBtYWtlIFN0ckNhdAorICAgICAg
ICAvLyBmYXN0IGFuZCBwcmV0dHkuCisgICAgICAgIAorICAgICAgICBFbmNvZGVkSlNWYWx1ZSog
YnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihtX2ppdC5nbG9iYWxEYXRhKCkt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBub2RlLm51bUNo
aWxkcmVuKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IG9wZXJhbmRJZHggPSAwOyBv
cGVyYW5kSWR4IDwgKGludClub2RlLm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgeworICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFy
QXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XSk7CisgICAgICAgICAg
ICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOworICAgICAgICAgICAgb3BlcmFuZC51c2Uo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIob3BHUFIsIGJ1ZmZl
ciArIG9wZXJhbmRJZHgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgICAgICAKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0LCByZXN1bHQuZ3ByKCks
IGJ1ZmZlciwgbm9kZS5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgCisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBDb252ZXJ0VGhpczog
ewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5jaGls
ZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAJKHJldmlzaW9uIDk1Njk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niw3IEBAIEpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIGludGVycHJldGVy
KDApCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBTaXplKQogI2lmIEVOQUJMRShERkdfSklUKQotICAg
ICwgc2l6ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXIoMCkKKyAgICAsIHNpemVPZkxhc3RTY3JhdGNo
QnVmZmVyKDApCiAjZW5kaWYKICAgICAsIGR5bmFtaWNHbG9iYWxPYmplY3QoMCkKICAgICAsIGNh
Y2hlZFVUQ09mZnNldChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQpA
QCAtMzUyLDggKzM1Miw4IEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvc3JT
Y3JhdGNoQnVmZmVycy5zaXplKCk7ICsraSkKLSAgICAgICAgZmFzdEZyZWUob3NyU2NyYXRjaEJ1
ZmZlcnNbaV0pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY3JhdGNoQnVmZmVycy5z
aXplKCk7ICsraSkKKyAgICAgICAgZmFzdEZyZWUoc2NyYXRjaEJ1ZmZlcnNbaV0pOwogI2VuZGlm
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsMjUgKzIzMywyNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgaW50NjRfdCBkZWJ1Z0RhdGFCdWZmZXJbNjRdOwogI2VuZGlmCiAj
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIFZlY3Rvcjx2b2lkKj4gb3NyU2NyYXRjaEJ1ZmZl
cnM7Ci0gICAgICAgIHNpemVfdCBzaXplT2ZMYXN0T1NSU2NyYXRjaEJ1ZmZlcjsKKyAgICAgICAg
VmVjdG9yPHZvaWQqPiBzY3JhdGNoQnVmZmVyczsKKyAgICAgICAgc2l6ZV90IHNpemVPZkxhc3RT
Y3JhdGNoQnVmZmVyOwogICAgICAgICAKLSAgICAgICAgdm9pZCogb3NyU2NyYXRjaEJ1ZmZlckZv
clNpemUoc2l6ZV90IHNpemUpCisgICAgICAgIHZvaWQqIHNjcmF0Y2hCdWZmZXJGb3JTaXplKHNp
emVfdCBzaXplKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzaXplID4gc2l6
ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsKKyAgICAgICAgICAgIGlmIChzaXplID4gc2l6ZU9m
TGFzdFNjcmF0Y2hCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3Qg
YSBOXjIgbWVtb3J5IHVzYWdlIHBhdGhvbG9neSBieSBlbnN1cmluZwogICAgICAgICAgICAgICAg
IC8vIHRoYXQgYXQgd29yc3QsIHdlIGdldCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5pbmcgdGhh
dCB0aGUKICAgICAgICAgICAgICAgICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29tZXdoZXJl
IGFyb3VuZAogICAgICAgICAgICAgICAgIC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXplKSAqIDQu
Ci0gICAgICAgICAgICAgICAgc2l6ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXIgPSBzaXplICogMjsK
KyAgICAgICAgICAgICAgICBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciA9IHNpemUgKiAyOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG9zclNjcmF0Y2hCdWZmZXJzLmFwcGVuZChm
YXN0TWFsbG9jKHNpemVPZkxhc3RPU1JTY3JhdGNoQnVmZmVyKSk7CisgICAgICAgICAgICAgICAg
c2NyYXRjaEJ1ZmZlcnMuYXBwZW5kKGZhc3RNYWxsb2Moc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIG9zclNj
cmF0Y2hCdWZmZXJzLmxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBzY3JhdGNoQnVmZmVycy5s
YXN0KCk7CiAgICAgICAgIH0KICNlbmRpZgogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108296</attachid>
            <date>2011-09-22 02:10:44 -0700</date>
            <delta_ts>2011-09-22 02:15:37 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>strcat_patch_3.diff</filename>
            <type>text/plain</type>
            <size>20411</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDktMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IHN1cHBvcnQgdG9fcHJpbWl0aXZlIG9yIHN0cmNhdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1ODIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBm
dW5jdGlvbmFsIHN1cHBvcnQgZm9yIHRvX3ByaW1pdGl2ZSBhbmQgc3RyY2F0LiBJdCBmb2N1c2Vz
CisgICAgICAgIG9uIG1pbmltaXppbmcgdGhlIGFtb3VudCBvZiBjb2RlIGVtaXR0ZWQgb24gdG9f
cHJpbWl0aXZlIChpZiB3ZSBrbm93CisgICAgICAgIHRoYXQgaXQgaXMgYSBwcmltaXRpdmUgb3Ig
Y2FuIHNwZWN1bGF0ZSBjaGVhcGx5LCB0aGVuIHdlIG9taXQgdGhlCisgICAgICAgIHNsb3cgcGF0
aCkgYW5kIG9uIGtlZXBpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHN0cmNhdCBzaW1wbGUgd2hp
bGUKKyAgICAgICAgbGV2ZXJhZ2luZyB3aGF0ZXZlciBvcHRpbWl6YXRpb25zIHdlIGhhdmUgYWxy
ZWFkeS4gSW4gcGFydGljdWxhciwKKyAgICAgICAgdW5saWtlIHRoZSBDYWxsIGFuZCBDb25zdHJ1
Y3Qgbm9kZXMgd2hpY2ggcmVxdWlyZSBleHRlbmRpbmcgdGhlIHNpemUKKyAgICAgICAgb2YgdGhl
IERGRydzIGNhbGxlZSByZWdpc3RlcnMsIFN0ckNhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZh
Y3QKKyAgICAgICAgdGhhdCBubyBKUyBjb2RlIGNhbiBydW4gd2hpbGUgU3RyQ2F0IGlzIGluIHBy
b2dyZXNzIGFuZCB1c2VzIGEKKyAgICAgICAgc2NyYXRjaCBidWZmZXIsIHJhdGhlciB0aGFuIHRo
ZSByZWdpc3RlciBmaWxlLCB0byBzdG9yZSB0aGUgbGlzdCBvZgorICAgICAgICB2YWx1ZXMgdG8g
Y29uY2F0ZW5hdGUuIFRoaXMgd2FzIGRvbmUgbWFpbmx5IHRvIGtlZXAgdGhlIGNvZGUgc2ltcGxl
LAorICAgICAgICBidXQgdGhlcmUgYXJlIHByb2JhYmx5IG90aGVyIGJlbmVmaXRzIHRvIGtlZXBp
bmcgY2FsbCBmcmFtZSBzaXplcworICAgICAgICBkb3duLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRj
aCBlbnN1cmVzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGFuCisgICAgICAgIG9wX3N0cmNhdCBkb2Vz
IG5vdCBtZXNzIHVwIGFueSBvdGhlciBvcHRpbWl6YXRpb25zIHdlIG1pZ2h0IGRvIHdoaWxlCisg
ICAgICAgIGVuc3VyaW5nIHRoYXQgaWYgeW91IGRvIGV4ZWN1dGUgaXQsIGl0J2xsIHdvcmsgYWJv
dXQgYXMgd2VsbCBhcyB5b3UnZAorICAgICAgICBleHBlY3QuCisgICAgICAgIAorICAgICAgICBU
aGlzIGlzIGEgMTQlIHNwZWVkLXVwIG9uIEtyYWtlbi4KKworICAgICAgICAqIGFzc2VtYmxlci9B
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHI6OlRydXN0ZWRJbW1QdHIpOgorICAgICAgICAqIGRmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpjYW5Db21waWxlT3Bjb2RlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxE
YXRhLmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2NyYXRjaEJ1ZmZlckZvclNpemUp
OgorCiAyMDExLTA5LTIxICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgbWlzc2luZyBhZGRQdHItPmFkZDMyIG1hcHBpbmcgZm9yIFg4Ni4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjEsNiArMTYxLDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1
ZSkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIG9u
bHkgaGVyZSBzbyB0aGF0IFRydXN0ZWRJbW1QdHIoMCkgZG9lcyBub3QgY29uZnVzZSB0aGUgQysr
CisgICAgICAgIC8vIG92ZXJsb2FkIGhhbmRsaW5nIHJ1bGVzLgorICAgICAgICBleHBsaWNpdCBU
cnVzdGVkSW1tUHRyKGludCB2YWx1ZSkKKyAgICAgICAgICAgIDogbV92YWx1ZSgwKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCAhdmFsdWUpOworICAgICAgICB9
CisKKyAgICAgICAgZXhwbGljaXQgVHJ1c3RlZEltbVB0cihzaXplX3QgdmFsdWUpCisgICAgICAg
ICAgICA6IG1fdmFsdWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpKQorICAgICAgICB7
CisgICAgICAgIH0KIAogICAgICAgICBpbnRwdHJfdCBhc0ludHB0cigpCiAgICAgICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTAsNiArOTUwLDIxIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9ub3QpOwogICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgICAgIE5vZGVJbmRl
eCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKFRvUHJp
bWl0aXZlLCB2YWx1ZSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG9fcHJpbWl0aXZl
KTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3Bfc3RyY2F0OiB7Cisg
ICAgICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBudW1PcGVyYW5kcyA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBmb3IgKGludCBvcGVyYW5kSWR4ID0gc3RhcnRPcGVy
YW5kOyBvcGVyYW5kSWR4IDwgc3RhcnRPcGVyYW5kICsgbnVtT3BlcmFuZHM7ICsrb3BlcmFuZElk
eCkKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQob3BlcmFuZElkeCkpOworICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnLCBTdHJDYXQsIE9wSW5mbygwKSwgT3BJbmZvKDApKSk7CisgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9zdHJjYXQpOworICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9s
ZXNzOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5oCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsOCBAQCBp
bmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAgY2FzZSBvcF9jYWxs
X3B1dF9yZXN1bHQ6CiAgICAgY2FzZSBvcF9yZXNvbHZlOgogICAgIGNhc2Ugb3BfcmVzb2x2ZV9i
YXNlOgorICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgogICAg
IGNhc2Ugb3BfdGhyb3c6CiAgICAgY2FzZSBvcF90aHJvd19yZWZlcmVuY2VfZXJyb3I6CiAgICAg
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk1Njk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw2
ICs4ODksMTcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAgY2FsbE9wZXJhdGlvbigoSl9E
RkdPcGVyYXRpb25fRVApb3BlcmF0aW9uLCByZXN1bHQsIGlkZW50aWZpZXIpOwogICAgIH0KKyAg
ICB2b2lkIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBBU1NF
UlQoaXNGbHVzaGVkKCkpOworCisgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIoc2l6ZSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIG1faml0Lm1v
dmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCByZXN1bHQpOworICAgIH0KICAgICB2b2lkIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50
ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk1Njk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxOCw3ICsyMTgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRp
dmVXaXRoT1NSCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgRW5jb2RlZEpTVmFsdWUqIHNj
cmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2JhbERhdGEoKS0+
b3NyU2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChudW1iZXJP
ZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzKSkpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaEJ1ZmZl
ciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVm
ZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKG51bWJlck9mUG9pc29uZWRWaXJ0
dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMpKSkpOwogCiAgICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBhc3N1bWVzIHRoYXQg
aXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKICAgICAvLyBiZXR3ZWVu
IHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVuIGl0IGlzIHN0b3JlZC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNiAr
MjkzLDggQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBhcml0aE5vZGVGbGFncwogICAgIG1h
Y3JvKENoZWNrSGFzSW5zdGFuY2UsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhJbnN0
YW5jZU9mLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVS
ZXN1bHRCb29sZWFuIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKFRvUHJpbWl0aXZl
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
KyAgICBtYWNybyhTdHJDYXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXAogICAgIC8qIEJsb2NrIHRl
cm1pbmFscy4gKi9cCiAgICAgbWFjcm8oSnVtcCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVJc1Rl
cm1pbmFsIHwgTm9kZUlzSnVtcCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3NCw2ICs2NzQs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpYwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYmFzZSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCit7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvUHJpbWl0aXZl
KGV4ZWMpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uU3RyQ2F0KEV4ZWNTdGF0ZSog
ZXhlYywgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihzdGFydCksIHNpemUp
KTsKK30KKwogdm9pZCBvcGVyYXRpb25UaHJvd0hhc0luc3RhbmNlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSkKIHsKICAgICBKU1ZhbHVlIGJhc2UgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDk1Njk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcg
QEAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkpfREZHT3BlcmF0aW9uXwogdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSAoKkpfREZHT3BlcmF0aW9uX0VKUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIHZvaWQqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpKX0RGR09wZXJhdGlvbl9FSkkp
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlICgqSl9ERkdPcGVyYXRpb25fRVApKEV4ZWNTdGF0ZSosIHZvaWQqKTsKK3R5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQq
LCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkpfREZHT3BlcmF0aW9uX0VJKShF
eGVjU3RhdGUqLCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIFJlZ2lzdGVyU2l6ZWRCb29sZWFuICgq
Wl9ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYg
UmVnaXN0ZXJTaXplZEJvb2xlYW4gKCpaX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC03NCw2ICs3NSw4IEBAIEVuY29kZWRK
U1ZhbHVlIG9wZXJhdGlvbkluc3RhbmNlT2YoRXhlY1MKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlv
blJlc29sdmUoRXhlY1N0YXRlKiwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0
aW9uUmVzb2x2ZUJhc2UoRXhlY1N0YXRlKiwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUg
b3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpY3RQdXQoRXhlY1N0YXRlKiwgSWRlbnRpZmllciopOwor
RW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uU3RyQ2F0KEV4ZWNTdGF0ZSosIHZvaWQq
IHN0YXJ0LCBzaXplX3Qgc2l6ZSk7CiB2b2lkIG9wZXJhdGlvblRocm93SGFzSW5zdGFuY2VFcnJv
cihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBiYXNlKTsKIHZvaWQgb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKTsKIHZv
aWQgb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTU2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDQsNiArNTQ0LDMxIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdEZpbmFsT2JqZWN0LCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3RyQ2F0OiB7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJl
ZGljdFN0cmluZywgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CisgICAgICAg
ICAgICBQcmVkaWN0ZWRUeXBlIGNoaWxkID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsK
KyAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24oY2hpbGQpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gSSdkIGxvdmUgdG8gZm9sZCB0aGlzIGNhc2UgaW50byB0aGUgY2FzZSBiZWxvdywgYnV0
IEkgY2FuJ3QsIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZpbmcgUHJlZGlj
dE9iamVjdE1hc2sgZnJvbSBzb21ldGhpbmcgdGhhdCBvbmx5IGhhcyBhbiBvYmplY3QKKyAgICAg
ICAgICAgICAgICAgICAgLy8gcHJlZGljdGlvbiBhbmQgbm90aGluZyBlbHNlIG1lYW5zIHdlIGhh
dmUgYW4gaWxsLWZvcm1lZCBQcmVkaWN0ZWRUeXBlCisgICAgICAgICAgICAgICAgICAgIC8vIChz
dHJvbmcgcHJlZGljdC1ub25lKS4gVGhpcyBzaG91bGQgYmUga2lsbGVkIG9uY2Ugd2UgcmVtb3Zl
IGFsbCB0cmFjZXMKKyAgICAgICAgICAgICAgICAgICAgLy8gb2Ygc3RhdGljIChha2Egd2Vhaykg
cHJlZGljdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RTdHJpbmcsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkICYgUHJlZGljdE9iamVjdE1hc2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0cyBnZXQgdHVybmVkIGludG8gc3RyaW5ncy4gU28g
aWYgdGhlIGlucHV0IGhhcyBoaW50cyBvZiBvYmplY3RuZXNzLAorICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgb3V0cHV0IHdpbGwgaGF2ZSBoaW5zdHMgb2Ygc3RyaW5naW5lc3MuCisgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMo
Y2hpbGQgJiB+UHJlZGljdE9iamVjdE1hc2ssIG1ha2VQcmVkaWN0aW9uKFByZWRpY3RTdHJpbmcs
IFN0cm9uZ1ByZWRpY3Rpb24pKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxkKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
ICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhp
bmcuCkBAIC0xMDEyLDcgKzEwMzcsMTYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoREZHX0RFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIHByaW50ZigiICAgJXMgQCV1OiAiLCBHcmFw
aDo6b3BOYW1lKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLm9wKSwgbV9jb21waWxlSW5kZXgpOwog
I2VuZGlmCi0KKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRoZXJlIGFyZSBzb21lIG5vZGVz
IHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGRvbid0IENTRSBldmVuIHRob3VnaCB3ZQorICAgICAgICAv
LyBwcm9iYWJseSBjb3VsZCwgbGlrZSBTdHJDYXQgYW5kIFRvUHJpbWl0aXZlLiBUaGF0J3MgYmVj
YXVzZSB0aGVyZSBpcyBubworICAgICAgICAvLyBldmlkZW5jZSB0aGF0IGRvaW5nIENTRSBvbiB0
aGVzZSBub2RlcyB3b3VsZCByZXN1bHQgaW4gYSBwZXJmb3JtYW5jZQorICAgICAgICAvLyBwcm9n
cmVzc2lvbi4gSGVuY2UgY29uc2lkZXJpbmcgdGhlc2Ugbm9kZXMgaW4gQ1NFIHdvdWxkIGp1c3Qg
bWVhbiB0aGF0IHRoaXMKKyAgICAgICAgLy8gY29kZSBkb2VzIG1vcmUgd29yayB3aXRoIG5vIHdp
bi4gT2YgY291cnNlLCB3ZSBtYXkgd2FudCB0byByZWNvbnNpZGVyIHRoaXMsCisgICAgICAgIC8v
IHNpbmNlIFN0ckNhdCBpcyB0cml2aWFsbHkgQ1NFLWFibGUuIEl0J3Mgbm90IHRyaXZpYWxseSBk
b2FibGUgZm9yCisgICAgICAgIC8vIFRvUHJpbWl0aXZlLCBidXQgd2UgY291bGQgY2hhbmdlIHRo
YXQgd2l0aCBzb21lIHNwZWN1bGF0aW9ucyBpZiB3ZSByZWFsbHkKKyAgICAgICAgLy8gbmVlZGVk
IHRvLgorICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIAogICAg
ICAgICAvLyBIYW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55
IHNpZGUtZWZmZWN0cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMyLDYg
KzE1MzIsOTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOwogICAgICAgICBicmVhazsKICAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIC8vIEl0J3Mg
cmVhbGx5IHByb2ZpdGFibGUgdG8gc3BlY3VsYXRlIGludGVnZXIsIHNpbmNlIGl0J3MgcmVhbGx5
IGNoZWFwLAorICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkg
cmVhbCB3b3JrLCBhbmQgd2UgZW1pdCBhIGxvdCBsZXNzIGNvZGUuCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICBpZiAob3AxLmZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAg
ICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogYWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJl
LgorICAgICAgICAKKyAgICAgICAgYm9vbCB3YXNQcmltaXRpdmUgPSBpc0tub3duTnVtZXJpYyhu
b2RlLmNoaWxkMSgpKSB8fCBpc0tub3duQm9vbGVhbihub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAKKyAgICAgICAgR1BS
UmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG9wMS51c2UoKTsKKyAgICAgICAgCisgICAgICAg
IGlmICh3YXNQcmltaXRpdmUpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgYWxyZWFkeVByaW1pdGl2ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWxyZWFkeVBy
aW1pdGl2ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGFscmVh
ZHlQcmltaXRpdmUuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAg
ICAgICAgbV9qaXQubW92ZShvcDFHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb25Ub1ByaW1pdGl2ZSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhbHJl
YWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgU3RyQ2F0OiB7CisgICAgICAgIC8vIFdl
IHJlYWxseSBkb24ndCB3YW50IHRvIGdyb3cgdGhlIHJlZ2lzdGVyIGZpbGUganVzdCB0byBkbyBh
IFN0ckNhdC4gU2F5IHdlCisgICAgICAgIC8vIGhhdmUgNTAgZnVuY3Rpb25zIG9uIHRoZSBzdGFj
ayB0aGF0IGFsbCBoYXZlIGEgU3RyQ2F0IGluIHRoZW0gdGhhdCBoYXMKKyAgICAgICAgLy8gdXB3
YXJkcyBvZiAxMCBvcGVyYW5kcy4gSW4gdGhlIERGRyB0aGlzIHdvdWxkIG1lYW4gdGhhdCBlYWNo
IG9uZSBnZXRzCisgICAgICAgIC8vIHNvbWUgcmFuZG9tIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB0
aGVuIHRvIGRvIHRoZSBTdHJDYXQgd2UnZCBuZWVkIGEgc2Vjb25kCisgICAgICAgIC8vIHNwYW4g
b2YgMTAgb3BlcmFuZHMganVzdCB0byBoYXZlIHNvbWV3aGVyZSB0byBjb3B5IHRoZSAxMCBvcGVy
YW5kcyB0bywgd2hlcmUKKyAgICAgICAgLy8gdGhleSdkIGJlIGNvbnRpZ3VvdXMgYW5kIHdlIGNv
dWxkIGVhc2lseSB0ZWxsIHRoZSBDIGNvZGUgaG93IHRvIGZpbmQgdGhlbS4KKyAgICAgICAgLy8g
VWdseSEgU28gaW5zdGVhZCB3ZSB1c2UgdGhlIHNjcmF0Y2hCdWZmZXIgaW5mcmFzdHJ1Y3R1cmUg
aW4gSlNHbG9iYWxEYXRhLiBUaGF0CisgICAgICAgIC8vIHdheSwgdGhvc2UgNTAgZnVuY3Rpb25z
IHdpbGwgc2hhcmUgdGhlIHNhbWUgc2NyYXRjaEJ1ZmZlciBmb3Igb2ZmbG9hZGluZyB0aGVpcgor
ICAgICAgICAvLyBTdHJDYXQgb3BlcmFuZHMuIEl0J3MgYWJvdXQgYXMgZ29vZCBhcyB3ZSBjYW4g
ZG8sIHVubGVzcyB3ZSBzdGFydCBkb2luZworICAgICAgICAvLyB2aXJ0dWFsIHJlZ2lzdGVyIGNv
YWxlc2NpbmcgdG8gZW5zdXJlIHRoYXQgb3BlcmFuZHMgdG8gU3RyQ2F0IGdldCBzcGlsbGVkCisg
ICAgICAgIC8vIGluIGV4YWN0bHkgdGhlIHBsYWNlIHdoZXJlIFN0ckNhdCB3YW50cyB0aGVtLCBv
ciBlbHNlIGhhdmUgdGhlIFN0ckNhdAorICAgICAgICAvLyByZWZlciB0byB0aG9zZSBvcGVyYW5k
cycgU2V0TG9jYWwgaW5zdHJ1Y3Rpb25zIHRvIGZvcmNlIHRoZW0gdG8gc3BpbGwgaW4KKyAgICAg
ICAgLy8gdGhlIHJpZ2h0IHBsYWNlLiBCYXNpY2FsbHksIGFueSB3YXkgeW91IGN1dCBpdCwgdGhl
IGN1cnJlbnQgYXBwcm9hY2gKKyAgICAgICAgLy8gcHJvYmFibHkgaGFzIHRoZSBiZXN0IGJhbGFu
Y2Ugb2YgcGVyZm9ybWFuY2UgYW5kIHNlbnNpYmlsaXR5IGluIHRoZSBzZW5zZQorICAgICAgICAv
LyB0aGF0IGl0IGRvZXMgbm90IGluY3JlYXNlIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBERkcgSklU
IGp1c3QgdG8gbWFrZSBTdHJDYXQKKyAgICAgICAgLy8gZmFzdCBhbmQgcHJldHR5LgorICAgICAg
ICAKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlKj4obV9qaXQuZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICogbm9kZS5udW1DaGlsZHJlbigpKSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKGludCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IChpbnQpbm9kZS5udW1DaGls
ZHJlbigpOyArK29wZXJhbmRJZHgpIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJh
bmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgp
ICsgb3BlcmFuZElkeF0pOworICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIo
KTsKKyAgICAgICAgICAgIG9wZXJhbmQudXNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAgICAgIEdQ
UlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN0ckNhdCwgcmVzdWx0LmdwcigpLCBidWZmZXIsIG5vZGUubnVtQ2hpbGRyZW4oKSk7
CisgICAgICAgIAorICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KIAogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA5NTY5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9i
YWxEYXRhVHlwCiAgICAgLCBpbnRlcnByZXRlcigwKQogICAgICwgaGVhcCh0aGlzLCBoZWFwU2l6
ZSkKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAsIHNpemVPZkxhc3RPU1JTY3JhdGNoQnVmZmVy
KDApCisgICAgLCBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcigwKQogI2VuZGlmCiAgICAgLCBkeW5h
bWljR2xvYmFsT2JqZWN0KDApCiAgICAgLCBjYWNoZWRVVENPZmZzZXQoc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSkKQEAgLTM1Miw4ICszNTIsOCBAQCBKU0dsb2JhbERh
dGE6On5KU0dsb2JhbERhdGEoKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3NyU2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGZhc3RGcmVlKG9zclNjcmF0Y2hCdWZmZXJzW2ldKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZhc3RGcmVl
KHNjcmF0Y2hCdWZmZXJzW2ldKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTU2OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMzLDI1ICsyMzMsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludDY0X3QgZGVi
dWdEYXRhQnVmZmVyWzY0XTsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBW
ZWN0b3I8dm9pZCo+IG9zclNjcmF0Y2hCdWZmZXJzOwotICAgICAgICBzaXplX3Qgc2l6ZU9mTGFz
dE9TUlNjcmF0Y2hCdWZmZXI7CisgICAgICAgIFZlY3Rvcjx2b2lkKj4gc2NyYXRjaEJ1ZmZlcnM7
CisgICAgICAgIHNpemVfdCBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcjsKICAgICAgICAgCi0gICAg
ICAgIHZvaWQqIG9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVfdCBzaXplKQorICAgICAgICB2
b2lkKiBzY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplX3Qgc2l6ZSkKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFzaXplKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoc2l6ZSA+IHNpemVPZkxhc3RPU1JTY3JhdGNoQnVmZmVyKSB7Cisg
ICAgICAgICAgICBpZiAoc2l6ZSA+IHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSB7CiAgICAgICAg
ICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGEgTl4yIG1lbW9yeSB1c2FnZSBwYXRob2xvZ3kg
YnkgZW5zdXJpbmcKICAgICAgICAgICAgICAgICAvLyB0aGF0IGF0IHdvcnN0LCB3ZSBnZXQgYSBn
ZW9tZXRyaWMgc2VyaWVzLCBtZWFuaW5nIHRoYXQgdGhlCiAgICAgICAgICAgICAgICAgLy8gdG90
YWwgbWVtb3J5IHVzYWdlIGlzIHNvbWV3aGVyZSBhcm91bmQKICAgICAgICAgICAgICAgICAvLyBt
YXgoc2NyYXRjaCBidWZmZXIgc2l6ZSkgKiA0LgotICAgICAgICAgICAgICAgIHNpemVPZkxhc3RP
U1JTY3JhdGNoQnVmZmVyID0gc2l6ZSAqIDI7CisgICAgICAgICAgICAgICAgc2l6ZU9mTGFzdFNj
cmF0Y2hCdWZmZXIgPSBzaXplICogMjsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBvc3JTY3JhdGNoQnVmZmVycy5hcHBlbmQoZmFzdE1hbGxvYyhzaXplT2ZMYXN0T1NSU2NyYXRj
aEJ1ZmZlcikpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJzLmFwcGVuZChmYXN0TWFs
bG9jKHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHJldHVybiBvc3JTY3JhdGNoQnVmZmVycy5sYXN0KCk7CisgICAgICAg
ICAgICByZXR1cm4gc2NyYXRjaEJ1ZmZlcnMubGFzdCgpOwogICAgICAgICB9CiAjZW5kaWYKICNl
bmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108297</attachid>
            <date>2011-09-22 02:15:37 -0700</date>
            <delta_ts>2011-09-22 10:36:14 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>strcat_patch_4.diff</filename>
            <type>text/plain</type>
            <size>20406</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDktMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IHN1cHBvcnQgdG9fcHJpbWl0aXZlIG9yIHN0cmNhdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1ODIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBm
dW5jdGlvbmFsIHN1cHBvcnQgZm9yIHRvX3ByaW1pdGl2ZSBhbmQgc3RyY2F0LiBJdCBmb2N1c2Vz
CisgICAgICAgIG9uIG1pbmltaXppbmcgdGhlIGFtb3VudCBvZiBjb2RlIGVtaXR0ZWQgb24gdG9f
cHJpbWl0aXZlIChpZiB3ZSBrbm93CisgICAgICAgIHRoYXQgaXQgaXMgYSBwcmltaXRpdmUgb3Ig
Y2FuIHNwZWN1bGF0ZSBjaGVhcGx5LCB0aGVuIHdlIG9taXQgdGhlCisgICAgICAgIHNsb3cgcGF0
aCkgYW5kIG9uIGtlZXBpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHN0cmNhdCBzaW1wbGUgd2hp
bGUKKyAgICAgICAgbGV2ZXJhZ2luZyB3aGF0ZXZlciBvcHRpbWl6YXRpb25zIHdlIGhhdmUgYWxy
ZWFkeS4gSW4gcGFydGljdWxhciwKKyAgICAgICAgdW5saWtlIHRoZSBDYWxsIGFuZCBDb25zdHJ1
Y3Qgbm9kZXMgd2hpY2ggcmVxdWlyZSBleHRlbmRpbmcgdGhlIHNpemUKKyAgICAgICAgb2YgdGhl
IERGRydzIGNhbGxlZSByZWdpc3RlcnMsIFN0ckNhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZh
Y3QKKyAgICAgICAgdGhhdCBubyBKUyBjb2RlIGNhbiBydW4gd2hpbGUgU3RyQ2F0IGlzIGluIHBy
b2dyZXNzIGFuZCB1c2VzIGEKKyAgICAgICAgc2NyYXRjaCBidWZmZXIsIHJhdGhlciB0aGFuIHRo
ZSByZWdpc3RlciBmaWxlLCB0byBzdG9yZSB0aGUgbGlzdCBvZgorICAgICAgICB2YWx1ZXMgdG8g
Y29uY2F0ZW5hdGUuIFRoaXMgd2FzIGRvbmUgbWFpbmx5IHRvIGtlZXAgdGhlIGNvZGUgc2ltcGxl
LAorICAgICAgICBidXQgdGhlcmUgYXJlIHByb2JhYmx5IG90aGVyIGJlbmVmaXRzIHRvIGtlZXBp
bmcgY2FsbCBmcmFtZSBzaXplcworICAgICAgICBkb3duLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRj
aCBlbnN1cmVzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGFuCisgICAgICAgIG9wX3N0cmNhdCBkb2Vz
IG5vdCBtZXNzIHVwIGFueSBvdGhlciBvcHRpbWl6YXRpb25zIHdlIG1pZ2h0IGRvIHdoaWxlCisg
ICAgICAgIGVuc3VyaW5nIHRoYXQgaWYgeW91IGRvIGV4ZWN1dGUgaXQsIGl0J2xsIHdvcmsgYWJv
dXQgYXMgd2VsbCBhcyB5b3UnZAorICAgICAgICBleHBlY3QuCisgICAgICAgIAorICAgICAgICBU
aGlzIGlzIGEgMTQlIHNwZWVkLXVwIG9uIEtyYWtlbi4KKworICAgICAgICAqIGFzc2VtYmxlci9B
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHI6OlRydXN0ZWRJbW1QdHIpOgorICAgICAgICAqIGRmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpjYW5Db21waWxlT3Bjb2RlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxE
YXRhLmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2NyYXRjaEJ1ZmZlckZvclNpemUp
OgorCiAyMDExLTA5LTIxICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgbWlzc2luZyBhZGRQdHItPmFkZDMyIG1hcHBpbmcgZm9yIFg4Ni4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjEsNiArMTYxLDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1
ZSkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIG9u
bHkgaGVyZSBzbyB0aGF0IFRydXN0ZWRJbW1QdHIoMCkgZG9lcyBub3QgY29uZnVzZSB0aGUgQysr
CisgICAgICAgIC8vIG92ZXJsb2FkIGhhbmRsaW5nIHJ1bGVzLgorICAgICAgICBleHBsaWNpdCBU
cnVzdGVkSW1tUHRyKGludCB2YWx1ZSkKKyAgICAgICAgICAgIDogbV92YWx1ZSgwKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCAhdmFsdWUpOworICAgICAgICB9
CisKKyAgICAgICAgZXhwbGljaXQgVHJ1c3RlZEltbVB0cihzaXplX3QgdmFsdWUpCisgICAgICAg
ICAgICA6IG1fdmFsdWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpKQorICAgICAgICB7
CisgICAgICAgIH0KIAogICAgICAgICBpbnRwdHJfdCBhc0ludHB0cigpCiAgICAgICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTAsNiArOTUwLDIxIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9ub3QpOwogICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAgICAgIE5vZGVJbmRl
eCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKFRvUHJp
bWl0aXZlLCB2YWx1ZSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG9fcHJpbWl0aXZl
KTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3Bfc3RyY2F0OiB7Cisg
ICAgICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBudW1PcGVyYW5kcyA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBmb3IgKGludCBvcGVyYW5kSWR4ID0gc3RhcnRPcGVy
YW5kOyBvcGVyYW5kSWR4IDwgc3RhcnRPcGVyYW5kICsgbnVtT3BlcmFuZHM7ICsrb3BlcmFuZElk
eCkKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQob3BlcmFuZElkeCkpOworICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnLCBTdHJDYXQsIE9wSW5mbygwKSwgT3BJbmZvKDApKSk7CisgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9zdHJjYXQpOworICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9s
ZXNzOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5oCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsOCBAQCBp
bmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAgY2FzZSBvcF9jYWxs
X3B1dF9yZXN1bHQ6CiAgICAgY2FzZSBvcF9yZXNvbHZlOgogICAgIGNhc2Ugb3BfcmVzb2x2ZV9i
YXNlOgorICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgogICAg
IGNhc2Ugb3BfdGhyb3c6CiAgICAgY2FzZSBvcF90aHJvd19yZWZlcmVuY2VfZXJyb3I6CiAgICAg
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk1Njk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw2
ICs4ODksMTcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAgY2FsbE9wZXJhdGlvbigoSl9E
RkdPcGVyYXRpb25fRVApb3BlcmF0aW9uLCByZXN1bHQsIGlkZW50aWZpZXIpOwogICAgIH0KKyAg
ICB2b2lkIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBBU1NF
UlQoaXNGbHVzaGVkKCkpOworCisgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIoc2l6ZSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIG1faml0Lm1v
dmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCByZXN1bHQpOworICAgIH0KICAgICB2b2lkIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50
ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk1Njk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxOCw3ICsyMTgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRp
dmVXaXRoT1NSCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgRW5jb2RlZEpTVmFsdWUqIHNj
cmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2JhbERhdGEoKS0+
b3NyU2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChudW1iZXJP
ZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzKSkpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaEJ1ZmZl
ciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVm
ZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKG51bWJlck9mUG9pc29uZWRWaXJ0
dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMpKSkpOwogCiAgICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBhc3N1bWVzIHRoYXQg
aXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKICAgICAvLyBiZXR3ZWVu
IHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVuIGl0IGlzIHN0b3JlZC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNiAr
MjkzLDggQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBhcml0aE5vZGVGbGFncwogICAgIG1h
Y3JvKENoZWNrSGFzSW5zdGFuY2UsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhJbnN0
YW5jZU9mLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVS
ZXN1bHRCb29sZWFuIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKFRvUHJpbWl0aXZl
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
KyAgICBtYWNybyhTdHJDYXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXAogICAgIC8qIEJsb2NrIHRl
cm1pbmFscy4gKi9cCiAgICAgbWFjcm8oSnVtcCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVJc1Rl
cm1pbmFsIHwgTm9kZUlzSnVtcCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA5NTY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3NCw2ICs2NzQs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpYwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYmFzZSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCit7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvUHJpbWl0aXZl
KGV4ZWMpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uU3RyQ2F0KEV4ZWNTdGF0ZSog
ZXhlYywgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihzdGFydCksIHNpemUp
KTsKK30KKwogdm9pZCBvcGVyYXRpb25UaHJvd0hhc0luc3RhbmNlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSkKIHsKICAgICBKU1ZhbHVlIGJhc2UgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDk1Njk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcg
QEAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkpfREZHT3BlcmF0aW9uXwogdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSAoKkpfREZHT3BlcmF0aW9uX0VKUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIHZvaWQqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpKX0RGR09wZXJhdGlvbl9FSkkp
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlICgqSl9ERkdPcGVyYXRpb25fRVApKEV4ZWNTdGF0ZSosIHZvaWQqKTsKK3R5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQq
LCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkpfREZHT3BlcmF0aW9uX0VJKShF
eGVjU3RhdGUqLCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIFJlZ2lzdGVyU2l6ZWRCb29sZWFuICgq
Wl9ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYg
UmVnaXN0ZXJTaXplZEJvb2xlYW4gKCpaX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC03NCw2ICs3NSw4IEBAIEVuY29kZWRK
U1ZhbHVlIG9wZXJhdGlvbkluc3RhbmNlT2YoRXhlY1MKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlv
blJlc29sdmUoRXhlY1N0YXRlKiwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0
aW9uUmVzb2x2ZUJhc2UoRXhlY1N0YXRlKiwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUg
b3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpY3RQdXQoRXhlY1N0YXRlKiwgSWRlbnRpZmllciopOwor
RW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uU3RyQ2F0KEV4ZWNTdGF0ZSosIHZvaWQq
IHN0YXJ0LCBzaXplX3QpOwogdm9pZCBvcGVyYXRpb25UaHJvd0hhc0luc3RhbmNlRXJyb3IoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYmFzZSk7CiB2b2lkIG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSk7CiB2b2lkIG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAJKHJldmlzaW9uIDk1Njk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ0LDYgKzU0NCwzMSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RGaW5hbE9iamVjdCwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFN0ckNhdDogeworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RT
dHJpbmcsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAg
UHJlZGljdGVkVHlwZSBjaGlsZCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAg
ICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGNoaWxkKSkgeworICAgICAgICAgICAgICAg
IGlmIChpc09iamVjdFByZWRpY3Rpb24oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEknZCBsb3ZlIHRvIGZvbGQgdGhpcyBjYXNlIGludG8gdGhlIGNhc2UgYmVsb3csIGJ1dCBJIGNh
bid0LCBiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92aW5nIFByZWRpY3RPYmpl
Y3RNYXNrIGZyb20gc29tZXRoaW5nIHRoYXQgb25seSBoYXMgYW4gb2JqZWN0CisgICAgICAgICAg
ICAgICAgICAgIC8vIHByZWRpY3Rpb24gYW5kIG5vdGhpbmcgZWxzZSBtZWFucyB3ZSBoYXZlIGFu
IGlsbC1mb3JtZWQgUHJlZGljdGVkVHlwZQorICAgICAgICAgICAgICAgICAgICAvLyAoc3Ryb25n
IHByZWRpY3Qtbm9uZSkuIFRoaXMgc2hvdWxkIGJlIGtpbGxlZCBvbmNlIHdlIHJlbW92ZSBhbGwg
dHJhY2VzCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHN0YXRpYyAoYWthIHdlYWspIHByZWRp
Y3Rpb25zLgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbiht
YWtlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChjaGlsZCAmIFByZWRpY3RPYmplY3RNYXNrKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIE9iamVjdHMgZ2V0IHR1cm5lZCBpbnRvIHN0cmluZ3MuIFNvIGlmIHRo
ZSBpbnB1dCBoYXMgaGludHMgb2Ygb2JqZWN0bmVzcywKKyAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIG91dHB1dCB3aWxsIGhhdmUgaGluc3RzIG9mIHN0cmluZ2luZXNzLgorICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGNoaWxk
ICYgflByZWRpY3RPYmplY3RNYXNrLCBtYWtlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nLCBTdHJv
bmdQcmVkaWN0aW9uKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAv
LyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgpA
QCAtMTAxMiw3ICsxMDM3LDE2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERGR19ERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICBwcmludGYoIiAgICVzIEAldTogIiwgR3JhcGg6Om9w
TmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCksIG1fY29tcGlsZUluZGV4KTsKICNlbmRp
ZgotCisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB0aGVyZSBhcmUgc29tZSBub2RlcyB0aGF0
IHdlIGRlbGliZXJhdGVseSBkb24ndCBDU0UgZXZlbiB0aG91Z2ggd2UKKyAgICAgICAgLy8gcHJv
YmFibHkgY291bGQsIGxpa2UgU3RyQ2F0IGFuZCBUb1ByaW1pdGl2ZS4gVGhhdCdzIGJlY2F1c2Ug
dGhlcmUgaXMgbm8KKyAgICAgICAgLy8gZXZpZGVuY2UgdGhhdCBkb2luZyBDU0Ugb24gdGhlc2Ug
bm9kZXMgd291bGQgcmVzdWx0IGluIGEgcGVyZm9ybWFuY2UKKyAgICAgICAgLy8gcHJvZ3Jlc3Np
b24uIEhlbmNlIGNvbnNpZGVyaW5nIHRoZXNlIG5vZGVzIGluIENTRSB3b3VsZCBqdXN0IG1lYW4g
dGhhdCB0aGlzCisgICAgICAgIC8vIGNvZGUgZG9lcyBtb3JlIHdvcmsgd2l0aCBubyB3aW4uIE9m
IGNvdXJzZSwgd2UgbWF5IHdhbnQgdG8gcmVjb25zaWRlciB0aGlzLAorICAgICAgICAvLyBzaW5j
ZSBTdHJDYXQgaXMgdHJpdmlhbGx5IENTRS1hYmxlLiBJdCdzIG5vdCB0cml2aWFsbHkgZG9hYmxl
IGZvcgorICAgICAgICAvLyBUb1ByaW1pdGl2ZSwgYnV0IHdlIGNvdWxkIGNoYW5nZSB0aGF0IHdp
dGggc29tZSBzcGVjdWxhdGlvbnMgaWYgd2UgcmVhbGx5CisgICAgICAgIC8vIG5lZWRlZCB0by4K
KyAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgICAgICAKICAgICAgICAg
Ly8gSGFuZGxlIHRoZSBwdXJlIG5vZGVzLiBUaGVzZSBub2RlcyBuZXZlciBoYXZlIGFueSBzaWRl
LWVmZmVjdHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTU2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzMiw2ICsxNTMy
LDk5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CisgICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICAvLyBJdCdzIHJlYWxs
eSBwcm9maXRhYmxlIHRvIHNwZWN1bGF0ZSBpbnRlZ2VyLCBzaW5jZSBpdCdzIHJlYWxseSBjaGVh
cCwKKyAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IHJlYWwg
d29yaywgYW5kIHdlIGVtaXQgYSBsb3QgbGVzcyBjb2RlLgorICAgICAgICAgICAgCisgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICAgICAgaWYgKG9wMS5mb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAg
ICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdw
cigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gRklYTUU6IGFkZCBzdHJpbmcgc3BlY3VsYXRpb24gaGVyZS4KKyAg
ICAgICAgCisgICAgICAgIGJvb2wgd2FzUHJpbWl0aXZlID0gaXNLbm93bk51bWVyaWMobm9kZS5j
aGlsZDEoKSkgfHwgaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSk7CisgICAgICAgIAorICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBv
cDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIAorICAgICAgICBvcDEudXNlKCk7CisgICAgICAgIAorICAgICAgICBpZiAo
d2FzUHJpbWl0aXZlKQorICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGFs
cmVhZHlQcmltaXRpdmU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFscmVhZHlQcmltaXRp
dmUuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9w
MUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBhbHJlYWR5UHJp
bWl0aXZlLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUob3AxR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAg
bV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
VG9QcmltaXRpdmUpOworICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWxyZWFkeVBy
aW1pdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFN0ckNhdDogeworICAgICAgICAvLyBXZSByZWFs
bHkgZG9uJ3Qgd2FudCB0byBncm93IHRoZSByZWdpc3RlciBmaWxlIGp1c3QgdG8gZG8gYSBTdHJD
YXQuIFNheSB3ZQorICAgICAgICAvLyBoYXZlIDUwIGZ1bmN0aW9ucyBvbiB0aGUgc3RhY2sgdGhh
dCBhbGwgaGF2ZSBhIFN0ckNhdCBpbiB0aGVtIHRoYXQgaGFzCisgICAgICAgIC8vIHVwd2FyZHMg
b2YgMTAgb3BlcmFuZHMuIEluIHRoZSBERkcgdGhpcyB3b3VsZCBtZWFuIHRoYXQgZWFjaCBvbmUg
Z2V0cworICAgICAgICAvLyBzb21lIHJhbmRvbSB2aXJ0dWFsIHJlZ2lzdGVyLCBhbmQgdGhlbiB0
byBkbyB0aGUgU3RyQ2F0IHdlJ2QgbmVlZCBhIHNlY29uZAorICAgICAgICAvLyBzcGFuIG9mIDEw
IG9wZXJhbmRzIGp1c3QgdG8gaGF2ZSBzb21ld2hlcmUgdG8gY29weSB0aGUgMTAgb3BlcmFuZHMg
dG8sIHdoZXJlCisgICAgICAgIC8vIHRoZXknZCBiZSBjb250aWd1b3VzIGFuZCB3ZSBjb3VsZCBl
YXNpbHkgdGVsbCB0aGUgQyBjb2RlIGhvdyB0byBmaW5kIHRoZW0uCisgICAgICAgIC8vIFVnbHkh
IFNvIGluc3RlYWQgd2UgdXNlIHRoZSBzY3JhdGNoQnVmZmVyIGluZnJhc3RydWN0dXJlIGluIEpT
R2xvYmFsRGF0YS4gVGhhdAorICAgICAgICAvLyB3YXksIHRob3NlIDUwIGZ1bmN0aW9ucyB3aWxs
IHNoYXJlIHRoZSBzYW1lIHNjcmF0Y2hCdWZmZXIgZm9yIG9mZmxvYWRpbmcgdGhlaXIKKyAgICAg
ICAgLy8gU3RyQ2F0IG9wZXJhbmRzLiBJdCdzIGFib3V0IGFzIGdvb2QgYXMgd2UgY2FuIGRvLCB1
bmxlc3Mgd2Ugc3RhcnQgZG9pbmcKKyAgICAgICAgLy8gdmlydHVhbCByZWdpc3RlciBjb2FsZXNj
aW5nIHRvIGVuc3VyZSB0aGF0IG9wZXJhbmRzIHRvIFN0ckNhdCBnZXQgc3BpbGxlZAorICAgICAg
ICAvLyBpbiBleGFjdGx5IHRoZSBwbGFjZSB3aGVyZSBTdHJDYXQgd2FudHMgdGhlbSwgb3IgZWxz
ZSBoYXZlIHRoZSBTdHJDYXQKKyAgICAgICAgLy8gcmVmZXIgdG8gdGhvc2Ugb3BlcmFuZHMnIFNl
dExvY2FsIGluc3RydWN0aW9ucyB0byBmb3JjZSB0aGVtIHRvIHNwaWxsIGluCisgICAgICAgIC8v
IHRoZSByaWdodCBwbGFjZS4gQmFzaWNhbGx5LCBhbnkgd2F5IHlvdSBjdXQgaXQsIHRoZSBjdXJy
ZW50IGFwcHJvYWNoCisgICAgICAgIC8vIHByb2JhYmx5IGhhcyB0aGUgYmVzdCBiYWxhbmNlIG9m
IHBlcmZvcm1hbmNlIGFuZCBzZW5zaWJpbGl0eSBpbiB0aGUgc2Vuc2UKKyAgICAgICAgLy8gdGhh
dCBpdCBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgY29tcGxleGl0eSBvZiB0aGUgREZHIEpJVCBqdXN0
IHRvIG1ha2UgU3RyQ2F0CisgICAgICAgIC8vIGZhc3QgYW5kIHByZXR0eS4KKyAgICAgICAgCisg
ICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KG1faml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSAqIG5vZGUubnVtQ2hpbGRyZW4oKSkpOworICAgICAgICAKKyAgICAgICAgZm9y
IChpbnQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCAoaW50KW5vZGUubnVtQ2hpbGRyZW4o
KTsgKytvcGVyYW5kSWR4KSB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRo
aXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIG9w
ZXJhbmRJZHhdKTsKKyAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7Cisg
ICAgICAgICAgICBvcGVyYW5kLnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihvcEdQUiwgYnVmZmVyICsgb3BlcmFuZElkeCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAgICAgICBHUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TdHJDYXQsIHJlc3VsdC5ncHIoKSwgYnVmZmVyLCBub2RlLm51bUNoaWxkcmVuKCkpOworICAg
ICAgICAKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBicmVhazsKKyAgICB9CiAK
ICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRo
aXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gOTU2OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODYsNyArMTg2LDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0
YVR5cAogICAgICwgaW50ZXJwcmV0ZXIoMCkKICAgICAsIGhlYXAodGhpcywgaGVhcFNpemUpCiAj
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgLCBzaXplT2ZMYXN0T1NSU2NyYXRjaEJ1ZmZlcigwKQor
ICAgICwgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIoMCkKICNlbmRpZgogICAgICwgZHluYW1pY0ds
b2JhbE9iamVjdCgwKQogICAgICwgY2FjaGVkVVRDT2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCkpCkBAIC0zNTIsOCArMzUyLDggQEAgSlNHbG9iYWxEYXRhOjp+
SlNHbG9iYWxEYXRhKCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG9zclNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgKytpKQotICAgICAg
ICBmYXN0RnJlZShvc3JTY3JhdGNoQnVmZmVyc1tpXSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgKytpKQorICAgICAgICBmYXN0RnJlZShzY3Jh
dGNoQnVmZmVyc1tpXSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDk1Njk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
MywyNSArMjMzLDI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQ2NF90IGRlYnVnRGF0
YUJ1ZmZlcls2NF07CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgVmVjdG9y
PHZvaWQqPiBvc3JTY3JhdGNoQnVmZmVyczsKLSAgICAgICAgc2l6ZV90IHNpemVPZkxhc3RPU1JT
Y3JhdGNoQnVmZmVyOworICAgICAgICBWZWN0b3I8dm9pZCo+IHNjcmF0Y2hCdWZmZXJzOworICAg
ICAgICBzaXplX3Qgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXI7CiAgICAgICAgIAotICAgICAgICB2
b2lkKiBvc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplX3Qgc2l6ZSkKKyAgICAgICAgdm9pZCog
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZV90IHNpemUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmICghc2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKHNpemUgPiBzaXplT2ZMYXN0T1NSU2NyYXRjaEJ1ZmZlcikgeworICAgICAg
ICAgICAgaWYgKHNpemUgPiBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcikgewogICAgICAgICAgICAg
ICAgIC8vIFByb3RlY3QgYWdhaW5zdCBhIE5eMiBtZW1vcnkgdXNhZ2UgcGF0aG9sb2d5IGJ5IGVu
c3VyaW5nCiAgICAgICAgICAgICAgICAgLy8gdGhhdCBhdCB3b3JzdCwgd2UgZ2V0IGEgZ2VvbWV0
cmljIHNlcmllcywgbWVhbmluZyB0aGF0IHRoZQogICAgICAgICAgICAgICAgIC8vIHRvdGFsIG1l
bW9yeSB1c2FnZSBpcyBzb21ld2hlcmUgYXJvdW5kCiAgICAgICAgICAgICAgICAgLy8gbWF4KHNj
cmF0Y2ggYnVmZmVyIHNpemUpICogNC4KLSAgICAgICAgICAgICAgICBzaXplT2ZMYXN0T1NSU2Ny
YXRjaEJ1ZmZlciA9IHNpemUgKiAyOworICAgICAgICAgICAgICAgIHNpemVPZkxhc3RTY3JhdGNo
QnVmZmVyID0gc2l6ZSAqIDI7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3Ny
U2NyYXRjaEJ1ZmZlcnMuYXBwZW5kKGZhc3RNYWxsb2Moc2l6ZU9mTGFzdE9TUlNjcmF0Y2hCdWZm
ZXIpKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVycy5hcHBlbmQoZmFzdE1hbGxvYyhz
aXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICByZXR1cm4gb3NyU2NyYXRjaEJ1ZmZlcnMubGFzdCgpOworICAgICAgICAgICAg
cmV0dXJuIHNjcmF0Y2hCdWZmZXJzLmxhc3QoKTsKICAgICAgICAgfQogI2VuZGlmCiAjZW5kaWYK
</data>
<flag name="review"
          id="105233"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>