<?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>117272</bug_id>
          
          <creation_ts>2013-06-05 13:07:31 -0700</creation_ts>
          <short_desc>fourthTier: DFG CFA should know when it hits a contradiction</short_desc>
          <delta_ts>2013-06-06 21:24:52 -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>117279</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>897522</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-05 13:07:31 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897523</commentid>
    <comment_count>1</comment_count>
      <attachid>203875</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-05 13:07:53 -0700</bug_when>
    <thetext>Created attachment 203875
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897574</commentid>
    <comment_count>2</comment_count>
      <attachid>203886</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-05 15:22:03 -0700</bug_when>
    <thetext>Created attachment 203886
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897631</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-05 20:58:08 -0700</bug_when>
    <thetext>This looks like a ~0.8% V8v7 regression, most likely because every contradiction is automatically treated as a frequent exit.  I&apos;ll investigate more before landing.

Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r151231)
&quot;Contradiction&quot; at /Volumes/Data/fromMiniMe/fourthTier/tertiary/OpenSource/WebKitBuild/Release/jsc (r151231)

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

                                                     TipOfTree               Contradiction                                   
SunSpider:
   3d-cube                                         6.7277+-0.1045            6.6596+-0.1014          might be 1.0102x faster
   3d-morph                                        8.5155+-0.1194            8.4721+-0.1605        
   3d-raytrace                                     8.4792+-0.1267            8.4348+-0.1375        
   access-binary-trees                             1.8227+-0.0143            1.8137+-0.0094        
   access-fannkuch                                 7.7148+-0.0905            7.6719+-0.0648        
   access-nbody                                    3.9882+-0.0094            3.9844+-0.0064        
   access-nsieve                                   4.8181+-0.0391            4.8136+-0.0830        
   bitops-3bit-bits-in-byte                        1.7770+-0.0177            1.7747+-0.0174        
   bitops-bits-in-byte                             6.9271+-0.0822            6.7983+-0.0873          might be 1.0189x faster
   bitops-bitwise-and                              2.7874+-0.0363            2.7669+-0.0628        
   bitops-nsieve-bits                              4.4528+-0.0634     ?      4.4830+-0.0273        ?
   controlflow-recursive                           3.0036+-0.0352     ?      3.0072+-0.0356        ?
   crypto-aes                                      5.1966+-0.0763            5.1943+-0.0612        
   crypto-md5                                      3.0585+-0.0243     ?      3.0625+-0.0304        ?
   crypto-sha1                                     2.8425+-0.0198     ?      2.8444+-0.0270        ?
   date-format-tofte                              14.8683+-0.2040           14.7809+-0.2138        
   date-format-xparb                               8.3608+-0.1546     ?      8.3916+-0.1493        ?
   math-cordic                                     3.9594+-0.0321            3.9470+-0.0377        
   math-partial-sums                              11.9370+-0.1072           11.9023+-0.1145        
   math-spectral-norm                              2.7174+-0.0140     ?      2.7208+-0.0160        ?
   regexp-dna                                     12.6537+-0.1942           12.6361+-0.1811        
   string-base64                                   5.1019+-0.0412            5.0713+-0.0546        
   string-fasta                                   10.7448+-0.1391           10.7334+-0.0560        
   string-tagcloud                                14.4382+-0.1602           14.4325+-0.2200        
   string-unpack-code                             29.0000+-0.1420           28.8889+-0.1305        
   string-validate-input                           6.7030+-0.1869            6.5883+-0.1800          might be 1.0174x faster

   &lt;arithmetic&gt; *                                  7.4075+-0.0545            7.3798+-0.0486          might be 1.0038x faster
   &lt;geometric&gt;                                     5.8395+-0.0345            5.8196+-0.0319          might be 1.0034x faster
   &lt;harmonic&gt;                                      4.7027+-0.0204            4.6897+-0.0197          might be 1.0028x faster

                                                     TipOfTree               Contradiction                                   
V8Spider:
   crypto                                         79.8109+-0.1825           79.6727+-0.4158        
   deltablue                                     104.5810+-1.7588          104.1448+-0.3557        
   earley-boyer                                   69.8515+-0.1867     ?     70.0228+-0.2414        ?
   raytrace                                       38.1151+-0.3861     ?     38.1790+-0.4742        ?
   regexp                                        100.9521+-0.7985     ?    101.4893+-0.3397        ?
   richards                                      112.5223+-1.4049          111.7891+-0.6706        
   splay                                          47.1807+-0.2157     ?     47.3771+-0.3044        ?

   &lt;arithmetic&gt;                                   79.0019+-0.2565           78.9536+-0.1809          might be 1.0006x faster
   &lt;geometric&gt; *                                  73.7812+-0.1961     ?     73.7970+-0.1621        ? might be 1.0002x slower
   &lt;harmonic&gt;                                     68.1945+-0.2058     ?     68.2631+-0.1863        ? might be 1.0010x slower

                                                     TipOfTree               Contradiction                                   
Octane and V8v7:
   encrypt                                        0.46862+-0.00351          0.46595+-0.00057       
   decrypt                                        8.62815+-0.01466    ^     8.59114+-0.00548       ^ definitely 1.0043x faster
   deltablue                             x2       0.56742+-0.00305    !     0.59626+-0.00289       ! definitely 1.0508x slower
   earley                                         0.88137+-0.00343    ?     0.88399+-0.00222       ?
   boyer                                         13.00454+-0.05012    ?    13.09365+-0.07199       ?
   raytrace                              x2       4.51976+-0.03846          4.47933+-0.04109       
   regexp                                x2      32.71187+-0.29210         32.60318+-0.36388       
   richards                              x2       0.31040+-0.00197    ?     0.31175+-0.00302       ?
   splay                                 x2       0.64078+-0.01437    ?     0.66054+-0.02766       ? might be 1.0308x slower
   navier-stokes                         x2      10.81320+-0.01014         10.80681+-0.01318       
   closure                                        0.32216+-0.03576    ?     0.32366+-0.03625       ?
   jquery                                         4.57667+-0.55546          4.57426+-0.55678       
   gbemu                                 x2     140.46226+-1.72771    ?   142.13469+-2.24039       ? might be 1.0119x slower
   box2d                                 x2      32.72646+-0.11335    ^    32.47411+-0.12822       ^ definitely 1.0078x faster

V8v7:
   &lt;arithmetic&gt;                                   7.63185+-0.04081          7.62190+-0.04600         might be 1.0013x faster
   &lt;geometric&gt; *                                  2.43292+-0.01126    ?     2.45429+-0.01491       ? might be 1.0088x slower
   &lt;harmonic&gt;                                     0.92795+-0.00548    !     0.94281+-0.00836       ! definitely 1.0160x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  21.51754+-0.17811    ?    21.63936+-0.21620       ? might be 1.0057x slower
   &lt;geometric&gt; *                                  4.17728+-0.04408    ?     4.20616+-0.04614       ? might be 1.0069x slower
   &lt;harmonic&gt;                                     1.06197+-0.01756    ?     1.07676+-0.01895       ? might be 1.0139x slower

                                                     TipOfTree               Contradiction                                   
Kraken:
   ai-astar                                       492.812+-0.700      !     518.598+-5.769         ! definitely 1.0523x slower
   audio-beat-detection                           242.025+-0.863            241.510+-0.431         
   audio-dft                                      307.744+-0.834      ?     313.846+-10.592        ? might be 1.0198x slower
   audio-fft                                      144.674+-1.531            143.428+-0.448         
   audio-oscillator                               246.839+-5.891      ?     249.157+-6.554         ?
   imaging-darkroom                               286.121+-0.765            286.062+-0.779         
   imaging-desaturate                             160.219+-0.402      ^     158.888+-0.901         ^ definitely 1.0084x faster
   imaging-gaussian-blur                          406.337+-5.660      ^     399.774+-0.255         ^ definitely 1.0164x faster
   json-parse-financial                            81.180+-0.639      ^      79.674+-0.302         ^ definitely 1.0189x faster
   json-stringify-tinderbox                        98.296+-0.222      !      99.118+-0.318         ! definitely 1.0084x slower
   stanford-crypto-aes                             92.243+-0.411      !      93.793+-0.494         ! definitely 1.0168x slower
   stanford-crypto-ccm                             90.241+-4.715      ?      90.727+-4.770         ?
   stanford-crypto-pbkdf2                         263.967+-0.791      !     269.242+-2.255         ! definitely 1.0200x slower
   stanford-crypto-sha256-iterative               115.162+-0.168      !     116.207+-0.450         ! definitely 1.0091x slower

   &lt;arithmetic&gt; *                                 216.276+-0.665      !     218.573+-0.869         ! definitely 1.0106x slower
   &lt;geometric&gt;                                    183.507+-0.727      ?     184.606+-0.748         ? might be 1.0060x slower
   &lt;harmonic&gt;                                     156.375+-0.960      ?     156.857+-0.972         ? might be 1.0031x slower

                                                     TipOfTree               Contradiction                                   
JSRegress:
   adapt-to-double-divide                         22.5815+-0.0980           22.5376+-0.0987        
   aliased-arguments-getbyval                      0.8388+-0.0075            0.8373+-0.0080        
   allocate-big-object                             2.4910+-0.0247            2.4831+-0.0231        
   arity-mismatch-inlining                         0.7810+-0.0226            0.7801+-0.0209        
   array-access-polymorphic-structure              6.8076+-0.0927     !      9.8191+-0.1541        ! definitely 1.4424x slower
   array-nonarray-polymorhpic-access             208.2232+-1.7012          206.1913+-2.5074        
   array-with-double-add                           5.9616+-0.0696     ^      4.8444+-0.0616        ^ definitely 1.2306x faster
   array-with-double-increment                     4.1665+-0.0557     !      4.4680+-0.0296        ! definitely 1.0724x slower
   array-with-double-mul-add                       6.6468+-0.0591     ^      5.4096+-0.0620        ^ definitely 1.2287x faster
   array-with-double-sum                           7.8875+-0.0867     ?      7.9348+-0.0899        ?
   array-with-int32-add-sub                       10.6629+-0.1743     ^      9.0435+-0.0596        ^ definitely 1.1791x faster
   array-with-int32-or-double-sum                  7.9765+-0.0788            7.9585+-0.0814        
   big-int-mul                                     4.8110+-0.0410     ?      4.8239+-0.0447        ?
   boolean-test                                    4.3786+-0.0744     ?      4.3801+-0.0733        ?
   branch-fold                                    16.8321+-0.0927     ^     16.0685+-0.0509        ^ definitely 1.0475x faster
   cast-int-to-double                             13.9602+-0.2909     ?     13.9681+-0.1137        ?
   cell-argument                                  14.8679+-0.3763           14.7883+-0.3283        
   cfg-simplify                                    3.9907+-0.0474     ?      3.9913+-0.0460        ?
   cmpeq-obj-to-obj-other                         11.0875+-0.1210           10.9272+-0.1400          might be 1.0147x faster
   constant-test                                   8.5756+-0.0743     ?      8.6536+-0.1151        ?
   direct-arguments-getbyval                       0.7381+-0.0078            0.7374+-0.0110        
   double-pollution-getbyval                      10.7537+-0.0889     ?     10.7694+-0.1040        ?
   double-pollution-putbyoffset                    5.2980+-0.0916            5.2534+-0.0944        
   empty-string-plus-int                          10.9229+-0.2046           10.8586+-0.1730        
   external-arguments-getbyval                     1.9137+-0.0093     ?      1.9269+-0.0174        ?
   external-arguments-putbyval                     3.1420+-0.0140     ?      3.1456+-0.0187        ?
   Float32Array-matrix-mult                       13.8483+-0.1442     !     15.4967+-0.1396        ! definitely 1.1190x slower
   fold-double-to-int                             22.0320+-0.2780           21.9370+-0.2127        
   function-dot-apply                              3.1075+-0.0131     !      3.1888+-0.0093        ! definitely 1.0262x slower
   function-test                                   5.0288+-0.1250            4.9206+-0.1135          might be 1.0220x faster
   get-by-id-chain-from-try-block                  6.7285+-0.1203     ?      6.7771+-0.2094        ?
   HashMap-put-get-iterate-keys                   84.3518+-0.6405     ?     84.4359+-0.3590        ?
   HashMap-put-get-iterate                        91.7142+-1.1229     ^     89.6102+-0.7194        ^ definitely 1.0235x faster
   HashMap-string-put-get-iterate                 71.7668+-0.4054     ?     73.2522+-2.0352        ? might be 1.0207x slower
   imul-double-only                                    ERROR                     ERROR             
   imul-int-only                                       ERROR                     ERROR             
   imul-mixed                                          ERROR                     ERROR             
   indexed-properties-in-objects                   4.4767+-0.0614            4.4299+-0.0245          might be 1.0106x faster
   inline-arguments-access                         1.2572+-0.0135            1.2533+-0.0125        
   inline-arguments-local-escape                  23.1570+-0.2717           23.1368+-0.2998        
   inline-get-scoped-var                           6.5491+-0.0637     ?      6.5619+-0.0753        ?
   inlined-put-by-id-transition                   16.4308+-0.2398     ?     16.6107+-0.2369        ? might be 1.0109x slower
   int-or-other-abs-then-get-by-val                9.0039+-0.1037            8.8921+-0.0731          might be 1.0126x faster
   int-or-other-abs-zero-then-get-by-val          41.2373+-0.1009           41.1927+-0.0688        
   int-or-other-add-then-get-by-val               10.2194+-0.1230           10.1548+-0.0743        
   int-or-other-add                               10.4464+-0.0546           10.4157+-0.0628        
   int-or-other-div-then-get-by-val                6.3523+-0.0906            6.3444+-0.0845        
   int-or-other-max-then-get-by-val                7.3454+-0.0919            7.3285+-0.0874        
   int-or-other-min-then-get-by-val                7.3951+-0.0898            7.3428+-0.0936        
   int-or-other-mod-then-get-by-val                6.0404+-0.0677     ?      6.1222+-0.0923        ? might be 1.0135x slower
   int-or-other-mul-then-get-by-val                6.5141+-0.0974            6.4980+-0.0841        
   int-or-other-neg-then-get-by-val                8.1016+-0.1216     ?      8.1052+-0.1123        ?
   int-or-other-neg-zero-then-get-by-val          40.4480+-0.1461           40.3960+-0.1960        
   int-or-other-sub-then-get-by-val               10.2778+-0.1147           10.2004+-0.0978        
   int-or-other-sub                                8.2392+-0.0968            8.2276+-0.0900        
   int-overflow-local                             11.7439+-0.1222     ?     11.7661+-0.1422        ?
   Int16Array-bubble-sort                         49.2737+-0.1166     !     49.6635+-0.0889        ! definitely 1.0079x slower
   Int16Array-load-int-mul                         1.9216+-0.0082            1.9207+-0.0089        
   Int8Array-load                                  4.7805+-0.0712     ?      4.8260+-0.0521        ?
   integer-divide                                 15.3376+-0.1156           15.2889+-0.1000        
   integer-modulo                                  1.9826+-0.0113            1.9793+-0.0151        
   make-indexed-storage                            3.7250+-0.0521            3.7218+-0.0329        
   method-on-number                               25.0239+-0.3131     ?     25.2970+-0.3052        ? might be 1.0109x slower
   negative-zero-divide                            0.3283+-0.0141            0.3269+-0.0132        
   negative-zero-modulo                            0.3240+-0.0191            0.3231+-0.0217        
   negative-zero-negate                            0.3164+-0.0305            0.3068+-0.0189          might be 1.0312x faster
   nested-function-parsing-random                390.6321+-14.0313         384.7706+-13.2177         might be 1.0152x faster
   nested-function-parsing                        47.9052+-1.0062     ?     48.5271+-1.2418        ? might be 1.0130x slower
   new-array-buffer-dead                           3.7386+-0.0550     ^      3.6640+-0.0179        ^ definitely 1.0204x faster
   new-array-buffer-push                          10.1991+-0.1749     !     10.5612+-0.1535        ! definitely 1.0355x slower
   new-array-dead                                 28.4129+-0.1548           28.3287+-0.1193        
   new-array-push                                  6.8692+-0.0468     !      7.9936+-0.1464        ! definitely 1.1637x slower
   number-test                                     4.4082+-0.0956            4.3131+-0.0838          might be 1.0220x faster
   object-closure-call                            11.3768+-2.0853     ?     11.3838+-2.1588        ?
   object-test                                     4.7962+-0.0641     ?      4.7971+-0.0365        ?
   poly-stricteq                                  91.6223+-0.0886     !     92.6186+-0.6153        ! definitely 1.0109x slower
   polymorphic-structure                          20.6851+-0.1413     ?     20.7164+-0.0741        ?
   polyvariant-monomorphic-get-by-id              12.5826+-0.1150     ?     12.6720+-0.1752        ?
   rare-osr-exit-on-local                         20.0561+-0.1177     ?     20.0706+-0.2016        ?
   register-pressure-from-osr                     31.4160+-0.1148           31.2829+-0.0850        
   simple-activation-demo                         34.5253+-0.2809           34.3046+-0.1543        
   slow-array-profile-convergence                  3.8523+-0.0210            3.8139+-0.0477          might be 1.0101x faster
   slow-convergence                                3.3858+-0.0149     ?      3.3870+-0.0112        ?
   sparse-conditional                              1.3127+-0.0214            1.3047+-0.0191        
   splice-to-remove                               49.5206+-0.2651     !     52.3485+-0.8964        ! definitely 1.0571x slower
   string-concat-object                            2.7242+-0.0200     ?      2.7243+-0.0210        ?
   string-concat-pair-object                       2.6875+-0.0401     ?      2.6877+-0.0566        ?
   string-concat-pair-simple                      17.1435+-0.3281     ?     17.1996+-0.2698        ?
   string-concat-simple                           17.0137+-0.3306           16.9058+-0.2521        
   string-cons-repeat                             10.2293+-0.0874           10.1933+-0.0201        
   string-cons-tower                              10.9699+-0.0536           10.9293+-0.0688        
   string-equality                               108.0268+-3.5476          105.1438+-1.2751          might be 1.0274x faster
   string-hash                                     2.5531+-0.0089     ?      2.5600+-0.0092        ?
   string-repeat-arith                            43.4555+-0.4192           43.1203+-0.1121        
   string-sub                                     88.5814+-0.7647     ^     86.3685+-0.7308        ^ definitely 1.0256x faster
   string-test                                     4.2163+-0.0394     ?      4.2236+-0.0297        ?
   structure-hoist-over-transitions                3.2562+-0.0927            3.1668+-0.0231          might be 1.0282x faster
   tear-off-arguments-simple                       1.7424+-0.0197     ?      1.7456+-0.0132        ?
   tear-off-arguments                              3.2147+-0.0438            3.1765+-0.0084          might be 1.0121x faster
   temporal-structure                             21.0518+-0.1216           20.9959+-0.0868        
   to-int32-boolean                               23.1511+-0.0712     ?     23.2103+-0.1238        ?
   undefined-test                                  4.4847+-0.0295     ?      4.5248+-0.0603        ?

   &lt;arithmetic&gt;                                        ERROR                     ERROR             
   &lt;geometric&gt; *                                       ERROR                     ERROR             
   &lt;harmonic&gt;                                          ERROR                     ERROR             

                                                     TipOfTree               Contradiction                                   
All benchmarks:
   &lt;arithmetic&gt;                                        ERROR                     ERROR             
   &lt;geometric&gt;                                         ERROR                     ERROR             
   &lt;harmonic&gt;                                          ERROR                     ERROR             

                                                     TipOfTree               Contradiction                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                     ERROR                     ERROR</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897880</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-06 12:44:57 -0700</bug_when>
    <thetext>Lol.  It&apos;s starting to look that the performance regression was a direct outcome of the same bug as https://bugs.webkit.org/show_bug.cgi?id=117279: anytime we watchpointed the ArrayPrototype, this patch would think that we should force-exit.  The code would do that because it would observe the m_arrayModes going to BOTTOM.

Awesome.

I&apos;m now testing after rebaselining to that patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897981</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-06 17:16:43 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/151303.

It was no longer a regression because of the fix to array mode filtering:

Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r151283)
&quot;Contradiction&quot; at /Volumes/Data/fromMiniMe/fourthTier/tertiary/OpenSource/WebKitBuild/Release/jsc (r151283)

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

                                                     TipOfTree               Contradiction                                   
SunSpider:
   3d-cube                                         6.7439+-0.0845     ?      6.7469+-0.0900        ?
   3d-morph                                        8.5446+-0.1424            8.3622+-0.0982          might be 1.0218x faster
   3d-raytrace                                     8.4732+-0.1492     ?      8.4936+-0.1066        ?
   access-binary-trees                             1.8824+-0.0866            1.8178+-0.0069          might be 1.0355x faster
   access-fannkuch                                 7.7086+-0.0696     ?      7.7295+-0.0840        ?
   access-nbody                                    4.0392+-0.0621            3.9713+-0.0282          might be 1.0171x faster
   access-nsieve                                   4.8007+-0.1030     ?      4.8042+-0.0533        ?
   bitops-3bit-bits-in-byte                        1.7746+-0.0163     ?      1.7783+-0.0223        ?
   bitops-bits-in-byte                             6.6867+-0.0732     ?      6.7443+-0.0721        ?
   bitops-bitwise-and                              2.7754+-0.0470     ?      2.7932+-0.0390        ?
   bitops-nsieve-bits                              4.5253+-0.0254     ?      4.5306+-0.0331        ?
   controlflow-recursive                           2.9993+-0.0308     ?      3.0049+-0.0290        ?
   crypto-aes                                      5.2973+-0.1209            5.2188+-0.0597          might be 1.0150x faster
   crypto-md5                                      3.0494+-0.0274     !      3.1249+-0.0331        ! definitely 1.0248x slower
   crypto-sha1                                     2.8595+-0.0277            2.8562+-0.0215        
   date-format-tofte                              14.9309+-0.2432           14.8696+-0.1967        
   date-format-xparb                               8.4568+-0.1897     ?      8.5309+-0.1872        ?
   math-cordic                                     3.9302+-0.0140     ?      3.9351+-0.0126        ?
   math-partial-sums                              11.8062+-0.0781     ?     11.9156+-0.1170        ?
   math-spectral-norm                              2.7113+-0.0164     ?      2.7188+-0.0150        ?
   regexp-dna                                     12.7505+-0.1725           12.6800+-0.1917        
   string-base64                                   5.0538+-0.0686     ?      5.0899+-0.0581        ?
   string-fasta                                   10.8700+-0.2191           10.7755+-0.1543        
   string-tagcloud                                14.5275+-0.1683           14.4694+-0.2045        
   string-unpack-code                             29.0319+-0.1442           29.0281+-0.1304        
   string-validate-input                           6.4951+-0.1160     ?      6.5691+-0.1130        ? might be 1.0114x slower

   &lt;arithmetic&gt; *                                  7.4125+-0.0549            7.4061+-0.0499          might be 1.0009x faster
   &lt;geometric&gt;                                     5.8437+-0.0360            5.8398+-0.0309          might be 1.0007x faster
   &lt;harmonic&gt;                                      4.7129+-0.0288            4.7064+-0.0175          might be 1.0014x faster

                                                     TipOfTree               Contradiction                                   
V8Spider:
   crypto                                         79.9150+-0.1787     ^     79.5882+-0.1333        ^ definitely 1.0041x faster
   deltablue                                     103.6937+-0.5881     ^    102.1184+-0.2341        ^ definitely 1.0154x faster
   earley-boyer                                   70.4536+-0.2245     ?     70.6261+-0.2324        ?
   raytrace                                       38.0140+-0.2351           37.6969+-0.2100        
   regexp                                        100.2354+-0.1964     !    100.8331+-0.2926        ! definitely 1.0060x slower
   richards                                      112.1393+-1.5756     ?    112.6494+-1.2603        ?
   splay                                          46.9385+-0.3507     ?     47.1421+-0.4130        ?

   &lt;arithmetic&gt;                                   78.7699+-0.2969           78.6649+-0.2259          might be 1.0013x faster
   &lt;geometric&gt; *                                  73.6062+-0.2248           73.4965+-0.2196          might be 1.0015x faster
   &lt;harmonic&gt;                                     68.0515+-0.2086           67.9239+-0.2386          might be 1.0019x faster

                                                     TipOfTree               Contradiction                                   
Octane and V8v7:
   encrypt                                        0.46747+-0.00065    ?     0.46902+-0.00505       ?
   decrypt                                        8.63819+-0.05217          8.60522+-0.01010       
   deltablue                             x2       0.57594+-0.00334          0.57307+-0.00420       
   earley                                         0.87832+-0.00701    !     0.89916+-0.00289       ! definitely 1.0237x slower
   boyer                                         13.12776+-0.17097         13.00711+-0.08348       
   raytrace                              x2       4.50568+-0.03941          4.50558+-0.06929       
   regexp                                x2      32.38359+-0.33513    ?    32.63562+-0.38478       ?
   richards                              x2       0.30839+-0.00109    ?     0.31108+-0.00324       ?
   splay                                 x2       0.64421+-0.01645          0.63132+-0.00956         might be 1.0204x faster
   navier-stokes                         x2      10.83006+-0.02664         10.81908+-0.00918       
   closure                                        0.32072+-0.03548    ?     0.32499+-0.03585       ? might be 1.0133x slower
   jquery                                         4.58813+-0.55443          4.56708+-0.55385       
   gbemu                                 x2     141.26124+-1.88930    ?   142.34676+-2.30909       ?
   box2d                                 x2      32.94576+-0.09921         32.89076+-0.14888       

V8v7:
   &lt;arithmetic&gt;                                   7.60047+-0.04404    ?     7.62075+-0.05040       ? might be 1.0027x slower
   &lt;geometric&gt; *                                  2.43418+-0.01190          2.43332+-0.00934         might be 1.0004x faster
   &lt;harmonic&gt;                                     0.92879+-0.00474    ?     0.92925+-0.00388       ? might be 1.0005x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  21.58774+-0.19318    ?    21.69541+-0.23157       ? might be 1.0050x slower
   &lt;geometric&gt; *                                  4.18320+-0.04437    ?     4.18610+-0.04786       ? might be 1.0007x slower
   &lt;harmonic&gt;                                     1.06211+-0.01711    ?     1.06474+-0.01796       ? might be 1.0025x slower

                                                     TipOfTree               Contradiction                                   
Kraken:
   ai-astar                                       495.391+-3.625            492.529+-0.441         
   audio-beat-detection                           242.645+-1.712      ?     242.788+-1.125         ?
   audio-dft                                      309.118+-0.929            307.690+-0.668         
   audio-fft                                      143.424+-0.168            143.291+-0.433         
   audio-oscillator                               246.658+-5.896            246.646+-5.829         
   imaging-darkroom                               286.055+-0.954            285.988+-0.794         
   imaging-desaturate                             159.915+-0.131      ^     157.728+-0.133         ^ definitely 1.0139x faster
   imaging-gaussian-blur                          401.955+-0.609      ^     399.957+-0.599         ^ definitely 1.0050x faster
   json-parse-financial                            80.617+-0.267             80.538+-0.308         
   json-stringify-tinderbox                        98.695+-0.244      !      99.172+-0.222         ! definitely 1.0048x slower
   stanford-crypto-aes                             94.071+-0.881      ^      92.821+-0.365         ^ definitely 1.0135x faster
   stanford-crypto-ccm                             97.278+-1.621             94.653+-4.653           might be 1.0277x faster
   stanford-crypto-pbkdf2                         267.936+-0.471      ^     265.244+-0.871         ^ definitely 1.0101x faster
   stanford-crypto-sha256-iterative               116.746+-0.540      ^     115.606+-0.303         ^ definitely 1.0099x faster

   &lt;arithmetic&gt; *                                 217.179+-0.411      ^     216.047+-0.423         ^ definitely 1.0052x faster
   &lt;geometric&gt;                                    184.994+-0.287      ^     183.825+-0.689         ^ definitely 1.0064x faster
   &lt;harmonic&gt;                                     158.375+-0.349            157.147+-0.995           might be 1.0078x faster

                                                     TipOfTree               Contradiction                                   
JSRegress:
   adapt-to-double-divide                         22.5415+-0.0932           22.5261+-0.0910        
   aliased-arguments-getbyval                      0.8373+-0.0088     ?      0.8400+-0.0057        ?
   allocate-big-object                             2.4917+-0.0265            2.4871+-0.0263        
   arity-mismatch-inlining                         0.7852+-0.0221     ?      0.7882+-0.0211        ?
   array-access-polymorphic-structure              6.7777+-0.1221     ?      6.8224+-0.0905        ?
   array-nonarray-polymorhpic-access             196.1500+-2.4649          194.8028+-3.3513        
   array-with-double-add                           5.8491+-0.0734     ?      5.9408+-0.0942        ? might be 1.0157x slower
   array-with-double-increment                     4.2003+-0.0751            4.1754+-0.0601        
   array-with-double-mul-add                       6.6502+-0.0659     ?      6.6740+-0.0727        ?
   array-with-double-sum                           7.8929+-0.1029     ?      7.9423+-0.0960        ?
   array-with-int32-add-sub                       10.5938+-0.1123           10.5666+-0.0971        
   array-with-int32-or-double-sum                  7.9892+-0.1018            7.9435+-0.0904        
   big-int-mul                                     4.8157+-0.0563            4.7972+-0.0761        
   boolean-test                                    4.4010+-0.0670     ?      4.4611+-0.0847        ? might be 1.0137x slower
   branch-fold                                    16.1243+-0.0820     !     16.8069+-0.1033        ! definitely 1.0423x slower
   cast-int-to-double                             13.7496+-0.1351     ?     14.0217+-0.1374        ? might be 1.0198x slower
   cell-argument                                  15.0269+-0.2407           14.8682+-0.3627          might be 1.0107x faster
   cfg-simplify                                    3.9815+-0.0604     ?      3.9942+-0.0459        ?
   cmpeq-obj-to-obj-other                         11.0407+-0.2178           10.9462+-0.2614        
   constant-test                                   8.5717+-0.1446     ?      8.5932+-0.1051        ?
   direct-arguments-getbyval                       0.7366+-0.0095            0.7362+-0.0082        
   double-pollution-getbyval                      10.8286+-0.0819           10.7523+-0.0676        
   double-pollution-putbyoffset                    5.4545+-0.0732            5.3304+-0.0732          might be 1.0233x faster
   empty-string-plus-int                          10.8436+-0.1688     ?     10.9394+-0.2026        ?
   external-arguments-getbyval                     1.9179+-0.0098            1.9094+-0.0102        
   external-arguments-putbyval                     3.1204+-0.0229     ?      3.1398+-0.0170        ?
   Float32Array-matrix-mult                       13.7677+-0.1294           13.7527+-0.1955        
   fold-double-to-int                             22.0692+-0.2302           22.0465+-0.2163        
   function-dot-apply                              3.1082+-0.0180     !      3.1837+-0.0123        ! definitely 1.0243x slower
   function-test                                   4.9671+-0.0894            4.8954+-0.0953          might be 1.0147x faster
   get-by-id-chain-from-try-block                  6.8419+-0.1761            6.8050+-0.1478        
   HashMap-put-get-iterate-keys                   85.2540+-0.7066     ?     85.3857+-0.6933        ?
   HashMap-put-get-iterate                        91.5647+-0.9500     ^     89.5862+-0.3902        ^ definitely 1.0221x faster
   HashMap-string-put-get-iterate                 72.0914+-0.4345     ?     72.4170+-0.3853        ?
   imul-double-only                                    ERROR                     ERROR             
   imul-int-only                                       ERROR                     ERROR             
   imul-mixed                                          ERROR                     ERROR             
   indexed-properties-in-objects                   4.4343+-0.0206            4.4291+-0.0129        
   inline-arguments-access                         1.2696+-0.0251            1.2629+-0.0172        
   inline-arguments-local-escape                  23.0177+-0.2022     ?     23.4243+-0.2588        ? might be 1.0177x slower
   inline-get-scoped-var                           6.6154+-0.0906            6.5345+-0.1045          might be 1.0124x faster
   inlined-put-by-id-transition                   16.0892+-0.3542     ?     16.5522+-0.1941        ? might be 1.0288x slower
   int-or-other-abs-then-get-by-val                8.9536+-0.1016     ?      8.9724+-0.1261        ?
   int-or-other-abs-zero-then-get-by-val          40.7369+-0.2497           40.3718+-0.1313        
   int-or-other-add-then-get-by-val               10.2111+-0.0837           10.1787+-0.0750        
   int-or-other-add                               10.5219+-0.1115           10.4488+-0.0910        
   int-or-other-div-then-get-by-val                6.4897+-0.0878            6.4044+-0.0880          might be 1.0133x faster
   int-or-other-max-then-get-by-val                7.2986+-0.0997            7.2736+-0.0807        
   int-or-other-min-then-get-by-val                7.3794+-0.0874            7.3512+-0.0828        
   int-or-other-mod-then-get-by-val                6.2213+-0.0597     ?      6.2661+-0.0863        ?
   int-or-other-mul-then-get-by-val                6.5277+-0.0820     ?      6.5696+-0.0936        ?
   int-or-other-neg-then-get-by-val                8.0659+-0.0965     ?      8.1182+-0.1385        ?
   int-or-other-neg-zero-then-get-by-val          40.3857+-0.2214           40.3225+-0.1354        
   int-or-other-sub-then-get-by-val               10.2645+-0.0929           10.1624+-0.0696          might be 1.0100x faster
   int-or-other-sub                                8.1489+-0.0838     ?      8.2344+-0.1061        ? might be 1.0105x slower
   int-overflow-local                             11.8365+-0.1941           11.7121+-0.0910          might be 1.0106x faster
   Int16Array-bubble-sort                         49.2049+-0.0594     !     49.6925+-0.0914        ! definitely 1.0099x slower
   Int16Array-load-int-mul                         1.9216+-0.0105     ?      1.9319+-0.0200        ?
   Int8Array-load                                  4.8217+-0.0514     ?      4.8218+-0.0374        ?
   integer-divide                                 15.2273+-0.0814     ?     15.2938+-0.1224        ?
   integer-modulo                                  1.9910+-0.0210            1.9898+-0.0158        
   make-indexed-storage                            3.7182+-0.0454     ?      3.7272+-0.0499        ?
   method-on-number                               25.0840+-0.2854     !     26.3358+-0.4089        ! definitely 1.0499x slower
   negative-zero-divide                            0.3307+-0.0153            0.3289+-0.0129        
   negative-zero-modulo                            0.3241+-0.0198     ?      0.3265+-0.0181        ?
   negative-zero-negate                            0.3106+-0.0208            0.3076+-0.0186        
   nested-function-parsing-random                383.3783+-12.3366    ?    383.9648+-13.8544       ?
   nested-function-parsing                        47.9470+-1.0493     ?     48.1746+-1.0443        ?
   new-array-buffer-dead                           3.6712+-0.0183     ?      3.6852+-0.0413        ?
   new-array-buffer-push                          10.3081+-0.1449           10.1844+-0.2018          might be 1.0121x faster
   new-array-dead                                 28.7331+-0.4932           28.5266+-0.2516        
   new-array-push                                  6.8203+-0.0990     ?      6.8390+-0.0460        ?
   number-test                                     4.3645+-0.0623            4.3246+-0.0563        
   object-closure-call                            11.2536+-2.0740           10.1659+-1.9106          might be 1.1070x faster
   object-test                                     4.8110+-0.0592            4.7831+-0.0616        
   poly-stricteq                                  92.2711+-0.9136     ?     92.5784+-0.9485        ?
   polymorphic-structure                          20.7365+-0.0683     ?     20.7606+-0.0799        ?
   polyvariant-monomorphic-get-by-id              12.5152+-0.0945     ?     12.5676+-0.1153        ?
   rare-osr-exit-on-local                         20.1113+-0.1281     ?     20.2976+-0.3495        ?
   register-pressure-from-osr                     31.3390+-0.1381     ?     31.3530+-0.1219        ?
   simple-activation-demo                         34.2942+-0.1194     ?     34.3198+-0.1148        ?
   slow-array-profile-convergence                  3.8538+-0.0277            3.8507+-0.0250        
   slow-convergence                                3.3973+-0.0209     ?      3.4003+-0.0180        ?
   sparse-conditional                              1.3127+-0.0252            1.3068+-0.0196        
   splice-to-remove                               49.6141+-0.1744     !     50.0255+-0.2203        ! definitely 1.0083x slower
   string-concat-object                            2.7395+-0.0541            2.6997+-0.0366          might be 1.0147x faster
   string-concat-pair-object                       2.6336+-0.0271     ?      2.6718+-0.0336        ? might be 1.0145x slower
   string-concat-pair-simple                      16.9388+-0.3235           16.8107+-0.2433        
   string-concat-simple                           17.2701+-0.2618     ?     17.4277+-0.3120        ?
   string-cons-repeat                             10.1685+-0.0338     ?     10.1758+-0.0283        ?
   string-cons-tower                              11.0088+-0.1423           10.8924+-0.0375          might be 1.0107x faster
   string-equality                               104.5272+-0.1960     ?    105.7507+-1.0439        ? might be 1.0117x slower
   string-hash                                     2.5556+-0.0097            2.5554+-0.0098        
   string-repeat-arith                            43.5841+-0.2645           43.4800+-0.2983        
   string-sub                                     87.9012+-1.3839           87.3511+-0.7470        
   string-test                                     4.2173+-0.0187     ?      4.2376+-0.0452        ?
   structure-hoist-over-transitions                3.1807+-0.0267            3.1719+-0.0255        
   tear-off-arguments-simple                       1.7324+-0.0129     ?      1.7438+-0.0159        ?
   tear-off-arguments                              3.1782+-0.0089     ?      3.1786+-0.0073        ?
   temporal-structure                             21.2422+-0.3230           20.9615+-0.0791          might be 1.0134x faster
   to-int32-boolean                               23.1393+-0.0796     ?     23.2634+-0.1537        ?
   undefined-test                                  4.4957+-0.0406     ?      4.5139+-0.0465        ?

   &lt;arithmetic&gt;                                        ERROR                     ERROR             
   &lt;geometric&gt; *                                       ERROR                     ERROR             
   &lt;harmonic&gt;                                          ERROR                     ERROR             

                                                     TipOfTree               Contradiction                                   
All benchmarks:
   &lt;arithmetic&gt;                                        ERROR                     ERROR             
   &lt;geometric&gt;                                         ERROR                     ERROR             
   &lt;harmonic&gt;                                          ERROR                     ERROR             

                                                     TipOfTree               Contradiction                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                     ERROR                     ERROR</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898010</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-06 21:24:52 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/151303</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203875</attachid>
            <date>2013-06-05 13:07:53 -0700</date>
            <delta_ts>2013-06-05 15:22:03 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50326</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTEyMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBACiAJCTBGMjM1QkVEMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRTkxNzE3OEU3MzAwNjkwQzdGIC8q
IERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgKi87IH07CiAJCTBGMjM1QkVFMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0UHJlcGFyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjIzQkE5NTE3NTQxREJDMDBDNDhDRkUgLyogSlNGdW5jdGlvbklubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjNCQTk0
MTc1NDFEQkMwMEM0OENGRSAvKiBKU0Z1bmN0aW9uSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjNCQTk3MTc1RkI3MDYwMEM0OENG
RSAvKiBERkdGaWx0cmF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjIzQkE5NjE3NUZCNzA1MDBDNDhDRkUgLyogREZHRmlsdHJhdGlv
blJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEz
RjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdG
Mjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAw
N0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFD
NUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0Zp
eHVwUGhhc2UuY3BwICovOyB9OwpAQCAtOTU2LDE0ICs5NTcsMTQgQEAKIAkJRkU5NDAzMjIxNzQ0
NDI1OTAwNDdDRjZFIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk0MDMyMTE3NDQ0MjU5MDA0N0NGNkUgLyogSklU
U3R1YnNYODZDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGRUNFNzQ1NzE3NDU0NTY1MDBGRjkzMDAgLyogTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkVDRTc0NTYxNzQ1NDU2NTAwRkY5MzAwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAq
LzsgfTsKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQyODdCMTE1RUM5QTU3
MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRG
MkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsgfTsKKwkJRkVEOTRGMkYxNzFF
M0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRUQ5NEYz
MDE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkQxNzFFM0UyMzAwQkU3N0E0IC8qIFdh
dGNoZG9nTWFjLmNwcCAqLzsgfTsKIAkJRkVFMzE0N0QxNzRBQUNBRjAwMTNCQ0FDIC8qIE1hY3Jv
QXNzZW1ibGVyQVJNdjcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVFMzE0N0MxNzRBQUNBRjAwMTNCQ0FDIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcu
Y3BwICovOyB9OwogCQlGRUY2ODM1RTE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjY4MzVBMTc0
MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjY4MzVGMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRT
dHVic0FSTXY3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRUY2ODM1QjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjY4MzYwMTc0MzQzQ0Mw
MEEzMkUyNSAvKiBKSVRTdHVic1g4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkVGNjgzNUMxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2
XzY0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkVGNjgzNjExNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUY2ODM1RDE3NDM0M0NDMDBBMzJFMjUg
LyogSklUU3R1YnNYODYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkIxNzFFM0Uy
MzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsgfTsKLQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3
N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9O307Ci0JCUZFRDk0RjMwMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyRDE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMu
Y3BwICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC0xMTE4LDYgKzExMTksNyBAQAogCQkw
RjIzNUJFOTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRQcmVwYXJhdGlvbi5j
cHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVw
YXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0UHJl
cGFyYXRpb24uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyM0JBOTQxNzU0MURCQzAwQzQ4Q0ZFIC8qIEpTRnVuY3Rp
b25JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRnVuY3Rpb25J
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjNCQTk2MTc1RkI3MDUw
MEM0OENGRSAvKiBERkdGaWx0cmF0aW9uUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZpbHRy
YXRpb25SZXN1bHQuaDsgcGF0aCA9IGRmZy9ERkdGaWx0cmF0aW9uUmVzdWx0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZD
MzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9y
U2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRD
MTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRml4
dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTkxLDE0ICsxOTkz
LDE0IEBACiAJCUZFOTQwMzIxMTc0NDQyNTkwMDQ3Q0Y2RSAvKiBKSVRTdHVic1g4NkNvbW1vbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHVic1g4NkNvbW1vbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUNFNzQ1NjE3NDU0NTY1MDBGRjkzMDAgLyog
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRPcGNvZGUuaDsgcGF0aCA9IGxsaW50
L0xMSW50T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFRDk0RjJCMTcx
RTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXYXRjaGRvZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZF
RDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXRjaGRvZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RUQ5NEYyRDE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2F0Y2hkb2dNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUUzMTQ3QzE3NEFBQ0FGMDAxM0JDQUMgLyogTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2Vt
YmxlckFSTXY3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGNjgzNUExNzQz
NDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpJVFN0dWJzQVJNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjY4
MzVCMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJzQVJNdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkVGNjgzNUMxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJzWDg2XzY0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFRjY4MzVEMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic1g4
Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHVic1g4Ni5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0
Y2hkb2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2F0Y2hkb2cu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3
QTQgLyogV2F0Y2hkb2cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2F0Y2hk
b2cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkVEOTRGMkQxNzFFM0UyMzAwQkU3
N0E0IC8qIFdhdGNoZG9nTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhdGNoZG9nTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwpAQCAtMjk1OCw2ICsyOTYwLDcgQEAKIAkJCQkwRjY2RTE2OTE0REYz
RjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovLAogCQkJCTBGREIyQ0QxMTc0MkQ4MDQwMDdCM0Mx
QiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovLAogCQkJCTBGREIyQ0QyMTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAqLywKKwkJCQkwRjIzQkE5NjE3NUZCNzA1MDBD
NDhDRkUgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oICovLAogCQkJCTBGREIyQ0QzMTc0MkQ4MDQw
MDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuY3BwICovLAogCQkJCTBGREIyQ0Q0MTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5jcHAgKi8sCkBAIC0zNDU5LDYgKzM0NjIsNyBAQAogCQkJCTBGMjFD
MjY4MTRCRTVGNjgwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDY4MDgyMTRCQTU3MkQwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyM0JBOTcxNzVGQjcwNjAwQzQ4Q0ZFIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk2MDYyNjk2MEZCOEVDMDIwMDk3OThBQiAvKiBKSVRTdHVi
Q2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQyQzE1QThDQzNBMDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTUxMjMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MTgsMTAgKzYxOCwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBhZGRGcmVxdWVudEV4aXRT
aXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICAgICAgcmV0dXJu
IG1fZXhpdFByb2ZpbGUuYWRkKHNpdGUpOworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gbV9leGl0UHJvZmlsZS5hZGQobG9ja2VyLCBz
aXRlKTsKICAgICB9CiAgICAgICAgIAotICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgREZHOjpG
cmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdCB7IHJldHVybiBtX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKHNpdGUpOyB9CisgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1ZW50
RXhpdFNpdGUmIHNpdGUpIGNvbnN0CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gbV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShsb2NrZXIsIHNpdGUpOworICAgIH0KIAogICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9m
aWxlKCkgeyByZXR1cm4gbV9leGl0UHJvZmlsZTsgfQogICAgICAgICAKQEAgLTkwMyw3ICs5MDgs
NyBAQCBwdWJsaWM6CiAgICAgLy8gQW5vdGhlciBleGNlcHRpb24gdG8gdGhlIHJ1bGVzIGlzIHRo
YXQgdGhlIEdDIGNhbiBkbyB3aGF0ZXZlciBpdCB3YW50cwogICAgIC8vIHdpdGhvdXQgaG9sZGlu
ZyBhbnkgbG9ja3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2FpdCB1bnRpbCBh
bnkKICAgICAvLyBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZHMgZmluaXNoIHdoYXQgdGhl
eSdyZSBkb2luZy4KLSAgICBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CisgICAgbXV0YWJsZSBD
b25jdXJyZW50SklUTG9jayBtX2xvY2s7CiAgICAgCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZDsKICAgICBib29sIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZDsgLy8gSW5p
dGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAkocmV2aXNpb24gMTUxMjMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgREZHRXhpdFByb2ZpbGVf
aAogI2RlZmluZSBERkdFeGl0UHJvZmlsZV9oCiAKKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9j
ay5oIgogI2luY2x1ZGUgIkV4aXRLaW5kLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC01MSw2ICs1MiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKICAgICAgICAgLCBtX2tpbmQoa2lu
ZCkKICAgICB7CisgICAgICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgeworICAg
ICAgICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVyIHdo
ZXJlIGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKKyAgICAgICAgICAg
IC8vIHRoZSBmYWN0IHRoYXQgdGhleSBkaWQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgcGFy
dGljdWxhciBpbnN0cnVjdGlvbi4KKyAgICAgICAgICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSAwOwor
ICAgICAgICB9CiAgICAgICAgIEFTU0VSVChleGl0S2luZElzQ291bnRhYmxlKGtpbmQpKTsKICAg
ICB9CiAgICAgCkBAIC0xMjcsNyArMTMzLDcgQEAgcHVibGljOgogICAgIC8vIGJlIGNhbGxlZCBh
IGZpeGVkIG51bWJlciBvZiB0aW1lcyBwZXIgcmVjb21waWxhdGlvbi4gUmVjb21waWxhdGlvbiBp
cwogICAgIC8vIHJhcmUgdG8gYmVnaW4gd2l0aCwgYW5kIGltcGxpZXMgZG9pbmcgTyhuKSBvcGVy
YXRpb25zIG9uIHRoZSBDb2RlQmxvY2sKICAgICAvLyBhbnl3YXkuCi0gICAgYm9vbCBhZGQoY29u
c3QgRnJlcXVlbnRFeGl0U2l0ZSYpOworICAgIGJvb2wgYWRkKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImLCBjb25zdCBGcmVxdWVudEV4aXRTaXRlJik7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBm
cmVxdWVudCBleGl0IHNpdGVzIGZvciBhIGJ5dGVjb2RlIGluZGV4LiBUaGlzIGlzIE8obiksIGFu
ZCBpcwogICAgIC8vIG1lYW50IHRvIG9ubHkgYmUgdXNlZCBmcm9tIGRlYnVnZ2luZy9wcm9maWxp
bmcgY29kZS4KQEAgLTEzNywxNCArMTQzLDE0IEBAIHB1YmxpYzoKICAgICAvLyBpbiB0aGUgY29t
cGlsZXIuIEl0IHNob3VsZCBiZSBzdHJpY3RseSBjaGVhcGVyIHRoYW4gYnVpbGRpbmcgYQogICAg
IC8vIFF1ZXJ5YWJsZUV4aXRQcm9maWxlLCBpZiB5b3UgcmVhbGx5IGV4cGVjdCB0aGlzIHRvIGJl
IGNhbGxlZCBpbmZyZXF1ZW50bHkKICAgICAvLyBhbmQgeW91IGJlbGlldmUgdGhhdCB0aGVyZSBh
cmUgZmV3IGV4aXQgc2l0ZXMuCi0gICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBGcmVxdWVudEV4
aXRTaXRlJikgY29uc3Q7Ci0gICAgYm9vbCBoYXNFeGl0U2l0ZShFeGl0S2luZCBraW5kKSBjb25z
dAorICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIGNvbnN0
IEZyZXF1ZW50RXhpdFNpdGUmKSBjb25zdDsKKyAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgRXhpdEtpbmQga2luZCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShGcmVxdWVudEV4aXRTaXRlKGtpbmQpKTsKKyAgICAg
ICAgcmV0dXJuIGhhc0V4aXRTaXRlKGxvY2tlciwgRnJlcXVlbnRFeGl0U2l0ZShraW5kKSk7CiAg
ICAgfQotICAgIGJvb2wgaGFzRXhpdFNpdGUodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgRXhpdEtp
bmQga2luZCkgY29uc3QKKyAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImIGxvY2tlciwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgRXhpdEtpbmQga2luZCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShGcmVxdWVudEV4aXRTaXRlKGJ5
dGVjb2RlSW5kZXgsIGtpbmQpKTsKKyAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKGxvY2tlciwg
RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBraW5kKSk7CiAgICAgfQogICAgIAogcHJp
dmF0ZToKQEAgLTE1NSw5ICsxNjEsMTEgQEAgcHJpdmF0ZToKIAogY2xhc3MgUXVlcnlhYmxlRXhp
dFByb2ZpbGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IFF1ZXJ5YWJsZUV4aXRQcm9maWxlKGNv
bnN0IEV4aXRQcm9maWxlJik7CisgICAgUXVlcnlhYmxlRXhpdFByb2ZpbGUoKTsKICAgICB+UXVl
cnlhYmxlRXhpdFByb2ZpbGUoKTsKICAgICAKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIGNvbnN0IEV4aXRQcm9maWxlJik7CisKICAgICBib29sIGhhc0V4
aXRTaXRlKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9mcmVxdWVudEV4aXRTaXRlcy5maW5kKHNpdGUpICE9IG1fZnJlcXVlbnRFeGl0
U2l0ZXMuZW5kKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1MTIzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDgg
QEAgQWJzdHJhY3RTdGF0ZTo6QWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3JhcAogICAgICwgbV9ncmFw
aChncmFwaCkKICAgICAsIG1fdmFyaWFibGVzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IGdyYXBoLm1fbG9jYWxWYXJzKQogICAgICwgbV9ibG9jaygwKQorICAgICwgbV9jdXJyZW50Tm9k
ZSgwKQorICAgICwgbV9leGVjdXRpb25Nb2RlKENsZWFuRmlsdHJhdGlvbikKIHsKIH0KIApAQCAt
NzksNiArODEsNyBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpCiAg
ICAgbV9pc1ZhbGlkID0gdHJ1ZTsKICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAg
bV9icmFuY2hEaXJlY3Rpb24gPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uOworICAgIG1fY3VycmVu
dE5vZGUgPSAwOwogfQogCiB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdy
YXBoKQpAQCAtMjA2LDYgKzIwOSw3IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQogICAg
IG1fYmxvY2sgPSAwOwogICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgIG1fYnJhbmNoRGlyZWN0
aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKKyAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0K
IAogQWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVz
dWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQpAQCAtMjI5LDcgKzIzMyw3IEBA
IEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQgQWJzdHJhY3RTdGEKICAgICByZXR1cm4gVW5r
bm93bkJvb2xlYW5SZXN1bHQ7CiB9CiAKLWJvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRp
bmcoTm9kZSogbm9kZSkKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSog
bm9kZSwgRXhlY3V0aW9uTW9kZSBleGVjdXRpb25Nb2RlKQogewogICAgIEFTU0VSVChtX2Jsb2Nr
KTsKICAgICBBU1NFUlQobV9pc1ZhbGlkKTsKQEAgLTIzOCwxNSArMjQyLDIwIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSoKICAgICAKICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAKLSAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIG1fY3VycmVudE5vZGUgPSAw
OworICAgICAgICBtX2V4ZWN1dGlvbk1vZGUgPSBDbGVhbkZpbHRyYXRpb247CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAgICAgCisgICAgbV9jdXJyZW50Tm9kZSA9IG5vZGU7CisgICAg
bV9leGVjdXRpb25Nb2RlID0gZXhlY3V0aW9uTW9kZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBBYnN0cmFjdFN0YXRlOjpzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBpbmRleEluQmxvY2sp
Citib29sIEFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgRXhlY3V0aW9uTW9kZSBleGVjdXRpb25Nb2RlKQogewotICAgIHJldHVybiBzdGFydEV4ZWN1
dGluZyhtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsKKyAgICByZXR1cm4gc3RhcnRFeGVjdXRp
bmcobV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKSwgZXhlY3V0aW9uTW9kZSk7CiB9CiAKIHZvaWQg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2VzKE5vZGUqIG5vZGUpCkBAIC03MzUsMzEgKzc0NCwz
MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxk
Lm1fdHlwZSkpIHsKICAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB2bS0+c21h
bGxTdHJpbmdzLm51bWJlclN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBmaWx0ZXIo
bm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUp
KSB7CiAgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5n
cy5zdHJpbmdTdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNo
aWxkMSgpLCBTcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIGlmIChpc0ZpbmFsT2JqZWN0U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8
IGlzQXJyYXlTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcmd1bWVudHNT
cGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKICAgICAgICAgICAgIGlmICh0cnlT
ZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpKSkgewotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRmluYWxPYmpl
Y3QgfCBTcGVjQXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICBmaWx0ZXIo
bm9kZS0+Y2hpbGQxKCksIFNwZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNBcmd1bWVu
dHMpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rp
b25TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKICAgICAgICAgICAgIGlmICh0
cnlTZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkpKSB7
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGdW5j
dGlvbik7CisgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjRnVuY3Rp
b24pOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVh
blNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewogICAgICAgICAgICAgaWYgKHRy
eVNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewot
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVh
bik7CisgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbik7
CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMDcyLDYgKzEwODEsOCBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAgICB0eXBlIHw9IFNwZWNT
dHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGluYXRpb24uc2V0VHlwZSh0eXBlKTsKKyAg
ICAgICAgaWYgKGRlc3RpbmF0aW9uLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgIG1faXNWYWxpZCA9
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTA4MCw4ICsxMDkx
LDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICBj
YXNlIFN0cmluZ09iamVjdFVzZToKICAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBmaWx0ZXJzIHRo
YXQgdGhlIFN0cmluZ09iamVjdCBoYXMgdGhlIHByaW1vcmRpYWwgU3RyaW5nT2JqZWN0CiAgICAg
ICAgICAgICAvLyBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXIoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgIGZpbHRlcigKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSwKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3RyaW5nT2Jq
ZWN0U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8g
V2UgY291bGQgYmUgbW9yZSBwcmVjaXNlIGJ1dCBpdCdzIGxpa2VseSBub3Qgd29ydGggaXQuCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToK
QEAgLTEyODgsNyArMTMwMCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWcKICAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgs
IHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKG1fZ3JhcGgsIHN0YXR1cy5z
dHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEo
KSwgc3RhdHVzLnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTEzMjcsNyArMTMzOSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAg
ICAgICBpZiAoIXZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkK
ICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIHZhbHVlLmZpbHRl
cihtX2dyYXBoLCBzZXQpOworICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMzQ2LDcg
KzEzNTgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAg
ICAgICAgICB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0
dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkKICAgICAgICAgICAgIHx8IG1fZ3JhcGgud2F0Y2hw
b2ludHMoKS5zaG91bGRBc3N1bWVNaXhlZFN0YXRlKG5vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldCgpKSk7CiAgICAgICAgIAotICAgICAgICB2YWx1ZS5maWx0ZXIobV9n
cmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICBmaWx0ZXIodmFsdWUsIG5vZGUtPnN0
cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM3NCw3ICsxMzg2LDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBvcGVy
YXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBubyBw
b2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAg
ICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkRvdWJsZToKQEAgLTEzODMsMzQgKzEzOTUsMzQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlRWZmZWN0cyh1bnNpZwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdl
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsK
KyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0FyZ3VtZW50cyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOworICAgICAg
ICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50OEFycmF5KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKKyAgICAgICAgICAg
IGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0ludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOworICAgICAgICAgICAgZmls
dGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CisgICAgICAgICAgICBmaWx0ZXIo
bm9kZS0+Y2hpbGQxKCksIFNwZWNVaW50OEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAg
ICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDhDbGFtcGVkQXJyYXkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CisgICAg
ICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQzMkFycmF5KTsKKyAgICAg
ICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1VpbnQzMkFycmF5KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CisgICAg
ICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKKyAg
ICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0Zsb2F0NjRBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDI5LDcgKzE0NDEsNyBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAgICB8fCBub2RlLT5hcnJheU1vZGUo
KS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252ZXJ0KTsKICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5h
cnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CisgICAgICAgIGZpbHRl
ckFycmF5TW9kZXMobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNU
aGF0UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0NDEsNyArMTQ1Myw3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICB2YWx1ZS5maWx0ZXIobV9ncmFwaCwg
c2V0KTsKKyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQ2Nyw3ICsxNDc5LDcgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBjYW4gZG8g
YmV0dGVyLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXJCeVZhbHVlKG5v
ZGUtPmZ1bmN0aW9uKCkpOworICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCBu
b2RlLT5mdW5jdGlvbigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTE0
ODIsNyArMTQ5NCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51
bWJlcigpXSwKICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewotICAgICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKICAgICAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTE1NDMsNiArMTU1NSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZvcmNl
T1NSRXhpdDoKKyAgICBjYXNlIEZvcndhcmRGb3JjZU9TUkV4aXQ6CiAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICBicmVh
azsKQEAgLTE4MDcsNiArMTgyMCw2MSBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91CiAgICAgfQogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0U3RhdGU6OmZp
bHRlcigKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQs
IEV4aXRLaW5kIGV4aXRLaW5kKQoreworICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0
KSA9PSBGaWx0cmF0aW9uT0spCisgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgYmFp
bChleGl0S2luZCk7CisgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247Cit9CisgICAgCitGaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0U3RhdGU6OmZpbHRlckFycmF5TW9kZXMoCisgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUsIEFycmF5TW9kZXMgYXJyYXlNb2RlcywgRXhpdEtpbmQgZXhpdEtpbmQpCit7
CisgICAgaWYgKHZhbHVlLmZpbHRlckFycmF5TW9kZXMoYXJyYXlNb2RlcykgPT0gRmlsdHJhdGlv
bk9LKQorICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOworICAgIGJhaWwoZXhpdEtpbmQpOwor
ICAgIHJldHVybiBDb250cmFkaWN0aW9uOworfQorICAgIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0
cmFjdFN0YXRlOjpmaWx0ZXIoCisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUsIEV4aXRLaW5kIGV4aXRLaW5kKQoreworICAgIGlmICh2YWx1ZS5maWx0ZXIodHlw
ZSkgPT0gRmlsdHJhdGlvbk9LKQorICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOworICAgIGJh
aWwoZXhpdEtpbmQpOworICAgIHJldHVybiBDb250cmFkaWN0aW9uOworfQorICAgIAorRmlsdHJh
dGlvblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpmaWx0ZXJCeVZhbHVlKAorICAgIEFic3RyYWN0VmFs
dWUmIGFic3RyYWN0VmFsdWUsIEpTVmFsdWUgY29uY3JldGVWYWx1ZSwgRXhpdEtpbmQgZXhpdEtp
bmQpCit7CisgICAgaWYgKGFic3RyYWN0VmFsdWUuZmlsdGVyQnlWYWx1ZShjb25jcmV0ZVZhbHVl
KSA9PSBGaWx0cmF0aW9uT0spCisgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgYmFp
bChleGl0S2luZCk7CisgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247Cit9CisKK3ZvaWQgQWJzdHJh
Y3RWYWx1ZTo6YmFpbChFeGl0S2luZCBleGl0S2luZCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50
Tm9kZSk7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgc3dpdGNoIChtX2V4ZWN1dGlvbk1v
ZGUpIHsKKyAgICBjYXNlIFN0aWxsQ29udmVyZ2luZzoKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWZ0ZXJDb252ZXJnZW5jZTogeworICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5hZGRGcmVxdWVudEV4aXRTaXRlKAorICAg
ICAgICAgICAgRnJlcXVlbnRFeGl0U2l0ZShtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgsIGV4aXRLaW5kKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBD
bGVhbkZpbHRyYXRpb246CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKyAgICAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmgJKHJldmlzaW9uIDE1MTIzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywyMSBAQCBwdWJsaWM6
CiAgICAgICAgIE1lcmdlVG9TdWNjZXNzb3JzCiAgICAgfTsKICAgICAKKyAgICBlbnVtIEV4ZWN1
dGlvbk1vZGUgeworICAgICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSBjb250cmFkaWN0aW9uLCBh
c3N1bWUgdGhhdCB0aGlzIG1pZ2h0IGp1c3QKKyAgICAgICAgLy8gYmUgYmVjYXVzZSB3ZSBoYXZl
bid0IGNvbnZlcmdlZCB5ZXQuCisgICAgICAgIFN0aWxsQ29udmVyZ2luZywKKyAgICAgICAgCisg
ICAgICAgIC8vIElmIHdlIGVuY291bnRlciBhIGNvbnRyYWRpdGlvbiwgYXNzdW1lIHRoYXQgdGhp
cyBjb250cmFkaWN0aW9uCisgICAgICAgIC8vIGlzIHJlYWwgYW5kIHJlcG9ydCBpdCB0byB0aGUg
cHJvZmlsaW5nIGluZnJhc3RydWN0dXJlIGFzIGlmIGl0CisgICAgICAgIC8vIGhhcHBlbmVkIGF0
IHJ1biB0aW1lLgorICAgICAgICBBZnRlckNvbnZlcmdlbmNlLAorICAgICAgICAKKyAgICAgICAg
Ly8gQXNzdW1lIHRoYXQgdGhlcmUgY2Fubm90IGJlIGFueSBjb250cmFkaWN0aW9ucyBvdGhlciB0
aGFuCisgICAgICAgIC8vIEZvcmNlT1NSRXhpdCBiZWNhdXNlIHdlIGhhdmUgYWxyZWFkeSBjbGVh
bmVkIHRoZSBncmFwaC4KKyAgICAgICAgQ2xlYW5GaWx0cmF0aW9uCisgICAgfTsKKyAgICAKICAg
ICBBYnN0cmFjdFN0YXRlKEdyYXBoJik7CiAgICAgCiAgICAgfkFic3RyYWN0U3RhdGUoKTsKQEAg
LTE3NiwxMiArMTkxLDEyIEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8vIFRoaXMgaXMgZ3VhcmFu
dGVlZCB0byBiZSBlcXVpdmFsZW50IHRvIGRvaW5nOgogICAgIC8vCi0gICAgLy8gaWYgKHN0YXRl
LnN0YXJ0RXhlY3V0aW5nKGluZGV4KSkgeworICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4ZWN1dGlu
ZyhpbmRleCwgZXhlY3V0aW9uTW9kZSkpIHsKICAgICAvLyAgICAgc3RhdGUuZXhlY3V0ZUVkZ2Vz
KGluZGV4KTsKICAgICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0ZUVmZmVjdHMoaW5kZXgp
OwogICAgIC8vIH0gZWxzZQogICAgIC8vICAgICByZXN1bHQgPSB0cnVlOwotICAgIGJvb2wgZXhl
Y3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIGJvb2wgZXhlY3V0ZSh1bnNpZ25lZCBp
bmRleEluQmxvY2ssIEV4ZWN1dGlvbk1vZGUpOwogICAgIAogICAgIC8vIEluZGljYXRlIHRoZSBz
dGFydCBvZiBleGVjdXRpb24gb2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhl
IG5vZGUsCiAgICAgLy8gdGhhdCBpcyBwcm9ncmVzc2l2ZWx5IGJ1aWx0IHVwIGJ5IGV4ZWN1dGVF
ZGdlcygpIGFuZCBleGVjdXRlRWZmZWN0cygpLiBJbgpAQCAtMTg5LDggKzIwNCw4IEBAIHB1Ymxp
YzoKICAgICAvLyBzdGFydEV4ZWN1dGluZygpIGFuZCBleGVjdXRlRWRnZXMoKS9FZmZlY3RzKCkg
d2hldGhlciB0aGUgbGFzdCBydW4gb2YgdGhlCiAgICAgLy8gYW5hbHlzaXMgY29uY2x1ZGVkIHRo
YXQgdGhlIG5vZGUgY2FuIGV4aXQsIHlvdSBzaG91bGQgcHJvYmFibHkgc2V0IHRoYXQKICAgICAv
LyBpbmZvcm1hdGlvbiBhc2lkZSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0RXhlY3V0aW5nKCkuCi0g
ICAgYm9vbCBzdGFydEV4ZWN1dGluZyhOb2RlKik7Ci0gICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1
bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIGJvb2wgc3RhcnRFeGVjdXRpbmcoTm9kZSosIEV4
ZWN1dGlvbk1vZGUpOworICAgIGJvb2wgc3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJs
b2NrLCBFeGVjdXRpb25Nb2RlKTsKICAgICAKICAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhl
IGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlzIHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKICAg
ICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUuIFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlm
IHlvdSBoYXZlIGFscmVhZHkgdXNlZApAQCAtMjMxLDYgKzI0NiwzNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCwgRXhpdEtpbmQgZXhpdEtpbmQpCisgICAgeworICAgICAgICByZXR1cm4g
ZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCwgZXhpdEtpbmQpOworICAgIH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2Rl
cyhUIG5vZGUsIEFycmF5TW9kZXMgYXJyYXlNb2RlcywgRXhpdEtpbmQgZXhpdEtpbmQpCisgICAg
eworICAgICAgICByZXR1cm4gZmlsdGVyQXJyYXlNb2Rlcyhmb3JOb2RlKG5vZGUpLCBhcnJheU1v
ZGVzLCBleGl0S2luZCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlLCBF
eGl0S2luZCBleGl0S2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShu
b2RlKSwgdHlwZSwgZXhpdEtpbmQpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShUIG5vZGUsIEpTVmFsdWUg
dmFsdWUsIEV4aXRLaW5kIGV4aXRLaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbHRlckJ5
VmFsdWUoZm9yTm9kZShub2RlKSwgdmFsdWUsIGV4aXRLaW5kKTsKKyAgICB9CisgICAgCisgICAg
RmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNl
dCYsIEV4aXRLaW5kKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5TW9kZXMoQWJz
dHJhY3RWYWx1ZSYsIEFycmF5TW9kZXMsIEV4aXRLaW5kKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0
IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUsIEV4aXRLaW5kKTsKKyAgICBG
aWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEpTVmFsdWUsIEV4
aXRLaW5kKTsKKyAgICAKKyAgICB2b2lkIGJhaWwoRXhpdEtpbmQpOworICAgIAogcHJpdmF0ZToK
ICAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJ
bkJsb2NrKTsKICAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYp
OwpAQCAtMjczLDcgKzMxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgZWRnZS5zZXRQcm9vZlN0YXR1cyhJc1Byb3ZlZCk7CiAgICAgICAgIAotICAgICAgICB2YWx1
ZS5maWx0ZXIodHlwZSk7CisgICAgICAgIGZpbHRlcih2YWx1ZSwgdHlwZSwgQmFkVHlwZSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgdmVyaWZ5RWRnZShOb2RlKiwgRWRnZSk7CkBAIC0yODQsNiAr
MzMwLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3Zh
cmlhYmxlczsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIE5vZGUqIG1fY3VycmVudE5v
ZGU7CisgICAgRXhlY3V0aW9uTW9kZSBtX2V4ZWN1dGlvbk1vZGU7CisgICAgCiAgICAgYm9vbCBt
X2hhdmVTdHJ1Y3R1cmVzOwogICAgIGJvb2wgbV9mb3VuZENvbnN0YW50czsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2
aXNpb24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsMTEgQEAgdm9pZCBBYnN0cmFjdFZh
bHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBTdAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAot
dm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgm
IGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQogeworICAgIGlmIChpc0NsZWFyKCkp
CisgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgCiAgICAgLy8gRklYTUU6IFRoaXMg
Y291bGQgYmUgb3B0aW1pemVkIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgbV90eXBlIG5vdAogICAg
IC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYzCkBA
IC0xMDUsMjYgKzEwOCwyOSBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3Jh
cGgsCiAgICAgICAgIAogICAgIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJW
YWx1ZUJ5VHlwZSgpOwotICAgIG5vcm1hbGl6ZUNsYXJpdHkoKTsKLSAgICAKLSAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKIH0KIAotdm9pZCBB
YnN0cmFjdFZhbHVlOjpmaWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMgYXJyYXlNb2RlcykKK0Zp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVz
IGFycmF5TW9kZXMpCiB7CiAgICAgQVNTRVJUKGFycmF5TW9kZXMpOwogICAgIAorICAgIGlmIChp
c0NsZWFyKCkpCisgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgCiAgICAgbV90eXBl
ICY9IFNwZWNDZWxsOwogICAgIG1fYXJyYXlNb2RlcyAmPSBhcnJheU1vZGVzOwotICAgIG5vcm1h
bGl6ZUNsYXJpdHkoKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgcmV0dXJu
IG5vcm1hbGl6ZUNsYXJpdHkoKTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoU3Bl
Y3VsYXRlZFR5cGUgdHlwZSkKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
KFNwZWN1bGF0ZWRUeXBlIHR5cGUpCiB7CisgICAgaWYgKGlzQ2xlYXIoKSkKKyAgICAgICAgcmV0
dXJuIEZpbHRyYXRpb25PSzsKKyAgICAKICAgICBpZiAodHlwZSA9PSBTcGVjVG9wKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBpc0NsZWFyKCkgPyBDb250cmFkaWN0aW9uIDogRmls
dHJhdGlvbk9LOworICAgIAogICAgIG1fdHlwZSAmPSB0eXBlOwogICAgIAogICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCBwcmlvciB0byB0aGlzIGZpbHRlcigpIGNhbGwgd2UgaGFkLCBzYXksIChG
aW5hbCwgVE9QKSwgYW5kCkBAIC0xMzUsOSArMTQxLDE1IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6
ZmlsdGVyKFNwZWN1bGF0ZWRUeXAKICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmZpbHRl
cihtX3R5cGUpOwogICAgIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1
ZUJ5VHlwZSgpOwotICAgIG5vcm1hbGl6ZUNsYXJpdHkoKTsKLSAgICAKLSAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKK30KKworRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeVZhbHVlKEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQgPSBmaWx0ZXIoc3BlY3VsYXRpb25Gcm9tVmFsdWUo
dmFsdWUpKTsKKyAgICBpZiAobV90eXBlKQorICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRGdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMTkxLDEz
ICsyMDMsMjIgQEAgYm9vbCBBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFyKCkgY29ucwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpub3JtYWxpemVDbGFyaXR5
KCkKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9ybWFsaXplQ2xhcml0eSgpCiB7
CiAgICAgLy8gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0byBxdWlja2x5IGNoZWNrIGlmIGFuIGFi
c3RyYWN0IHZhbHVlIGlzIGNsZWFyLgogICAgIC8vIFRoaXMgbm9ybWFsaXplcyBldmVyeXRoaW5n
IHRvIG1ha2UgdGhhdCBlYXN5LgogICAgIAotICAgIGlmIChzaG91bGRCZUNsZWFyKCkpCisgICAg
RmlsdHJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgCisgICAgaWYgKHNob3VsZEJlQ2xlYXIoKSkg
ewogICAgICAgICBjbGVhcigpOworICAgICAgICByZXN1bHQgPSBDb250cmFkaWN0aW9uOworICAg
IH0gZWxzZQorICAgICAgICByZXN1bHQgPSBGaWx0cmF0aW9uT0s7CisKKyAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBBYnN0cmFjdFZh
bHVlOjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNTEyMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm9m
aWxlLmgiCisjaW5jbHVkZSAiREZHRmlsdHJhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJT
cGVjdWxhdGVkVHlwZS5oIgpAQCAtMTgyLDE4ICsxODMsMTMgQEAgc3RydWN0IEFic3RyYWN0VmFs
dWUgewogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
ZmlsdGVyKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICB2b2lkIGZp
bHRlckFycmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKTsKKyAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKTsKICAgICAKLSAgICB2
b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZp
bHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsKICAgICAKLSAgICB2b2lkIGZpbHRlckJ5VmFsdWUo
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGZpbHRlcihzcGVjdWxhdGlvbkZyb21WYWx1
ZSh2YWx1ZSkpOwotICAgICAgICBpZiAobV90eXBlKQotICAgICAgICAgICAgbV92YWx1ZSA9IHZh
bHVlOwotICAgIH0KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoSlNWYWx1ZSB2
YWx1ZSk7CiAgICAgCiAgICAgYm9vbCB2YWxpZGF0ZVR5cGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QK
ICAgICB7CkBAIC0zNjQsNyArMzYwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbHRlckFycmF5
TW9kZXNCeVR5cGUoKTsKICAgICAKICAgICBib29sIHNob3VsZEJlQ2xlYXIoKSBjb25zdDsKLSAg
ICB2b2lkIG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IG5vcm1hbGl6
ZUNsYXJpdHkoKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biAxNTEyMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzNSw3ICszNDM1LDYgQEAgQnl0ZUNvZGVQYXJzZXI6
OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgIDogbV9ieXRlQ29kZVBhcnNlcihieXRlQ29k
ZVBhcnNlcikKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fcHJvZmlsZWRC
bG9jayhwcm9maWxlZEJsb2NrKQotICAgICwgbV9leGl0UHJvZmlsZShwcm9maWxlZEJsb2NrLT5l
eGl0UHJvZmlsZSgpKQogICAgICwgbV9jYWxsc2l0ZUJsb2NrSGVhZChjYWxsc2l0ZUJsb2NrSGVh
ZCkKICAgICAsIG1fcmV0dXJuVmFsdWUocmV0dXJuVmFsdWVWUikKICAgICAsIG1fZGlkUmV0dXJu
KGZhbHNlKQpAQCAtMzQ0NSw2ICszNDQ0LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZQogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0aWFs
aXplKGxvY2tlciwgbV9wcm9maWxlZEJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKSk7
CisgICAgICAgIG1fZXhpdFByb2ZpbGUuaW5pdGlhbGl6ZShsb2NrZXIsIHByb2ZpbGVkQmxvY2st
PmV4aXRQcm9maWxlKCkpOwogICAgIH0KICAgICAKICAgICBtX2FyZ3VtZW50UG9zaXRpb25zLnJl
c2l6ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNp
b24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNiw3ICs0MTYsNyBAQCBwcml2YXRlOgog
ICAgIC8vIHRvIGVuc3VyZSBzb3VuZG5lc3MsIHdlIG11c3QgcGFpbnQgdW5yZWFjaGFibGUgY29k
ZSBhcyBzdWNoLCBieSBpbnNlcnRpbmcgYW4KICAgICAvLyB1bmNvbmRpdGlvbmFsIEZvcmNlT1NS
RXhpdCB3aGVyZXZlciB3ZSBmaW5kIHRoYXQgYSBub2RlIHdvdWxkIGhhdmUgYWx3YXlzIGV4aXRl
ZC4KICAgICAvLyBUaGlzIHdpbGwgb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgd2UgYXJlIG1h
a2luZyBzdGF0aWMgc3BlY3VsYXRpb25zLCBvciB3ZSdyZQotICAgIC8vIG1ha2luZyB0b3RhbGx5
IHdyb25nIHNwZWN1bGF0aW9ucyBkdWUgdG8gaW1wcmVjaXNpb24gb24gdGhlIHByZWRpY3Rpb24g
cHJvcGFnYXRvci4KKyAgICAvLyBtYWtpbmcgdG90YWxseSB3cm9uZyBzcGVjdWxhdGlvbnMgZHVl
IHRvIGltcHJlY2lzaW9uIGluIHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0b3IuCiAgICAgYm9vbCBw
YWludFVucmVhY2hhYmxlQ29kZShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewogICAgICAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTQzOCwxMiArNDM4LDE1IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIFRocm93OgogICAgICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVy
cm9yOgogICAgICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAgICAgICBjYXNlIEZv
cndhcmRGb3JjZU9TUkV4aXQ6CiAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZy4gVGhlc2Ug
bm9kZXMgd2lsbCBhbHJlYWR5IGRvIHRoZSByaWdodCB0aGluZy4KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LCBub2RlLT5jb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgKG5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZvcndhcmRGb3JjZU9T
UkV4aXQgOiBGb3JjZU9TUkV4aXQsCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmln
aW4pOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aWx0cmF0aW9uUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaWx0cmF0aW9uUmVzdWx0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpbHRyYXRpb25SZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHRmlsdHJhdGlvblJlc3VsdF9oCisjZGVmaW5lIERGR0ZpbHRyYXRpb25SZXN1bHRf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIEZpbHRyYXRpb25SZXN1bHQg
eworICAgIEZpbHRyYXRpb25PSywKKyAgICBDb250cmFkaWN0aW9uCit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR0ZpbHRyYXRpb25SZXN1bHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1MTIzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNiw2ICs5
MDYsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKICAgICAgICAgY2Fz
ZSBDb3VudEV4ZWN1dGlvbjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAgIGNh
c2UgRm9yd2FyZEZvcmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6
CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTEyMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw2ICsyNjUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogdGhpcyBwb2ludCwgYnV0IGV4
ZWN1dGlvbiBkb2VzIGNvbnRpbnVlIGluIHRoZSBiYXNpYyBibG9jayAtIGp1c3QgaW4gYSAqL1wK
ICAgICAvKiBkaWZmZXJlbnQgY29tcGlsZXIuICovXAogICAgIG1hY3JvKEZvcmNlT1NSRXhpdCwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZvcndhcmRGb3JjZU9TUkV4aXQsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlRXhpdHNGb3J3YXJkKSBcCiAgICAgXAogICAgIC8qIENoZWNrcyB0
aGUgd2F0Y2hkb2cgdGltZXIuIElmIHRoZSB0aW1lciBoYXMgZmlyZWQsIHdlIE9TUiBleGl0IHRv
IHRoZSAqLyBcCiAgICAgLyogYmFzZWxpbmUgSklUIHRvIHJlZG8gdGhlIHdhdGNoZG9nIHRpbWVy
IGNoZWNrLCBhbmQgc2VydmljZSB0aGUgdGltZXIuICovIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCShyZXZpc2lvbiAxNTEyMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsMTYgKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBi
b29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29k
ZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKIHsKLSAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRT
aXRlOwotICAgIAotICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgewotICAgICAg
ICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4g
dGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOwotICAgICAgICAvLyB0aGUgZmFj
dCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5z
dHJ1Y3Rpb24uCi0gICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tpbmQpOwot
ICAgIH0gZWxzZQotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsKLSAgICAKLSAgICByZXR1
cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhtX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRT
aXRlKGV4aXRTaXRlKTsKKyAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jaygKKyAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHBy
b2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJlcXVlbnRFeGl0U2l0ZSgKKyAgICAgICAgICAgIEZyZXF1
ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9r
aW5kKSk7CiB9CiAKIGJvb2wgT1NSRXhpdEJhc2U6OmRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNp
b24oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUxMjMxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAg
ICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAgIGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhp
dDoKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZToKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9u
IDE1MTIzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2Miw3ICs4NjIsNyBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X3N0YXRlLmZvck5vZGUoZWRnZSk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1f
dHlwZTsKICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25JbnQzMlVzZSB8fCAhKHZh
bHVlLm1fdHlwZSAmIH5TcGVjSW50MzIpKTsKLSAgICB2YWx1ZS5maWx0ZXIoU3BlY0ludDMyKTsK
KyAgICBtX3N0YXRlLmZpbHRlcih2YWx1ZSwgU3BlY0ludDMyKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAg
LTk2Myw3ICs5NjMsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
CiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAgICAg
U3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKICAgICBBU1NFUlQoZWRnZS51c2VL
aW5kKCkgIT0gS25vd25OdW1iZXJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY051bWJlcikp
OwotICAgIHZhbHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICBtX3N0YXRlLmZpbHRlcih2YWx1
ZSwgU3BlY051bWJlcik7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC0xMTAwLDcgKzExMDAsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IHZhbHVlLm1fdHlwZTsKICAgICBBU1NFUlQoKGVkZ2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVz
ZSAmJiBlZGdlLnVzZUtpbmQoKSAhPSBLbm93blN0cmluZ1VzZSkgfHwgISh2YWx1ZS5tX3R5cGUg
JiB+U3BlY0NlbGwpKTsKLSAgICB2YWx1ZS5maWx0ZXIoU3BlY0NlbGwpOworICAgIG1fc3RhdGUu
ZmlsdGVyKHZhbHVlLCBTcGVjQ2VsbCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC0xMTc3LDcgKzExNzcs
NyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAjZW5kaWYKICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKICAgICBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwotICAgIHZhbHVlLmZpbHRlcihTcGVjQm9v
bGVhbik7CisgICAgbV9zdGF0ZS5maWx0ZXIodmFsdWUsIFNwZWNCb29sZWFuKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rl
cl07CiAKQEAgLTQ4OTUsNyArNDg5NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNl
IEZvcmNlT1NSRXhpdDogeworICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgIGNhc2UgRm9yd2Fy
ZEZvcmNlT1NSRXhpdDogewogICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJ
bmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICBicmVhazsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1MTIzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw3ICs4MjIs
NyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAgICAgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25v
d25JbnQzMlVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjSW50MzIpKTsKLSAgICB2YWx1ZS5m
aWx0ZXIoU3BlY0ludDMyKTsKKyAgICBtX3N0YXRlLmZpbHRlcih2YWx1ZSwgU3BlY0ludDMyKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lz
dGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07CiAKQEAgLTk3Miw3ICs5NzIsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZv
ck5vZGUoZWRnZSk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKICAg
ICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25OdW1iZXJVc2UgfHwgISh2YWx1ZS5tX3R5
cGUgJiB+U3BlY051bWJlcikpOwotICAgIHZhbHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICBt
X3N0YXRlLmZpbHRlcih2YWx1ZSwgU3BlY051bWJlcik7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC0xMTI4
LDcgKzExMjgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAgICAgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKICAgICBBU1NFUlQoKGVkZ2UudXNlS2lu
ZCgpICE9IEtub3duQ2VsbFVzZSAmJiBlZGdlLnVzZUtpbmQoKSAhPSBLbm93blN0cmluZ1VzZSkg
fHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsKLSAgICB2YWx1ZS5maWx0ZXIoU3BlY0Nl
bGwpOworICAgIG1fc3RhdGUuZmlsdGVyKHZhbHVlLCBTcGVjQ2VsbCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwog
CkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVCb29sCiAjZW5kaWYKICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9k
ZShlZGdlKTsKICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwotICAgIHZh
bHVlLmZpbHRlcihTcGVjQm9vbGVhbik7CisgICAgbV9zdGF0ZS5maWx0ZXIodmFsdWUsIFNwZWNC
b29sZWFuKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmly
dHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTQ3NDgsNyArNDc0OCw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgQ1JBU0goKTsKICAgICAgICAg
YnJlYWs7CiAKLSAgICBjYXNlIEZvcmNlT1NSRXhpdDogeworICAgIGNhc2UgRm9yY2VPU1JFeGl0
OgorICAgIGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhpdDogewogICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwog
ICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTUxMjMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2Miw3ICsyNjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNv
dXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiB7CiAgICAgQVNTRVJUKG5lZWRzVHlwZUNoZWNr
KGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCkpOwotICAgIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5m
aWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKKyAgICBtX3N0YXRlLmZpbHRlcihlZGdlLCB0eXBl
c1Bhc3NlZFRocm91Z2gpOwogICAgIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBz
b3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIApAQCAtMTU1OCw2ICsxNTU4LDEz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbmxpbmVTdGFydCgKICAgICB9CiB9CiAK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoKQoreworICAgIG1fY29tcGlsZU9rYXkgPSB0cnVl
OworICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7Cit9
CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYgYmxvY2spCiB7CiAg
ICAgQVNTRVJUKG1fY29tcGlsZU9rYXkpOwpAQCAtMTU2OSw5ICsxNTc2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgICAgICAvLyBEb24ndCBnZW5lcmF0
ZSBjb2RlIGZvciBiYXNpYyBibG9ja3MgdGhhdCBhcmUgdW5yZWFjaGFibGUgYWNjb3JkaW5nIHRv
IENGQS4KICAgICAgICAgLy8gQnV0IHRvIGJlIHN1cmUgdGhhdCBub2JvZHkgaGFzIGdlbmVyYXRl
ZCBhIGp1bXAgdG8gdGhpcyBibG9jaywgZHJvcCBpbiBhCiAgICAgICAgIC8vIGJyZWFrcG9pbnQg
aGVyZS4KLSNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsK
LSNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNjM1LDYgKzE2NDAsMTAgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogCiAgICAgZm9yIChtX2lu
ZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21faW5kZXhJ
bkJsb2NrKSB7CiAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9ja1ttX2luZGV4SW5CbG9ja107
CisgICAgICAgIGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGJhaWwoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICAgICAgbV9jYW5FeGl0ID0gbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpOwogI2VuZGlmCkBAIC0x
NzAwLDggKzE3MDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2sm
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAgICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpIHsKLSAgICAgICAgICAgICAgICBtX2NvbXBpbGVP
a2F5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7CisgICAg
ICAgICAgICAgICAgYmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtNDAxNSw3ICs0MDIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVRvU3RyaW5nT25DZQogICAgICAgICAKICAgICAgICAgaWYgKCFtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yo
U3RydWN0dXJlU2V0KG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3Ry
aW5nT2JqZWN0U3RydWN0dXJlKCkpKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2Jq
ZWN0KG9wMUdQUik7Ci0gICAgICAgICAgICBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LmZpbHRlcihTcGVjU3RyaW5nT2JqZWN0KTsKKyAgICAgICAgICAgIG1fc3RhdGUuZmlsdGVyKG5v
ZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nT2JqZWN0KTsKICAgICAgICAgfQogICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNXcmFwcGVyT2JqZWN0Ojpp
bnRlcm5hbFZhbHVlQ2VsbE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtNDAzOSw3ICs0MDQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVRvU3RyaW5nT25DZQogICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVz
dWx0R1BSKTsKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBt
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nIHwgU3BlY1N0
cmluZ09iamVjdCk7CisgICAgICAgIG1fc3RhdGUuZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVj
U3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7CiAgICAgICAgIAogICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDI2MCw3ICs0MjY4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0KGdwcik7Ci0gICAgbV9zdGF0ZS5mb3JO
b2RlKGVkZ2UpLmZpbHRlcihTcGVjU3RyaW5nT2JqZWN0KTsKKyAgICBtX3N0YXRlLmZpbHRlcihl
ZGdlLCBTcGVjU3RyaW5nT2JqZWN0KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoRWRnZSBlZGdlKQpAQCAtNDI4NSw3ICs0MjkzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT3JTdAogICAgIAogICAgIGlzU3Ry
aW5nLmxpbmsoJm1faml0KTsKICAgICAKLSAgICBtX3N0YXRlLmZvck5vZGUoZWRnZSkuZmlsdGVy
KFNwZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KTsKKyAgICBtX3N0YXRlLmZpbHRlcihlZGdl
LCBTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0ZU5vdENlbGwoRWRnZSBlZGdlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTUxMjMxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzUsNiArMzM1LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY29tcGlsZShOb2Rl
Kik7CiAgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChOb2RlKik7CisgICAgdm9pZCBiYWlsKCk7CiAg
ICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKIAogICAgIHZvaWQgY2hlY2tBcmd1bWVudFR5
cGVzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCShyZXZpc2lvbiAxNTEyMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgaW5saW5l
IGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxQ29u
c3RhbnQ6CiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgIGNhc2Ug
Rm9yd2FyZEZvcmNlT1NSRXhpdDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1MTIzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTgsNiArNDE4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVS
ZXR1cm4oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoK
KyAgICAgICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgogICAgICAgICAgICAgY29tcGlsZUZv
cmNlT1NSRXhpdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203886</attachid>
            <date>2013-06-05 15:22:03 -0700</date>
            <delta_ts>2013-06-05 15:29:13 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>68930</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxMjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMSBA
QAorMjAxMy0wNi0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBDRkEgc2hvdWxkIGtub3cgd2hlbiBpdCBoaXRzIGEgY29udHJhZGlj
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3
MjcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBUaGlzIG1ha2VzIHRoZSBERkcgQ0ZBIGltbWVkaWF0ZWx5IGRldGVjdCB3aGVuIGl0IGhp
dCBhIGNvbnRyYWRpY3Rpb24uIFByZXZpb3VzbHkKKyAgICAgICAgd2UgbWlnaHQgbm90IGtub3cg
dGhpczogZm9yIGV4YW1wbGUgaWYgd2UgZGlkIGFuIGludDMyIHR5cGUgY2hlY2sgb24gYSBrbm93
biBzdHJpbmc7CisgICAgICAgIHRoZSBjb2RlIHdvdWxkIGRlZmluaXRlbHkgYWx3YXlzIGV4aXQg
YnV0IHRoZSBDRkEgd291bGQgdGhpbmsgdGhhdCB3ZSB3b3VsZG4ndCBoYXZlCisgICAgICAgIGV2
ZW4gdGhvdWdoIGl0IHdvdWxkIGhhdmUgY29tcHV0ZWQgYSBCT1RUT00gKGkuZS4gY29udHJhZGlj
dG9yeSkgdmFsdWUgZm9yIHRoYXQKKyAgICAgICAgdmFyaWFibGUuCisgICAgICAgIAorICAgICAg
ICBUaGlzIHJlcXVpcmVzIHR3byBvdGhlciBjaGFuZ2VzOgorICAgICAgICAKKyAgICAgICAgLSBD
RkEgbXVzdCByZXBvcnQgY29udHJhZGljdGlvbnMgYXMgaWYgdGhleSBhcmUgZnJlcXVlbnQgZXhp
dCBzaXRlcywgc2luY2UKKyAgICAgICAgICBjb250cmFkaWN0b3J5IHNwZWN1bGF0aW9ucyB3aWxs
IHN1YnNlcXVlbnRseSBnZXQgcmVwbGFjZWQgd2l0aCBGb3JjZU9TUkV4aXQuCisgICAgICAgICAg
Rm9yY2VPU1JFeGl0IGNhbm5vdCBpdHNlbGYgcmVwb3J0IHByb2ZpbGluZyBkYXRhIGJhY2sgdG8g
dGhlIERGRzo6RXhpdFByb2ZpbGUuIFNvLAorICAgICAgICAgIHdlIGRvIHRoaXMgb24gYmVoYWxm
IG9mIHRoZSBzcGVjdWxhdGlvbiwgZWFnZXJseSwgd2l0aGluIHRoZSBDRkEuIFRoaXMgYWxzbyBo
YXMKKyAgICAgICAgICB0aGUgZWZmZWN0IG9mIHNwZWVkaW5nIGNvbnZlcmdlbmNlIHNvbWV3aGF0
LiBXZSBtYXkgd2FudCB0byByZXZpc2l0IHRoaXMgbGF0ZXI7CisgICAgICAgICAgZm9yIGV4YW1w
bGUgd2UgbWlnaHQgd2FudCB0byBpbnN0ZWFkIGhhdmUgdGhlIG5vdGlvbiBvZiBhIEZvcmNlT1NS
RXhpdCB0aGF0IGtub3dzCisgICAgICAgICAgdGhlIHNldCBvZiBzcGVjdWxhdGlvbnMgdGhhdCBn
b3QgZm9sZGVkIGludG8gaXQuCisgICAgICAgIAorICAgICAgICAtIFRoaXMgcmV2ZWFsZWQgYSBi
dWcgd2hlcmUgdGhlIENGQSB3YXMgbW9kZWxpbmcgQ2hlY2tTdHJ1Y3R1cmUgb24gYSBub2RlIHRo
YXQgaGFkCisgICAgICAgICAgYSBrbm93biBzaW5nbGV0b24gbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZSBzZXQgc29tZXdoYXQgZGlmZmVyZW50bHkgdGhhbiB0aGUKKyAgICAgICAgICBjb25zdGFu
dCBmb2xkZXIuIElmIHRoZSBDaGVja1N0cnVjdHVyZSB3YXMgY2hlY2tpbmcgYSBzdHJ1Y3R1cmUg
c2V0IHdpdGggdHdvIG9yCisgICAgICAgICAgbW9yZSBzdHJ1Y3R1cmVzIGluIGl0LCBpdCB3b3Vs
ZCBub3QgZmlsdGVyIHRoZSBhYnN0cmFjdCB2YWx1ZS4gQnV0IHRoZSBjb25zdGFudAorICAgICAg
ICAgIGZvbGRlciB3b3VsZCB0dXJuIHRoaXMgaW50byBhIHdhdGNocG9pbnQgb24gdGhlIHNpbmds
ZXRvbiBzdHJ1Y3R1cmUsIHRoZXJlYnkKKyAgICAgICAgICBmaWx0ZXJpbmcgdGhlIHZhbHVlLiBU
aGlzIGRpc2NyZXBhbmN5IG1lYW50IHRoYXQgd2Ugd291bGRuJ3QgcmVhbGl6ZSB0aGUKKyAgICAg
ICAgICBjb250cmFkaWN0aW9uIHVudGlsIHRoZSBiYWNrZW5kLCBhbmQgdGhlIEFic3RyYWN0U3Rh
dGU6OmJhaWwoKSBtZXRob2QgYXNzZXJ0cyB0aGF0CisgICAgICAgICAgd2UgYWx3YXlzIHJlYWxp
emUgY29udHJhZGljdGlvbnMgaW4gdGhlIGNvbnN0YW50IGZvbGRlci4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0
U2l0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzRXhpdFNpdGUpOgorICAgICAgICAo
Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RXhp
dFByb2ZpbGU6Omhhc0V4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFibGVFeGl0
UHJvZmlsZTo6UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlF1ZXJ5
YWJsZUV4aXRQcm9maWxlOjp+UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFibGVFeGl0UHJvZmlsZTo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpG
cmVxdWVudEV4aXRTaXRlOjpGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAgKEV4aXRQcm9maWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6aGFzRXhpdFNpdGUpOgorICAgICAg
ICAoUXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4aXRLaW5kLmNw
cDoKKyAgICAgICAgKEpTQzo6ZXhpdEtpbmRUb1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OkFic3Ry
YWN0U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6cmVzZXQpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6ZmlsdGVyKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RTdGF0ZTo6ZmlsdGVyQXJyYXlNb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6ZmlsdGVyQnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
YmFpbCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEFic3Ry
YWN0U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZmlsdGVyQXJyYXlNb2Rlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZmlsdGVyQnlWYWx1ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZmlsdGVyQnlUeXBlKToKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Zmls
dGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXJBcnJheU1vZGVz
KToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Zmls
dGVyQnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bm9ybWFsaXpl
Q2xhcml0eSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEFi
c3RyYWN0VmFsdWUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0
YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgICogZGZnL0RGR0NhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGVidWdGYWlsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZv
bGRDb25zdGFudHMpOgorICAgICAgICAoQ29uc3RhbnRGb2xkaW5nUGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpwYWludFVucmVhY2hhYmxlQ29kZSk6Cisg
ICAgICAgICogZGZnL0RGR0ZpbHRyYXRpb25SZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChERkcp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNs
b3cpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAg
ICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpiYWNrd2FyZFR5cGVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmJhaWwpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVUb1N0cmluZ09uQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZVN0cmluZ09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0ZVN0cmluZ09yU3RyaW5nT2JqZWN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUp
OgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kVHlwZUNoZWNrKToKKwogMjAxMy0wNi0wNCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IENs
ZWFuIHVwIEFic3RyYWN0VmFsdWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNTEyMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3
IEBACiAJCTBGMjM1QkVEMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVC
RTkxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgKi87IH07CiAJ
CTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkVBMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIzQkE5NTE3NTQxREJDMDBDNDhDRkUg
LyogSlNGdW5jdGlvbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjNCQTk0MTc1NDFEQkMwMEM0OENGRSAvKiBKU0Z1bmN0aW9uSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MjNCQTk3MTc1RkI3MDYwMEM0OENGRSAvKiBERkdGaWx0cmF0aW9uUmVzdWx0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzQkE5NjE3NUZCNzA1MDBD
NDhDRkUgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFr
UmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZl
c3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQ
YXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTIxNTFD
NUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovOyB9OwpAQCAtOTU2LDE0ICs5NTcs
MTQgQEAKIAkJRkU5NDAzMjIxNzQ0NDI1OTAwNDdDRjZFIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk0MDMyMTE3
NDQ0MjU5MDA0N0NGNkUgLyogSklUU3R1YnNYODZDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUNFNzQ1NzE3NDU0NTY1MDBGRjkzMDAg
LyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkVDRTc0NTYxNzQ1NDU2NTAwRkY5MzAwIC8qIE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmNwcCAqLzsgfTsKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8q
IExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRUQ5NEYyRTE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAq
LzsgfTsKKwkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlGRUQ5NEYzMDE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkQx
NzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nTWFjLmNwcCAqLzsgfTsKIAkJRkVFMzE0N0QxNzRB
QUNBRjAwMTNCQ0FDIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVFMzE0N0MxNzRBQUNBRjAwMTNCQ0FDIC8q
IE1hY3JvQXNzZW1ibGVyQVJNdjcuY3BwICovOyB9OwogCQlGRUY2ODM1RTE3NDM0M0NDMDBBMzJF
MjUgLyogSklUU3R1YnNBUk0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRjY4MzVBMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjY4MzVGMTc0
MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUY2ODM1QjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1
YnNBUk12Ny5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFRjY4MzYwMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic1g4Nl82NC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGNjgzNUMxNzQzNDNDQzAw
QTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVGNjgzNjExNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJz
WDg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUY2
ODM1RDE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNYODYuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsgfTsKLQkJ
RkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyog
V2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9O307
Ci0JCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyRDE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC0x
MTE4LDYgKzExMTksNyBAQAogCQkwRjIzNUJFOTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhp
dFByZXBhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R09TUkV4aXRQcmVwYXJhdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCRUExNzE3OEU3MzAwNjkw
QzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdPU1JFeGl0UHJlcGFyYXRpb24uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0UHJl
cGFyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyM0JBOTQxNzU0MURC
QzAwQzQ4Q0ZFIC8qIEpTRnVuY3Rpb25JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRnVuY3Rpb25JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMjNCQTk2MTc1RkI3MDUwMEM0OENGRSAvKiBERkdGaWx0cmF0aW9uUmVzdWx0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0ZpbHRyYXRpb25SZXN1bHQuaDsgcGF0aCA9IGRmZy9ERkdGaWx0cmF0
aW9uUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0Ix
QkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcv
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTkxLDE0ICsxOTkzLDE0IEBACiAJCUZFOTQwMzIxMTc0NDQyNTkwMDQ3Q0Y2RSAv
KiBKSVRTdHVic1g4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
SVRTdHVic1g4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUNFNzQ1
NjE3NDU0NTY1MDBGRjkzMDAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEg
LyogTExJbnRPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRP
cGNvZGUuaDsgcGF0aCA9IGxsaW50L0xMSW50T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXRjaGRvZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXRjaGRvZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRUQ5NEYyRDE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dN
YWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2F0Y2hkb2dNYWMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUUzMTQ3QzE3NEFBQ0FGMDAxM0JD
QUMgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkVGNjgzNUExNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJzQVJNLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFRjY4MzVCMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJzQVJNdjcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGNjgzNUMxNzQzNDNDQzAwQTMyRTI1IC8qIEpJ
VFN0dWJzWDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJz
WDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjY4MzVEMTc0MzQzQ0Mw
MEEzMkUyNSAvKiBKSVRTdHVic1g4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRTdHVic1g4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRUQ5NEYyQjE3
MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2F0Y2hkb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
RUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2F0Y2hkb2cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkVEOTRGMkQxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nTWFjLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhdGNoZG9nTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMjk1OCw2ICsyOTYwLDcg
QEAKIAkJCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovLAogCQkJCTBG
REIyQ0QxMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovLAogCQkJ
CTBGREIyQ0QyMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAqLywKKwkJ
CQkwRjIzQkE5NjE3NUZCNzA1MDBDNDhDRkUgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oICovLAog
CQkJCTBGREIyQ0QzMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuY3BwICovLAogCQkJ
CTBGREIyQ0Q0MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJC
REMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8sCkBAIC0zNDU5LDYg
KzM0NjIsNyBAQAogCQkJCTBGMjFDMjY4MTRCRTVGNjgwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDY4MDgyMTRCQTU3MkQwMEJGRTI3MiAvKiBKSVRFeGNlcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2ODIgLyogSklU
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyM0JBOTcxNzVGQjcwNjAwQzQ4Q0ZFIC8q
IERGR0ZpbHRyYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2MDYyNjk2MEZCOEVD
MDIwMDk3OThBQiAvKiBKSVRTdHViQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzEx
NUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjc2NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02MTgsMTAgKzYxOCwxNSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBhZGRGcmVxdWVudEV4aXRTaXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBl
KCkpKTsKLSAgICAgICAgcmV0dXJuIG1fZXhpdFByb2ZpbGUuYWRkKHNpdGUpOworICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gbV9leGl0
UHJvZmlsZS5hZGQobG9ja2VyLCBzaXRlKTsKICAgICB9CiAgICAgICAgIAotICAgIGJvb2wgaGFz
RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdCB7IHJldHVy
biBtX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNpdGUpOyB9CisgICAgYm9vbCBoYXNFeGl0U2l0
ZShjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CisgICAgeworICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gbV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOworICAgIH0KIAogICAgIERGRzo6
RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9leGl0UHJvZmlsZTsgfQogICAg
ICAgICAKQEAgLTkwMyw3ICs5MDgsNyBAQCBwdWJsaWM6CiAgICAgLy8gQW5vdGhlciBleGNlcHRp
b24gdG8gdGhlIHJ1bGVzIGlzIHRoYXQgdGhlIEdDIGNhbiBkbyB3aGF0ZXZlciBpdCB3YW50cwog
ICAgIC8vIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJh
bnRlZWQgdG8gd2FpdCB1bnRpbCBhbnkKICAgICAvLyBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRo
cmVhZHMgZmluaXNoIHdoYXQgdGhleSdyZSBkb2luZy4KLSAgICBDb25jdXJyZW50SklUTG9jayBt
X2xvY2s7CisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CiAgICAgCiAgICAg
Ym9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsKICAgICBib29sIG1fYWxsVHJhbnNpdGlvbnNI
YXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5j
cHAJKHJldmlzaW9uIDE1MTIzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
RkdFeGl0UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogRXhpdFByb2ZpbGU6OkV4aXRQcm9maWxlKCkgeyB9
CiBFeGl0UHJvZmlsZTo6fkV4aXRQcm9maWxlKCkgeyB9CiAKLWJvb2wgRXhpdFByb2ZpbGU6OmFk
ZChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQorYm9vbCBFeGl0UHJvZmlsZTo6YWRkKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQog
ewogICAgIC8vIElmIHdlJ3ZlIG5ldmVyIHNlZW4gYW55IGZyZXF1ZW50IGV4aXRzIHRoZW4gY3Jl
YXRlIHRoZSBsaXN0IGFuZCBwdXQgdGhpcyBzaXRlCiAgICAgLy8gaW50byBpdC4KQEAgLTcwLDcg
KzcwLDcgQEAgVmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+IEV4aXRQcm9maWxlOjpleAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgRXhpdFByb2ZpbGU6Omhhc0V4aXRTaXRlKGNvbnN0IEZy
ZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0Citib29sIEV4aXRQcm9maWxlOjpoYXNFeGl0U2l0
ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgc2l0
ZSkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJlcXVlbnRFeGl0U2l0ZXMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgyLDcgKzgyLDEwIEBAIGJvb2wgRXhpdFByb2ZpbGU6Omhhc0V4aXRTaXRl
KGNvbnN0IEZyZXEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVF1ZXJ5YWJsZUV4aXRQcm9maWxl
OjpRdWVyeWFibGVFeGl0UHJvZmlsZShjb25zdCBFeGl0UHJvZmlsZSYgcHJvZmlsZSkKK1F1ZXJ5
YWJsZUV4aXRQcm9maWxlOjpRdWVyeWFibGVFeGl0UHJvZmlsZSgpIHsgfQorUXVlcnlhYmxlRXhp
dFByb2ZpbGU6On5RdWVyeWFibGVFeGl0UHJvZmlsZSgpIHsgfQorCit2b2lkIFF1ZXJ5YWJsZUV4
aXRQcm9maWxlOjppbml0aWFsaXplKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBjb25zdCBF
eGl0UHJvZmlsZSYgcHJvZmlsZSkKIHsKICAgICBpZiAoIXByb2ZpbGUubV9mcmVxdWVudEV4aXRT
aXRlcykKICAgICAgICAgcmV0dXJuOwpAQCAtOTEsNiArOTQsNCBAQCBRdWVyeWFibGVFeGl0UHJv
ZmlsZTo6UXVlcnlhYmxlRXhpdFByb2ZpCiAgICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMuYWRk
KHByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkpOwogfQogCi1RdWVyeWFibGVFeGl0
UHJvZmlsZTo6flF1ZXJ5YWJsZUV4aXRQcm9maWxlKCkgeyB9Ci0KIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdF
eGl0UHJvZmlsZS5oCShyZXZpc2lvbiAxNTEyMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBERkdFeGl0UHJvZmlsZV9oCiAjZGVmaW5lIERGR0V4aXRQcm9m
aWxlX2gKIAorI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiRXhpdEtp
bmQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
QEAgLTUxLDcgKzUyLDExIEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KQogICAgICAgICAsIG1fa2luZChraW5kKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGV4aXRLaW5kSXNDb3VudGFibGUoa2luZCkpOworICAgICAgICBpZiAobV9raW5kID09IEFy
Z3VtZW50c0VzY2FwZWQpIHsKKyAgICAgICAgICAgIC8vIENvdW50IHRoaXMgb25lIGdsb2JhbGx5
LiBJdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBpbiB0aGUgY29kZSBibG9jayB0aGUgYXJndW1lbnRz
IGV4Y2FwZWQ7CisgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBh
c3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAgICBt
X2J5dGVjb2RlT2Zmc2V0ID0gMDsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBVc2Ug
dGhpcyBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCBmb3IgdGhlIGV4aXQgc2l0ZSB0byBiZSBjb3Vu
dGVkIGdsb2JhbGx5IHdpdGhpbiBpdHMKQEAgLTYwLDcgKzY1LDYgQEAgcHVibGljOgogICAgICAg
ICA6IG1fYnl0ZWNvZGVPZmZzZXQoMCkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChleGl0S2luZElzQ291bnRhYmxlKGtpbmQpKTsKICAgICB9CiAgICAgCiAg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdApAQCAtMTI3LDcgKzEzMSw3IEBAIHB1YmxpYzoKICAg
ICAvLyBiZSBjYWxsZWQgYSBmaXhlZCBudW1iZXIgb2YgdGltZXMgcGVyIHJlY29tcGlsYXRpb24u
IFJlY29tcGlsYXRpb24gaXMKICAgICAvLyByYXJlIHRvIGJlZ2luIHdpdGgsIGFuZCBpbXBsaWVz
IGRvaW5nIE8obikgb3BlcmF0aW9ucyBvbiB0aGUgQ29kZUJsb2NrCiAgICAgLy8gYW55d2F5Lgot
ICAgIGJvb2wgYWRkKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmKTsKKyAgICBib29sIGFkZChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYpOwogICAgIAog
ICAgIC8vIEdldCB0aGUgZnJlcXVlbnQgZXhpdCBzaXRlcyBmb3IgYSBieXRlY29kZSBpbmRleC4g
VGhpcyBpcyBPKG4pLCBhbmQgaXMKICAgICAvLyBtZWFudCB0byBvbmx5IGJlIHVzZWQgZnJvbSBk
ZWJ1Z2dpbmcvcHJvZmlsaW5nIGNvZGUuCkBAIC0xMzcsMTQgKzE0MSwxNCBAQCBwdWJsaWM6CiAg
ICAgLy8gaW4gdGhlIGNvbXBpbGVyLiBJdCBzaG91bGQgYmUgc3RyaWN0bHkgY2hlYXBlciB0aGFu
IGJ1aWxkaW5nIGEKICAgICAvLyBRdWVyeWFibGVFeGl0UHJvZmlsZSwgaWYgeW91IHJlYWxseSBl
eHBlY3QgdGhpcyB0byBiZSBjYWxsZWQgaW5mcmVxdWVudGx5CiAgICAgLy8gYW5kIHlvdSBiZWxp
ZXZlIHRoYXQgdGhlcmUgYXJlIGZldyBleGl0IHNpdGVzLgotICAgIGJvb2wgaGFzRXhpdFNpdGUo
Y29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYpIGNvbnN0OwotICAgIGJvb2wgaGFzRXhpdFNpdGUoRXhp
dEtpbmQga2luZCkgY29uc3QKKyAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBjb25zdCBGcmVxdWVudEV4aXRTaXRlJikgY29uc3Q7CisgICAgYm9vbCBoYXNF
eGl0U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIEV4aXRLaW5kIGtpbmQp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzRXhpdFNpdGUoRnJlcXVlbnRFeGl0U2l0
ZShraW5kKSk7CisgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIEZyZXF1ZW50RXhp
dFNpdGUoa2luZCkpOwogICAgIH0KLSAgICBib29sIGhhc0V4aXRTaXRlKHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0CisgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4
aXRLaW5kIGtpbmQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzRXhpdFNpdGUoRnJl
cXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBraW5kKSk7CisgICAgICAgIHJldHVybiBoYXNF
eGl0U2l0ZShsb2NrZXIsIEZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwga2luZCkpOwog
ICAgIH0KICAgICAKIHByaXZhdGU6CkBAIC0xNTUsOSArMTU5LDExIEBAIHByaXZhdGU6CiAKIGNs
YXNzIFF1ZXJ5YWJsZUV4aXRQcm9maWxlIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBRdWVyeWFi
bGVFeGl0UHJvZmlsZShjb25zdCBFeGl0UHJvZmlsZSYpOworICAgIFF1ZXJ5YWJsZUV4aXRQcm9m
aWxlKCk7CiAgICAgflF1ZXJ5YWJsZUV4aXRQcm9maWxlKCk7CiAgICAgCisgICAgdm9pZCBpbml0
aWFsaXplKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBjb25zdCBFeGl0UHJvZmlsZSYpOwor
CiAgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZnJlcXVlbnRFeGl0U2l0ZXMuZmluZChzaXRlKSAh
PSBtX2ZyZXF1ZW50RXhpdFNpdGVzLmVuZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCShyZXZpc2lvbiAxNTEyMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwx
MCArNzAsMTEgQEAgY29uc3QgY2hhciogZXhpdEtpbmRUb1N0cmluZyhFeGl0S2luZCBraQogICAg
ICAgICByZXR1cm4gIlVuY291bnRhYmxlIjsKICAgICBjYXNlIFVuY291bnRhYmxlV2F0Y2hwb2lu
dDoKICAgICAgICAgcmV0dXJuICJVbmNvdW50YWJsZVdhdGNocG9pbnQiOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAi
VW5rbm93biI7CisgICAgY2FzZSBXYXRjaGRvZ1RpbWVyRmlyZWQ6CisgICAgICAgIHJldHVybiAi
V2F0Y2hkb2dUaW1lckZpcmVkIjsKICAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gIlVua25vd24iOwogfQogCiBib29sIGV4aXRLaW5kSXNDb3VudGFi
bGUoRXhpdEtpbmQga2luZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsOCBAQCBBYnN0cmFjdFN0YXRlOjpBYnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwCiAgICAgLCBt
X2dyYXBoKGdyYXBoKQogICAgICwgbV92YXJpYWJsZXMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMpCiAgICAgLCBtX2Jsb2NrKDApCisgICAgLCBtX2N1cnJl
bnROb2RlKDApCisgICAgLCBtX2V4ZWN1dGlvbk1vZGUoQ2xlYW5GaWx0cmF0aW9uKQogewogfQog
CkBAIC03OSw2ICs4MSw3IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJh
c2kKICAgICBtX2lzVmFsaWQgPSB0cnVlOwogICAgIG1fZm91bmRDb25zdGFudHMgPSBmYWxzZTsK
ICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IEludmFsaWRCcmFuY2hEaXJlY3Rpb247CisgICAgbV9j
dXJyZW50Tm9kZSA9IDA7CiB9CiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFw
aCYgZ3JhcGgpCkBAIC0yMDYsNiArMjA5LDcgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpyZXNldCgp
CiAgICAgbV9ibG9jayA9IDA7CiAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgbV9icmFuY2hE
aXJlY3Rpb24gPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uOworICAgIG1fY3VycmVudE5vZGUgPSAw
OwogfQogCiBBYnN0cmFjdFN0YXRlOjpCb29sZWFuUmVzdWx0IEFic3RyYWN0U3RhdGU6OmJvb2xl
YW5SZXN1bHQoTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpCkBAIC0yMjksNyArMjMz
LDcgQEAgQWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIHJldHVy
biBVbmtub3duQm9vbGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpzdGFydEV4
ZWN1dGluZyhOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRlOjpzdGFydEV4ZWN1dGluZyhO
b2RlKiBub2RlLCBFeGVjdXRpb25Nb2RlIGV4ZWN1dGlvbk1vZGUpCiB7CiAgICAgQVNTRVJUKG1f
YmxvY2spOwogICAgIEFTU0VSVChtX2lzVmFsaWQpOwpAQCAtMjM4LDE1ICsyNDIsMjAgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpzdGFydEV4ZWN1dGluZyhOb2RlKgogICAgIAogICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgIAotICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
KyAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgbV9jdXJyZW50Tm9k
ZSA9IDA7CisgICAgICAgIG1fZXhlY3V0aW9uTW9kZSA9IENsZWFuRmlsdHJhdGlvbjsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKKyAgICBtX2N1cnJlbnROb2RlID0gbm9kZTsK
KyAgICBtX2V4ZWN1dGlvbk1vZGUgPSBleGVjdXRpb25Nb2RlOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIEFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5C
bG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJ
bkJsb2NrLCBFeGVjdXRpb25Nb2RlIGV4ZWN1dGlvbk1vZGUpCiB7Ci0gICAgcmV0dXJuIHN0YXJ0
RXhlY3V0aW5nKG1fYmxvY2stPmF0KGluZGV4SW5CbG9jaykpOworICAgIHJldHVybiBzdGFydEV4
ZWN1dGluZyhtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spLCBleGVjdXRpb25Nb2RlKTsKIH0KIAog
dm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMoTm9kZSogbm9kZSkKQEAgLTczNSwzMSAr
NzQ0LDMxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGFic3RyYWN0
Q2hpbGQubV90eXBlKSkgewogICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHZt
LT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgICAgICAgICAgICAgIGZp
bHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY051bWJlcik7CiAgICAgICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1f
dHlwZSkpIHsKICAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxT
dHJpbmdzLnN0cmluZ1N0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBmaWx0ZXIobm9k
ZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFu
dHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgaWYgKGlzRmluYWxPYmplY3RTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlw
ZSkgfHwgaXNBcnJheVNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0FyZ3Vt
ZW50c1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewogICAgICAgICAgICAgaWYg
KHRyeVNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKSB7
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGaW5h
bE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgICAgIGZp
bHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Fy
Z3VtZW50cyk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNG
dW5jdGlvblNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewogICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmco
KSkpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0Z1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNG
dW5jdGlvbik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7CiAgICAgICAgICAgICBp
ZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNC
b29sZWFuKTsKKyAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNCb29s
ZWFuKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTEwNzIsNiArMTA4MSw4IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgIHR5cGUgfD0g
U3BlY1N0cmluZzsKICAgICAgICAgfQogICAgICAgICBkZXN0aW5hdGlvbi5zZXRUeXBlKHR5cGUp
OworICAgICAgICBpZiAoZGVzdGluYXRpb24uaXNDbGVhcigpKQorICAgICAgICAgICAgbV9pc1Zh
bGlkID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMDgwLDgg
KzEwOTEsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAg
ICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKICAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBmaWx0
ZXJzIHRoYXQgdGhlIFN0cmluZ09iamVjdCBoYXMgdGhlIHByaW1vcmRpYWwgU3RyaW5nT2JqZWN0
CiAgICAgICAgICAgICAvLyBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgICAgIGZpbHRlcigKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSwKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3Ry
aW5nT2JqZWN0U3RydWN0dXJlKCksCisgICAgICAgICAgICAgICAgTm90U3RyaW5nT2JqZWN0KTsK
ICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIFdlIGNvdWxkIGJlIG1vcmUg
cHJlY2lzZSBidXQgaXQncyBsaWtlbHkgbm90IHdvcnRoIGl0LgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CkBAIC0xMjg4LDcgKzEzMDEs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBzdGF0dXMuc3BlY2lmaWNW
YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihtX2dyYXBoLCBzdGF0dXMuc3RydWN0dXJlU2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0YXR1cy5zdHJ1Y3R1
cmVTZXQoKSwgQmFkQ2FjaGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTMxOCwxNiArMTMzMSwzMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdh
dGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVy
aW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgorCisgICAgICAgIFN0cnVjdHVy
ZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CisKKyAgICAgICAgaWYgKHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIEV4aXRLaW5kIGV4aXRLaW5kOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9w
KCkgPT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAgICAgICBleGl0S2luZCA9IEJhZFdlYWtDb25z
dGFudENhY2hlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hl
OworCisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisKICAgICAgICAgLy8gSWYgdGhp
cyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFk
eSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhl
biB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlz
IGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0g
bm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxl
U3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICAgICAgJiYgdmFsdWUubV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewogICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgIGlmICghdmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgdmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNldCk7CisgICAgICAgICAgICBm
aWx0ZXIodmFsdWUsIHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuc2luZ2xldG9uKCks
IGV4aXRLaW5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZmls
dGVyKHZhbHVlLCBzZXQsIGV4aXRLaW5kKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMzYsNiArMTM2NiwxMiBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgY2FzZSBGb3J3YXJkU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKIAorICAgICAgICBFeGl0S2luZCBleGl0S2luZDsK
KyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFdlYWtKU0NvbnN0YW50KQorICAg
ICAgICAgICAgZXhpdEtpbmQgPSBCYWRXZWFrQ29uc3RhbnRDYWNoZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKKwogICAgICAgICAvLyBJdCdzIG9ubHkg
dmFsaWQgdG8gaXNzdWUgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50IGlmIHdlIGFs
cmVhZHkKICAgICAgICAgLy8ga25vdyB0aGF0IHRoZSB3YXRjaHBvaW50IGNvdmVycyBhIHN1cGVy
c2V0IG9mIHRoZSBzdHJ1Y3R1cmVzIGtub3duIHRvCiAgICAgICAgIC8vIGJlbG9uZyB0byB0aGUg
c2V0IG9mIGZ1dHVyZSBzdHJ1Y3R1cmVzIHRoYXQgdGhpcyB2YWx1ZSBtYXkgaGF2ZS4KQEAgLTEz
NDYsNyArMTM4Miw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcK
ICAgICAgICAgICAgIHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihT
dHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKQogICAgICAgICAgICAgfHwgbV9ncmFwaC53
YXRjaHBvaW50cygpLnNob3VsZEFzc3VtZU1peGVkU3RhdGUobm9kZS0+c3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgIHZhbHVlLmZpbHRl
cihtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIGZpbHRlcih2YWx1ZSwgbm9k
ZS0+c3RydWN0dXJlKCksIGV4aXRLaW5kKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwpAQCAt
MTM3NCw3ICsxNDEwLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNp
ZwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBm
b2xsb3dlZCBieSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBz
byB0aGVyZSBpcyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCiAgICAg
ICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OlN0cmluZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmlu
Zyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKQEAgLTEzODMsMzQgKzE0MTksMzQgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICBjYXNlIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0Fy
Z3VtZW50cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4
QXJyYXkpOworICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50OEFycmF5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5Ogot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5
KTsKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0ludDE2QXJyYXkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwor
ICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjSW50MzJBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CisgICAg
ICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNVaW50OEFycmF5KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJy
YXkpOworICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjVWludDhDbGFtcGVk
QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50
MTZBcnJheSk7CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNVaW50MTZB
cnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQz
MkFycmF5KTsKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY1VpbnQzMkFy
cmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0
MzJBcnJheSk7CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNGbG9hdDMy
QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRmxv
YXQ2NEFycmF5KTsKKyAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0Zsb2F0
NjRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDI5LDcgKzE0NjUsNyBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAgICB8fCBu
b2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252ZXJ0KTsKICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMo
aW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQXJy
YXlNb2Rlcyhub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7
CisgICAgICAgIGZpbHRlckFycmF5TW9kZXMobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmFycmF5TW9k
ZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0NDEsNyArMTQ3Nyw3IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgIG1f
Zm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICB2YWx1ZS5m
aWx0ZXIobV9ncmFwaCwgc2V0KTsKKyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQsIEJhZEluZGV4
aW5nVHlwZSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0xNDY3LDcgKzE1MDMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0ZXIuCi0gICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlckJ5VmFsdWUobm9kZS0+ZnVuY3Rpb24oKSk7CisgICAgICAg
IGZpbHRlckJ5VmFsdWUobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmZ1bmN0aW9uKCksIEJhZEZ1bmN0
aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTE0ODIsNyArMTUxOCw3
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwKICAg
ICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAg
aWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAg
ICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlLCBCYWRDYWNoZSk7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CkBAIC0xNTQzLDYgKzE1NzksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBGb3JjZU9T
UkV4aXQ6CisgICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgogICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7
CkBAIC0xNTcwLDEwICsxNjA3LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVj
dHModW5zaWcKICAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBtX2Jsb2Nr
LT5hdChpbmRleEluQmxvY2spKTsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIEV4ZWN1dGlvbk1vZGUgZXhlY3V0aW9uTW9kZSkKIHsKICAgICBOb2Rl
KiBub2RlID0gbV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICBpZiAoIXN0YXJ0RXhlY3V0
aW5nKG5vZGUpKQorICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9kZSwgZXhlY3V0aW9uTW9kZSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKQEAg
LTE4MDcsNiArMTg0NCw2MSBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91CiAgICAgfQogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0U3RhdGU6OmZpbHRlcigK
KyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIEV4aXRL
aW5kIGV4aXRLaW5kKQoreworICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0KSA9PSBG
aWx0cmF0aW9uT0spCisgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgYmFpbChleGl0
S2luZCk7CisgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247Cit9CisgICAgCitGaWx0cmF0aW9uUmVz
dWx0IEFic3RyYWN0U3RhdGU6OmZpbHRlckFycmF5TW9kZXMoCisgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUsIEFycmF5TW9kZXMgYXJyYXlNb2RlcywgRXhpdEtpbmQgZXhpdEtpbmQpCit7CisgICAg
aWYgKHZhbHVlLmZpbHRlckFycmF5TW9kZXMoYXJyYXlNb2RlcykgPT0gRmlsdHJhdGlvbk9LKQor
ICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOworICAgIGJhaWwoZXhpdEtpbmQpOworICAgIHJl
dHVybiBDb250cmFkaWN0aW9uOworfQorICAgIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFN0
YXRlOjpmaWx0ZXIoCisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUsIEV4aXRLaW5kIGV4aXRLaW5kKQoreworICAgIGlmICh2YWx1ZS5maWx0ZXIodHlwZSkgPT0g
RmlsdHJhdGlvbk9LKQorICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOworICAgIGJhaWwoZXhp
dEtpbmQpOworICAgIHJldHVybiBDb250cmFkaWN0aW9uOworfQorICAgIAorRmlsdHJhdGlvblJl
c3VsdCBBYnN0cmFjdFN0YXRlOjpmaWx0ZXJCeVZhbHVlKAorICAgIEFic3RyYWN0VmFsdWUmIGFi
c3RyYWN0VmFsdWUsIEpTVmFsdWUgY29uY3JldGVWYWx1ZSwgRXhpdEtpbmQgZXhpdEtpbmQpCit7
CisgICAgaWYgKGFic3RyYWN0VmFsdWUuZmlsdGVyQnlWYWx1ZShjb25jcmV0ZVZhbHVlKSA9PSBG
aWx0cmF0aW9uT0spCisgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgYmFpbChleGl0
S2luZCk7CisgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0
ZTo6YmFpbChFeGl0S2luZCBleGl0S2luZCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50Tm9kZSk7
CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgc3dpdGNoIChtX2V4ZWN1dGlvbk1vZGUpIHsK
KyAgICBjYXNlIFN0aWxsQ29udmVyZ2luZzoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWZ0
ZXJDb252ZXJnZW5jZTogeworICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1f
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5hZGRGcmVxdWVudEV4aXRTaXRlKAorICAgICAgICAg
ICAgRnJlcXVlbnRFeGl0U2l0ZShtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgsIGV4aXRLaW5kKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDbGVhbkZp
bHRyYXRpb246CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyAg
ICAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJ
KHJldmlzaW9uIDE1MTIzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywyMSBAQCBwdWJsaWM6CiAgICAg
ICAgIE1lcmdlVG9TdWNjZXNzb3JzCiAgICAgfTsKICAgICAKKyAgICBlbnVtIEV4ZWN1dGlvbk1v
ZGUgeworICAgICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSBjb250cmFkaWN0aW9uLCBhc3N1bWUg
dGhhdCB0aGlzIG1pZ2h0IGp1c3QKKyAgICAgICAgLy8gYmUgYmVjYXVzZSB3ZSBoYXZlbid0IGNv
bnZlcmdlZCB5ZXQuCisgICAgICAgIFN0aWxsQ29udmVyZ2luZywKKyAgICAgICAgCisgICAgICAg
IC8vIElmIHdlIGVuY291bnRlciBhIGNvbnRyYWRpdGlvbiwgYXNzdW1lIHRoYXQgdGhpcyBjb250
cmFkaWN0aW9uCisgICAgICAgIC8vIGlzIHJlYWwgYW5kIHJlcG9ydCBpdCB0byB0aGUgcHJvZmls
aW5nIGluZnJhc3RydWN0dXJlIGFzIGlmIGl0CisgICAgICAgIC8vIGhhcHBlbmVkIGF0IHJ1biB0
aW1lLgorICAgICAgICBBZnRlckNvbnZlcmdlbmNlLAorICAgICAgICAKKyAgICAgICAgLy8gQXNz
dW1lIHRoYXQgdGhlcmUgY2Fubm90IGJlIGFueSBjb250cmFkaWN0aW9ucyBvdGhlciB0aGFuCisg
ICAgICAgIC8vIEZvcmNlT1NSRXhpdCBiZWNhdXNlIHdlIGhhdmUgYWxyZWFkeSBjbGVhbmVkIHRo
ZSBncmFwaC4KKyAgICAgICAgQ2xlYW5GaWx0cmF0aW9uCisgICAgfTsKKyAgICAKICAgICBBYnN0
cmFjdFN0YXRlKEdyYXBoJik7CiAgICAgCiAgICAgfkFic3RyYWN0U3RhdGUoKTsKQEAgLTE3Niwx
MiArMTkxLDEyIEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0
byBiZSBlcXVpdmFsZW50IHRvIGRvaW5nOgogICAgIC8vCi0gICAgLy8gaWYgKHN0YXRlLnN0YXJ0
RXhlY3V0aW5nKGluZGV4KSkgeworICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4ZWN1dGluZyhpbmRl
eCwgZXhlY3V0aW9uTW9kZSkpIHsKICAgICAvLyAgICAgc3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4
KTsKICAgICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0ZUVmZmVjdHMoaW5kZXgpOwogICAg
IC8vIH0gZWxzZQogICAgIC8vICAgICByZXN1bHQgPSB0cnVlOwotICAgIGJvb2wgZXhlY3V0ZSh1
bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIGJvb2wgZXhlY3V0ZSh1bnNpZ25lZCBpbmRleElu
QmxvY2ssIEV4ZWN1dGlvbk1vZGUpOwogICAgIAogICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBv
ZiBleGVjdXRpb24gb2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUs
CiAgICAgLy8gdGhhdCBpcyBwcm9ncmVzc2l2ZWx5IGJ1aWx0IHVwIGJ5IGV4ZWN1dGVFZGdlcygp
IGFuZCBleGVjdXRlRWZmZWN0cygpLiBJbgpAQCAtMTg5LDggKzIwNCw4IEBAIHB1YmxpYzoKICAg
ICAvLyBzdGFydEV4ZWN1dGluZygpIGFuZCBleGVjdXRlRWRnZXMoKS9FZmZlY3RzKCkgd2hldGhl
ciB0aGUgbGFzdCBydW4gb2YgdGhlCiAgICAgLy8gYW5hbHlzaXMgY29uY2x1ZGVkIHRoYXQgdGhl
IG5vZGUgY2FuIGV4aXQsIHlvdSBzaG91bGQgcHJvYmFibHkgc2V0IHRoYXQKICAgICAvLyBpbmZv
cm1hdGlvbiBhc2lkZSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0RXhlY3V0aW5nKCkuCi0gICAgYm9v
bCBzdGFydEV4ZWN1dGluZyhOb2RlKik7Ci0gICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNpZ25l
ZCBpbmRleEluQmxvY2spOworICAgIGJvb2wgc3RhcnRFeGVjdXRpbmcoTm9kZSosIEV4ZWN1dGlv
bk1vZGUpOworICAgIGJvb2wgc3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBF
eGVjdXRpb25Nb2RlKTsKICAgICAKICAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2Vz
IG9mIHRoZSBnaXZlbiBub2RlLiBUaGlzIHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKICAgICAvLyBv
biBhbGwgZWRnZXMgb2YgdGhlIG5vZGUuIFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBo
YXZlIGFscmVhZHkgdXNlZApAQCAtMjMxLDYgKzI0NiwzOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCwgRXhpdEtpbmQgZXhpdEtpbmQpCisgICAgeworICAgICAgICByZXR1cm4gZmlsdGVy
KGZvck5vZGUobm9kZSksIHNldCwgZXhpdEtpbmQpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcygKKyAg
ICAgICAgVCBub2RlLCBBcnJheU1vZGVzIGFycmF5TW9kZXMsIEV4aXRLaW5kIGV4aXRLaW5kID0g
QmFkSW5kZXhpbmdUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbHRlckFycmF5TW9kZXMo
Zm9yTm9kZShub2RlKSwgYXJyYXlNb2RlcywgZXhpdEtpbmQpOworICAgIH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZSwgRXhpdEtpbmQgZXhpdEtpbmQgPSBCYWRUeXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCB0eXBlLCBleGl0S2luZCk7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXJCeVZhbHVlKFQgbm9kZSwgSlNWYWx1ZSB2YWx1ZSwgRXhpdEtpbmQgZXhpdEtpbmQp
CisgICAgeworICAgICAgICByZXR1cm4gZmlsdGVyQnlWYWx1ZShmb3JOb2RlKG5vZGUpLCB2YWx1
ZSwgZXhpdEtpbmQpOworICAgIH0KKyAgICAKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihB
YnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0JiwgRXhpdEtpbmQpOworICAgIEZpbHRy
YXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhBYnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcywg
RXhpdEtpbmQgPSBCYWRJbmRleGluZ1R5cGUpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVy
KEFic3RyYWN0VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSwgRXhpdEtpbmQgPSBCYWRUeXBlKTsKKyAg
ICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEpTVmFsdWUs
IEV4aXRLaW5kKTsKKyAgICAKKyAgICB2b2lkIGJhaWwoRXhpdEtpbmQpOworICAgIAogcHJpdmF0
ZToKICAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5k
ZXhJbkJsb2NrKTsKICAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdp
biYpOwpAQCAtMjczLDcgKzMyMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgZWRnZS5zZXRQcm9vZlN0YXR1cyhJc1Byb3ZlZCk7CiAgICAgICAgIAotICAgICAgICB2
YWx1ZS5maWx0ZXIodHlwZSk7CisgICAgICAgIGZpbHRlcih2YWx1ZSwgdHlwZSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgdmVyaWZ5RWRnZShOb2RlKiwgRWRnZSk7CkBAIC0yODQsNiArMzMxLDkg
QEAgcHJpdmF0ZToKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3ZhcmlhYmxl
czsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7Cisg
ICAgRXhlY3V0aW9uTW9kZSBtX2V4ZWN1dGlvbk1vZGU7CisgICAgCiAgICAgYm9vbCBtX2hhdmVT
dHJ1Y3R1cmVzOwogICAgIGJvb2wgbV9mb3VuZENvbnN0YW50czsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24g
MTUxMjMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsMTEgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpz
ZXQoR3JhcGgmIGdyYXBoLCBTdAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotdm9pZCBB
YnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyKQorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBo
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQogeworICAgIGlmIChpc0NsZWFyKCkpCisgICAg
ICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgY291bGQg
YmUgb3B0aW1pemVkIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgbV90eXBlIG5vdAogICAgIC8vIGhh
dmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYzCkBAIC0xMDUs
MjYgKzEwOCwyOSBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsCiAg
ICAgICAgIAogICAgIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1ZUJ5
VHlwZSgpOwotICAgIG5vcm1hbGl6ZUNsYXJpdHkoKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKIH0KIAotdm9pZCBBYnN0cmFj
dFZhbHVlOjpmaWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMgYXJyYXlNb2RlcykKK0ZpbHRyYXRp
b25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVzIGFycmF5
TW9kZXMpCiB7CiAgICAgQVNTRVJUKGFycmF5TW9kZXMpOwogICAgIAorICAgIGlmIChpc0NsZWFy
KCkpCisgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CisgICAgCiAgICAgbV90eXBlICY9IFNw
ZWNDZWxsOwogICAgIG1fYXJyYXlNb2RlcyAmPSBhcnJheU1vZGVzOwotICAgIG5vcm1hbGl6ZUNs
YXJpdHkoKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgcmV0dXJuIG5vcm1h
bGl6ZUNsYXJpdHkoKTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUgdHlwZSkKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFNwZWN1
bGF0ZWRUeXBlIHR5cGUpCiB7CisgICAgaWYgKGlzQ2xlYXIoKSkKKyAgICAgICAgcmV0dXJuIEZp
bHRyYXRpb25PSzsKKyAgICAKICAgICBpZiAodHlwZSA9PSBTcGVjVG9wKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBpc0NsZWFyKCkgPyBDb250cmFkaWN0aW9uIDogRmlsdHJhdGlv
bk9LOworICAgIAogICAgIG1fdHlwZSAmPSB0eXBlOwogICAgIAogICAgIC8vIEl0J3MgcG9zc2li
bGUgdGhhdCBwcmlvciB0byB0aGlzIGZpbHRlcigpIGNhbGwgd2UgaGFkLCBzYXksIChGaW5hbCwg
VE9QKSwgYW5kCkBAIC0xMzUsOSArMTQxLDE1IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
KFNwZWN1bGF0ZWRUeXAKICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmZpbHRlcihtX3R5
cGUpOwogICAgIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1ZUJ5VHlw
ZSgpOwotICAgIG5vcm1hbGl6ZUNsYXJpdHkoKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKK30KKworRmlsdHJhdGlvblJlc3Vs
dCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeVZhbHVlKEpTVmFsdWUgdmFsdWUpCit7CisgICAgRmls
dHJhdGlvblJlc3VsdCByZXN1bHQgPSBmaWx0ZXIoc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUp
KTsKKyAgICBpZiAobV90eXBlKQorICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRGdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZShHcmFwaCYgZ3JhcGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMTkxLDEzICsyMDMs
MjIgQEAgYm9vbCBBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFyKCkgY29ucwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpub3JtYWxpemVDbGFyaXR5KCkKK0Zp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9ybWFsaXplQ2xhcml0eSgpCiB7CiAgICAg
Ly8gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0byBxdWlja2x5IGNoZWNrIGlmIGFuIGFic3RyYWN0
IHZhbHVlIGlzIGNsZWFyLgogICAgIC8vIFRoaXMgbm9ybWFsaXplcyBldmVyeXRoaW5nIHRvIG1h
a2UgdGhhdCBlYXN5LgogICAgIAotICAgIGlmIChzaG91bGRCZUNsZWFyKCkpCisgICAgRmlsdHJh
dGlvblJlc3VsdCByZXN1bHQ7CisgICAgCisgICAgaWYgKHNob3VsZEJlQ2xlYXIoKSkgewogICAg
ICAgICBjbGVhcigpOworICAgICAgICByZXN1bHQgPSBDb250cmFkaWN0aW9uOworICAgIH0gZWxz
ZQorICAgICAgICByZXN1bHQgPSBGaWx0cmF0aW9uT0s7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNTEyMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgi
CisjaW5jbHVkZSAiREZHRmlsdHJhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVy
ZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxh
dGVkVHlwZS5oIgpAQCAtMTgyLDE4ICsxODMsMTMgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewog
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmlsdGVy
KEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0
ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICB2b2lkIGZpbHRlckFy
cmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZp
bHRlckFycmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKTsKICAgICAKLSAgICB2b2lkIGZp
bHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihT
cGVjdWxhdGVkVHlwZSB0eXBlKTsKICAgICAKLSAgICB2b2lkIGZpbHRlckJ5VmFsdWUoSlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGZpbHRlcihzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1
ZSkpOwotICAgICAgICBpZiAobV90eXBlKQotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlOwot
ICAgIH0KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoSlNWYWx1ZSB2YWx1ZSk7
CiAgICAgCiAgICAgYm9vbCB2YWxpZGF0ZVR5cGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7
CkBAIC0zNjQsNyArMzYwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNC
eVR5cGUoKTsKICAgICAKICAgICBib29sIHNob3VsZEJlQ2xlYXIoKSBjb25zdDsKLSAgICB2b2lk
IG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IG5vcm1hbGl6ZUNsYXJp
dHkoKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTEy
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQzNSw3ICszNDM1LDYgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGlu
ZVN0YWNrRW50cnk6OklubGluZQogICAgIDogbV9ieXRlQ29kZVBhcnNlcihieXRlQ29kZVBhcnNl
cikKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fcHJvZmlsZWRCbG9jayhw
cm9maWxlZEJsb2NrKQotICAgICwgbV9leGl0UHJvZmlsZShwcm9maWxlZEJsb2NrLT5leGl0UHJv
ZmlsZSgpKQogICAgICwgbV9jYWxsc2l0ZUJsb2NrSGVhZChjYWxsc2l0ZUJsb2NrSGVhZCkKICAg
ICAsIG1fcmV0dXJuVmFsdWUocmV0dXJuVmFsdWVWUikKICAgICAsIG1fZGlkUmV0dXJuKGZhbHNl
KQpAQCAtMzQ0NSw2ICszNDQ0LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZQogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9wcm9m
aWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0aWFsaXplKGxv
Y2tlciwgbV9wcm9maWxlZEJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKSk7CisgICAg
ICAgIG1fZXhpdFByb2ZpbGUuaW5pdGlhbGl6ZShsb2NrZXIsIHByb2ZpbGVkQmxvY2stPmV4aXRQ
cm9maWxlKCkpOwogICAgIH0KICAgICAKICAgICBtX2FyZ3VtZW50UG9zaXRpb25zLnJlc2l6ZShh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fc3RhdGUuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwog
ICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKLSAgICAgICAgICAgIGlmICghbV9z
dGF0ZS5leGVjdXRlKGkpKSB7CisgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZXhlY3V0ZShpLCBB
YnN0cmFjdFN0YXRlOjpTdGlsbENvbnZlcmdpbmcpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICBF
eHBlY3QgT1NSIGV4aXQuXG4iKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTUxMjMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw3ICs3Miw3IEBAIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2QK
IGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bj
b2RlSUQsIENhcGFiaWxpdHlMZXZlbCByZXN1bHQpCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VDb21waWxhdGlvbigpICYmICFjYW5Db21waWxlKHJlc3VsdCkpCi0gICAgICAgIGRhdGFMb2co
IkNhbm5vdCBjb21waWxlIGNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiBiZWNhdXNlIG9mIG9w
Y29kZSAlcy5cbiIsIG9wY29kZU5hbWVzW29wY29kZUlEXSk7CisgICAgICAgIGRhdGFMb2coIkNh
bm5vdCBjb21waWxlIGNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiBiZWNhdXNlIG9mIG9wY29k
ZSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICJcbiIpOwogfQogCiAvLyBPcGNvZGUgY2hlY2tp
bmcuCkBAIC0yNjEsOCArMjYxLDExIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwo
Q29kZUJsb2MKICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1
Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgewogI2RlZmluZSBERUZJTkVf
T1Aob3Bjb2RlLCBsZW5ndGgpIFwKICAgICAgICAgY2FzZSBvcGNvZGU6IHsgXAotICAgICAgICAg
ICAgcmVzdWx0ID0gbGVhc3RVcHBlckJvdW5kKHJlc3VsdCwgY2FwYWJpbGl0eUxldmVsKG9wY29k
ZSwgY29kZUJsb2NrLCBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVjb2RlT2Zmc2V0KSk7IFwKLSAg
ICAgICAgICAgIGRlYnVnRmFpbChjb2RlQmxvY2ssIG9wY29kZSwgcmVzdWx0KTsgXAorICAgICAg
ICAgICAgQ2FwYWJpbGl0eUxldmVsIG5ld1Jlc3VsdCA9IGxlYXN0VXBwZXJCb3VuZChyZXN1bHQs
IGNhcGFiaWxpdHlMZXZlbChvcGNvZGUsIGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zQmVnaW4gKyBi
eXRlY29kZU9mZnNldCkpOyBcCisgICAgICAgICAgICBpZiAobmV3UmVzdWx0ICE9IHJlc3VsdCkg
eyBcCisgICAgICAgICAgICAgICAgZGVidWdGYWlsKGNvZGVCbG9jaywgb3Bjb2RlLCBuZXdSZXN1
bHQpOyBcCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3UmVzdWx0OyBcCisgICAgICAgICAg
ICB9IFwKICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGxlbmd0aDsgXAogICAgICAgICAg
ICAgYnJlYWs7IFwKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1MTIzMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgp
OwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1
YnNldE9mKHNldCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlKGluZGV4
SW5CbG9jayk7IC8vIENhdGNoIHRoZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgor
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrLCBBYnN0cmFj
dFN0YXRlOjpDbGVhbkZpbHRyYXRpb24pOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBm
aWx0ZXIgb24gY2VsbC4KICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRv
bSgpOwogICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMTIsNyArMTEyLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgICAg
ICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKSkgewogICAgICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpOwot
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0
Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2ssIEFic3RyYWN0U3RhdGU6OkNsZWFuRmls
dHJhdGlvbik7IC8vIENhdGNoIHRoZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgor
ICAgICAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRy
ZW47CisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnJlbW92ZUVkZ2UoMCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghIWNoaWxkcmVuLmNoaWxkMSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlIHBoYW50b20oUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgY2hpbGRyZW4p
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNG
b3J3YXJkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYW50b20ubWVyZ2VGbGFncyhO
b2RlRXhpdHNGb3J3YXJkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgcGhhbnRvbSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQy
KEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMyhF
ZGdlKCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICBlbGltaW5h
dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzAsNyArMTgwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5n
IGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIEdldEJ5SWQKICAgICAgICAgICAg
ICAgICAvLyBhbmQgbWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3Vs
ZCBjb250aW51ZSBhbmQgbm90CiAgICAgICAgICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9u
cy4KLSAgICAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrLCBBYnN0cmFjdFN0YXRlOjpD
bGVhbkZpbHRyYXRpb24pOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKQEAg
LTIzMyw3ICsyNDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIE5vdyBiZWZvcmUg
d2UgZG8gYW55dGhpbmcgZWxzZSwgcHVzaCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0QnlJ
ZAogICAgICAgICAgICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29w
IHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFuZCBub3QKICAgICAgICAgICAgICAgICAvLyBkbyBh
bnkgZWxpbWluYXRpb25zLgotICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleElu
QmxvY2spOworICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2ssIEFi
c3RyYWN0U3RhdGU6OkNsZWFuRmlsdHJhdGlvbik7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0
Y2hwb2ludCkgewpAQCAtMzIyLDcgKzMzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0
ZShpbmRleEluQmxvY2ssIEFic3RyYWN0U3RhdGU6OkNsZWFuRmlsdHJhdGlvbik7CiAgICAgICAg
ICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkgfHwgbV9zdGF0ZS5kaWRDbG9iYmVyKCkg
fHwgbm9kZS0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkudmFsdWUoKTsKQEAg
LTQxNiw3ICs0MjYsNyBAQCBwcml2YXRlOgogICAgIC8vIHRvIGVuc3VyZSBzb3VuZG5lc3MsIHdl
IG11c3QgcGFpbnQgdW5yZWFjaGFibGUgY29kZSBhcyBzdWNoLCBieSBpbnNlcnRpbmcgYW4KICAg
ICAvLyB1bmNvbmRpdGlvbmFsIEZvcmNlT1NSRXhpdCB3aGVyZXZlciB3ZSBmaW5kIHRoYXQgYSBu
b2RlIHdvdWxkIGhhdmUgYWx3YXlzIGV4aXRlZC4KICAgICAvLyBUaGlzIHdpbGwgb25seSBoYXBw
ZW4gaW4gY2FzZXMgd2hlcmUgd2UgYXJlIG1ha2luZyBzdGF0aWMgc3BlY3VsYXRpb25zLCBvciB3
ZSdyZQotICAgIC8vIG1ha2luZyB0b3RhbGx5IHdyb25nIHNwZWN1bGF0aW9ucyBkdWUgdG8gaW1w
cmVjaXNpb24gb24gdGhlIHByZWRpY3Rpb24gcHJvcGFnYXRvci4KKyAgICAvLyBtYWtpbmcgdG90
YWxseSB3cm9uZyBzcGVjdWxhdGlvbnMgZHVlIHRvIGltcHJlY2lzaW9uIGluIHRoZSBwcmVkaWN0
aW9uIHByb3BhZ2F0b3IuCiAgICAgYm9vbCBwYWludFVucmVhY2hhYmxlQ29kZShCbG9ja0luZGV4
IGJsb2NrSW5kZXgpCiAgICAgewogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTQy
OCw3ICs0MzgsNyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhi
bG9jayk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7
IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAg
ICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIG1fc3RhdGUu
ZXhlY3V0ZShpbmRleEluQmxvY2ssIEFic3RyYWN0U3RhdGU6OkFmdGVyQ29udmVyZ2VuY2UpOwog
ICAgICAgICAgICAgaWYgKG1fc3RhdGUuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCkBAIC00MzgsMTIgKzQ0OCwxNSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoK
ICAgICAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICAgICAgY2FzZSBGb3J3YXJk
Rm9yY2VPU1JFeGl0OgogICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuIFRoZXNlIG5vZGVz
IHdpbGwgYWxyZWFkeSBkbyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsCisgICAgICAgICAgICAgICAgICAg
IChub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkgPyBGb3J3YXJkRm9yY2VPU1JFeGl0
IDogRm9yY2VPU1JFeGl0LAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsK
ICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmlsdHJh
dGlvblJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RmlsdHJhdGlvblJlc3VsdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaWx0cmF0aW9uUmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0ZpbHRyYXRpb25SZXN1bHRfaAorI2RlZmluZSBERkdGaWx0cmF0aW9uUmVzdWx0X2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBGaWx0cmF0aW9uUmVzdWx0IHsKKyAg
ICBGaWx0cmF0aW9uT0ssCisgICAgQ29udHJhZGljdGlvbgorfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdG
aWx0cmF0aW9uUmVzdWx0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTEyMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDYsNiArOTA2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CiAgICAgICAgIGNhc2UgQ291
bnRFeGVjdXRpb246CiAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICBjYXNlIEZv
cndhcmRGb3JjZU9TUkV4aXQ6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAg
ICAgICAgICAgYnJlYWs7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkocmV2aXNpb24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIHRoaXMgcG9pbnQsIGJ1dCBleGVjdXRp
b24gZG9lcyBjb250aW51ZSBpbiB0aGUgYmFzaWMgYmxvY2sgLSBqdXN0IGluIGEgKi9cCiAgICAg
LyogZGlmZmVyZW50IGNvbXBpbGVyLiAqL1wKICAgICBtYWNybyhGb3JjZU9TUkV4aXQsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGb3J3YXJkRm9yY2VPU1JFeGl0LCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUV4aXRzRm9yd2FyZCkgXAogICAgIFwKICAgICAvKiBDaGVja3MgdGhlIHdh
dGNoZG9nIHRpbWVyLiBJZiB0aGUgdGltZXIgaGFzIGZpcmVkLCB3ZSBPU1IgZXhpdCB0byB0aGUg
Ki8gXAogICAgIC8qIGJhc2VsaW5lIEpJVCB0byByZWRvIHRoZSB3YXRjaGRvZyB0aW1lciBjaGVj
aywgYW5kIHNlcnZpY2UgdGhlIHRpbWVyLiAqLyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMTUxMjMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDE2ICszNyw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogYm9vbCBP
U1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9j
ayogcHJvZmlsZWRDb2RlQmxvY2spCiB7Ci0gICAgRnJlcXVlbnRFeGl0U2l0ZSBleGl0U2l0ZTsK
LSAgICAKLSAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQpIHsKLSAgICAgICAgLy8g
Q291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGluIHRoZSBj
b2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKLSAgICAgICAgLy8gdGhlIGZhY3QgdGhh
dCB0aGV5IGRpZCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0aWN1bGFyIGluc3RydWN0
aW9uLgotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9raW5kKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCk7Ci0gICAgCi0gICAgcmV0dXJuIGJh
c2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2sobV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJlcXVlbnRFeGl0U2l0ZShl
eGl0U2l0ZSk7CisgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soCisgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBwcm9maWxl
ZENvZGVCbG9jayktPmFkZEZyZXF1ZW50RXhpdFNpdGUoCisgICAgICAgICAgICBGcmVxdWVudEV4
aXRTaXRlKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCkp
OwogfQogCiBib29sIE9TUkV4aXRCYXNlOjpkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNp
b24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAK
ICAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJv
ZmlsZWRDb2RlQmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5k
SXNDb3VudGFibGUobV9raW5kKSkKKyAgICAgICAgaWYgKCFtX2NvdW50KQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhp
dFNpdGVTbG93KHByb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2
ICs1MTEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAg
ICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6
CisgICAgICAgIGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBTZXRBcmd1
bWVudDoKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBDaGVja0V4
ZWN1dGFibGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1MTIzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg2Miw3ICs4NjIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJ
bnRJCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAg
ICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKICAgICBBU1NFUlQoZWRnZS51
c2VLaW5kKCkgIT0gS25vd25JbnQzMlVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjSW50MzIp
KTsKLSAgICB2YWx1ZS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICBtX3N0YXRlLmZpbHRlcih2YWx1
ZSwgU3BlY0ludDMyKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRn
ZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVy
YXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTk2Myw3ICs5NjMsNyBAQCBGUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZh
bHVlLm1fdHlwZTsKICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25OdW1iZXJVc2Ug
fHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY051bWJlcikpOwotICAgIHZhbHVlLmZpbHRlcihTcGVj
TnVtYmVyKTsKKyAgICBtX3N0YXRlLmZpbHRlcih2YWx1ZSwgU3BlY051bWJlcik7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOwogCkBAIC0xMTAwLDcgKzExMDAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUo
ZWRnZSk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKICAgICBBU1NF
UlQoKGVkZ2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSAmJiBlZGdlLnVzZUtpbmQoKSAhPSBL
bm93blN0cmluZ1VzZSkgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsKLSAgICB2YWx1
ZS5maWx0ZXIoU3BlY0NlbGwpOworICAgIG1fc3RhdGUuZmlsdGVyKHZhbHVlLCBTcGVjQ2VsbCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdp
c3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOwogCkBAIC0xMTc3LDcgKzExNzcsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAjZW5kaWYKICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUu
bV90eXBlOwotICAgIHZhbHVlLmZpbHRlcihTcGVjQm9vbGVhbik7CisgICAgbV9zdGF0ZS5maWx0
ZXIodmFsdWUsIFNwZWNCb29sZWFuKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTQ4OTUsNyArNDg5NSw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgQ1JB
U0goKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEZvcmNlT1NSRXhpdDogeworICAgIGNh
c2UgRm9yY2VPU1JFeGl0OgorICAgIGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhpdDogewogICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFs
dWVSZWdzKCksIDApOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1
MTIzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw3ICs4MjIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRl
LmZvck5vZGUoZWRnZSk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsK
ICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25JbnQzMlVzZSB8fCAhKHZhbHVlLm1f
dHlwZSAmIH5TcGVjSW50MzIpKTsKLSAgICB2YWx1ZS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICBt
X3N0YXRlLmZpbHRlcih2YWx1ZSwgU3BlY0ludDMyKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTk3Miw3
ICs5NzIsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAgICAgU3BlY3Vs
YXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkg
IT0gS25vd25OdW1iZXJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY051bWJlcikpOwotICAg
IHZhbHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICBtX3N0YXRlLmZpbHRlcih2YWx1ZSwgU3Bl
Y051bWJlcik7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZp
cnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC0xMTI4LDcgKzExMjgsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVl
Lm1fdHlwZTsKICAgICBBU1NFUlQoKGVkZ2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSAmJiBl
ZGdlLnVzZUtpbmQoKSAhPSBLbm93blN0cmluZ1VzZSkgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpKTsKLSAgICB2YWx1ZS5maWx0ZXIoU3BlY0NlbGwpOworICAgIG1fc3RhdGUuZmlsdGVy
KHZhbHVlLCBTcGVjQ2VsbCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAjZW5kaWYKICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKICAgICBTcGVjdWxhdGVk
VHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwotICAgIHZhbHVlLmZpbHRlcihTcGVjQm9vbGVhbik7
CisgICAgbV9zdGF0ZS5maWx0ZXIodmFsdWUsIFNwZWNCb29sZWFuKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAK
QEAgLTQ3NDgsNyArNDc0OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEZvcmNl
T1NSRXhpdDogeworICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgIGNhc2UgRm9yd2FyZEZvcmNl
T1NSRXhpdDogewogICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1
YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpi
YWNrd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwpCiB7CiAgICAgQVNTRVJUKG5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3Vn
aCkpOwotICAgIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5maWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdo
KTsKKyAgICBtX3N0YXRlLmZpbHRlcihlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gpOwogICAgIGJh
Y2t3YXJkU3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBzb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1w
VG9GYWlsKTsKIH0KIApAQCAtMTU1OCw2ICsxNTU4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVJbmxpbmVTdGFydCgKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJh
aWwoKQoreworICAgIG1fY29tcGlsZU9rYXkgPSB0cnVlOworICAgIG1faml0LmJyZWFrcG9pbnQo
KTsKKyAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoQmFzaWNCbG9jayYgYmxvY2spCiB7CiAgICAgQVNTRVJUKG1fY29tcGlsZU9rYXkp
OwpAQCAtMTU2OSw5ICsxNTc2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNp
Y0Jsb2NrJgogICAgICAgICAvLyBEb24ndCBnZW5lcmF0ZSBjb2RlIGZvciBiYXNpYyBibG9ja3Mg
dGhhdCBhcmUgdW5yZWFjaGFibGUgYWNjb3JkaW5nIHRvIENGQS4KICAgICAgICAgLy8gQnV0IHRv
IGJlIHN1cmUgdGhhdCBub2JvZHkgaGFzIGdlbmVyYXRlZCBhIGp1bXAgdG8gdGhpcyBibG9jaywg
ZHJvcCBpbiBhCiAgICAgICAgIC8vIGJyZWFrcG9pbnQgaGVyZS4KLSNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSNlbmRpZgogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xNjM1LDEwICsxNjQwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoQmFzaWNCbG9jayYKIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4
SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBtX2N1
cnJlbnROb2RlID0gYmxvY2tbbV9pbmRleEluQmxvY2tdOworICAgICAgICBpZiAoIW1fc3RhdGUu
aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBiYWlsKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIG1fY2FuRXhpdCA9IG1fY3Vy
cmVudE5vZGUtPmNhbkV4aXQoKTsKICNlbmRpZgotICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVF
ZmZlY3RzID0gbV9zdGF0ZS5zdGFydEV4ZWN1dGluZyhtX2N1cnJlbnROb2RlKTsKKyAgICAgICAg
Ym9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1fc3RhdGUuc3RhcnRFeGVjdXRpbmcobV9jdXJy
ZW50Tm9kZSwgQWJzdHJhY3RTdGF0ZTo6Q2xlYW5GaWx0cmF0aW9uKTsKICAgICAgICAgbV9qaXQu
c2V0Rm9yTm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0g
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlLT5z
aG91bGRHZW5lcmF0ZSgpKSB7CkBAIC0xNzAwLDggKzE3MDksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbXBp
bGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpIHsKLSAg
ICAgICAgICAgICAgICBtX2NvbXBpbGVPa2F5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjbGVh
ckdlbmVyYXRpb25JbmZvKCk7CisgICAgICAgICAgICAgICAgYmFpbCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDAxNSw3ICs0MDIz
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvU3RyaW5nT25DZQogICAgICAgICAK
ICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG1faml0Lmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpKSkgewogICAgICAg
ICAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0KG9wMUdQUik7Ci0gICAgICAgICAgICBtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nT2JqZWN0KTsKKyAgICAg
ICAgICAgIG1fc3RhdGUuZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nT2JqZWN0KTsK
ICAgICAgICAgfQogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9w
MUdQUiwgSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlQ2VsbE9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtNDAzOSw3ICs0
MDQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvU3RyaW5nT25DZQogICAgICAg
ICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgIAotICAgICAgICBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZp
bHRlcihTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7CisgICAgICAgIG1fc3RhdGUuZmls
dGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7CiAgICAg
ICAgIAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFr
OwpAQCAtNDI2MCw3ICs0MjY4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3Ry
aW5nT2JqZQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0
KGdwcik7Ci0gICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLmZpbHRlcihTcGVjU3RyaW5nT2JqZWN0
KTsKKyAgICBtX3N0YXRlLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nT2JqZWN0KTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoRWRnZSBlZGdl
KQpAQCAtNDI4NSw3ICs0MjkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3Ry
aW5nT3JTdAogICAgIAogICAgIGlzU3RyaW5nLmxpbmsoJm1faml0KTsKICAgICAKLSAgICBtX3N0
YXRlLmZvck5vZGUoZWRnZSkuZmlsdGVyKFNwZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KTsK
KyAgICBtX3N0YXRlLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU5vdENlbGwoRWRnZSBlZGdlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
cmV2aXNpb24gMTUxMjMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNiArMzM1LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgY29tcGlsZShOb2RlKik7CiAgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChOb2Rl
Kik7CisgICAgdm9pZCBiYWlsKCk7CiAgICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKIAog
ICAgIHZvaWQgY2hlY2tBcmd1bWVudFR5cGVzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTEyMzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDYgKzc4LDcgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAg
IGNhc2UgQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQ6CiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2Ug
Rm9yY2VPU1JFeGl0OgorICAgIGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhpdDoKICAgICAgICAgLy8g
VGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE1MTIzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNyArMjY1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAg
IGRhdGFMb2coIkxvd2VyaW5nICIsIG1fbm9kZSwgIlxuIik7CiAgICAgICAgIAotICAgICAgICBi
b29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9zdGF0ZS5zdGFydEV4ZWN1dGluZyhtX25vZGUp
OworICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9zdGF0ZS5zdGFydEV4ZWN1
dGluZyhtX25vZGUsIEFic3RyYWN0U3RhdGU6OkNsZWFuRmlsdHJhdGlvbik7CiAgICAgICAgIAog
ICAgICAgICBtX2RpcmVjdGlvbiA9IChtX25vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJk
KSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIApA
QCAtNDE4LDYgKzQxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlUmV0dXJuKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAg
IGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhpdDoKICAgICAgICAgICAgIGNvbXBpbGVGb3JjZU9TUkV4
aXQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgpAQCAtMTYxOSw3ICsx
NjIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQVNTRVJUKG1h
eUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkpOwogICAgICAgICBhcHBlbmRPU1JF
eGl0KEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9kZSgpLCBmYWlsQ29uZGl0aW9uLCBk
aXJlY3Rpb24sIHJlY292ZXJ5KTsKLSAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGhpZ2hWYWx1ZSku
ZmlsdGVyKHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgICAgIG1fc3RhdGUuZmlsdGVyKGhpZ2hW
YWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvd0lu
dDMyKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3Bl
cmFuZFNwZWN1bGF0aW9uKQo=
</data>
<flag name="review"
          id="225348"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>