<?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>145015</bug_id>
          
          <creation_ts>2015-05-14 12:30:19 -0700</creation_ts>
          <short_desc>Insert store barriers late so that IR transformations don&apos;t have to worry about them</short_desc>
          <delta_ts>2015-05-17 20:49:37 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>145036</dependson>
    
    <dependson>145096</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1094872</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-14 12:30:19 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094873</commentid>
    <comment_count>1</comment_count>
      <attachid>253135</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-14 12:30:49 -0700</bug_when>
    <thetext>Created attachment 253135
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095004</commentid>
    <comment_count>2</comment_count>
      <attachid>253170</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-14 20:08:51 -0700</bug_when>
    <thetext>Created attachment 253170
it&apos;s getting interesting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095024</commentid>
    <comment_count>3</comment_count>
      <attachid>253174</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-14 21:17:01 -0700</bug_when>
    <thetext>Created attachment 253174
it is written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095038</commentid>
    <comment_count>4</comment_count>
      <attachid>253176</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-14 22:53:45 -0700</bug_when>
    <thetext>Created attachment 253176
almost done

Just need to run perf tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095040</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-14 22:55:15 -0700</bug_when>
    <thetext>Attachment 253176 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierInsertionPhase.cpp:197:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierInsertionPhase.cpp:321:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095191</commentid>
    <comment_count>6</comment_count>
      <attachid>253214</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-15 12:24:10 -0700</bug_when>
    <thetext>Created attachment 253214
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095192</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-05-15 12:24:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/20979071&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095193</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-15 12:26:38 -0700</bug_when>
    <thetext>Attachment 253214 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierInsertionPhase.cpp:211:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGStoreBarrierInsertionPhase.cpp:335:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095232</commentid>
    <comment_count>9</comment_count>
      <attachid>253214</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-15 13:57:33 -0700</bug_when>
    <thetext>Comment on attachment 253214
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095248</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-15 14:13:42 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/184415</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095438</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-16 14:00:15 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 145096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095464</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-16 17:09:31 -0700</bug_when>
    <thetext>It looks like this was the cause of the ~1% regression on Kraken. The revert put us back to the original speed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095531</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-17 16:23:25 -0700</bug_when>
    <thetext>According to rniwa, this is what went wrong:


https://build.webkit.org/builders/Apple%20Yosemite%20Debug%20JSC%20%28Tests%29?numbuilds=25

It looks like there&apos;s a new JSC crash introduced in the last 12 hours or so:
** The following JSC stress test failures have been introduced:
	stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate
	stress/load-varargs-then-inlined-call-inlined.js.ftl-no-cjit-validate
	stress/load-varargs-then-inlined-call.js.ftl-no-cjit-validate
The stack trace looks like this:
Running stress/load-varargs-then-inlined-call.js.ftl-eager
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: ASSERTION FAILED: canAccessIndexQuickly(i)
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: /Volumes/Data/slave/yosemite-debug/build/Source/JavaScriptCore/runtime/DirectArguments.h(87) : void JSC::DirectArguments::setIndexQuickly(JSC::VM &amp;, uint32_t, JSC::JSValue)
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 1   0x10f8d9e50 WTFCrashWithSecurityImplication
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 2   0x10f1d83d6 JSC::DirectArguments::setIndexQuickly(JSC::VM&amp;, unsigned int, JSC::JSValue)
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 3   0x10f7a0abc operationMaterializeObjectInOSR
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 4   0x39f8020104de
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 5   0x39f80200b6e1
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 6   0x10f675c79 vmEntryToJavaScript
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 7   0x10f4db9fc JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 8   0x10f4bf57e JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*)
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 9   0x10efe7240 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*)
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 10  0x10ee568f4 runWithScripts(GlobalObject*, WTF::Vector&lt;Script, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, bool)
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 11  0x10ee55eb6 jscmain(int, char**)
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 12  0x10ee559db main
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 13  0x7fff980755c9 start
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: 14  0x9
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: test_script_10434: line 2: 55860 Segmentation fault: 11  &quot;$@&quot; ../../.vm/JavaScriptCore.framework/Resources/jsc --useFTLJIT\=false --enableFunctionDotArguments\=true --validateGraph\=true --useFTLJIT\=true --ftlCrashesIfCantInitializeLLVM\=true --enableConcurrentJIT\=false --thresholdForJITAfterWarmUp\=100 load-varargs-then-inlined-call-exit-in-foo.js
stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate: ERROR: Unexpected exit code: 139
FAIL: stress/load-varargs-then-inlined-call-exit-in-foo.js.ftl-no-cjit-validate
Running stress/load-varargs-then-inlined-call.js.ftl-eager-no-cjit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095538</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-17 20:40:13 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/184445</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095539</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-17 20:49:37 -0700</bug_when>
    <thetext>By the way, here&apos;s the performance of this.  Note that I accidentally used &quot;FastHole&quot; to describe this patch during this benchmark run.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r184438)
&quot;FastHole&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r184438)

Collected 6 samples per benchmark/VM, with 6 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                  FastHole                                     
SunSpider:
   3d-cube                                            5.3470+-0.4446     ?      5.3684+-0.1713        ?
   3d-morph                                           6.0433+-0.5222            5.8549+-0.2754          might be 1.0322x faster
   3d-raytrace                                        6.6297+-0.1317     ?      6.7015+-0.1929        ? might be 1.0108x slower
   access-binary-trees                                2.4023+-0.1551            2.3330+-0.1356          might be 1.0297x faster
   access-fannkuch                                    6.1812+-0.3363            5.9853+-0.1225          might be 1.0327x faster
   access-nbody                                       2.9367+-0.1217     ?      3.1342+-0.2963        ? might be 1.0673x slower
   access-nsieve                                      3.3381+-0.1886            3.2914+-0.2066          might be 1.0142x faster
   bitops-3bit-bits-in-byte                           1.6083+-0.0934            1.5974+-0.0669        
   bitops-bits-in-byte                                3.4977+-0.1511            3.4056+-0.0424          might be 1.0271x faster
   bitops-bitwise-and                                 2.2893+-0.2557            2.2240+-0.2655          might be 1.0294x faster
   bitops-nsieve-bits                                 3.2665+-0.2354     ?      3.3668+-0.0375        ? might be 1.0307x slower
   controlflow-recursive                              2.3969+-0.1030            2.3659+-0.1283          might be 1.0131x faster
   crypto-aes                                         4.4760+-0.1809     ?      4.5051+-0.1576        ?
   crypto-md5                                         2.8840+-0.1775     ?      3.0172+-0.0668        ? might be 1.0462x slower
   crypto-sha1                                        3.0122+-0.4733            2.6849+-0.1576          might be 1.1219x faster
   date-format-tofte                                  9.4690+-0.2389     ?      9.6351+-0.1570        ? might be 1.0175x slower
   date-format-xparb                                  5.8908+-0.2302            5.8842+-0.1464        
   math-cordic                                        3.2318+-0.1133            3.1347+-0.0783          might be 1.0310x faster
   math-partial-sums                                  5.5450+-0.4658            5.4633+-0.4089          might be 1.0150x faster
   math-spectral-norm                                 2.0689+-0.2483            2.0670+-0.1047        
   regexp-dna                                         8.1557+-1.6086            7.6639+-1.2450          might be 1.0642x faster
   string-base64                                      5.0625+-0.7732            4.9091+-0.3422          might be 1.0312x faster
   string-fasta                                       6.9500+-0.8539            6.7537+-0.2325          might be 1.0291x faster
   string-tagcloud                                    9.4698+-0.7675     ?      9.7358+-0.5939        ? might be 1.0281x slower
   string-unpack-code                                20.4442+-1.1706     ?     20.4832+-0.9088        ?
   string-validate-input                              5.0529+-0.2896            4.9443+-0.0749          might be 1.0220x faster

   &lt;arithmetic&gt;                                       5.2942+-0.0824            5.2504+-0.0559          might be 1.0084x faster

                                                        TipOfTree                  FastHole                                     
LongSpider:
   3d-cube                                          892.7395+-5.0607          886.5526+-15.2226       
   3d-morph                                        1529.7404+-4.7518         1525.8464+-3.1764        
   3d-raytrace                                      729.4768+-3.1872     ^    715.0158+-3.2136        ^ definitely 1.0202x faster
   access-binary-trees                              974.9606+-7.7585     ?    975.9218+-5.3775        ?
   access-fannkuch                                  333.8483+-8.0728          331.0494+-12.1326       
   access-nbody                                     614.1430+-1.0155     !    618.8892+-1.7579        ! definitely 1.0077x slower
   access-nsieve                                    480.0809+-5.7234          475.8310+-4.0371        
   bitops-3bit-bits-in-byte                          45.6847+-2.2265           45.4667+-1.8717        
   bitops-bits-in-byte                              100.4565+-0.9026     ?    102.3882+-2.3170        ? might be 1.0192x slower
   bitops-nsieve-bits                               421.7202+-5.4206     ?    421.7530+-3.3044        ?
   controlflow-recursive                            488.0481+-10.0574    ?    496.8451+-15.5431       ? might be 1.0180x slower
   crypto-aes                                       700.6156+-7.0114          698.9133+-8.1526        
   crypto-md5                                       527.3289+-11.0259         523.3079+-3.5765        
   crypto-sha1                                      592.8263+-5.2765     ?    598.2193+-3.7905        ?
   date-format-tofte                                752.5677+-16.5976    ?    760.6800+-21.7656       ? might be 1.0108x slower
   date-format-xparb                                806.0216+-20.8986         787.0651+-13.6619         might be 1.0241x faster
   hash-map                                         167.9965+-3.6497     ?    174.0634+-3.2294        ? might be 1.0361x slower
   math-cordic                                      587.8615+-4.7104          587.1063+-1.4179        
   math-partial-sums                                505.8996+-1.9968          504.5141+-2.1837        
   math-spectral-norm                               566.9205+-8.4671          566.6189+-3.8914        
   string-base64                                    375.1388+-6.6206     ?    378.3469+-5.1091        ?
   string-fasta                                     449.1850+-15.0440         443.0114+-10.8297         might be 1.0139x faster
   string-tagcloud                                  198.3151+-3.4244          197.0706+-3.2526        

   &lt;geometric&gt;                                      451.3582+-2.3537          451.3430+-1.4113          might be 1.0000x faster

                                                        TipOfTree                  FastHole                                     
V8Spider:
   crypto                                            56.2931+-1.0759           55.6403+-1.9447          might be 1.0117x faster
   deltablue                                        100.3507+-3.8185     ?    101.1292+-1.9157        ?
   earley-boyer                                      48.7974+-2.4067     ?     49.3992+-3.1538        ? might be 1.0123x slower
   raytrace                                          40.1763+-2.5039           38.1790+-3.1524          might be 1.0523x faster
   regexp                                            82.3140+-2.9329     ?     82.7694+-2.2387        ?
   richards                                          79.6377+-3.2902     ?     80.6523+-2.1626        ? might be 1.0127x slower
   splay                                             41.2985+-1.3384           40.6113+-1.6315          might be 1.0169x faster

   &lt;geometric&gt;                                       60.5595+-1.1425           60.1976+-1.4025          might be 1.0060x faster

                                                        TipOfTree                  FastHole                                     
Octane:
   encrypt                                           0.20393+-0.00064          0.20372+-0.00243       
   decrypt                                           3.54202+-0.02313    !     3.63317+-0.02578       ! definitely 1.0257x slower
   deltablue                                x2       0.19760+-0.00112    ?     0.19967+-0.00446       ? might be 1.0104x slower
   earley                                            0.39615+-0.00472          0.39555+-0.00423       
   boyer                                             5.11032+-0.03546    ?     5.11622+-0.01127       ?
   navier-stokes                            x2       5.19224+-0.02467    ?     5.19434+-0.03277       ?
   raytrace                                 x2       1.27016+-0.03817          1.23838+-0.04053         might be 1.0257x faster
   richards                                 x2       0.12180+-0.00103    ?     0.12350+-0.00218       ? might be 1.0140x slower
   splay                                    x2       0.40254+-0.00173    ?     0.40664+-0.00260       ? might be 1.0102x slower
   regexp                                   x2      31.75408+-0.35118         31.62559+-0.25046       
   pdfjs                                    x2      42.84257+-0.45133         42.40059+-0.30219         might be 1.0104x faster
   mandreel                                 x2      49.77939+-0.61049    ?    49.82737+-0.48997       ?
   gbemu                                    x2      41.53544+-0.55081    ?    42.05594+-0.35791       ? might be 1.0125x slower
   closure                                           0.56080+-0.00441          0.55928+-0.00202       
   jquery                                            7.11636+-0.05922    ?     7.18761+-0.05595       ? might be 1.0100x slower
   box2d                                    x2      12.37004+-0.11364    !    12.58227+-0.07457       ! definitely 1.0172x slower
   zlib                                     x2     405.55355+-41.70108       390.33203+-13.20247        might be 1.0390x faster
   typescript                               x2     814.58020+-12.88266   ?   823.32235+-7.25419       ? might be 1.0107x slower

   &lt;geometric&gt;                                       6.55360+-0.05527    ?     6.56072+-0.01417       ? might be 1.0011x slower

                                                        TipOfTree                  FastHole                                     
Kraken:
   ai-astar                                          277.574+-2.429      ?     277.996+-2.575         ?
   audio-beat-detection                              106.992+-0.609      ^     105.841+-0.528         ^ definitely 1.0109x faster
   audio-dft                                         118.961+-2.016      ?     118.965+-1.713         ?
   audio-fft                                          83.906+-4.905             81.357+-3.870           might be 1.0313x faster
   audio-oscillator                                   77.849+-1.719             77.373+-1.633         
   imaging-darkroom                                  106.174+-2.110            105.493+-1.942         
   imaging-desaturate                                 63.805+-2.649      ?      63.996+-2.089         ?
   imaging-gaussian-blur                             110.208+-1.575            109.934+-0.321         
   json-parse-financial                               46.279+-1.912             45.451+-1.220           might be 1.0182x faster
   json-stringify-tinderbox                           29.591+-1.629             28.389+-1.454           might be 1.0423x faster
   stanford-crypto-aes                                58.612+-2.024             58.601+-0.768         
   stanford-crypto-ccm                                50.099+-1.470      ?      51.194+-2.848         ? might be 1.0219x slower
   stanford-crypto-pbkdf2                            118.041+-1.377      ?     118.620+-1.869         ?
   stanford-crypto-sha256-iterative                   50.074+-1.875             48.756+-0.697           might be 1.0270x faster

   &lt;arithmetic&gt;                                       92.726+-0.276             92.283+-0.288           might be 1.0048x faster

                                                        TipOfTree                  FastHole                                     
JSRegress:
   abs-boolean                                        2.7532+-0.1226            2.6822+-0.0447          might be 1.0265x faster
   adapt-to-double-divide                            16.7602+-0.3065     ?     16.8164+-0.1620        ?
   aliased-arguments-getbyval                         1.3123+-0.0565     ?      1.3558+-0.2315        ? might be 1.0331x slower
   allocate-big-object                                3.1018+-0.2623            2.8799+-0.1190          might be 1.0770x faster
   arguments-named-and-reflective                    13.3793+-1.2908           12.1983+-0.3079          might be 1.0968x faster
   arguments-out-of-bounds                           15.1466+-0.4829           14.8324+-0.1925          might be 1.0212x faster
   arguments-strict-mode                             10.6374+-0.2417     !     11.2365+-0.2303        ! definitely 1.0563x slower
   arguments                                          9.9647+-1.1852     ?     10.6742+-1.0197        ? might be 1.0712x slower
   arity-mismatch-inlining                            0.8797+-0.0515     ?      0.9046+-0.0532        ? might be 1.0284x slower
   array-access-polymorphic-structure                 7.1742+-0.8698     ?      7.2951+-0.9391        ? might be 1.0169x slower
   array-nonarray-polymorhpic-access                 34.6558+-0.3792           34.2131+-1.5672          might be 1.0129x faster
   array-prototype-every                             85.8643+-1.0936     ?     86.5895+-3.3742        ?
   array-prototype-forEach                           85.9356+-2.1910           84.1624+-2.2132          might be 1.0211x faster
   array-prototype-map                               93.1617+-2.0635           93.0924+-3.2971        
   array-prototype-some                              85.6510+-2.0896     ?     87.7655+-1.9476        ? might be 1.0247x slower
   array-splice-contiguous                           41.9705+-1.8326     ?     42.5025+-3.4543        ? might be 1.0127x slower
   array-with-double-add                              4.3222+-0.3541            4.1173+-0.0561          might be 1.0498x faster
   array-with-double-increment                        3.2572+-0.0531     ?      3.3234+-0.1441        ? might be 1.0203x slower
   array-with-double-mul-add                          5.1880+-0.3121            5.1033+-0.1942          might be 1.0166x faster
   array-with-double-sum                              3.4298+-0.1321            3.3486+-0.0754          might be 1.0243x faster
   array-with-int32-add-sub                           6.8062+-0.0984            6.7708+-0.0742        
   array-with-int32-or-double-sum                     3.3754+-0.1077     ?      3.3766+-0.0702        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     32.9788+-1.6299     ?     34.1332+-1.8897        ? might be 1.0350x slower
   ArrayBuffer-DataView-alloc-long-lived             15.3683+-1.6830           14.9323+-1.8128          might be 1.0292x faster
   ArrayBuffer-Int32Array-byteOffset                  4.2412+-0.4725            3.8230+-0.1165          might be 1.1094x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.8265+-1.4592     ?     33.0315+-1.5497        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     23.6857+-1.6616           23.5081+-1.5620        
   ArrayBuffer-Int8Array-alloc-long-lived            13.5882+-1.4660           12.7449+-0.3232          might be 1.0662x faster
   ArrayBuffer-Int8Array-alloc                       11.6309+-1.6985     ?     12.1529+-1.7447        ? might be 1.0449x slower
   asmjs_bool_bug                                     7.7201+-0.0938            7.5226+-0.1426          might be 1.0263x faster
   assign-custom-setter-polymorphic                   3.1180+-0.1597     ?      3.2072+-0.3120        ? might be 1.0286x slower
   assign-custom-setter                               4.4517+-0.5072            4.3600+-0.5568          might be 1.0210x faster
   basic-set                                          8.5223+-0.1712     ?      8.7297+-0.6797        ? might be 1.0243x slower
   big-int-mul                                        4.2895+-0.3275            4.0208+-0.0707          might be 1.0668x faster
   boolean-test                                       3.3339+-0.3522            3.1490+-0.0908          might be 1.0587x faster
   branch-fold                                        3.7489+-0.0412            3.7217+-0.0268        
   branch-on-string-as-boolean                       19.4921+-1.3142     ?     19.8202+-1.1386        ? might be 1.0168x slower
   by-val-generic                                     8.0744+-0.1993     ?      8.0760+-0.2470        ?
   call-spread-apply                                 31.1986+-2.2385           30.0142+-1.7576          might be 1.0395x faster
   call-spread-call                                  26.6027+-1.4833           26.1649+-0.9349          might be 1.0167x faster
   captured-assignments                               0.4912+-0.0446            0.4549+-0.0176          might be 1.0799x faster
   cast-int-to-double                                 5.2154+-0.0142     !      5.3350+-0.0496        ! definitely 1.0229x slower
   cell-argument                                      8.7261+-0.2537     ?      8.9520+-0.6726        ? might be 1.0259x slower
   cfg-simplify                                       2.8438+-0.0738     ?      2.8967+-0.1228        ? might be 1.0186x slower
   chain-getter-access                                9.2469+-0.0601     ?      9.2648+-0.4874        ?
   cmpeq-obj-to-obj-other                            11.9070+-1.1135           11.7075+-0.6106          might be 1.0170x faster
   constant-test                                      4.9798+-0.1244     ?      5.0483+-0.1070        ? might be 1.0138x slower
   create-lots-of-functions                          11.5019+-0.1218     !     11.9838+-0.1602        ! definitely 1.0419x slower
   DataView-custom-properties                        40.0389+-1.5703     ?     40.0884+-0.4524        ?
   deconstructing-parameters-overridden-by-function   
                                                      0.5689+-0.0667     ?      0.5791+-0.0487        ? might be 1.0180x slower
   delay-tear-off-arguments-strictmode               14.6777+-1.2311           14.5643+-1.0776        
   deltablue-varargs                                206.2666+-1.7586          204.1346+-1.6704          might be 1.0104x faster
   destructuring-arguments                           17.1987+-0.7583     ?     18.1956+-0.4938        ? might be 1.0580x slower
   destructuring-swap                                 5.1007+-0.1719     ?      5.1239+-0.0500        ?
   direct-arguments-getbyval                          1.3391+-0.1292            1.2787+-0.0825          might be 1.0472x faster
   div-boolean-double                                 5.2763+-0.1338            5.2185+-0.0226          might be 1.0111x faster
   div-boolean                                        7.8447+-0.1236     ?      7.8741+-0.1809        ?
   double-get-by-val-out-of-bounds                    4.5095+-0.0658     ?      4.5680+-0.0444        ? might be 1.0130x slower
   double-pollution-getbyval                          8.8343+-0.0289     ?      8.8768+-0.0582        ?
   double-pollution-putbyoffset                       4.4592+-0.4890            4.3936+-0.1345          might be 1.0149x faster
   double-to-int32-typed-array-no-inline              2.4831+-0.2805            2.2885+-0.1190          might be 1.0850x faster
   double-to-int32-typed-array                        1.9725+-0.0693     ?      1.9828+-0.0589        ?
   double-to-uint32-typed-array-no-inline             2.4096+-0.1397     ?      2.6020+-0.2838        ? might be 1.0798x slower
   double-to-uint32-typed-array                       2.1901+-0.2388            2.0848+-0.0906          might be 1.0506x faster
   elidable-new-object-dag                           43.7726+-2.3400           43.2656+-2.6146          might be 1.0117x faster
   elidable-new-object-roflcopter                    44.8644+-1.6481     ?     44.8721+-1.7076        ?
   elidable-new-object-then-call                     39.6154+-1.2959     ?     40.6639+-2.0208        ? might be 1.0265x slower
   elidable-new-object-tree                          45.6764+-1.6180     ?     48.1781+-5.0095        ? might be 1.0548x slower
   empty-string-plus-int                              5.4823+-0.0813     ?      5.6117+-0.1704        ? might be 1.0236x slower
   emscripten-cube2hash                              38.4152+-0.9917     ?     39.3128+-1.4302        ? might be 1.0234x slower
   exit-length-on-plain-object                       14.5974+-1.0945     ?     14.9695+-0.9230        ? might be 1.0255x slower
   external-arguments-getbyval                        1.2633+-0.0586     ?      1.4100+-0.2859        ? might be 1.1161x slower
   external-arguments-putbyval                        2.4462+-0.2640     ?      2.5067+-0.4012        ? might be 1.0247x slower
   fixed-typed-array-storage-var-index                1.2365+-0.0276     ?      1.4034+-0.1800        ? might be 1.1351x slower
   fixed-typed-array-storage                          0.9119+-0.0758     ?      0.9370+-0.1210        ? might be 1.0275x slower
   Float32Array-matrix-mult                           4.4140+-0.2438     ?      4.4681+-0.1746        ? might be 1.0123x slower
   Float32Array-to-Float64Array-set                  53.4098+-1.3310     ?     53.5365+-1.6320        ?
   Float64Array-alloc-long-lived                     70.2089+-2.1324           69.3087+-1.9136          might be 1.0130x faster
   Float64Array-to-Int16Array-set                    69.9657+-1.7950     ?     71.2334+-0.5078        ? might be 1.0181x slower
   fold-double-to-int                                13.4878+-0.1615     ?     13.5925+-0.2113        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.0238+-1.4685           10.4232+-0.9300          might be 1.0576x faster
   fold-get-by-id-to-multi-get-by-offset              9.8671+-0.6999            9.6388+-0.7581          might be 1.0237x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.1658+-0.8829     ?      9.8534+-0.9439        ? might be 1.0750x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.7574+-0.9605     ?      9.1619+-0.7989        ? might be 1.0462x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.0358+-1.3576            9.4102+-1.8792          might be 1.0665x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      7.5671+-1.2866     ^      4.9739+-0.0980        ^ definitely 1.5214x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.0032+-0.2235            9.9586+-0.5436        
   fold-put-by-id-to-multi-put-by-offset              9.9122+-2.5524            9.8647+-1.1002        
   fold-put-structure                                 7.0853+-0.5792     ^      4.8705+-1.3845        ^ definitely 1.4547x faster
   for-of-iterate-array-entries                       4.9911+-0.5470            4.8713+-0.3256          might be 1.0246x faster
   for-of-iterate-array-keys                          3.8397+-0.0688     ?      3.8467+-0.0866        ?
   for-of-iterate-array-values                        3.9582+-0.4334            3.8820+-0.4223          might be 1.0196x faster
   fround                                            21.0610+-0.6844     ?     21.9207+-0.7915        ? might be 1.0408x slower
   ftl-library-inlining-dataview                     67.2558+-2.2035     ?     67.9521+-6.8935        ? might be 1.0104x slower
   ftl-library-inlining                              86.6639+-20.0015          83.8100+-23.3541         might be 1.0341x faster
   function-dot-apply                                 2.0448+-0.1657     ?      2.1538+-0.0640        ? might be 1.0533x slower
   function-test                                      2.9510+-0.1390     ?      3.0173+-0.3004        ? might be 1.0224x slower
   function-with-eval                               104.5238+-3.8663     ?    105.9336+-1.7329        ? might be 1.0135x slower
   gcse-poly-get-less-obvious                        19.9670+-1.6552           19.6600+-2.4307          might be 1.0156x faster
   gcse-poly-get                                     20.5197+-1.4651     ?     22.3352+-0.9932        ? might be 1.0885x slower
   gcse                                               4.5307+-0.3538            4.3643+-0.0428          might be 1.0381x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7925+-0.0579     ?      2.8971+-0.3978        ? might be 1.0374x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.2017+-0.2506            6.0368+-0.0476          might be 1.0273x faster
   get-by-id-chain-from-try-block                     7.2304+-1.1680     ?      7.5351+-1.4511        ? might be 1.0421x slower
   get-by-id-check-structure-elimination              5.1735+-0.2396     ?      5.4458+-0.6250        ? might be 1.0526x slower
   get-by-id-proto-or-self                           19.6309+-1.3705           19.3066+-1.7192          might be 1.0168x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.3237+-0.2520     ?      3.3386+-0.4052        ?
   get-by-id-self-or-proto                           20.0668+-2.2549           19.1155+-1.1659          might be 1.0498x faster
   get-by-val-out-of-bounds                           4.4224+-0.1081     ?      4.4447+-0.1460        ?
   get_callee_monomorphic                             3.0877+-0.2939            3.0533+-0.3164          might be 1.0113x faster
   get_callee_polymorphic                             3.7845+-0.1378     ?      3.8949+-0.4718        ? might be 1.0292x slower
   getter-no-activation                               5.0045+-0.2196     ?      5.1218+-0.2954        ? might be 1.0234x slower
   getter-richards                                  132.3422+-5.9764          127.7405+-8.9968          might be 1.0360x faster
   getter                                             5.5705+-0.5837     ?      5.7893+-0.5768        ? might be 1.0393x slower
   global-var-const-infer-fire-from-opt               0.9301+-0.0616     ?      1.0359+-0.0724        ? might be 1.1137x slower
   global-var-const-infer                             0.8162+-0.0694            0.8134+-0.0970        
   HashMap-put-get-iterate-keys                      29.3995+-2.2225     ?     30.7815+-2.3955        ? might be 1.0470x slower
   HashMap-put-get-iterate                           30.2174+-1.6758     ?     31.3273+-1.2434        ? might be 1.0367x slower
   HashMap-string-put-get-iterate                    29.2984+-1.3795           29.1042+-1.6400        
   hoist-make-rope                                   12.6120+-0.9007           12.4354+-0.9378          might be 1.0142x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.1591+-0.1869            5.0565+-0.0757          might be 1.0203x faster
   hoist-poly-check-structure                         3.7585+-0.2164            3.6551+-0.0313          might be 1.0283x faster
   imul-double-only                                   9.3947+-1.4142            8.9861+-0.2886          might be 1.0455x faster
   imul-int-only                                      9.9058+-0.2022     ?     10.3780+-0.8776        ? might be 1.0477x slower
   imul-mixed                                         8.6485+-0.3752            8.2566+-0.1241          might be 1.0475x faster
   in-four-cases                                     21.2710+-0.1192     ?     21.5165+-0.3949        ? might be 1.0115x slower
   in-one-case-false                                 10.4661+-0.2797     ?     10.5320+-0.4698        ?
   in-one-case-true                                  10.5143+-0.3686           10.2107+-0.2776          might be 1.0297x faster
   in-two-cases                                      10.9021+-0.2259           10.7159+-0.0764          might be 1.0174x faster
   indexed-properties-in-objects                      2.9082+-0.0317     !      3.1908+-0.2397        ! definitely 1.0972x slower
   infer-closure-const-then-mov-no-inline             4.6511+-0.2993            4.1287+-0.2807          might be 1.1265x faster
   infer-closure-const-then-mov                      19.7455+-0.2373     ?     19.8764+-0.3088        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.0695+-0.2133     !     12.3250+-0.3184        ! definitely 1.1134x slower
   infer-closure-const-then-put-to-scope             22.8407+-1.5087           21.2736+-0.2475          might be 1.0737x faster
   infer-closure-const-then-reenter-no-inline   
                                                     48.5367+-0.4131     !     56.6325+-0.2839        ! definitely 1.1668x slower
   infer-closure-const-then-reenter                  22.2543+-0.8768     ?     23.7629+-1.6222        ? might be 1.0678x slower
   infer-constant-global-property                     3.6980+-0.3701            3.6217+-0.0563          might be 1.0211x faster
   infer-constant-property                            2.7542+-0.0183     ?      2.8875+-0.3217        ? might be 1.0484x slower
   infer-one-time-closure-ten-vars                   13.0158+-0.9243           12.7892+-0.7409          might be 1.0177x faster
   infer-one-time-closure-two-vars                   12.3258+-0.5327     ?     13.2041+-1.5572        ? might be 1.0713x slower
   infer-one-time-closure                            12.1458+-0.5998           11.9220+-0.2567          might be 1.0188x faster
   infer-one-time-deep-closure                       21.6327+-1.4596     ?     22.8326+-3.3305        ? might be 1.0555x slower
   inline-arguments-access                            4.4167+-0.0600     ?      4.4895+-0.0379        ? might be 1.0165x slower
   inline-arguments-aliased-access                    4.5279+-0.0695     ?      4.5349+-0.0464        ?
   inline-arguments-local-escape                      4.8139+-0.3182            4.5735+-0.1636          might be 1.0526x faster
   inline-get-scoped-var                              4.9814+-0.2156            4.9492+-0.2384        
   inlined-put-by-id-transition                      11.7334+-0.3834     ?     12.1590+-0.9570        ? might be 1.0363x slower
   int-or-other-abs-then-get-by-val                   4.8986+-0.1513     ?      5.0158+-0.1084        ? might be 1.0239x slower
   int-or-other-abs-zero-then-get-by-val             17.1860+-1.1808     ?     17.8922+-1.7051        ? might be 1.0411x slower
   int-or-other-add-then-get-by-val                   3.9452+-0.0618     !      4.3035+-0.0389        ! definitely 1.0908x slower
   int-or-other-add                                   5.3582+-0.1389     ?      5.5051+-0.3781        ? might be 1.0274x slower
   int-or-other-div-then-get-by-val                   4.1365+-0.0809     ?      4.2682+-0.1905        ? might be 1.0318x slower
   int-or-other-max-then-get-by-val                   4.2050+-0.0453     ?      4.4362+-0.3190        ? might be 1.0550x slower
   int-or-other-min-then-get-by-val                   4.1747+-0.0928     !      4.4762+-0.1656        ! definitely 1.0722x slower
   int-or-other-mod-then-get-by-val                   3.8597+-0.1153     ?      4.0179+-0.0770        ? might be 1.0410x slower
   int-or-other-mul-then-get-by-val                   3.6847+-0.0347     !      4.0903+-0.3481        ! definitely 1.1101x slower
   int-or-other-neg-then-get-by-val                   4.6638+-0.0435     ?      4.8249+-0.1291        ? might be 1.0345x slower
   int-or-other-neg-zero-then-get-by-val             17.4321+-1.5118           17.2334+-0.1836          might be 1.0115x faster
   int-or-other-sub-then-get-by-val                   4.1999+-0.0627     ?      4.4313+-0.2100        ? might be 1.0551x slower
   int-or-other-sub                                   3.4349+-0.0384     !      3.5880+-0.0679        ! definitely 1.0446x slower
   int-overflow-local                                 4.5199+-0.2762     ?      4.5499+-0.1786        ?
   Int16Array-alloc-long-lived                       49.5992+-1.1897     ?     51.0700+-2.0280        ? might be 1.0297x slower
   Int16Array-bubble-sort-with-byteLength            19.7369+-0.1903     ?     20.6267+-1.8158        ? might be 1.0451x slower
   Int16Array-bubble-sort                            21.3682+-2.1120           19.2547+-0.2896          might be 1.1098x faster
   Int16Array-load-int-mul                            1.5187+-0.0134     ?      1.5507+-0.0581        ? might be 1.0210x slower
   Int16Array-to-Int32Array-set                      55.1597+-0.3118     ?     56.3465+-7.5857        ? might be 1.0215x slower
   Int32Array-alloc-large                            24.7251+-1.1450           23.4812+-0.6627          might be 1.0530x faster
   Int32Array-alloc-long-lived                       54.3275+-1.7386     ?     55.1981+-1.1455        ? might be 1.0160x slower
   Int32Array-alloc                                   3.4666+-0.5794     ?      3.5268+-0.3756        ? might be 1.0173x slower
   Int32Array-Int8Array-view-alloc                    8.1036+-1.1456            7.5210+-1.0222          might be 1.0775x faster
   int52-spill                                        6.1989+-0.0754     ?      6.4242+-0.2725        ? might be 1.0363x slower
   Int8Array-alloc-long-lived                        46.3938+-1.0910           45.2448+-2.0804          might be 1.0254x faster
   Int8Array-load-with-byteLength                     3.4001+-0.0713            3.3899+-0.1402        
   Int8Array-load                                     3.5197+-0.4476            3.3868+-0.0480          might be 1.0393x faster
   integer-divide                                    10.9728+-0.1616     ?     11.1503+-0.0779        ? might be 1.0162x slower
   integer-modulo                                     2.1750+-0.2693            2.1335+-0.1834          might be 1.0195x faster
   is-boolean-fold-tricky                             4.4436+-0.0642     ?      4.4532+-0.1255        ?
   is-boolean-fold                                    2.9101+-0.0645     ?      3.0365+-0.3238        ? might be 1.0434x slower
   is-function-fold-tricky-internal-function   
                                                     12.2345+-0.1123           12.1001+-0.1667          might be 1.0111x faster
   is-function-fold-tricky                            4.8394+-0.3249            4.5409+-0.0508          might be 1.0657x faster
   is-function-fold                                   2.9251+-0.1019            2.8945+-0.0420          might be 1.0106x faster
   is-number-fold-tricky                              4.4663+-0.0899     ?      4.7208+-0.3071        ? might be 1.0570x slower
   is-number-fold                                     2.9815+-0.2366     ?      3.0632+-0.4344        ? might be 1.0274x slower
   is-object-or-null-fold-functions                   2.9404+-0.0888     ?      2.9926+-0.0865        ? might be 1.0177x slower
   is-object-or-null-fold-less-tricky                 4.6798+-0.2088     ?      4.8193+-0.5546        ? might be 1.0298x slower
   is-object-or-null-fold-tricky                      6.6441+-0.0911     ?      6.7177+-0.2941        ? might be 1.0111x slower
   is-object-or-null-fold                             3.0332+-0.3592            2.9317+-0.0560          might be 1.0346x faster
   is-object-or-null-trickier-function                4.8288+-0.2581     ?      4.9682+-0.5829        ? might be 1.0289x slower
   is-object-or-null-trickier-internal-function   
                                                     12.6811+-0.1353           12.6036+-0.1500        
   is-object-or-null-tricky-function                  4.6794+-0.1851     ?      4.6798+-0.1793        ?
   is-object-or-null-tricky-internal-function   
                                                      9.3841+-0.0969     ^      9.2282+-0.0251        ^ definitely 1.0169x faster
   is-string-fold-tricky                              4.5362+-0.2298            4.5097+-0.1066        
   is-string-fold                                     2.9335+-0.1165     ?      2.9517+-0.1484        ?
   is-undefined-fold-tricky                           3.9155+-0.2980            3.7580+-0.0501          might be 1.0419x faster
   is-undefined-fold                                  2.9304+-0.2756            2.9117+-0.0663        
   large-int-captured                                 4.6771+-0.1071     ?      4.7965+-0.2385        ? might be 1.0255x slower
   large-int-neg                                     16.8267+-0.7082           16.1510+-0.0990          might be 1.0418x faster
   large-int                                         15.4010+-0.7602           14.8806+-0.7673          might be 1.0350x faster
   load-varargs-elimination                          23.5296+-1.3805     ?     23.8137+-1.0368        ? might be 1.0121x slower
   logical-not                                        4.6103+-0.2167     ?      4.6665+-0.0509        ? might be 1.0122x slower
   lots-of-fields                                    13.9744+-1.5435           12.2718+-0.3816          might be 1.1387x faster
   make-indexed-storage                               3.4128+-0.5321            3.1217+-0.1355          might be 1.0932x faster
   make-rope-cse                                      5.0898+-0.4059            4.9217+-0.4185          might be 1.0342x faster
   marsaglia-larger-ints                             35.7555+-0.4441     ?     36.5179+-0.9231        ? might be 1.0213x slower
   marsaglia-osr-entry                               24.6088+-1.6043           23.1935+-0.5289          might be 1.0610x faster
   max-boolean                                        2.5132+-0.0244            2.5070+-0.1019        
   method-on-number                                  19.2559+-0.9812           18.8338+-0.5838          might be 1.0224x faster
   min-boolean                                        2.7620+-0.3547            2.7012+-0.3364          might be 1.0225x faster
   minus-boolean-double                               3.3093+-0.1667            3.1975+-0.1014          might be 1.0350x faster
   minus-boolean                                      2.3786+-0.1176     ?      2.4984+-0.2840        ? might be 1.0504x slower
   misc-strict-eq                                    39.4812+-0.4297     ?     40.3440+-1.5598        ? might be 1.0219x slower
   mod-boolean-double                                11.1617+-0.5560           10.9268+-0.0485          might be 1.0215x faster
   mod-boolean                                        7.8326+-0.0313     ?      7.8566+-0.0339        ?
   mul-boolean-double                                 3.8139+-0.1585            3.7475+-0.0703          might be 1.0177x faster
   mul-boolean                                        2.9316+-0.1336     ?      3.0559+-0.3111        ? might be 1.0424x slower
   neg-boolean                                        3.2533+-0.1524     ?      3.3332+-0.2245        ? might be 1.0246x slower
   negative-zero-divide                               0.3845+-0.0514     ?      0.4095+-0.0337        ? might be 1.0652x slower
   negative-zero-modulo                               0.3833+-0.0456            0.3688+-0.0182          might be 1.0392x faster
   negative-zero-negate                               0.3423+-0.0268     ?      0.3428+-0.0119        ?
   nested-function-parsing                           37.9911+-0.3852     ?     38.8340+-1.4505        ? might be 1.0222x slower
   new-array-buffer-dead                            114.2654+-1.0655          112.7857+-3.0483          might be 1.0131x faster
   new-array-buffer-push                              7.3062+-0.8730     ?      7.6602+-0.9165        ? might be 1.0485x slower
   new-array-dead                                    19.3016+-0.4448     ?     19.5947+-1.1574        ? might be 1.0152x slower
   new-array-push                                     4.0258+-0.2701            3.9507+-0.0962          might be 1.0190x faster
   no-inline-constructor                             41.2367+-1.6571     ?     41.7948+-1.3401        ? might be 1.0135x slower
   number-test                                        3.0797+-0.1737     ?      3.1178+-0.0689        ? might be 1.0124x slower
   object-closure-call                                5.4931+-0.2011     ?      5.6128+-0.1224        ? might be 1.0218x slower
   object-test                                        2.8870+-0.1628     ?      2.9048+-0.1077        ?
   obvious-sink-pathology-taken                     139.8866+-3.4406     ?    140.1260+-1.6541        ?
   obvious-sink-pathology                           133.5171+-1.4272          131.8524+-2.6609          might be 1.0126x faster
   obviously-elidable-new-object                     36.0374+-2.0312           35.4239+-1.7111          might be 1.0173x faster
   plus-boolean-arith                                 2.5742+-0.1385     ?      2.6361+-0.2770        ? might be 1.0240x slower
   plus-boolean-double                                3.1866+-0.0334     ?      3.5384+-0.3908        ? might be 1.1104x slower
   plus-boolean                                       2.4882+-0.3201            2.4080+-0.1047          might be 1.0333x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.4304+-0.1352     ?      3.4701+-0.2341        ? might be 1.0116x slower
   poly-chain-access-different-prototypes             2.7847+-0.3294            2.7135+-0.2026          might be 1.0262x faster
   poly-chain-access-simpler                          3.2732+-0.0565     ?      3.4551+-0.2835        ? might be 1.0556x slower
   poly-chain-access                                  2.6644+-0.0990     ?      2.6671+-0.1451        ?
   poly-stricteq                                     58.6113+-1.6353     ?     59.3873+-1.9009        ? might be 1.0132x slower
   polymorphic-array-call                             1.4585+-0.1828            1.4289+-0.1600          might be 1.0207x faster
   polymorphic-get-by-id                              3.1873+-0.0685     ?      3.2148+-0.1632        ?
   polymorphic-put-by-id                             29.8597+-0.7649     !     34.8102+-2.0426        ! definitely 1.1658x slower
   polymorphic-structure                             13.8747+-0.4026     !     15.0889+-0.1290        ! definitely 1.0875x slower
   polyvariant-monomorphic-get-by-id                  8.5847+-0.1396     ?      8.8850+-0.3018        ? might be 1.0350x slower
   proto-getter-access                                9.0212+-0.1822     ?      9.2098+-0.1617        ? might be 1.0209x slower
   put-by-id-replace-and-transition                   9.2366+-0.3043     ?      9.9343+-1.0743        ? might be 1.0755x slower
   put-by-id-slightly-polymorphic                     2.9110+-0.1465            2.8256+-0.0358          might be 1.0302x faster
   put-by-id                                         12.9597+-0.2712     ?     12.9619+-0.5041        ?
   put-by-val-direct                                  0.3768+-0.0329            0.3720+-0.0543          might be 1.0129x faster
   put-by-val-large-index-blank-indexing-type   
                                                      6.0432+-0.2655     ?      6.1808+-0.9409        ? might be 1.0228x slower
   put-by-val-machine-int                             2.8333+-0.1961            2.7920+-0.2210          might be 1.0148x faster
   rare-osr-exit-on-local                            15.5742+-1.2625           15.2198+-0.5280          might be 1.0233x faster
   register-pressure-from-osr                        21.5911+-0.5151           21.4654+-0.2311        
   setter                                             5.7939+-0.7335     ?      6.2482+-0.9093        ? might be 1.0784x slower
   simple-activation-demo                            24.9401+-0.5866     ?     25.1520+-0.3509        ?
   simple-getter-access                              11.8351+-0.1574     ?     11.9477+-0.2708        ?
   simple-poly-call-nested                            8.1709+-0.1889     ?      8.5159+-0.4287        ? might be 1.0422x slower
   simple-poly-call                                   1.3607+-0.0892            1.2997+-0.0539          might be 1.0469x faster
   sin-boolean                                       23.5075+-1.9057     ?     23.7808+-1.8508        ? might be 1.0116x slower
   singleton-scope                                   61.9665+-1.2413           61.9054+-0.5382        
   sink-function                                     12.3845+-0.4000     ?     12.5642+-0.3602        ? might be 1.0145x slower
   sink-huge-activation                              19.9483+-1.3435           19.6485+-1.9231          might be 1.0153x faster
   sinkable-new-object-dag                           68.8302+-0.4797     !     70.2915+-0.9497        ! definitely 1.0212x slower
   sinkable-new-object-taken                         52.5215+-3.2376           50.5579+-3.4221          might be 1.0388x faster
   sinkable-new-object                               39.4856+-1.6844           38.9836+-1.1977          might be 1.0129x faster
   slow-array-profile-convergence                     2.8122+-0.0550     ?      2.8645+-0.0559        ? might be 1.0186x slower
   slow-convergence                                   2.8490+-0.3254     ?      2.8583+-0.3314        ?
   sorting-benchmark                                 20.4970+-1.3861     ?     20.5786+-1.5470        ?
   sparse-conditional                                 1.2153+-0.1880     ?      1.2227+-0.1494        ?
   splice-to-remove                                  16.7114+-0.4091           16.6602+-0.2607        
   string-char-code-at                               15.7960+-0.1340     ?     15.8749+-0.2088        ?
   string-concat-object                               2.5909+-0.1023            2.5536+-0.0705          might be 1.0146x faster
   string-concat-pair-object                          2.9628+-0.3227            2.7216+-0.2670          might be 1.0886x faster
   string-concat-pair-simple                         11.8533+-0.4858           11.7986+-0.6479        
   string-concat-simple                              12.0878+-0.3372     ?     12.7690+-1.1283        ? might be 1.0564x slower
   string-cons-repeat                                 8.1872+-0.2136     ?      8.4681+-0.8128        ? might be 1.0343x slower
   string-cons-tower                                  8.3201+-0.5081            8.0856+-0.1143          might be 1.0290x faster
   string-equality                                   18.7624+-1.4714     ?     19.2659+-0.8007        ? might be 1.0268x slower
   string-get-by-val-big-char                         7.1884+-0.0843     ?      7.2417+-0.0870        ?
   string-get-by-val-out-of-bounds-insane             3.7664+-0.1938            3.7201+-0.1891          might be 1.0124x faster
   string-get-by-val-out-of-bounds                    5.2885+-0.1272     ?      5.5498+-0.5361        ? might be 1.0494x slower
   string-get-by-val                                  3.3658+-0.1200     ?      3.3811+-0.1525        ?
   string-hash                                        2.1176+-0.1171     ?      2.1634+-0.2375        ? might be 1.0216x slower
   string-long-ident-equality                        14.8856+-0.1478     ?     15.7933+-0.7882        ? might be 1.0610x slower
   string-out-of-bounds                              14.9790+-0.2110     ?     15.1267+-0.2544        ?
   string-repeat-arith                               32.5868+-3.5121           32.3968+-1.7799        
   string-sub                                        64.0807+-2.6853     ?     65.2621+-3.1201        ? might be 1.0184x slower
   string-test                                        2.8726+-0.0398     ?      3.0066+-0.1343        ? might be 1.0467x slower
   string-var-equality                               32.2379+-0.7266     ?     33.2608+-1.3668        ? might be 1.0317x slower
   structure-hoist-over-transitions                   2.8510+-0.1530            2.7248+-0.0544          might be 1.0463x faster
   substring-concat-weird                            40.5408+-1.7205           39.1424+-0.0739          might be 1.0357x faster
   substring-concat                                  44.5048+-1.9053           43.4543+-1.7927          might be 1.0242x faster
   substring                                         46.3014+-2.2047           45.0967+-0.7698          might be 1.0267x faster
   switch-char-constant                               2.7583+-0.0604     ?      2.8072+-0.1109        ? might be 1.0177x slower
   switch-char                                        6.3413+-0.5754     ?      6.4421+-0.7172        ? might be 1.0159x slower
   switch-constant                                    8.6927+-0.3780            8.5945+-0.3122          might be 1.0114x faster
   switch-string-basic-big-var                       18.6696+-1.1455           18.2483+-0.4355          might be 1.0231x faster
   switch-string-basic-big                           14.2734+-0.1405     !     15.0522+-0.4210        ! definitely 1.0546x slower
   switch-string-basic-var                           15.6101+-1.1304           15.2380+-0.1710          might be 1.0244x faster
   switch-string-basic                               13.3378+-0.4533     ?     13.4602+-0.2129        ?
   switch-string-big-length-tower-var                19.9422+-0.4724     ?     20.1412+-0.1833        ?
   switch-string-length-tower-var                    14.7386+-0.1114     ?     15.9446+-1.2237        ? might be 1.0818x slower
   switch-string-length-tower                        12.6075+-0.1204     !     13.1790+-0.4202        ! definitely 1.0453x slower
   switch-string-short                               12.6415+-0.2399     ?     13.3735+-0.9124        ? might be 1.0579x slower
   switch                                            12.7563+-0.2831     ?     12.7643+-0.1898        ?
   tear-off-arguments-simple                          3.4653+-0.0560     ?      3.5398+-0.0682        ? might be 1.0215x slower
   tear-off-arguments                                 4.8747+-0.1590     ?      4.9128+-0.2106        ?
   temporal-structure                                12.0183+-0.2195     ?     12.3038+-0.4327        ? might be 1.0238x slower
   to-int32-boolean                                  14.2053+-1.6050           13.7545+-0.1496          might be 1.0328x faster
   try-catch-get-by-val-cloned-arguments             14.8095+-1.0013     ?     15.2445+-1.3081        ? might be 1.0294x slower
   try-catch-get-by-val-direct-arguments              7.1615+-0.7726            6.8652+-0.4167          might be 1.0432x faster
   try-catch-get-by-val-scoped-arguments              7.9865+-0.9835     ?      8.3562+-1.3528        ? might be 1.0463x slower
   typed-array-get-set-by-val-profiling              33.7243+-2.2643           32.0440+-0.6307          might be 1.0524x faster
   undefined-property-access                        341.2421+-5.2448     ?    343.5424+-2.6354        ?
   undefined-test                                     3.0197+-0.0453     ?      3.2909+-0.2974        ? might be 1.0898x slower
   unprofiled-licm                                   23.9994+-1.1989           23.0131+-0.7784          might be 1.0429x faster
   varargs-call                                      14.3577+-0.7193     ?     15.0235+-0.8286        ? might be 1.0464x slower
   varargs-construct-inline                          28.4197+-0.7694           28.4078+-0.5811        
   varargs-construct                                 23.4635+-1.3672           23.3517+-1.0445        
   varargs-inline                                     9.4035+-0.7153     ?      9.5824+-0.6030        ? might be 1.0190x slower
   varargs-strict-mode                                9.7402+-0.2479     !     10.2469+-0.1348        ! definitely 1.0520x slower
   varargs                                           10.0437+-0.4592     ?     10.3990+-0.2930        ? might be 1.0354x slower
   weird-inlining-const-prop                          2.4199+-0.1948     ?      2.4281+-0.1005        ?

   &lt;geometric&gt;                                        8.5574+-0.0315     ?      8.5882+-0.0284        ? might be 1.0036x slower

                                                        TipOfTree                  FastHole                                     
AsmBench:
   bigfib.cpp                                       496.1484+-3.4991     ?    497.3757+-4.3408        ?
   cray.c                                           426.8403+-1.3148          426.6688+-2.2466        
   dry.c                                            480.5705+-12.1374    ?    488.3330+-4.9998        ? might be 1.0162x slower
   FloatMM.c                                        725.7048+-4.1186          723.6414+-1.0030        
   gcc-loops.cpp                                   4279.9865+-17.1891    ?   4280.8363+-31.9058       ?
   n-body.c                                         977.9814+-3.0799          977.3317+-1.1155        
   Quicksort.c                                      422.5365+-1.8670          421.9398+-7.2656        
   stepanov_container.cpp                          3606.1089+-7.0305     ?   3623.3012+-19.1945       ?
   Towers.c                                         262.6681+-3.7182          260.3554+-0.9014        

   &lt;geometric&gt;                                      792.7713+-2.4106     ?    793.6000+-1.6973        ? might be 1.0010x slower

                                                        TipOfTree                  FastHole                                     
CompressionBench:
   huffman                                          358.5178+-6.1610     !    374.2176+-2.6382        ! definitely 1.0438x slower
   arithmetic-simple                                397.5747+-13.0176    ?    398.3707+-6.0150        ?
   arithmetic-precise                               298.7368+-2.8317          298.2974+-3.2636        
   arithmetic-complex-precise                       298.5862+-5.0330     ?    300.5111+-4.9433        ?
   arithmetic-precise-order-0                       430.1584+-4.5701          427.6608+-6.7332        
   arithmetic-precise-order-1                       329.2172+-4.5584          326.5033+-5.8756        
   arithmetic-precise-order-2                       360.7586+-3.6275          356.9733+-4.1383          might be 1.0106x faster
   arithmetic-simple-order-1                        423.1031+-5.2067     ?    423.6603+-4.4452        ?
   arithmetic-simple-order-2                        466.1451+-3.8909     ?    467.8839+-2.7574        ?
   lz-string                                        322.2347+-3.4978     ?    323.2435+-2.8805        ?

   &lt;geometric&gt;                                      364.3665+-1.5659     ?    365.5926+-0.7096        ? might be 1.0034x slower

                                                        TipOfTree                  FastHole                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   61.9639+-0.2135           61.8863+-0.2132          might be 1.0013x faster</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253135</attachid>
            <date>2015-05-14 12:30:49 -0700</date>
            <delta_ts>2015-05-14 20:08:51 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>10433</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRXBvY2guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vwb2NoLmgJKHJldmlzaW9uIDE4NDM0NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRXBvY2guaAkod29ya2luZyBjb3B5KQpA
QCAtODcsNiArODcsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CiAgICAgfQogICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEVwb2NoJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Vwb2NoIDwgb3RoZXIubV9lcG9jaDsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgRXBvY2gmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG90aGVyIDwgKnRoaXM7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA+IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IEVwb2NoJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
IDwgb3RoZXIpOworICAgIH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zh
c3RTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYXN0U3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjExIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zhc3RTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdEb2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJpYzoKKyAgICBGYXN0U3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiZmFzdCBzdG9y
ZSBiYXJyaWVyIGluc2VydGlvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7CisgICAgICAgIAor
ICAgICAgICBtX2dyYXBoLmNsZWFyRXBvY2hzKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQorICAgICAg
ICAgICAgaGFuZGxlQmxvY2soYmxvY2spOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaGFuZGxlQmxvY2soQmFzaWNCbG9jayogYmxv
Y2spCisgICAgeworICAgICAgICBtX2N1cnJlbnRFcG9jaCA9IEVwb2NoOjpmaXJzdCgpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChtX25vZGVJbmRleCA9IDA7IG1fbm9kZUluZGV4IDwgYmxvY2st
PnNpemUoKTsgKyttX25vZGVJbmRleCkgeworICAgICAgICAgICAgbV9ub2RlID0gYmxvY2stPmF0
KG1fbm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtX25vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgorICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5
OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICAgICAgICAgICAgICBF
ZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0QmFycmllcihjaGlsZDEsIGNoaWxkMyk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIEFycmF5UHVzaDogeworICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGUtPmNoaWxkMSgpLCBtX25vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkb2VzR0MobV9ncmFw
aCwgbV9ub2RlKSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRFcG9jaC5idW1wKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIE5vZGVzIHRoYXQgYWxsb2NhdGUgZ2V0IHRvIHNldCB0
aGVpciBlcG9jaCBiZWNhdXNlIGZvciB0aG9zZSBub2RlcyB3ZSBrbm93IHRoYXQKKyAgICAgICAg
ICAgIC8vIHRoZXkgd2lsbCBiZSB0aGUgbmV3ZXN0IG9iamVjdCBpbiB0aGUgaGVhcC4KKyAgICAg
ICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIE5ld09iamVj
dDoKKyAgICAgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgICAgICBjYXNlIE5ld0FycmF5
V2l0aFNpemU6CisgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICAgICAg
Y2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICAgICAgY2FzZSBOZXdSZWdleHA6CisgICAgICAg
ICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgY2FzZSBNYXRlcmlh
bGl6ZUNyZWF0ZUFjdGl2YXRpb246CisgICAgICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoK
KyAgICAgICAgICAgIGNhc2UgTWFrZVJvcGU6CisgICAgICAgICAgICBjYXNlIENyZWF0ZUFjdGl2
YXRpb246CisgICAgICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAg
ICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgY2FzZSBDcmVhdGVD
bG9uZWRBcmd1bWVudHM6CisgICAgICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgICAgICAg
ICAgICAgIG1fbm9kZS0+c2V0RXBvY2gobV9jdXJyZW50RXBvY2gpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydEJhcnJp
ZXIoRWRnZSBiYXNlLCBFZGdlIGNoaWxkKQorICAgIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCBhIHN0b3JlIGJhcnJpZXIgaWYgdGhlIGNoaWxkIGlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIGEg
Y2VsbC4gV2UgZG9uJ3QKKyAgICAgICAgLy8gdHJ5IHZlcnkgaGFyZCBoZXJlLgorICAgICAgICBp
ZiAoY2hpbGQtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGlmICghY2hpbGQtPmFzSlNW
YWx1ZSgpLmlzQ2VsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoY2hpbGQtPnJlc3VsdCgpKSB7CisgICAgICAgICAgICBj
YXNlIE5vZGVSZXN1bHROdW1iZXI6CisgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHREb3VibGU6
CisgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKKyAgICAgICAgICAgIGNhc2UgTm9k
ZVJlc3VsdEludDUyOgorICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBX
ZSBkb24ndCBuZWVkIGEgc3RvcmUgYmFycmllciBpZiB0aGUgYmFzZSBpcyBhdCBsZWFzdCBhcyBu
ZXcgYXMgdGhlIGNoaWxkLiBGb3IKKyAgICAgICAgLy8gZXhhbXBsZSB0aGlzIHdvbid0IG5lZWQg
YSBiYXJyaWVyOgorICAgICAgICAvLworICAgICAgICAvLyB2YXIgbyA9IHt9CisgICAgICAgIC8v
IHZhciBwID0ge30KKyAgICAgICAgLy8gcC5mID0gbworICAgICAgICAvLworICAgICAgICAvLyBU
aGlzIGlzIHN0cm9uZ2VyIHRoYW4gdGhlIGN1cnJlbnRFcG9jaCBydWxlIGluIGluc2VydEJhcnJp
ZXIoRWRnZSksIGJlY2F1c2UgaXQgd2lsbAorICAgICAgICAvLyBhbHNvIGVsaW1pbmF0ZSBiYXJy
aWVycyBpbiBjYXNlcyBsaWtlIHRoaXM6CisgICAgICAgIC8vCisgICAgICAgIC8vIHZhciBvID0g
e30gLy8gby5lcG9jaCA9IDEsIGN1cnJlbnRFcG9jaCA9IDEKKyAgICAgICAgLy8gdmFyIHAgPSB7
fSAvLyBvLmVwb2NoID0gMSwgcC5lcG9jaCA9IDIsIGN1cnJlbnRFcG9jaCA9IDIKKyAgICAgICAg
Ly8gdmFyIHEgPSB7fSAvLyBvLmVwb2NoID0gMSwgcC5lcG9jaCA9IDIsIHEuZXBvY2ggPSAzLCBj
dXJyZW50RXBvY2ggPSAzCisgICAgICAgIC8vIHAuZiA9IG8gLy8gcC5lcG9jaCA+PSBvLmVwb2No
CisgICAgICAgIGlmIChiYXNlLT5lcG9jaCgpID49IGNoaWxkLT5lcG9jaCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaW5zZXJ0QmFycmllcihiYXNlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBpbnNlcnRCYXJyaWVyKEVkZ2UgYmFzZSkKKyAgICB7CisgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgYSBzdG9yZSBiYXJyaWVyIGlmIHRoZSBlcG9jaCBvZiB0aGUgYmFz
ZSBpcyBpZGVudGljYWwgdG8gdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gZXBvY2guIFRoYXQgbWVh
bnMgdGhhdCB3ZSBlaXRoZXIganVzdCBhbGxvY2F0ZWQgdGhlIG9iamVjdCBhbmQgc28gaXQncyBn
dWFyYW50ZWVkIHRvCisgICAgICAgIC8vIGJlIGluIG5ld2dlbiwgb3Igd2UganVzdCByYW4gYSBi
YXJyaWVyIG9uIGl0IHNvIGl0J3MgZ3VhcmFudGVlZCB0byBiZSByZW1lbWJlcmVkCisgICAgICAg
IC8vIGFscmVhZHkuCisgICAgICAgIGlmIChiYXNlLT5lcG9jaCgpID09IG1fY3VycmVudEVwb2No
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIHN1cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0
IG9mIGNvb2wuIEJ1dAorICAgICAgICAvLyByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KKyAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG1fbm9kZUluZGV4
LCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBtX25vZGUtPm9yaWdpbiwgRWRnZShiYXNlLm5vZGUo
KSwgQ2VsbFVzZSkpOworICAgIH0KKyAgICAKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25T
ZXQ7CisgICAgRXBvY2ggbV9jdXJyZW50RXBvY2g7CisgICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7
CisgICAgTm9kZSogbV9ub2RlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jv
b2wgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmIGdyYXBoKQoreworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgRmFzdCBTdG9yZSBCYXJyaWVyIElu
c2VydGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxGYXN0U3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Zhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFzdFN0b3JlQmFycmllckluc2VydGlvblBo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zhc3RT
dG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERGR0Zhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZV9oCisjZGVmaW5lIERGR0Zhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZV9oCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBHcmFwaDsKKworLy8gSW5zZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1h
bm5lciB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgorLy8gVXNl
cyBhIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5k
YW50IGJhcnJpZXJzLgorCitib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdy
YXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHRmFzdFN0b3JlQmFycmllckluc2VydGlvblBoYXNlX2gK
Kwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253170</attachid>
            <date>2015-05-14 20:08:51 -0700</date>
            <delta_ts>2015-05-14 21:17:01 -0700</delta_ts>
            <desc>it&apos;s getting interesting</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18603</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrTWFwLmgJKHJldmlzaW9uIDE4
NDM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTgsNiArNTgsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92ZWN0b3Jb
YmxvY2tJbmRleF07CiAgICAgfQogICAgIAorICAgIFQmIGF0KEJsb2NrSW5kZXggYmxvY2tJbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9ja0luZGV4XTsKKyAgICB9Cisg
ICAgCisgICAgY29uc3QgVCYgYXQoQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBU
JiBhdChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3Rvclti
bG9jay0+aW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBhdChCYXNpY0Jsb2NrKiBi
bG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9jay0+aW5kZXhd
OworICAgIH0KKwogICAgIFQmIG9wZXJhdG9yW10oQmxvY2tJbmRleCBibG9ja0luZGV4KQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdFcG9jaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRXBvY2guaAkocmV2aXNpb24gMTg0MzQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdFcG9jaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywyNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiAgICAg
CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgRXBvY2gmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZXBvY2ggPCBvdGhlci5tX2Vwb2NoOworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yPihjb25zdCBFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gb3RoZXIgPCAqdGhpczsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IEVwb2NoJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID4g
b3RoZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgRXBvY2gmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPCBvdGhlcik7CisgICAg
fQorICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRG9lc0dDLmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCituYW1lc3BhY2UgeworCitlbnVtIGNs
YXNzIFBoYXNlTW9kZSB7CisgICAgRmFzdCwKKyAgICBHbG9iYWwKK307CisKK3RlbXBsYXRlPFBo
YXNlTW9kZSBtb2RlPgorY2xhc3MgU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHViaWM6CisgICAgU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UoR3JhcGgmIGdy
YXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCBtb2RlID09IFBoYXNlTW9kZTo6RmFzdCA/ICJm
YXN0IHN0b3JlIGJhcnJpZXIgaW5zZXJ0aW9uIiA6ICJnbG9iYWwgc3RvcmUgYmFycmllciBpbnNl
cnRpb24iKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAg
ICAgIGNhc2UgUGhhc2VNb2RlOjpGYXN0OiB7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fZ3JhcGguY2xlYXJFcG9jaHMoKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAgICAg
ICAgaGFuZGxlQmxvY2soYmxvY2spOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFBoYXNlTW9kZTo6R2xvYmFsOiB7CisgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtID09IFNT
QSk7CisKKyAgICAgICAgICAgIG1fc3RhdGUgPSBzdGQ6Om1ha2VfdW5pcXVlPEluUGxhY2VBYnN0
cmFjdFN0YXRlPihtX2dyYXBoKTsKKyAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPEFic3RyYWN0SW50ZXJwcmV0ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+PihtX2dy
YXBoLCAqbV9zdGF0ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faXNDb252ZXJnZWQg
PSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmlyc3QgcnVuIHRoZSBhbmFs
eXNpcy4gSW5zaWRlIGJhc2ljIGJsb2NrcyB3ZSB1c2UgYW4gZXBvY2gtYmFzZWQgYW5hbHlzaXMg
dGhhdAorICAgICAgICAgICAgLy8gaXMgdmVyeSBwcmVjaXNlLiBBdCBibG9jayBib3VuZGFyaWVz
LCB3ZSBqdXN0IHByb3BhZ2F0ZSB3aGljaCBub2RlcyBtYXkgbmVlZCBhCisgICAgICAgICAgICAv
LyBiYXJyaWVyLiBUaGlzIGdpdmVzIHVzIGEgdmVyeSBuaWNlIGJvdHRvbS0+dG9wIGZpeHBvaW50
OiB3ZSBzdGFydCBvdXQgYXNzdW1pbmcKKyAgICAgICAgICAgIC8vIHRoYXQgbm8gbm9kZSBuZWVk
cyBhbnkgYmFycmllcnMgYXJlIGJsb2NrIGJvdW5kYXJpZXMsIGFuZCB0aGVuIHdlIGNvbnZlcmdl
CisgICAgICAgICAgICAvLyB0b3dhcmRzIGJlbGlldmluZyB0aGF0IGFsbCBub2RlcyBuZWVkIGJh
cnJpZXJzLiAiTmVlZGluZyBhIGJhcnJpZXIiIGlzIGxpa2UKKyAgICAgICAgICAgIC8vIHNheWlu
ZyB0aGF0IHRoZSBub2RlIGlzIGluIGEgcGFzdCBlcG9jaC4gIk5vdCBuZWVkaW5nIGEgYmFycmll
ciIgaXMgbGlrZSBzYXlpbmcKKyAgICAgICAgICAgIC8vIHRoYXQgdGhlIG5vZGUgaXMgaW4gdGhl
IGN1cnJlbnQgZXBvY2guCisgICAgICAgICAgICBtX3N0YXRlQXRIZWFkID0gc3RkOjptYWtlX3Vu
aXF1ZTxCbG9ja01hcDxIYXNoU2V0Kj4+KG1fZ3JhcGgpOworICAgICAgICAgICAgbV9zdGF0ZUF0
VGFpbCA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvY2tNYXA8SGFzaFNldCo+PihtX2dyYXBoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgQmxvY2tMaXN0IHBvc3RPcmRlciA9IG1fZ3JhcGguYmxv
Y2tzSW5Qb3N0T3JkZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAg
Y2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElu
dGVudGlvbmFsIGJhY2t3YXJkcyBsb29wIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIFJQTy4KKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBwb3N0T3JkZXIuc2l6ZSgpOyBi
bG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
cG9zdE9yZGVyW2Jsb2NrSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFoYW5kbGVCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBibG9jayBkaWRuJ3QgZmluaXNoLCB0aGVuIGl0IGNhbm5vdCBhZmZlY3Qg
dGhlIGZpeHBvaW50LgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IC8vIENvbnN0cnVjdCB0aGUgc3RhdGUtYXQtdGFpbCBiYXNlZCBvbiB0aGUgZXBvY2hzIG9mIGxp
dmUgbm9kZXMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGVwb2NoLgor
ICAgICAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBzdGF0ZTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmVwb2NoKCkgIT0gbV9jdXJyZW50RXBvY2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBvbGRlciB0aGFu
IHRoZSBjdXJyZW50IGVwb2NoLCB0aGVuIHdlIG1heSBuZWVkIHRvCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gcnVuIGEgYmFycmllciBvbiBpdCBpbiB0aGUgZnV0dXJlLiBTbywgYWRk
IGl0IHRvIHRoZSBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hZGQo
bm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBt
X3N0YXRlQXRUYWlsLT5hdChibG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXRlcmF0aW9uIGRpZG4ndCBsZWFybiBhbnl0aGluZyBuZXcgYWJvdXQgdGhpcyBibG9jay4K
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2VkIHRo
aW5ncy4gTWFrZSBzdXJlIHRoYXQgd2UgbG9vcCBvbmUgbW9yZSB0aW1lLgorICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogc3RhdGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUF0VGFpbC0+YXQoYmxvY2spLmFkZChu
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGVsbCBoYW5kbGVCbG9jaygpIHRo
YXQgaXQncyB0aW1lIHRvIGFjdHVhbGx5IGluc2VydCBiYXJyaWVycyBmb3IgcmVhbC4KKyAgICAg
ICAgICAgIG1faXNDb252ZXJnZWQgPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQor
ICAgICAgICAgICAgICAgIGhhbmRsZUJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBib29sIGhhbmRsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsK
KyAgICAgICAgbV9jdXJyZW50RXBvY2ggPSBFcG9jaDo6Zmlyc3QoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtb2RlID09IFBoYXNlTW9kZTo6R2xvYmFsKSB7CisgICAgICAgICAgICBpZiAoIWJs
b2NrLT5jZmFIYXNWaXNpdGVkKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIG1fc3RhdGUtPmJlZ2luQmFzaWNCbG9jayhibG9jayk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9zdGF0ZUF0SGVhZC0+YXQoYmxvY2spLmNvbnRhaW5zKG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKG1fY3VycmVu
dEVwb2NoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVzdWx0
ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAobV9ub2RlSW5kZXggPSAwOyBtX25vZGVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbV9ub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIG1fbm9k
ZSA9IGJsb2NrLT5hdChtX25vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChtb2RlID09IFBoYXNlTW9kZTo6R2xvYmFsKSB7CisgICAgICAgICAgICAgICAgLy8gRXhlY3V0
ZSBlZGdlcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQgYmFycmll
cnMgaWYgdGhlCisgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uIGRvaW5nIHRoZSBzdG9yZSBk
b2VzIGEgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgdGhlIGNoaWxkIGlzIG5vdAorICAgICAgICAg
ICAgICAgIC8vIGEgY2VsbC4KKyAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLT5zdGFydEV4
ZWN1dGluZygpOworICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXItPmV4ZWN1dGVFZGdlcyht
X25vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2gg
KG1fbm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgp
LnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAg
ICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGNh
c2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAgICAgRWRn
ZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAgICAgICAg
ICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpOworICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKGNoaWxkMSwgY2hpbGQzKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX25v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZS0+Y2hpbGQxKCksIG1fbm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZTogeworICAgICAgICAgICAgICAgIGluc2Vy
dEJhcnJpZXIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dENsb3N1cmVW
YXI6CisgICAgICAgICAgICBjYXNlIFB1dFRvQXJndW1lbnRzOiB7CisgICAgICAgICAgICAgICAg
aW5zZXJ0QmFycmllcihtX25vZGUtPmNoaWxkMSgpLCBtX25vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkb2VzR0MobV9ncmFwaCwgbV9ub2RlKSkKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRFcG9jaC5idW1wKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIE5vZGVzIHRoYXQgYWxsb2NhdGUgZ2V0IHRvIHNldCB0aGVpciBlcG9jaCBiZWNh
dXNlIGZvciB0aG9zZSBub2RlcyB3ZSBrbm93IHRoYXQKKyAgICAgICAgICAgIC8vIHRoZXkgd2ls
bCBiZSB0aGUgbmV3ZXN0IG9iamVjdCBpbiB0aGUgaGVhcC4KKyAgICAgICAgICAgIHN3aXRjaCAo
bV9ub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgICAg
IGNhc2UgTmV3QXJyYXk6CisgICAgICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CisgICAg
ICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICAgICAgY2FzZSBOZXdUeXBlZEFy
cmF5OgorICAgICAgICAgICAgY2FzZSBOZXdSZWdleHA6CisgICAgICAgICAgICBjYXNlIE1hdGVy
aWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2
YXRpb246CisgICAgICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKKyAgICAgICAgICAgIGNh
c2UgTWFrZVJvcGU6CisgICAgICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CisgICAgICAg
ICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNhc2UgQ3JlYXRl
U2NvcGVkQXJndW1lbnRzOgorICAgICAgICAgICAgY2FzZSBDcmVhdGVDbG9uZWRBcmd1bWVudHM6
CisgICAgICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgICAgICAgICAgICAgIG1fbm9kZS0+
c2V0RXBvY2gobV9jdXJyZW50RXBvY2gpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1vZGUgPT0gUGhhc2VNb2RlOjpHbG9iYWwpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXItPmV4ZWN1dGVFZmZlY3RzKG5vZGVJ
bmRleCwgbV9ub2RlKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobW9kZSA9PSBQaGFzZU1vZGU6Okds
b2JhbCkKKyAgICAgICAgICAgIG1fc3RhdGUtPnJlc2V0KCk7CisKKyAgICAgICAgaWYgKHJlYWxs
eUluc2VydEJhcnJpZXJzKCkpCisgICAgICAgICAgICBtX2luc2VydGlvblNldC0+ZXhlY3V0ZShi
bG9jayk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGluc2VydEJhcnJpZXIoRWRnZSBiYXNlLCBFZGdlIGNoaWxkKQorICAgIHsKKyAgICAg
ICAgLy8gV2UgZG9uJ3QgbmVlZCBhIHN0b3JlIGJhcnJpZXIgaWYgdGhlIGNoaWxkIGlzIGd1YXJh
bnRlZWQgdG8gbm90IGJlIGEgY2VsbC4KKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAg
IGNhc2UgUGhhc2VNb2RlOjpGYXN0OiB7CisgICAgICAgICAgICAvLyBEb24ndCB0cnkgdG9vIGhh
cmQgYmVjYXVzZSBpdCdzIHRvbyBleHBlbnNpdmUgdG8gcnVuIEFJLgorICAgICAgICAgICAgaWYg
KGNoaWxkLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjaGlsZC0+YXNK
U1ZhbHVlKCkuaXNDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjaGlsZC0+cmVzdWx0KCkpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHROdW1iZXI6CisgICAgICAgICAgICAgICAg
Y2FzZSBOb2RlUmVzdWx0RG91YmxlOgorICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdElu
dDMyOgorICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDUyOgorICAgICAgICAgICAg
ICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUGhhc2VNb2RlOjpHbG9iYWw6IHsKKyAg
ICAgICAgICAgIC8vIEdvIGludG8gcmFnZSBtb2RlIHRvIGVsaW1pbmF0ZSBhbnkgY2hhbmNlIG9m
IGEgYmFycmllciB3aXRoIGEgbm9uLWNlbGwgY2hpbGQuIFdlCisgICAgICAgICAgICAvLyBjYW4g
YWZmb3JkIHRvIGtlZXAgYXJvdW5kIEFJIGluIEdsb2JhbCBtb2RlLgorICAgICAgICAgICAgaWYg
KCFtX2l0ZXJwcmV0ZXItPm5lZWRzVHlwZUNoZWNrKGNoaWxkLCB+U3BlY0NlbGwpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBzdG9yZSBiYXJyaWVyIGlmIHRoZSBiYXNl
IGlzIGF0IGxlYXN0IGFzIG5ldyBhcyB0aGUgY2hpbGQuIEZvcgorICAgICAgICAvLyBleGFtcGxl
IHRoaXMgd29uJ3QgbmVlZCBhIGJhcnJpZXI6CisgICAgICAgIC8vCisgICAgICAgIC8vIHZhciBv
ID0ge30KKyAgICAgICAgLy8gdmFyIHAgPSB7fQorICAgICAgICAvLyBwLmYgPSBvCisgICAgICAg
IC8vCisgICAgICAgIC8vIFRoaXMgaXMgc3Ryb25nZXIgdGhhbiB0aGUgY3VycmVudEVwb2NoIHJ1
bGUgaW4gaW5zZXJ0QmFycmllcihFZGdlKSwgYmVjYXVzZSBpdCB3aWxsCisgICAgICAgIC8vIGFs
c28gZWxpbWluYXRlIGJhcnJpZXJzIGluIGNhc2VzIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gdmFyIG8gPSB7fSAvLyBvLmVwb2NoID0gMSwgY3VycmVudEVwb2NoID0gMQorICAg
ICAgICAvLyB2YXIgcCA9IHt9IC8vIG8uZXBvY2ggPSAxLCBwLmVwb2NoID0gMiwgY3VycmVudEVw
b2NoID0gMgorICAgICAgICAvLyB2YXIgcSA9IHt9IC8vIG8uZXBvY2ggPSAxLCBwLmVwb2NoID0g
MiwgcS5lcG9jaCA9IDMsIGN1cnJlbnRFcG9jaCA9IDMKKyAgICAgICAgLy8gcC5mID0gbyAvLyBw
LmVwb2NoID49IG8uZXBvY2gKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU29tZXRoaW5nIHdlIHdh
dGNoIG91dCBmb3IgaGVyZSBpcyB0aGF0IHRoZSBudWxsIGVwb2NoIGlzIGEgY2F0Y2ggYWxsIGZv
ciBvYmplY3RzCisgICAgICAgIC8vIGFsbG9jYXRlZCBiZWZvcmUgd2UgZGlkIGFueSBlcG9jaCB0
cmFja2luZy4gVHdvIG9iamVjdHMgYmVpbmcgaW4gdGhlIG51bGwgZXBvY2gKKyAgICAgICAgLy8g
bWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93IHRoZWlyIGVwb2NoIHJlbGF0aW9uc2hpcC4KKyAgICAg
ICAgaWYgKCEhYmFzZSAmJiBiYXNlLT5lcG9jaCgpID49IGNoaWxkLT5lcG9jaCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaW5zZXJ0QmFycmllcihiYXNlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBpbnNlcnRCYXJyaWVyKEVkZ2UgYmFzZSkKKyAgICB7CisgICAg
ICAgIC8vIFdlIGRvbid0IG5lZWQgYSBzdG9yZSBiYXJyaWVyIGlmIHRoZSBlcG9jaCBvZiB0aGUg
YmFzZSBpcyBpZGVudGljYWwgdG8gdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gZXBvY2guIFRoYXQg
bWVhbnMgdGhhdCB3ZSBlaXRoZXIganVzdCBhbGxvY2F0ZWQgdGhlIG9iamVjdCBhbmQgc28gaXQn
cyBndWFyYW50ZWVkIHRvCisgICAgICAgIC8vIGJlIGluIG5ld2dlbiwgb3Igd2UganVzdCByYW4g
YSBiYXJyaWVyIG9uIGl0IHNvIGl0J3MgZ3VhcmFudGVlZCB0byBiZSByZW1lbWJlcmVkCisgICAg
ICAgIC8vIGFscmVhZHkuCisgICAgICAgIGlmIChiYXNlLT5lcG9jaCgpID09IG1fY3VycmVudEVw
b2NoKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UncmUg
aW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0aGUgYmFycmllcnMgb25jZSB3
ZSBoYXZlIGNvbnZlcmdlZC4KKyAgICAgICAgaWYgKHJlYWxseUluc2VydEJhcnJpZXJzKCkpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBzdXBwb3J0IFN0b3JlQmFycmllcihVbnR5
cGVkVXNlOikuIFRoYXQgd291bGQgYmUgc29ydCBvZiBjb29sLgorICAgICAgICAgICAgLy8gQnV0
IHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0LgorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBtX25vZGVJbmRleCwgU3BlY05vbmUsIFN0b3Jl
QmFycmllciwgbV9ub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgRWRnZShiYXNlLm5vZGUo
KSwgQ2VsbFVzZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBiYXNlLT5zZXRFcG9j
aChtX2N1cnJlbnRFcG9jaCk7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVhbGx5SW5zZXJ0QmFy
cmllcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1vZGUgPT0gUGhhc2VNb2RlOjpGYXN0IHx8
IG1faXNDb252ZXJnZWQ7CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBtX2luc2VydGlv
blNldDsKKyAgICBFcG9jaCBtX2N1cnJlbnRFcG9jaDsKKyAgICB1bnNpZ25lZCBtX25vZGVJbmRl
eDsKKyAgICBOb2RlKiBtX25vZGU7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEluUGxhY2VB
YnN0cmFjdFN0YXRlPiBtX3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBYnN0cmFjdEludGVy
cHJldGVyPEluUGxhY2VBYnN0cmFjdFN0YXRlPj4gbV9pbnRlcnByZXRlcjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8QmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+PiBtX3N0YXRlQXRIZWFkOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4+IG1fc3RhdGVBdFRhaWw7Cisg
ICAgYm9vbCBtX2lzQ29udmVyZ2VkOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K2Jvb2wgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmIGdyYXBoKQorewor
ICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgRmFzdCBTdG9yZSBCYXJyaWVy
IEluc2VydGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJJbnNl
cnRpb25QaGFzZTxQaGFzZU1vZGU6OkZhc3Q+PihncmFwaCk7Cit9CisKK2Jvb2wgcGVyZm9ybUds
b2JhbFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBHbG9iYWwgU3RvcmUgQmFycmllciBJbnNlcnRpb24g
UGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2U8
UGhhc2VNb2RlOjpHbG9iYWw+PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZV9oCisjZGVm
aW5lIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisv
LyBJbnNlcnRzIHN0b3JlIGJhcnJpZXJzIGluIGEgYmxvY2stbG9jYWwgbWFubmVyIHdpdGhvdXQg
Y29uc3VsdGluZyB0aGUgYWJzdHJhY3QgaW50ZXJwcmV0ZXIuCisvLyBVc2VzIGEgc2ltcGxlIGVw
b2NoLWJhc2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmllcnMu
IFRoaXMgcGhhc2UgcmVxdWlyZXMKKy8vIHRoYXQgd2UgYXJlIG5vdCBpbiBTU0EuCitib29sIHBl
cmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CisKKy8vIEluc2VydHMgc3Rv
cmUgYmFycmllcnMgdXNpbmcgYSBnbG9iYWwgYW5hbHlzaXMgYW5kIGNvbnN1bHRzIHRoZSBhYnN0
cmFjdCBpbnRlcnByZXRlci4gVXNlcyBhCisvLyBzaW1wbGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMg
dG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJyaWVycywgYnV0IG9ubHkgcHJvcGFnYXRl
cyAic2FtZQorLy8gZXBvY2ggYXMgY3VycmVudCIgcHJvcGVydHkgZnJvbSBvbmUgYmxvY2sgdG8g
dGhlIG5leHQuIFRoaXMgcGhhc2UgcmVxdWlyZXMgU1NBLiBUaGlzIHBoYXNlCisvLyBhbHNvIHJl
cXVpcmVzIGhhdmluZyB2YWxpZCBBSSBhbmQgbGl2ZW5lc3MuCitib29sIHBlcmZvcm1HbG9iYWxT
dG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253174</attachid>
            <date>2015-05-14 21:17:01 -0700</date>
            <delta_ts>2015-05-14 22:53:45 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38613</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrTWFwLmgJKHJldmlzaW9uIDE4
NDM2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTgsNiArNTgsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92ZWN0b3Jb
YmxvY2tJbmRleF07CiAgICAgfQogICAgIAorICAgIFQmIGF0KEJsb2NrSW5kZXggYmxvY2tJbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9ja0luZGV4XTsKKyAgICB9Cisg
ICAgCisgICAgY29uc3QgVCYgYXQoQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBU
JiBhdChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3Rvclti
bG9jay0+aW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBhdChCYXNpY0Jsb2NrKiBi
bG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9jay0+aW5kZXhd
OworICAgIH0KKwogICAgIFQmIG9wZXJhdG9yW10oQmxvY2tJbmRleCBibG9ja0luZGV4KQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdFcG9jaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRXBvY2guaAkocmV2aXNpb24gMTg0MzY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdFcG9jaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywyNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiAgICAg
CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgRXBvY2gmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZXBvY2ggPCBvdGhlci5tX2Vwb2NoOworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yPihjb25zdCBFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gb3RoZXIgPCAqdGhpczsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IEVwb2NoJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID4g
b3RoZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgRXBvY2gmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPCBvdGhlcik7CisgICAg
fQorICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTg0MzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIyLDcgKzcyMiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25DZWxsVXNlPihjaGlsZDEpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8
SW50MzJVc2U+KGNoaWxkMik7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1f
aW5kZXhJbkJsb2NrLCBjaGlsZDEsIGNoaWxkMyk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
Rm9yQmFycmllcihjaGlsZDMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4oY2hpbGQxKTsK
QEAgLTc2MCw3ICs3NjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZToKLSAgICAgICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9pbmRl
eEluQmxvY2ssIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlRm9yQmFycmllcihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
OTIyLDcgKzkyMiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTkzNSw3ICs5MzQsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgUHV0VG9Bcmd1bWVudHM6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdG9yZUJh
cnJpZXIobV9pbmRleEluQmxvY2ssIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTk1MCw3ICs5NDksNiBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBj
YXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJp
ZXIobV9pbmRleEluQmxvY2sgKyAxLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkBAIC05ODYsNyArOTg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBQdXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewogICAgICAgICAg
ICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnNlcnRT
dG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKG5vZGUtPmNoaWxkMigpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEwMjksMTMgKzEwMjcsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQo
KSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKLSAg
ICAgICAgICAgIGluc2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jaywgbm9kZS0+Y2hpbGQy
KCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUZvckJhcnJpZXIobm9k
ZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8
Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVy
KG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgc3BlY3VsYXRlRm9yQmFycmllcihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMTIzLDggKzExMjEsNyBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKICAgICAgICAgICAg
IGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgaW5zZXJ0U3Rv
cmVCYXJyaWVyKAotICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlRm9yQmFycmllcihub2Rl
LT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xNzYzLDM3
ICsxNzYwLDM1IEBAIHByaXZhdGU6CiAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZCh1c2VLaW5kKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBpbnNlcnRTdG9yZUJhcnJpZXIodW5zaWduZWQgaW5kZXhJ
bkJsb2NrLCBFZGdlIGJhc2UsIEVkZ2UgdmFsdWUgPSBFZGdlKCkpCisgICAgdm9pZCBzcGVjdWxh
dGVGb3JCYXJyaWVyKEVkZ2UgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoISF2YWx1ZSkgewot
ICAgICAgICAgICAgaWYgKHZhbHVlLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpKSB7Ci0gICAgICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2s8SW50MzJVc2U+KGluZGV4SW5CbG9jaywgdmFsdWUubm9kZSgp
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICgh
aXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBpZiAodmFsdWUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkpIHsKKyAgICAgICAg
ICAgIGluc2VydENoZWNrPEludDMyVXNlPihtX2luZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAodmFsdWUtPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgewotICAgICAgICAgICAgICAg
IGluc2VydENoZWNrPEJvb2xlYW5Vc2U+KGluZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZS0+
c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVjazxCb29s
ZWFuVXNlPihtX2luZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFsdWUtPnNob3Vs
ZFNwZWN1bGF0ZU90aGVyKCkpIHsKLSAgICAgICAgICAgICAgICBpbnNlcnRDaGVjazxPdGhlclVz
ZT4oaW5kZXhJbkJsb2NrLCB2YWx1ZS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLT5zaG91bGRTcGVjdWxhdGVPdGhlcigp
KSB7CisgICAgICAgICAgICBpbnNlcnRDaGVjazxPdGhlclVzZT4obV9pbmRleEluQmxvY2ssIHZh
bHVlLm5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHZhbHVlLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewotICAg
ICAgICAgICAgICAgIGluc2VydENoZWNrPE51bWJlclVzZT4oaW5kZXhJbkJsb2NrLCB2YWx1ZS5u
b2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
aWYgKHZhbHVlLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgaW5zZXJ0
Q2hlY2s8TnVtYmVyVXNlPihtX2luZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFs
dWUtPnNob3VsZFNwZWN1bGF0ZU5vdENlbGwoKSkgewotICAgICAgICAgICAgICAgIGluc2VydENo
ZWNrPE5vdENlbGxVc2U+KGluZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZS0+c2hvdWxkU3Bl
Y3VsYXRlTm90Q2VsbCgpKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVjazxOb3RDZWxsVXNlPiht
X2luZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotCi0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fY3VycmVudE5vZGUtPm9yaWdp
biwgYmFzZSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPFVzZUtpbmQgdXNlS2luZD4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTg0MzY3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNyArNjAsNyBAQAogI2luY2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKICNpbmNs
dWRlICJERkdTdGFja0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuaCIKLSNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJFbGlzaW9u
UGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1
cmVSZWdpc3RyYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1RpZXJVcENoZWNrSW5qZWN0aW9u
UGhhc2UuaCIKQEAgLTMxNSw3ICszMTUsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyCiAgICAgCiAgICAgICAgIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihk
ZmcpOwogCi0gICAgICAgIHBlcmZvcm1TdG9yZUJhcnJpZXJFbGlzaW9uKGRmZyk7CisgICAgICAg
IHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1D
bGVhblVwKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAg
ICBwZXJmb3JtRENFKGRmZyk7CkBAIC0zODcsOSArMzg3LDkgQEAgUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICAvLyBhYm91dCBjb2RlIG1vdGlvbiBhc3N1
bWVzIHRoYXQgaXQncyBPSyB0byBpbnNlcnQgR0MgcG9pbnRzIGluIHJhbmRvbSBwbGFjZXMuCiAg
ICAgICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENvbnZlcmdlZDsKICAgICAgICAg
Ci0gICAgICAgIHBlcmZvcm1TdG9yZUJhcnJpZXJFbGlzaW9uKGRmZyk7CiAgICAgICAgIHBlcmZv
cm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICAg
ICAgcGVyZm9ybUdsb2JhbFN0b3JlQmFycmllckluc2VydGlvbihkZmcpOwogICAgICAgICBpZiAo
T3B0aW9uczo6ZW5hYmxlTW92SGludFJlbW92YWwoKSkKICAgICAgICAgICAgIHBlcmZvcm1Nb3ZI
aW50UmVtb3ZhbChkZmcpOwogICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDE4NDM2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTk1LDkgKzQ5OTUsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
MSh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgICAgIAogICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBz
Y3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdSUDIgPSBzY3JhdGNoMi5ncHIoKTsK
ICAgICAgICAgCiAgICAgQVNTRVJUKCFub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKICAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ID09
IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkBAIC01MDEw
LDYgKzUwMTIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAg
ICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwo
c2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRp
YWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKKyAgICAKKyAgICB3cml0ZUJhcnJpZXIoYmFzZUdQ
Uiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyKTsKIAogICAgIG1faml0LnN0b3JlUHRyKHNjcmF0
Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpKTsKIApAQCAtNTA1OSw2ICs1MDYzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKG9sZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9m
KHZvaWQqKSkpLCBzY3JhdGNoR1BSMik7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hH
UFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2Yo
SlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAgIH0KKworICAgIHdyaXRlQmFycmllcihi
YXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpOworCiAgICAgbV9qaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSkpOwogCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMSwgbm9kZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9y
ZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODQzNjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgiCi0KLSNpZiBFTkFCTEUo
REZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKLSNpbmNsdWRlICJERkdDbG9i
YmVyaXplLmgiCi0jaW5jbHVkZSAiREZHRG9lc0dDLmgiCi0jaW5jbHVkZSAiREZHR3JhcGguaCIK
LSNpbmNsdWRlICJERkdQaGFzZS5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWNs
YXNzIFN0b3JlQmFycmllckVsaXNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7Ci1wdWJsaWM6Ci0g
ICAgU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBQaGFz
ZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZWxpc2lvbiIpCi0gICAgICAgICwgbV9jdXJyZW50Qmxv
Y2soMCkKLSAgICAgICAgLCBtX2N1cnJlbnRJbmRleCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBi
b29sIHJ1bigpCi0gICAgewotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAg
ICAgICAgIGlmICghbV9jdXJyZW50QmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBoYW5kbGVCbG9jayhtX2N1cnJlbnRCbG9jayk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgYWxsb2NhdGVzRnJl
c2hPYmplY3QoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewotICAgICAgICBjYXNlIE5ld09iamVjdDoKLSAgICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAg
ICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgotICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgot
ICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6Ci0gICAgICAgIGNhc2UgTmV3UmVnZXhwOgotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIG5vdGljZUZyZXNoT2JqZWN0
KEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJpZXJzLCBOb2RlKiBub2RlKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGFsbG9jYXRlc0ZyZXNoT2JqZWN0KG5vZGUpKTsKLSAgICAgICAgZG9udE5l
ZWRCYXJyaWVycy5hZGQobm9kZSk7Ci0gICAgfQotCi0gICAgTm9kZSogZ2V0QmFzZU9mU3RvcmUo
Tm9kZSogYmFycmllck5vZGUpCi0gICAgewotICAgICAgICBBU1NFUlQoYmFycmllck5vZGUtPmlz
U3RvcmVCYXJyaWVyKCkpOwotICAgICAgICByZXR1cm4gYmFycmllck5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZEJlRWxpZGVkKEhhc2hTZXQ8Tm9kZSo+JiBk
b250TmVlZEJhcnJpZXJzLCBOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUt
PmlzU3RvcmVCYXJyaWVyKCkpOwotICAgICAgICByZXR1cm4gZG9udE5lZWRCYXJyaWVycy5jb250
YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgIH0KLQotICAgIHZvaWQgZWxpZGVCYXJy
aWVyKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBU1NFUlQobm9kZS0+aXNTdG9yZUJhcnJp
ZXIoKSk7Ci0gICAgICAgIG5vZGUtPnJlbW92ZSgpOwotICAgIH0KLQotICAgIHZvaWQgaGFuZGxl
Tm9kZShIYXNoU2V0PE5vZGUqPiYgZG9udE5lZWRCYXJyaWVycywgTm9kZSogbm9kZSkKLSAgICB7
Ci0gICAgICAgIGlmIChkb2VzR0MobV9ncmFwaCwgbm9kZSkpCi0gICAgICAgICAgICBkb250TmVl
ZEJhcnJpZXJzLmNsZWFyKCk7Ci0KLSAgICAgICAgaWYgKGFsbG9jYXRlc0ZyZXNoT2JqZWN0KG5v
ZGUpKQotICAgICAgICAgICAgbm90aWNlRnJlc2hPYmplY3QoZG9udE5lZWRCYXJyaWVycywgbm9k
ZSk7Ci0KLSAgICAgICAgaWYgKCFub2RlLT5pc1N0b3JlQmFycmllcigpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmIChzaG91bGRCZUVsaWRlZChkb250TmVlZEJhcnJpZXJzLCBu
b2RlKSkgewotICAgICAgICAgICAgZWxpZGVCYXJyaWVyKG5vZGUpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTm9kZSogYmFzZSA9IGdldEJhc2VPZlN0b3JlKG5v
ZGUpOwotICAgICAgICBpZiAoIWJhc2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKGRvbnROZWVkQmFycmllcnMuY29udGFpbnMoYmFzZSkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGRvbnROZWVkQmFycmllcnMuYWRkKGJhc2UpOwotICAgIH0KLQotICAgIGJvb2wg
aGFuZGxlQmxvY2soQmFzaWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAgICBIYXNoU2V0PE5v
ZGUqPiBkb250TmVlZEJhcnJpZXJzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0g
ICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IGluZGV4SW5CbG9jazsKLSAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGhhbmRsZU5v
ZGUoZG9udE5lZWRCYXJyaWVycywgbm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7Ci0gICAgdW5zaWdu
ZWQgbV9jdXJyZW50SW5kZXg7Ci19OwotICAgIAotYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRWxp
c2lvbihHcmFwaCYgZ3JhcGgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBTdG9yZSBCYXJyaWVyIEVsaXNpb24gUGhhc2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlPihncmFwaCk7Ci19Ci0KLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNl
LmgJKHJldmlzaW9uIDE4NDM2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rv
cmVCYXJyaWVyRWxpc2lvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlX2gKLSNkZWZp
bmUgREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlX2gKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotCi1jbGFzcyBHcmFwaDsKLQotYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRWxp
c2lvbihHcmFwaCYpOwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBE
RkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdE
b2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK25hbWVzcGFjZSB7CisKK2VudW0gY2xhc3MgUGhhc2VNb2RlIHsKKyAgICBGYXN0LAorICAg
IEdsb2JhbAorfTsKKwordGVtcGxhdGU8UGhhc2VNb2RlIG1vZGU+CitjbGFzcyBTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJpYzoKKyAgICBTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsIG1v
ZGUgPT0gUGhhc2VNb2RlOjpGYXN0ID8gImZhc3Qgc3RvcmUgYmFycmllciBpbnNlcnRpb24iIDog
Imdsb2JhbCBzdG9yZSBiYXJyaWVyIGluc2VydGlvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25T
ZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBQaGFzZU1vZGU6OkZhc3Q6IHsKKyAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gIT0g
U1NBKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5jbGVhckVwb2NocygpOwor
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkKKyAgICAgICAgICAgICAgICBoYW5kbGVCbG9jayhibG9jayk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
UGhhc2VNb2RlOjpHbG9iYWw6IHsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVs
bHB0ciwgbV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKworICAgICAgICAgICAgbV9zdGF0ZSA9IHN0
ZDo6bWFrZV91bmlxdWU8SW5QbGFjZUFic3RyYWN0U3RhdGU+KG1fZ3JhcGgpOworICAgICAgICAg
ICAgbV9pbnRlcnByZXRlciA9IHN0ZDo6bWFrZV91bmlxdWU8QWJzdHJhY3RJbnRlcnByZXRlcjxJ
blBsYWNlQWJzdHJhY3RTdGF0ZT4+KG1fZ3JhcGgsICptX3N0YXRlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV9pc0NvbnZlcmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBGaXJzdCBydW4gdGhlIGFuYWx5c2lzLiBJbnNpZGUgYmFzaWMgYmxvY2tzIHdlIHVz
ZSBhbiBlcG9jaC1iYXNlZCBhbmFseXNpcyB0aGF0CisgICAgICAgICAgICAvLyBpcyB2ZXJ5IHBy
ZWNpc2UuIEF0IGJsb2NrIGJvdW5kYXJpZXMsIHdlIGp1c3QgcHJvcGFnYXRlIHdoaWNoIG5vZGVz
IG1heSBuZWVkIGEKKyAgICAgICAgICAgIC8vIGJhcnJpZXIuIFRoaXMgZ2l2ZXMgdXMgYSB2ZXJ5
IG5pY2UgYm90dG9tLT50b3AgZml4cG9pbnQ6IHdlIHN0YXJ0IG91dCBhc3N1bWluZworICAgICAg
ICAgICAgLy8gdGhhdCBubyBub2RlIG5lZWRzIGFueSBiYXJyaWVycyBhcmUgYmxvY2sgYm91bmRh
cmllcywgYW5kIHRoZW4gd2UgY29udmVyZ2UKKyAgICAgICAgICAgIC8vIHRvd2FyZHMgYmVsaWV2
aW5nIHRoYXQgYWxsIG5vZGVzIG5lZWQgYmFycmllcnMuICJOZWVkaW5nIGEgYmFycmllciIgaXMg
bGlrZQorICAgICAgICAgICAgLy8gc2F5aW5nIHRoYXQgdGhlIG5vZGUgaXMgaW4gYSBwYXN0IGVw
b2NoLiAiTm90IG5lZWRpbmcgYSBiYXJyaWVyIiBpcyBsaWtlIHNheWluZworICAgICAgICAgICAg
Ly8gdGhhdCB0aGUgbm9kZSBpcyBpbiB0aGUgY3VycmVudCBlcG9jaC4KKyAgICAgICAgICAgIG1f
c3RhdGVBdEhlYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2NrTWFwPEhhc2hTZXQqPj4obV9ncmFw
aCk7CisgICAgICAgICAgICBtX3N0YXRlQXRUYWlsID0gc3RkOjptYWtlX3VuaXF1ZTxCbG9ja01h
cDxIYXNoU2V0Kj4+KG1fZ3JhcGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBCbG9ja0xp
c3QgcG9zdE9yZGVyID0gbV9ncmFwaC5ibG9ja3NJblBvc3RPcmRlcigpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBib29sIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgd2hpbGUgKGNo
YW5nZWQpIHsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gSW50ZW50aW9uYWwgYmFja3dhcmRzIGxvb3AgYmVjYXVz
ZSB3ZSBhcmUgdXNpbmcgUlBPLgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJ
bmRleCA9IHBvc3RPcmRlci5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBwb3N0T3JkZXJbYmxvY2tJbmRleF07CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhbmRsZUJsb2NrKGJsb2Nr
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsb2NrIGRpZG4ndCBmaW5p
c2gsIHRoZW4gaXQgY2Fubm90IGFmZmVjdCB0aGUgZml4cG9pbnQuCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBzdGF0ZS1hdC10YWls
IGJhc2VkIG9uIHRoZSBlcG9jaHMgb2YgbGl2ZSBub2RlcyBhbmQgdGhlCisgICAgICAgICAgICAg
ICAgICAgIC8vIGN1cnJlbnQgZXBvY2guCisgICAgICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+IHN0YXRlOworICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBibG9jay0+
c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZXBv
Y2goKSAhPSBtX2N1cnJlbnRFcG9jaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBub2RlIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgZXBvY2gsIHRoZW4gd2UgbWF5
IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydW4gYSBiYXJyaWVyIG9u
IGl0IGluIHRoZSBmdXR1cmUuIFNvLCBhZGQgaXQgdG8gdGhlIHN0YXRlLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YXRlID09IG1fc3RhdGVBdFRhaWwtPmF0KGJsb2NrKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpdGVyYXRpb24gZGlkbid0IGxlYXJuIGFueXRo
aW5nIG5ldyBhYm91dCB0aGlzIGJsb2NrLgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIC8vIENoYW5nZWQgdGhpbmdzLiBNYWtlIHN1cmUgdGhhdCB3ZSBsb29wIG9u
ZSBtb3JlIHRpbWUuCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiBzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlQXRUYWlsLT5hdChibG9jaykuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBUZWxsIGhhbmRsZUJsb2NrKCkgdGhhdCBpdCdzIHRpbWUgdG8gYWN0dWFsbHkgaW5zZXJ0
IGJhcnJpZXJzIGZvciByZWFsLgorICAgICAgICAgICAgbV9pc0NvbnZlcmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAgICAgICAgaGFuZGxlQmxvY2soYmxv
Y2spOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSB9
CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgaGFuZGxlQmxvY2so
QmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICBtX2N1cnJlbnRFcG9jaCA9IEVwb2No
OjpmaXJzdCgpOworICAgICAgICAKKyAgICAgICAgaWYgKG1vZGUgPT0gUGhhc2VNb2RlOjpHbG9i
YWwpIHsKKyAgICAgICAgICAgIGlmICghYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbV9zdGF0ZS0+YmVnaW5CYXNpY0Jsb2Nr
KGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogYmxv
Y2stPnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlQXRIZWFk
LT5hdChibG9jaykuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYg
cHJldmlvdXMgYmxvY2tzIHRlbGwgdXMgdGhhdCB0aGlzIG5vZGUgbWF5IG5lZWQgYSBiYXJyaWVy
IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBmdXR1cmUsIHRoZW4gcHV0IGl0IGluIHRo
ZSBhbmNpZW50IHByaW1vcmRpYWwgZXBvY2guIFRoaXMgZm9yY2VzIHVzIHRvCisgICAgICAgICAg
ICAgICAgICAgIC8vIGVtaXQgYSBiYXJyaWVyIG9uIGFueSBwb3NzaWJseS1jZWxsIHN0b3JlLCBy
ZWdhcmRsZXNzIG9mIHRoZSBlcG9jaCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gc3Rv
cmVkIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBwcmV2
aW91cyBibG9ja3MgYXJlbid0IHJlcXVpcmluZyB1cyB0byBydW4gYSBiYXJyaWVyIG9uIHRoaXMg
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBwdXQgaXQgaW4gdGhlIGN1cnJlbnQg
ZXBvY2guIFRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIHNraXAgYmFycmllcnMKKyAgICAgICAgICAg
ICAgICAgICAgLy8gb24gdGhpcyBub2RlIHNvIGxvbmcgYXMgd2UgZG9uJ3QgYWxsb2NhdGUuIEl0
IGFsc28gbWVhbnMgdGhhdCB3ZSB3b24ndAorICAgICAgICAgICAgICAgICAgICAvLyBydW4gYmFy
cmllcnMgb24gc3RvcmVzIHRvIG9uIG9uZSBzdWNoIG5vZGUgaW50byBhbm90aGVyIHN1Y2ggbm9k
ZS4gVGhhdCdzCisgICAgICAgICAgICAgICAgICAgIC8vIGZpbmUsIGJlY2F1c2Ugbm9kZXMgd291
bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUgc3RhdGUgc2V0IGlmIGF0IHRoZSB0YWlscworICAgICAg
ICAgICAgICAgICAgICAvLyBvZiBhbGwgcHJlZGVjZXNzb3JzIHRoZXkgYWx3YXlzIGhhZCB0aGUg
Y3VycmVudCBlcG9jaC4KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2gobV9jdXJy
ZW50RXBvY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAobV9u
b2RlSW5kZXggPSAwOyBtX25vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbV9ub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgIG1fbm9kZSA9IGJsb2NrLT5hdChtX25vZGVJbmRleCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChtb2RlID09IFBoYXNlTW9kZTo6R2xvYmFsKSB7CisgICAg
ICAgICAgICAgICAgLy8gRXhlY3V0ZSBlZGdlcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugd2UgZG9uJ3Qg
d2FudCB0byBpbnNlcnQgYmFycmllcnMgaWYgdGhlCisgICAgICAgICAgICAgICAgLy8gb3BlcmF0
aW9uIGRvaW5nIHRoZSBzdG9yZSBkb2VzIGEgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgdGhlIGNo
aWxkIGlzIG5vdAorICAgICAgICAgICAgICAgIC8vIGEgY2VsbC4KKyAgICAgICAgICAgICAgICBt
X2ludGVycHJldGVyLT5zdGFydEV4ZWN1dGluZygpOworICAgICAgICAgICAgICAgIG1faW50ZXJw
cmV0ZXItPmV4ZWN1dGVFZGdlcyhtX25vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJy
YXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMCk7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDIpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKGNoaWxk
MSwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9k
ZS0+Y2hpbGQxKCksIG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewor
ICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgICAgICAgICBjYXNlIFB1dFRvQXJndW1lbnRz
OgorICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICAgICAgY2FzZSBQdXRCeUlkRmx1
c2g6CisgICAgICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgICAgICBjYXNlIE11
bHRpUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZS0+
Y2hpbGQxKCksIG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNl
dDogeworICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlLT5jaGlsZDIoKSwgbV9u
b2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjogeworICAgICAg
ICAgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlLT5jaGlsZDEoKSwgbV9ub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZG9lc0dDKG1fZ3JhcGgsIG1f
bm9kZSkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50RXBvY2guYnVtcCgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBOb2RlcyB0aGF0IGFsbG9jYXRlIGdldCB0byBzZXQgdGhlaXIg
ZXBvY2ggYmVjYXVzZSBmb3IgdGhvc2Ugbm9kZXMgd2Uga25vdyB0aGF0CisgICAgICAgICAgICAv
LyB0aGV5IHdpbGwgYmUgdGhlIG5ld2VzdCBvYmplY3QgaW4gdGhlIGhlYXAuCisgICAgICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6Cisg
ICAgICAgICAgICBjYXNlIE5ld0FycmF5OgorICAgICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhT
aXplOgorICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgICAgIGNhc2Ug
TmV3VHlwZWRBcnJheToKKyAgICAgICAgICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICAgICAg
Y2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVD
cmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAg
ICAgICAgICBjYXNlIE1ha2VSb3BlOgorICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9u
OgorICAgICAgICAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICBj
YXNlIENyZWF0ZVNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNhc2UgQ3JlYXRlQ2xvbmVk
QXJndW1lbnRzOgorICAgICAgICAgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICAgICAgICAgICAg
ICBtX25vZGUtPnNldEVwb2NoKG1fY3VycmVudEVwb2NoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAg
ICAgICAgICAgICAgLy8gVGhlc2UgYWxsb2NhdGUgYnV0IHRoZW4gcnVuIHRoZWlyIG93biBiYXJy
aWVyLgorICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCktPnNldEVwb2NoKG1fY3VycmVu
dEVwb2NoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRF
cG9jaChtX25vZGUtPmVwb2NoKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1vZGUgPT0gUGhhc2VN
b2RlOjpHbG9iYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXItPmV4ZWN1
dGVFZmZlY3RzKG5vZGVJbmRleCwgbV9ub2RlKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobW9kZSA9
PSBQaGFzZU1vZGU6Okdsb2JhbCkKKyAgICAgICAgICAgIG1fc3RhdGUtPnJlc2V0KCk7CisKKyAg
ICAgICAgaWYgKHJlYWxseUluc2VydEJhcnJpZXJzKCkpCisgICAgICAgICAgICBtX2luc2VydGlv
blNldC0+ZXhlY3V0ZShibG9jayk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydEJhcnJpZXIoRWRnZSBiYXNlLCBFZGdlIGNoaWxk
KQorICAgIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIHN0b3JlIGJhcnJpZXIgaWYgdGhl
IGNoaWxkIGlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIGEgY2VsbC4KKyAgICAgICAgc3dpdGNoICht
b2RlKSB7CisgICAgICAgIGNhc2UgUGhhc2VNb2RlOjpGYXN0OiB7CisgICAgICAgICAgICAvLyBE
b24ndCB0cnkgdG9vIGhhcmQgYmVjYXVzZSBpdCdzIHRvbyBleHBlbnNpdmUgdG8gcnVuIEFJLgor
ICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFjaGlsZC0+YXNKU1ZhbHVlKCkuaXNDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjaGls
ZC0+cmVzdWx0KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHROdW1iZXI6Cisg
ICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0RG91YmxlOgorICAgICAgICAgICAgICAgIGNh
c2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDUy
OgorICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUGhhc2VNb2Rl
OjpHbG9iYWw6IHsKKyAgICAgICAgICAgIC8vIEdvIGludG8gcmFnZSBtb2RlIHRvIGVsaW1pbmF0
ZSBhbnkgY2hhbmNlIG9mIGEgYmFycmllciB3aXRoIGEgbm9uLWNlbGwgY2hpbGQuIFdlCisgICAg
ICAgICAgICAvLyBjYW4gYWZmb3JkIHRvIGtlZXAgYXJvdW5kIEFJIGluIEdsb2JhbCBtb2RlLgor
ICAgICAgICAgICAgaWYgKCFtX2l0ZXJwcmV0ZXItPm5lZWRzVHlwZUNoZWNrKGNoaWxkLCB+U3Bl
Y0NlbGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9IH0KKyAgICAgICAgCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBzdG9yZSBiYXJy
aWVyIGlmIHRoZSBiYXNlIGlzIGF0IGxlYXN0IGFzIG5ldyBhcyB0aGUgY2hpbGQuIEZvcgorICAg
ICAgICAvLyBleGFtcGxlIHRoaXMgd29uJ3QgbmVlZCBhIGJhcnJpZXI6CisgICAgICAgIC8vCisg
ICAgICAgIC8vIHZhciBvID0ge30KKyAgICAgICAgLy8gdmFyIHAgPSB7fQorICAgICAgICAvLyBw
LmYgPSBvCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgaXMgc3Ryb25nZXIgdGhhbiB0aGUg
Y3VycmVudEVwb2NoIHJ1bGUgaW4gaW5zZXJ0QmFycmllcihFZGdlKSwgYmVjYXVzZSBpdCB3aWxs
CisgICAgICAgIC8vIGFsc28gZWxpbWluYXRlIGJhcnJpZXJzIGluIGNhc2VzIGxpa2UgdGhpczoK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gdmFyIG8gPSB7fSAvLyBvLmVwb2NoID0gMSwgY3VycmVu
dEVwb2NoID0gMQorICAgICAgICAvLyB2YXIgcCA9IHt9IC8vIG8uZXBvY2ggPSAxLCBwLmVwb2No
ID0gMiwgY3VycmVudEVwb2NoID0gMgorICAgICAgICAvLyB2YXIgcSA9IHt9IC8vIG8uZXBvY2gg
PSAxLCBwLmVwb2NoID0gMiwgcS5lcG9jaCA9IDMsIGN1cnJlbnRFcG9jaCA9IDMKKyAgICAgICAg
Ly8gcC5mID0gbyAvLyBwLmVwb2NoID49IG8uZXBvY2gKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
VGhpcyByZWxhdGlvbnNoaXAgd29ya3MgYmVjYXVzZSBpZiBpdCBob2xkcyB0aGVuIHdlIGFyZSBp
biBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAvLyBzY2VuYXJpb3MuIE5vdGUgdGhhdCB3
ZSBkb24ndCBrbm93ICp3aGljaCogb2YgdGhlc2Ugc2NlbmFyaW9zIHdlIGFyZSBpbiwgYnV0IGl0
J3MKKyAgICAgICAgLy8gb25lIG9mIHRoZW0gKHRob3VnaCB3aXRob3V0IGxvc3Mgb2YgZ2VuZXJh
bGl0eSwgeW91IGNhbiByZXBsYWNlICJhIEdDIGhhcHBlbmVkIiB3aXRoCisgICAgICAgIC8vICJt
YW55IEdDcyBoYXBwZW5lZCIpLgorICAgICAgICAvLworICAgICAgICAvLyAxKSBUaGVyZSBpcyBu
byBHQyBiZXR3ZWVuIHRoZSBhbGxvY2F0aW9uL2xhc3QtYmFycmllciBvZiBiYXNlLCBjaGlsZCBh
bmQgbm93LiBUaGVuCisgICAgICAgIC8vICAgIHdlIGRlZmluaXRlbHkgZG9uJ3QgbmVlZCBhIGJh
cnJpZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIDIpIFRoZXJlIHdhcyBhIEdDIGFmdGVyIGNo
aWxkIHdhcyBhbGxvY2F0ZWQgYnV0IGJlZm9yZSBiYXNlIHdhcyBhbGxvY2F0ZWQuIFRoZW4gd2UK
KyAgICAgICAgLy8gICAgZG9uJ3QgbmVlZCBhIGJhcnJpZXIsIGJlY2F1c2UgYmFzZSBpcyBzdGls
bCBhIG5ldyBvYmplY3QuCisgICAgICAgIC8vCisgICAgICAgIC8vIDMpIFRoZXJlIHdhcyBhIEdD
IGFmdGVyIGJvdGggY2hpbGQgYW5kIGJhc2Ugd2VyZSBhbGxvY2F0ZWQuIFRoZW4gdGhleSBhcmUg
Ym90aCBvbGQuCisgICAgICAgIC8vICAgIFdlIGRvbid0IG5lZWQgYmFycmllcnMgb24gc3RvcmVz
IG9mIG9sZCBpbnRvIG9sZC4gTm90ZSB0aGF0IGluIHRoaXMgY2FzZSBpdAorICAgICAgICAvLyAg
ICBkb2Vzbid0IG1hdHRlciBpZiB0aGVyZSB3YXMgYWxzbyBhIEdDIGJldHdlZW4gdGhlIGFsbG9j
YXRpb24gb2YgY2hpbGQgYW5kIGJhc2UuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhh
dCBiYXJyaWVycyB3aWxsIGxpZnQgYW4gb2JqZWN0IGludG8gdGhlIGN1cnJlbnQgZXBvY2guIFRo
aXMgaXMgc29ydCBvZiB3ZWlyZC4KKyAgICAgICAgLy8gSXQgbWVhbnMgdGhhdCBsYXRlciBpZiB5
b3Ugc3RvcmUgdGhhdCBvYmplY3QgaW50byBzb21lIG90aGVyIG9iamVjdCwgYW5kIHRoYXQgb3Ro
ZXIKKyAgICAgICAgLy8gb2JqZWN0IHdhcyBwcmV2aW91c2x5IG5ld2VyIG9iamVjdCwgeW91J2xs
IHRoaW5rIHRoYXQgeW91IG5lZWQgYSBiYXJyaWVyLiBXZSBjb3VsZAorICAgICAgICAvLyBhdm9p
ZCB0aGlzIGJ5IHRyYWNraW5nIGFsbG9jYXRpb24gZXBvY2ggYW5kIGJhcnJpZXIgZXBvY2ggc2Vw
YXJhdGVseS4gRm9yIG5vdyBJIHRoaW5rCisgICAgICAgIC8vIHRoYXQgdGhpcyB3b3VsZCBiZSBv
dmVya2lsbC4gQnV0IHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcK
KyAgICAgICAgLy8gcG9zc2liaWxpdGllcyB3aGVuIHRoaXMgcmVsYXRpb25zaGlwIGhvbGRzOgor
ICAgICAgICAvLworICAgICAgICAvLyA0KSBCYXNlIGlzIGFsbG9jYXRlZCBmaXJzdC4gQSBHQyBo
YXBwZW5zIGFuZCBiYXNlIGJlY29tZXMgb2xkLiBUaGVuIHdlIGFsbG9jYXRlCisgICAgICAgIC8v
ICAgIGNoaWxkLiAoTm90ZSB0aGF0IGFsdGVybmF0aXZlbHkgdGhlIEdDIGNvdWxkIGhhcHBlbiBk
dXJpbmcgdGhlIGFsbG9jYXRpb24gb2YKKyAgICAgICAgLy8gICAgY2hpbGQuKSBUaGVuIHdlIHJ1
biBhIGJhcnJpZXIgb24gYmFzZS4gQmFzZSB3aWxsIGFwcGVhciB0byBiZSBhcyBuZXcgYXMgY2hp
bGQKKyAgICAgICAgLy8gICAgKHNhbWUgZXBvY2gpLiBBdCB0aGlzIHBvaW50LCB3ZSBkb24ndCBu
ZWVkIGFub3RoZXIgYmFycmllciBvbiBiYXNlLgorICAgICAgICAvLworICAgICAgICAvLyA1KSBC
YXNlIGlzIGFsbG9jYXRlZCBmaXJzdC4gVGhlbiB3ZSBhbGxvY2F0ZSBjaGlsZC4gVGhlbiB3ZSBy
dW4gYSBHQy4gVGhlbiB3ZSBydW4gYQorICAgICAgICAvLyAgICBiYXJyaWVyIG9uIGJhc2UuIEJh
c2Ugd2lsbCBhcHBlYXIgbmV3ZXIgdGhhbiBjaGlsZC4gV2UgZG9uJ3QgbmVlZCBhIGJhcnJpZXIK
KyAgICAgICAgLy8gICAgYmVjYXVzZSBib3RoIG9iamVjdHMgYXJlIG9sZC4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gU29tZXRoaW5nIHdlIHdhdGNoIG91dCBmb3IgaGVyZSBpcyB0aGF0IHRoZSBu
dWxsIGVwb2NoIGlzIGEgY2F0Y2gtYWxsIGZvciBvYmplY3RzCisgICAgICAgIC8vIGFsbG9jYXRl
ZCBiZWZvcmUgd2UgZGlkIGFueSBlcG9jaCB0cmFja2luZy4gVHdvIG9iamVjdHMgYmVpbmcgaW4g
dGhlIG51bGwgZXBvY2gKKyAgICAgICAgLy8gbWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93IHRoZWly
IGVwb2NoIHJlbGF0aW9uc2hpcC4KKyAgICAgICAgaWYgKCEhYmFzZSAmJiBiYXNlLT5lcG9jaCgp
ID49IGNoaWxkLT5lcG9jaCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgaW5zZXJ0QmFycmllcihiYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbnNlcnRCYXJy
aWVyKEVkZ2UgYmFzZSkKKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBzdG9yZSBi
YXJyaWVyIGlmIHRoZSBlcG9jaCBvZiB0aGUgYmFzZSBpcyBpZGVudGljYWwgdG8gdGhlIGN1cnJl
bnQKKyAgICAgICAgLy8gZXBvY2guIFRoYXQgbWVhbnMgdGhhdCB3ZSBlaXRoZXIganVzdCBhbGxv
Y2F0ZWQgdGhlIG9iamVjdCBhbmQgc28gaXQncyBndWFyYW50ZWVkIHRvCisgICAgICAgIC8vIGJl
IGluIG5ld2dlbiwgb3Igd2UganVzdCByYW4gYSBiYXJyaWVyIG9uIGl0IHNvIGl0J3MgZ3VhcmFu
dGVlZCB0byBiZSByZW1lbWJlcmVkCisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIGlmIChi
YXNlLT5lcG9jaCgpID09IG1fY3VycmVudEVwb2NoKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5
IGluc2VydCB0aGUgYmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KKyAgICAgICAgaWYg
KHJlYWxseUluc2VydEJhcnJpZXJzKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBzdXBwb3J0IFN0b3JlQmFycmllcihVbnR5cGVkVXNlOikuIFRoYXQgd291bGQgYmUgc29ydCBv
ZiBjb29sLgorICAgICAgICAgICAgLy8gQnV0IHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0Lgor
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBt
X25vZGVJbmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4sCisgICAg
ICAgICAgICAgICAgRWRnZShiYXNlLm5vZGUoKSwgQ2VsbFVzZSkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBiYXNlLT5zZXRFcG9jaChtX2N1cnJlbnRFcG9jaCk7CisgICAgfQorICAg
IAorICAgIGJvb2wgcmVhbGx5SW5zZXJ0QmFycmllcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1vZGUgPT0gUGhhc2VNb2RlOjpGYXN0IHx8IG1faXNDb252ZXJnZWQ7CisgICAgfQorICAgIAor
ICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBFcG9jaCBtX2N1cnJlbnRFcG9j
aDsKKyAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CisgICAgCisg
ICAgLy8gVGhpbmdzIHdlIG9ubHkgdXNlIGluIEdsb2JhbCBtb2RlLgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4gbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4+IG1faW50ZXJwcmV0ZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+Pj4gbV9zdGF0ZUF0
SGVhZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+PiBtX3N0
YXRlQXRUYWlsOworICAgIGJvb2wgbV9pc0NvbnZlcmdlZDsKK307CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCitib29sIHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBo
JiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEZhc3Qg
U3RvcmUgQmFycmllciBJbnNlcnRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2U8UGhhc2VNb2RlOjpGYXN0Pj4oZ3JhcGgpOworfQorCiti
b29sIHBlcmZvcm1HbG9iYWxTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmIGdyYXBoKQorewor
ICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgR2xvYmFsIFN0b3JlIEJhcnJp
ZXIgSW5zZXJ0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFN0b3JlQmFycmllcklu
c2VydGlvblBoYXNlPFBoYXNlTW9kZTo6R2xvYmFsPj4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2VfaAorI2RlZmluZSBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZV9oCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBHcmFwaDsKKworLy8gSW5zZXJ0cyBzdG9yZSBiYXJyaWVycyBpbiBhIGJsb2NrLWxvY2FsIG1h
bm5lciB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIGFic3RyYWN0IGludGVycHJldGVyLgorLy8gVXNl
cyBhIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5k
YW50IGJhcnJpZXJzLiBUaGlzIHBoYXNlIHJlcXVpcmVzCisvLyB0aGF0IHdlIGFyZSBub3QgaW4g
U1NBLgorYm9vbCBwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOworCisv
LyBJbnNlcnRzIHN0b3JlIGJhcnJpZXJzIHVzaW5nIGEgZ2xvYmFsIGFuYWx5c2lzIGFuZCBjb25z
dWx0cyB0aGUgYWJzdHJhY3QgaW50ZXJwcmV0ZXIuIFVzZXMgYQorLy8gc2ltcGxlIGVwb2NoLWJh
c2VkIGFuYWx5c2lzIHRvIGF2b2lkIGluc2VydGluZyByZWR1bmRhbnQgYmFycmllcnMsIGJ1dCBv
bmx5IHByb3BhZ2F0ZXMgInNhbWUKKy8vIGVwb2NoIGFzIGN1cnJlbnQiIHByb3BlcnR5IGZyb20g
b25lIGJsb2NrIHRvIHRoZSBuZXh0LiBUaGlzIHBoYXNlIHJlcXVpcmVzIFNTQS4gVGhpcyBwaGFz
ZQorLy8gYWxzbyByZXF1aXJlcyBoYXZpbmcgdmFsaWQgQUkgYW5kIGxpdmVuZXNzLgorYm9vbCBw
ZXJmb3JtR2xvYmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg0MzY3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzODcsNyArMzM4Nyw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxl
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKQogICAgIHsKICAgICAgICAgTFZhbHVlIG9iamVjdCA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNldFN0b3JhZ2UoYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMpKTsK
KyAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3Qs
IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cyk7CisgICAgICAgIGVtaXRTdG9yZUJhcnJp
ZXIob2JqZWN0KTsKKyAgICAgICAgc2V0U3RvcmFnZShzdG9yYWdlKTsKICAgICB9CiAKICAgICB2
b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkKQEAgLTMzOTUsMTAgKzMzOTcs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG1fbm9kZS0+
dHJhbnNpdGlvbigpOwogICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgTFZhbHVlIG9sZFN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+
Y2hpbGQyKCkpOwotICAgICAgICAKLSAgICAgICAgc2V0U3RvcmFnZSgKLSAgICAgICAgICAgIHJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICAgICAgb2JqZWN0LCBvbGRTdG9y
YWdlLCB0cmFuc2l0aW9uLT5wcmV2aW91cywgdHJhbnNpdGlvbi0+bmV4dCkpOworICAgICAgICBM
VmFsdWUgbmV3U3RvcmFnZSA9IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgICAg
ICBvYmplY3QsIG9sZFN0b3JhZ2UsIHRyYW5zaXRpb24tPnByZXZpb3VzLCB0cmFuc2l0aW9uLT5u
ZXh0KTsKKyAgICAgICAgZW1pdFN0b3JlQmFycmllcihvYmplY3QpOworICAgICAgICBzZXRTdG9y
YWdlKG5ld1N0b3JhZ2UpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVUb1N0cmluZ09y
Q2FsbFN0cmluZ0NvbnN0cnVjdG9yKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253176</attachid>
            <date>2015-05-14 22:53:45 -0700</date>
            <delta_ts>2015-05-15 12:24:10 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53375</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0MzczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDE1LTA1LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5zZXJ0IHN0b3JlIGJhcnJpZXJzIGxhdGUgc28gdGhhdCBJUiB0cmFuc2Zvcm1hdGlvbnMgZG9u
J3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUwMTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdlIGhhdmUgaGFkIHRocmVlIGtpbmRzIG9mIGJ1
Z3Mgd2l0aCBzdG9yZSBiYXJyaWVycy4gRm9yIHRoZSBzYWtlIG9mIGRpc2N1c3Npb24gd2Ugc2F5
CisgICAgICAgIHRoYXQgYSBzdG9yZSBiYXJyaWVyIGlzIG5lZWRlZCB3aGVuIHdlIGhhdmUgc29t
ZXRoaW5nIGxpa2U6CisgICAgICAgIAorICAgICAgICAgICAgYmFzZS5maWVsZCA9IHZhbHVlCisg
ICAgICAgIAorICAgICAgICAtIFdlIHNvbWV0aW1lcyBmYWlsIHRvIHJlYWxpemUgdGhhdCB3ZSBj
b3VsZCByZW1vdmUgYSBiYXJyaWVyIHdoZW4gdmFsdWUgaXMgYSBub24tY2VsbC4KKyAgICAgICAg
ICBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB3ZSBwcm92ZSB2YWx1ZSB0byBiZSBhIG5vbi1jZWxsIGV2
ZW4gdGhvdWdoIGluIHRoZSBGaXh1cFBoYXNlIGl0CisgICAgICAgICAgd2Fzbid0IHByZWRpY3Rl
ZCBub24tY2VsbC4KKyAgICAgICAgCisgICAgICAgIC0gV2Ugc29tZXRpbWVzIGhhdmUgYSBiYXJy
aWVyIGluIHRoZSB3cm9uZyBwbGFjZSBhZnRlciBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nLiBX
ZQorICAgICAgICAgIG1pZ2h0IHNpbmsgYW4gYWxsb2NhdGlvbiB0byBqdXN0IGFib3ZlIHRoZSBz
dG9yZSwgYnV0IHRoYXQgcHV0cyBpdCBqdXN0IGFmdGVyIHRoZQorICAgICAgICAgIFN0b3JlQmFy
cmllciB0aGF0IEZpeHVwUGhhc2UgaW5zZXJ0ZWQuCisgICAgICAgIAorICAgICAgICAtIFdlIGRv
bid0IHJlbW92ZSByZWR1bmRhbnQgYmFycmllcnMgYWNyb3NzIGJhc2ljIGJsb2Nrcy4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgY29tcHJlaGVuc2l2ZWx5IGZpeGVzIHRoZXNlIGlzc3VlcyBieSBk
b2luZyBzdG9yZSBiYXJyaWVyIGluc2VydGlvbiBsYXRlLCBhbmQKKyAgICAgICAgcmVtb3Zpbmcg
dGhlIHN0b3JlIGJhcnJpZXIgZWxpc2lvbiBwaGFzZS4gU3RvcmUgYmFycmllciBpbnNlcnRpb24g
dXNlcyBhbiBlcG9jaC1iYXNlZAorICAgICAgICBhbGdvcml0aG0gdG8gZGV0ZXJtaW5lIHdoZW4g
c3RvcmVzIG5lZWQgYmFycmllcnMuIEJyaWVmbHksIGEgYmFycmllciBpcyBub3QgbmVlZGVkIGlm
CisgICAgICAgIGJhc2UgaXMgaW4gdGhlIGN1cnJlbnQgR0MgZXBvY2ggKGkuZS4gd2FzIHRoZSBs
YXN0IG9iamVjdCB0aGF0IHdlIGFsbG9jYXRlZCBvciBoYWQgYQorICAgICAgICBiYXJyaWVyIHNp
bmNlIGxhc3QgR0MpIG9yIGlmIGJhc2UgaGFzIGEgbmV3ZXIgR0MgZXBvY2ggdGhhbiB2YWx1ZSAo
aS5lLiB2YWx1ZSB3b3VsZCBoYXZlCisgICAgICAgIGFsd2F5cyBiZWVuIGFsbG9jYXRlZCBiZWZv
cmUgYmFzZSkuIFdlIGRvIGNvbnNlcnZhdGl2ZSB0aGluZ3Mgd2hlbiBtZXJnaW5nIGVwb2NoIHN0
YXRlCisgICAgICAgIGJldHdlZW4gYmFzaWMgYmxvY2tzLCBhbmQgd2Ugb25seSBkbyBzdWNoIGlu
dGVyLWJsb2NrIHJlbW92YWwgaW4gdGhlIEZUTC4gRlRMIGFsc28KKyAgICAgICAgcXVlcmllcyBB
SSB0byBkZXRlcm1pbmUgd2hhdCB0eXBlIHdlJ3ZlIHByb3ZlZCBhYm91dCB2YWx1ZSwgYW5kIGF2
b2lkcyBiYXJyaWVycyB3aGVuCisgICAgICAgIHZhbHVlIGlzIG5vdCBhIGNlbGwuIEZpeHVwUGhh
c2Ugc3RpbGwgaW5zZXJ0cyB0eXBlIGNoZWNrcyBvbiBzb21lIHN0b3JlcywgdG8gbWF4aW1pemUK
KyAgICAgICAgdGhlIGxpa2VsaWhvb2QgdGhhdCB0aGlzIEFJLWJhc2VkIHJlbW92YWwgaXMgZWZm
ZWN0aXZlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Jsb2Nr
TWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tNYXA6OmF0KToKKyAgICAgICAgKiBkZmcv
REZHRXBvY2guaDoKKyAgICAgICAgKEpTQzo6REZHOjpFcG9jaDo6b3BlcmF0b3I8KToKKyAgICAg
ICAgKEpTQzo6REZHOjpFcG9jaDo6b3BlcmF0b3I+KToKKyAgICAgICAgKEpTQzo6REZHOjpFcG9j
aDo6b3BlcmF0b3I8PSk6CisgICAgICAgIChKU0M6OkRGRzo6RXBvY2g6Om9wZXJhdG9yPj0pOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNwZWN1
bGF0ZUZvckJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6Omluc2VydFN0
b3JlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9E
RkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtRmFzdFN0b3JlQmFycmllckluc2VydGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUdsb2JhbFN0b3JlQmFycmllckluc2VydGlvbik6CisgICAgICAgICogZGZnL0RGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmg6IEFkZGVkLgorCiAyMDE1LTA1LTE0ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFN0b3JlQmFycmllcldp
dGhOdWxsQ2hlY2ssIG5vYm9keSBldmVyIGdlbmVyYXRlcyB0aGlzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg0MzY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNyArMjI3LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKICAgICBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKICAgICBkZmcvREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCi0gICAgZGZnL0RGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCiAgICAgZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlv
blBoYXNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShy
ZXZpc2lvbiAxODQzNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNyAr
NDY3LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FMb3dlcmluZ1Bo
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91
dFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwIiAvPgpAQCAtMTE3Myw3ICsxMTczLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FMb3dlcmluZ1BoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhY2tMYXlvdXRQaGFzZS5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5o
IiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NDM2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NjIsNiArNDYyLDggQEAKIAkJMEY5RDMzOUIx
ODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0
YWNrTWFwcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOUQzNjk0MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDM2OTIxQUU5Q0Mz
MzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgKi87IH07CiAJCTBGOUQzNjk1MUFFOUND
MzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVh
blVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjlFMzI2MzFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcCAqLzsgfTsKKwkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjlGQjRGNDE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMjE3
RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgKi87IH07CiAJCTBGOUZC
NEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBDQjY3
RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLzsgfTsKQEAgLTkyOCw4ICs5MzAsNiBAQAogCQkyQUFEOTY0QTE4NTY5NDE3MDAx
RjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUFEOTY0OTE4NTY5NDE3MDAxRjkzQkUgLyogUmVj
dXJzaXZlQWxsb2NhdGlvblNjb3BlLmggKi87IH07CiAJCTJBQzkyMkJCMThBMTYxODIwMDNDRTBG
QiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDOTIyQjkxOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJG
RGVidWdMaW5lSW5mby5jcHAgKi87IH07CiAJCTJBQzkyMkJDMThBMTYxODIwMDNDRTBGQiAvKiBG
VExEV0FSRkRlYnVnTGluZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJBQzkyMkJBMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGlu
ZUluZm8uaCAqLzsgfTsKLQkJMkFDQ0YzREUxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFy
cmllckVsaXNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQUNDRjNEQzE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmNwcCAqLzsgfTsKLQkJMkFDQ0YzREYxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0
b3JlQmFycmllckVsaXNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkFDQ0YzREQxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5oICovOyB9OwogCQkyQUQyRURGQjE5Nzk5RTM4MDA0RDY0NzggLyogRW51
bWVyYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyQUQyRURGQTE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkFEODkzMkIxN0Uz
ODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhl
YXBJdGVyYXRpb25TY29wZS5oICovOyB9OwogCQkyQURGQTI2MzE4RUYzNTQwMDA0RjlGQ0MgLyog
R0NMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJBREZBMjYyMThFRjM1NDAwMDRGOUZDQyAvKiBHQ0xvZ2dpbmcuY3BwICovOyB9OwpAQCAt
MjIwMSw2ICsyMjAxLDggQEAKIAkJMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNr
TWFwcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTdGFja01hcHMuaDsg
cGF0aCA9IGZ0bC9GVExTdGFja01hcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RDM2OTIxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbGVhblVwUGhhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR0NsZWFuVXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
OUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xlYW5VcFBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ2xl
YW5VcFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUUzMjYxMUIwNUFC
MDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5o
OyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjM3LDggKzI2
MzksNiBAQAogCQkyQUFEOTY0OTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlv
blNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlY3Vyc2l2ZUFsbG9j
YXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUM5MjJCOTE4QTE2
MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERXQVJGRGVidWdMaW5lSW5mby5jcHA7IHBhdGggPSBm
dGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkFDOTIyQkExOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExEV0FSRkRlYnVnTGluZUluZm8uaDsg
cGF0aCA9IGZ0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkFDQ0YzREMxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNp
b25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9y
ZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckVsaXNp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJBQ0NGM0REMTg1RkUy
NkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJBRDJFREZBMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW51bWVyYXRpb25Nb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBRDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFw
SXRlcmF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEl0
ZXJhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBREZBMjYyMThF
RjM1NDAwMDRGOUZDQyAvKiBHQ0xvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR0NMb2dnaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTUwODksOCArNTA4OSw4IEBACiAJCQkJMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0
YWNrTGF5b3V0UGhhc2UuaCAqLywKIAkJCQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNEYyOURF
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oICovLAotCQkJCTJBQ0NGM0RDMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2UuY3BwICovLAotCQkJCTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdT
dG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLywKKwkJCQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFF
RDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovLAog
CQkJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNl
LmNwcCAqLywKIAkJCQkwRkMyMENCNDE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5oICovLAogCQkJCTBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAgLTU4OTQsOCArNTg5NCw4IEBACiAJCQkJQTdE
ODlEMDAxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDMjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdT
dGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlFMzI2NDFCMDVBQjA0MDA4
MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkFDQ0YzREYxODVGRTI2QjAwODNF
MkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDMjBDQjYxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQ0NGRjE4QTYwMDcwMDAx
QTI3RjggLyogREZHVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTgxLDcgKzcxODEs
NiBAQAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkyQUNDRjNERTE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1
NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03MjAyLDYgKzcyMDEsNyBAQAogCQkJCTBGMkJEQzUxMTUyMjhGRkQwMENEODkx
MCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzRBMTUy
MjgwOUEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRkZDOTVGMTRFRjkwQkIwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5RTMyNjMxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzk3RjQxMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0U3MTc0ODMwQTIwMDdCM0MxQiAvKiBE
RkdXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM3MDE2NURCQjkwMDA1QUQz
ODcgLyogRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAkocmV2aXNpb24gMTg0MzY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw2ICs1OCwy
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9ja0luZGV4XTsKICAgICB9
CiAgICAgCisgICAgVCYgYXQoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBh
dChCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbYmxvY2tJbmRleF07CisgICAgfQorICAgIAorICAgIFQmIGF0KEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrLT5pbmRleF07CisgICAg
fQorICAgIAorICAgIGNvbnN0IFQmIGF0KEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrLT5pbmRleF07CisgICAgfQorCiAgICAgVCYg
b3BlcmF0b3JbXShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4g
bV92ZWN0b3JbYmxvY2tJbmRleF07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Vwb2NoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFcG9j
aC5oCShyZXZpc2lvbiAxODQzNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vw
b2NoLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDI2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KICAgICAKKyAgICBib29sIG9wZXJhdG9y
PChjb25zdCBFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lcG9j
aCA8IG90aGVyLm1fZXBvY2g7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IEVwb2NoJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvdGhlciA8ICp0aGlz
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgRXBvY2gmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPiBvdGhlcik7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISgqdGhpcyA8IG90aGVyKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODQzNjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MjIsNyArNzIyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxV
c2U+KGNoaWxkMSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4oY2hpbGQyKTsK
LSAgICAgICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIGNoaWxk
MSwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKGNoaWxkMyk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihjaGlsZDEpOwpAQCAtNzYwLDcgKzc2MCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAg
ICAgICAgICAgICAgIGluc2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jaywgbm9kZS0+Y2hp
bGQxKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVGb3JCYXJy
aWVyKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MjIsNyArOTIyLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewogICAgICAg
ICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IGluc2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jaywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTM1LDcgKzkzNCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBQ
dXRUb0FyZ3VtZW50czogewogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGluc2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9j
aywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
ZUZvckJhcnJpZXIobm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtOTUwLDcgKzk0OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZTogewogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIGluc2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jayAr
IDEsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAg
LTk4Niw3ICs5ODQsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKICAg
ICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGluc2VydFN0b3JlQmFycmllcihtX2luZGV4
SW5CbG9jaywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUZvckJhcnJpZXIobm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIApAQCAtMTAyOSwxMyArMTAyNywxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhF
ZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgaW5zZXJ0U3Rv
cmVCYXJyaWVyKG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkp
OworICAgICAgICAgICAgc3BlY3VsYXRlRm9yQmFycmllcihub2RlLT5jaGlsZDMoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTXVs
dGlQdXRCeU9mZnNldDogewogICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIG5v
ZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGVGb3JC
YXJyaWVyKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTExMjMsOCArMTEyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewogICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIoCi0gICAgICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKG5vZGUtPmNoaWxkMigpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE3NjMsMzcgKzE3NjAsMzUgQEAgcHJpdmF0
ZToKICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKHVzZUtpbmQpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGluc2VydFN0b3JlQmFycmllcih1bnNpZ25lZCBpbmRleEluQmxvY2ssIEVkZ2UgYmFzZSwg
RWRnZSB2YWx1ZSA9IEVkZ2UoKSkKKyAgICB2b2lkIHNwZWN1bGF0ZUZvckJhcnJpZXIoRWRnZSB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghIXZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAodmFs
dWUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkpIHsKLSAgICAgICAgICAgICAgICBpbnNlcnRDaGVj
azxJbnQzMlVzZT4oaW5kZXhJbkJsb2NrLCB2YWx1ZS5ub2RlKCkpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxh
bi5tb2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1
ZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSkgeworICAgICAgICAgICAgaW5zZXJ0Q2hlY2s8SW50
MzJVc2U+KG1faW5kZXhJbkJsb2NrLCB2YWx1ZS5ub2RlKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+c2hvdWxk
U3BlY3VsYXRlQm9vbGVhbigpKSB7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0Q2hlY2s8Qm9vbGVh
blVzZT4oaW5kZXhJbkJsb2NrLCB2YWx1ZS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLT5zaG91bGRTcGVjdWxhdGVCb29s
ZWFuKCkpIHsKKyAgICAgICAgICAgIGluc2VydENoZWNrPEJvb2xlYW5Vc2U+KG1faW5kZXhJbkJs
b2NrLCB2YWx1ZS5ub2RlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+c2hvdWxkU3BlY3VsYXRlT3RoZXIoKSkg
ewotICAgICAgICAgICAgICAgIGluc2VydENoZWNrPE90aGVyVXNlPihpbmRleEluQmxvY2ssIHZh
bHVlLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAg
ICAgICBpZiAodmFsdWUtPnNob3VsZFNwZWN1bGF0ZU90aGVyKCkpIHsKKyAgICAgICAgICAgIGlu
c2VydENoZWNrPE90aGVyVXNlPihtX2luZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
dmFsdWUtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0
Q2hlY2s8TnVtYmVyVXNlPihpbmRleEluQmxvY2ssIHZhbHVlLm5vZGUoKSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAodmFsdWUtPnNob3VsZFNw
ZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVjazxOdW1iZXJVc2U+KG1f
aW5kZXhJbkJsb2NrLCB2YWx1ZS5ub2RlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+c2hvdWxkU3BlY3VsYXRl
Tm90Q2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0Q2hlY2s8Tm90Q2VsbFVzZT4oaW5k
ZXhJbkJsb2NrLCB2YWx1ZS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLT5zaG91bGRTcGVjdWxhdGVOb3RDZWxsKCkpIHsK
KyAgICAgICAgICAgIGluc2VydENoZWNrPE5vdENlbGxVc2U+KG1faW5kZXhJbkJsb2NrLCB2YWx1
ZS5ub2RlKCkpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KLSAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIFN0b3JlQmFycmllciwgbV9jdXJyZW50Tm9kZS0+b3JpZ2luLCBiYXNlKTsKICAgICB9CiAg
ICAgCiAgICAgdGVtcGxhdGU8VXNlS2luZCB1c2VLaW5kPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxODQzNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBACiAj
aW5jbHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YWNrTGF5b3V0
UGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oIgotI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIgorI2luY2x1ZGUg
IkRGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIgpAQCAtMzE1LDcg
KzMxNSw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAK
ICAgICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKGRmZyk7CiAKLSAgICAgICAgcGVy
Zm9ybVN0b3JlQmFycmllckVsaXNpb24oZGZnKTsKKyAgICAgICAgcGVyZm9ybUZhc3RTdG9yZUJh
cnJpZXJJbnNlcnRpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybUNsZWFuVXAoZGZnKTsKICAgICAg
ICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsK
QEAgLTM4Nyw5ICszODcsOSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUlu
VGhyCiAgICAgICAgIC8vIGFib3V0IGNvZGUgbW90aW9uIGFzc3VtZXMgdGhhdCBpdCdzIE9LIHRv
IGluc2VydCBHQyBwb2ludHMgaW4gcmFuZG9tIHBsYWNlcy4KICAgICAgICAgZGZnLm1fZml4cG9p
bnRTdGF0ZSA9IEZpeHBvaW50Q29udmVyZ2VkOwogICAgICAgICAKLSAgICAgICAgcGVyZm9ybVN0
b3JlQmFycmllckVsaXNpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMo
ZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICBwZXJmb3JtR2xvYmFsU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uKGRmZyk7CiAgICAgICAgIGlmIChPcHRpb25zOjplbmFibGVNb3ZI
aW50UmVtb3ZhbCgpKQogICAgICAgICAgICAgcGVyZm9ybU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAg
ICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxODQzNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2suaCIKLSNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCi0jaW5jbHVkZSAiREZHRG9lc0dD
LmgiCi0jaW5jbHVkZSAiREZHR3JhcGguaCIKLSNpbmNsdWRlICJERkdQaGFzZS5oIgotI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNzIFN0b3JlQmFycmllckVsaXNpb25QaGFzZSA6
IHB1YmxpYyBQaGFzZSB7Ci1wdWJsaWM6Ci0gICAgU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlKEdy
YXBoJiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZWxpc2lv
biIpCi0gICAgICAgICwgbV9jdXJyZW50QmxvY2soMCkKLSAgICAgICAgLCBtX2N1cnJlbnRJbmRl
eCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIHJ1bigpCi0gICAgewotICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2spCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBoYW5kbGVCbG9jayhtX2N1cnJl
bnRCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIGJvb2wgYWxsb2NhdGVzRnJlc2hPYmplY3QoTm9kZSogbm9kZSkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIE5ld09iamVjdDoKLSAg
ICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgotICAg
ICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgotICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6Ci0g
ICAgICAgIGNhc2UgTmV3UmVnZXhwOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB2b2lkIG5vdGljZUZyZXNoT2JqZWN0KEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJp
ZXJzLCBOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGFsbG9jYXRlc0ZyZXNoT2Jq
ZWN0KG5vZGUpKTsKLSAgICAgICAgZG9udE5lZWRCYXJyaWVycy5hZGQobm9kZSk7Ci0gICAgfQot
Ci0gICAgTm9kZSogZ2V0QmFzZU9mU3RvcmUoTm9kZSogYmFycmllck5vZGUpCi0gICAgewotICAg
ICAgICBBU1NFUlQoYmFycmllck5vZGUtPmlzU3RvcmVCYXJyaWVyKCkpOwotICAgICAgICByZXR1
cm4gYmFycmllck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICB9Ci0KLSAgICBib29sIHNob3Vs
ZEJlRWxpZGVkKEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJpZXJzLCBOb2RlKiBub2RlKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmlzU3RvcmVCYXJyaWVyKCkpOwotICAgICAgICBy
ZXR1cm4gZG9udE5lZWRCYXJyaWVycy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwot
ICAgIH0KLQotICAgIHZvaWQgZWxpZGVCYXJyaWVyKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAg
ICBBU1NFUlQobm9kZS0+aXNTdG9yZUJhcnJpZXIoKSk7Ci0gICAgICAgIG5vZGUtPnJlbW92ZSgp
OwotICAgIH0KLQotICAgIHZvaWQgaGFuZGxlTm9kZShIYXNoU2V0PE5vZGUqPiYgZG9udE5lZWRC
YXJyaWVycywgTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChkb2VzR0MobV9ncmFwaCwg
bm9kZSkpCi0gICAgICAgICAgICBkb250TmVlZEJhcnJpZXJzLmNsZWFyKCk7Ci0KLSAgICAgICAg
aWYgKGFsbG9jYXRlc0ZyZXNoT2JqZWN0KG5vZGUpKQotICAgICAgICAgICAgbm90aWNlRnJlc2hP
YmplY3QoZG9udE5lZWRCYXJyaWVycywgbm9kZSk7Ci0KLSAgICAgICAgaWYgKCFub2RlLT5pc1N0
b3JlQmFycmllcigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChzaG91bGRC
ZUVsaWRlZChkb250TmVlZEJhcnJpZXJzLCBub2RlKSkgewotICAgICAgICAgICAgZWxpZGVCYXJy
aWVyKG5vZGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTm9k
ZSogYmFzZSA9IGdldEJhc2VPZlN0b3JlKG5vZGUpOwotICAgICAgICBpZiAoIWJhc2UpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGRvbnROZWVkQmFycmllcnMuY29udGFpbnMo
YmFzZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRvbnROZWVkQmFycmllcnMuYWRk
KGJhc2UpOwotICAgIH0KLQotICAgIGJvb2wgaGFuZGxlQmxvY2soQmFzaWNCbG9jayogYmxvY2sp
Ci0gICAgewotICAgICAgICBIYXNoU2V0PE5vZGUqPiBkb250TmVlZEJhcnJpZXJzOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5z
aXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IGlu
ZGV4SW5CbG9jazsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJs
b2NrKTsKLSAgICAgICAgICAgIGhhbmRsZU5vZGUoZG9udE5lZWRCYXJyaWVycywgbm9kZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQmFzaWNCbG9jayog
bV9jdXJyZW50QmxvY2s7Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7Ci19OwotICAgIAot
Ym9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihHcmFwaCYgZ3JhcGgpCi17Ci0gICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBTdG9yZSBCYXJyaWVyIEVsaXNpb24gUGhh
c2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlPihncmFw
aCk7Ci19Ci0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgJKHJldmlzaW9uIDE4NDM2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgREZHU3RvcmVC
YXJyaWVyRWxpc2lvblBoYXNlX2gKLSNkZWZpbmUgREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNl
X2gKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBHcmFwaDsKLQot
Ym9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihHcmFwaCYpOwotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2VfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0RvZXNHQy5oIgor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
aCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworZW51bSBjbGFzcyBQ
aGFzZU1vZGUgeworICAgIEZhc3QsCisgICAgR2xvYmFsCit9OworCit0ZW1wbGF0ZTxQaGFzZU1v
ZGUgbW9kZT4KK2NsYXNzIFN0b3JlQmFycmllckluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNl
IHsKK3B1YmxpYzoKKyAgICBTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsIG1vZGUgPT0gUGhhc2VNb2RlOjpGYXN0ID8gImZhc3Qg
c3RvcmUgYmFycmllciBpbnNlcnRpb24iIDogImdsb2JhbCBzdG9yZSBiYXJyaWVyIGluc2VydGlv
biIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAg
ICAgZGF0YUxvZygiU3RhcnRpbmcgc3RvcmUgYmFycmllciBpbnNlcnRpb246XG4iKTsKKyAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBQaGFzZU1vZGU6OkZhc3Q6IHsKKyAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5jbGVhckVwb2NocygpOworICAgICAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkKKyAgICAgICAgICAgICAgICBoYW5kbGVCbG9jayhibG9jayk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUGhhc2VNb2Rl
OjpHbG9iYWw6IHsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9n
cmFwaC5tX2Zvcm0gPT0gU1NBKTsKKworICAgICAgICAgICAgbV9zdGF0ZSA9IHN0ZDo6bWFrZV91
bmlxdWU8SW5QbGFjZUFic3RyYWN0U3RhdGU+KG1fZ3JhcGgpOworICAgICAgICAgICAgbV9pbnRl
cnByZXRlciA9IHN0ZDo6bWFrZV91bmlxdWU8QWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJz
dHJhY3RTdGF0ZT4+KG1fZ3JhcGgsICptX3N0YXRlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9pc0NvbnZlcmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBG
aXJzdCBydW4gdGhlIGFuYWx5c2lzLiBJbnNpZGUgYmFzaWMgYmxvY2tzIHdlIHVzZSBhbiBlcG9j
aC1iYXNlZCBhbmFseXNpcyB0aGF0CisgICAgICAgICAgICAvLyBpcyB2ZXJ5IHByZWNpc2UuIEF0
IGJsb2NrIGJvdW5kYXJpZXMsIHdlIGp1c3QgcHJvcGFnYXRlIHdoaWNoIG5vZGVzIG1heSBuZWVk
IGEKKyAgICAgICAgICAgIC8vIGJhcnJpZXIuIFRoaXMgZ2l2ZXMgdXMgYSB2ZXJ5IG5pY2UgYm90
dG9tLT50b3AgZml4cG9pbnQ6IHdlIHN0YXJ0IG91dCBhc3N1bWluZworICAgICAgICAgICAgLy8g
dGhhdCBubyBub2RlIG5lZWRzIGFueSBiYXJyaWVycyBhdCBibG9jayBib3VuZGFyaWVzLCBhbmQg
dGhlbiB3ZSBjb252ZXJnZQorICAgICAgICAgICAgLy8gdG93YXJkcyBiZWxpZXZpbmcgdGhhdCBh
bGwgbm9kZXMgbmVlZCBiYXJyaWVycy4gIk5lZWRpbmcgYSBiYXJyaWVyIiBpcyBsaWtlCisgICAg
ICAgICAgICAvLyBzYXlpbmcgdGhhdCB0aGUgbm9kZSBpcyBpbiBhIHBhc3QgZXBvY2guICJOb3Qg
bmVlZGluZyBhIGJhcnJpZXIiIGlzIGxpa2Ugc2F5aW5nCisgICAgICAgICAgICAvLyB0aGF0IHRo
ZSBub2RlIGlzIGluIHRoZSBjdXJyZW50IGVwb2NoLgorICAgICAgICAgICAgbV9zdGF0ZUF0SGVh
ZCA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+PihtX2dyYXBoKTsK
KyAgICAgICAgICAgIG1fc3RhdGVBdFRhaWwgPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2NrTWFwPEhh
c2hTZXQ8Tm9kZSo+Pj4obV9ncmFwaCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJsb2Nr
TGlzdCBwb3N0T3JkZXIgPSBtX2dyYXBoLmJsb2Nrc0luUG9zdE9yZGVyKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB3aGlsZSAo
Y2hhbmdlZCkgeworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAvLyBJbnRlbnRpb25hbCBiYWNrd2FyZHMgbG9vcCBiZWNh
dXNlIHdlIGFyZSB1c2luZyBSUE8uCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9j
a0luZGV4ID0gcG9zdE9yZGVyLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHBvc3RPcmRlcltibG9ja0luZGV4XTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghaGFuZGxlQmxvY2soYmxv
Y2spKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmxvY2sgZGlkbid0IGZp
bmlzaCwgdGhlbiBpdCBjYW5ub3QgYWZmZWN0IHRoZSBmaXhwb2ludC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIHN0YXRlLWF0LXRh
aWwgYmFzZWQgb24gdGhlIGVwb2NocyBvZiBsaXZlIG5vZGVzIGFuZCB0aGUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gY3VycmVudCBlcG9jaC4gV2UgZ3JvdyBzdGF0ZS1hdC10YWlsIG1vbm90b25p
Y2FsbHkgdG8gZW5zdXJlIGNvbnZlcmdlbmNlLgorICAgICAgICAgICAgICAgICAgICBib29sIHRo
aXNCbG9ja0NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBu
b2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmVwb2NoKCkgIT0gbV9jdXJyZW50RXBvY2gpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IGVwb2No
LCB0aGVuIHdlIG1heSBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVu
IGEgYmFycmllciBvbiBpdCBpbiB0aGUgZnV0dXJlLiBTbywgYWRkIGl0IHRvIHRoZSBzdGF0ZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzQmxvY2tDaGFuZ2VkIHw9IG1fc3RhdGVB
dFRhaWwtPmF0KGJsb2NrKS5hZGQobm9kZSkuaXNOZXdFbnRyeTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzQmxvY2tDaGFuZ2VkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGl0ZXJhdGlvbiBkaWRuJ3QgbGVhcm4gYW55dGhpbmcgbmV3IGFi
b3V0IHRoaXMgYmxvY2suCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQ2hhbmdlZCB0aGluZ3MuIE1ha2Ugc3VyZSB0aGF0IHdlIGxvb3Agb25lIG1vcmUgdGlt
ZS4KKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJs
b2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSog
bm9kZSA6IG1fc3RhdGVBdFRhaWwtPmF0KGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlQXRIZWFkLT5hdChzdWNjZXNzb3IpLmFkZChub2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gVGVsbCBoYW5kbGVCbG9jaygpIHRoYXQgaXQncyB0aW1lIHRvIGFj
dHVhbGx5IGluc2VydCBiYXJyaWVycyBmb3IgcmVhbC4KKyAgICAgICAgICAgIG1faXNDb252ZXJn
ZWQgPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQorICAgICAgICAgICAgICAgIGhh
bmRsZUJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29s
IGhhbmRsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJv
c2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBibG9jayAiLCBwb2ludGVy
RHVtcChibG9jayksICJcbiIpOworICAgICAgICAgICAgaWYgKHJlYWxseUluc2VydEJhcnJpZXJz
KCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlYWxseSBpbnNlcnRpbmcgYmFycmll
cnMuXG4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50RXBvY2ggPSBF
cG9jaDo6Zmlyc3QoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtb2RlID09IFBoYXNlTW9kZTo6
R2xvYmFsKSB7CisgICAgICAgICAgICBpZiAoIWJsb2NrLT5jZmFIYXNWaXNpdGVkKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fc3RhdGUtPmJlZ2luQmFzaWNC
bG9jayhibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZUF0
SGVhZC0+YXQoYmxvY2spLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IElmIHByZXZpb3VzIGJsb2NrcyB0ZWxsIHVzIHRoYXQgdGhpcyBub2RlIG1heSBuZWVkIGEgYmFy
cmllciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZnV0dXJlLCB0aGVuIHB1dCBpdCBp
biB0aGUgYW5jaWVudCBwcmltb3JkaWFsIGVwb2NoLiBUaGlzIGZvcmNlcyB1cyB0bworICAgICAg
ICAgICAgICAgICAgICAvLyBlbWl0IGEgYmFycmllciBvbiBhbnkgcG9zc2libHktY2VsbCBzdG9y
ZSwgcmVnYXJkbGVzcyBvZiB0aGUgZXBvY2ggb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIC8v
IHN0b3JlZCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2goRXBvY2go
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYg
cHJldmlvdXMgYmxvY2tzIGFyZW4ndCByZXF1aXJpbmcgdXMgdG8gcnVuIGEgYmFycmllciBvbiB0
aGlzIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gcHV0IGl0IGluIHRoZSBjdXJy
ZW50IGVwb2NoLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBza2lwIGJhcnJpZXJzCisgICAgICAg
ICAgICAgICAgICAgIC8vIG9uIHRoaXMgbm9kZSBzbyBsb25nIGFzIHdlIGRvbid0IGFsbG9jYXRl
LiBJdCBhbHNvIG1lYW5zIHRoYXQgd2Ugd29uJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8gcnVu
IGJhcnJpZXJzIG9uIHN0b3JlcyB0byBvbiBvbmUgc3VjaCBub2RlIGludG8gYW5vdGhlciBzdWNo
IG5vZGUuIFRoYXQncworICAgICAgICAgICAgICAgICAgICAvLyBmaW5lLCBiZWNhdXNlIG5vZGVz
IHdvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHN0YXRlIHNldCBpZiBhdCB0aGUgdGFpbHMKKyAg
ICAgICAgICAgICAgICAgICAgLy8gb2YgYWxsIHByZWRlY2Vzc29ycyB0aGV5IGFsd2F5cyBoYWQg
dGhlIGN1cnJlbnQgZXBvY2guCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKG1f
Y3VycmVudEVwb2NoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBib29sIHJlc3VsdCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBmb3Ig
KG1fbm9kZUluZGV4ID0gMDsgbV9ub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21fbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICBtX25vZGUgPSBibG9jay0+YXQobV9ub2RlSW5kZXgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRh
dGFMb2coCisgICAgICAgICAgICAgICAgICAgICIgICAgIiwgbV9jdXJyZW50RXBvY2gsICI6IExv
b2tpbmcgYXQgbm9kZSAiLCBtX25vZGUsICIgd2l0aCBjaGlsZHJlbjogIik7CisgICAgICAgICAg
ICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0No
aWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICAgICAgICAg
IFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1h
LCBlZGdlLCAiICgiLCBlZGdlLT5lcG9jaCgpLCAiKSIpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAobW9kZSA9PSBQaGFzZU1vZGU6Okdsb2JhbCkgeworICAg
ICAgICAgICAgICAgIC8vIEV4ZWN1dGUgZWRnZXMgc2VwYXJhdGVseSBiZWNhdXNlIHdlIGRvbid0
IHdhbnQgdG8gaW5zZXJ0IGJhcnJpZXJzIGlmIHRoZQorICAgICAgICAgICAgICAgIC8vIG9wZXJh
dGlvbiBkb2luZyB0aGUgc3RvcmUgZG9lcyBhIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IHRoZSBj
aGlsZCBpcyBub3QKKyAgICAgICAgICAgICAgICAvLyBhIGNlbGwuCisgICAgICAgICAgICAgICAg
bV9pbnRlcnByZXRlci0+c3RhcnRFeGVjdXRpbmcoKTsKKyAgICAgICAgICAgICAgICBtX2ludGVy
cHJldGVyLT5leGVjdXRlRWRnZXMobV9ub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWxEaXJlY3Q6CisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFy
cmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDApOworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc2lkZXJCYXJyaWVyKGNo
aWxkMSwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgICAgICBjb25zaWRlckJhcnJpZXIo
bV9ub2RlLT5jaGlsZDEoKSwgbV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7
CisgICAgICAgICAgICAgICAgY29uc2lkZXJCYXJyaWVyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgICAgICAgICAgY2FzZSBQdXRUb0FyZ3Vt
ZW50czoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJ
ZEZsdXNoOgorICAgICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICAgICAgY2Fz
ZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7CisgICAgICAgICAgICAgICAgY29uc2lkZXJCYXJyaWVyKG1f
bm9kZS0+Y2hpbGQxKCksIG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRC
eU9mZnNldDogeworICAgICAgICAgICAgICAgIGNvbnNpZGVyQmFycmllcihtX25vZGUtPmNoaWxk
MigpLCBtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7
CisgICAgICAgICAgICAgICAgY29uc2lkZXJCYXJyaWVyKG1fbm9kZS0+Y2hpbGQxKCksIG1fbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGRvZXNHQyht
X2dyYXBoLCBtX25vZGUpKQorICAgICAgICAgICAgICAgIG1fY3VycmVudEVwb2NoLmJ1bXAoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICAgICAgY2FzZSBOZXdBcnJheToKKyAgICAg
ICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlC
dWZmZXI6CisgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICBjYXNl
IE5ld1JlZ2V4cDoKKyAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAg
ICAgICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgICAgIGNh
c2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAgICAgICAgY2FzZSBNYWtlUm9wZToKKyAgICAgICAg
ICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgQ3JlYXRlRGlyZWN0
QXJndW1lbnRzOgorICAgICAgICAgICAgY2FzZSBDcmVhdGVTY29wZWRBcmd1bWVudHM6CisgICAg
ICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNhc2UgTmV3
RnVuY3Rpb246CisgICAgICAgICAgICAgICAgLy8gTm9kZXMgdGhhdCBhbGxvY2F0ZSBnZXQgdG8g
c2V0IHRoZWlyIGVwb2NoIGJlY2F1c2UgZm9yIHRob3NlIG5vZGVzIHdlIGtub3cKKyAgICAgICAg
ICAgICAgICAvLyB0aGF0IHRoZXkgd2lsbCBiZSB0aGUgbmV3ZXN0IG9iamVjdCBpbiB0aGUgaGVh
cC4KKyAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKG1fY3VycmVudEVwb2NoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgLy8gVGhlc2UgYWxsb2NhdGUgYnV0IHRoZW4g
cnVuIHRoZWlyIG93biBiYXJyaWVyLgorICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXIobV9u
b2RlSW5kZXggKyAxLCBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAg
bV9ub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgICAgICBt
X25vZGUtPnBoaSgpLT5zZXRFcG9jaChtX25vZGUtPmVwb2NoKCkpOworICAgICAgICAgICAgICAg
IG1fbm9kZS0+c2V0RXBvY2goRXBvY2goKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZv
ciBub2RlcyB0aGF0IGFyZW4ndCBndWFyYW50ZWVkIHRvIGFsbG9jYXRlLCB3ZSBzYXkgdGhhdCB0
aGVpciByZXR1cm4gdmFsdWUKKyAgICAgICAgICAgICAgICAvLyAoaWYgdGhlcmUgaXMgb25lKSBj
b3VsZCBiZSBhcmJpdHJhcmlseSBvbGQuCisgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRFcG9j
aChFcG9jaCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKAorICAgICAgICAgICAgICAgICAgICAiICAgICIsIG1fY3VycmVudEVwb2NoLCAiOiBEb25l
IHdpdGggbm9kZSAiLCBtX25vZGUsICIgKCIsIG1fbm9kZS0+ZXBvY2goKSwKKyAgICAgICAgICAg
ICAgICAgICAgIikgd2l0aCBjaGlsZHJlbjogIik7CisgICAgICAgICAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAg
ICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBlZGdlLCAiICgiLCBl
ZGdlLT5lcG9jaCgpLCAiKSIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAobW9kZSA9PSBQaGFzZU1vZGU6Okdsb2JhbCkgeworICAgICAgICAgICAgICAgIGlm
ICghbV9pbnRlcnByZXRlci0+ZXhlY3V0ZUVmZmVjdHMobV9ub2RlSW5kZXgsIG1fbm9kZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKG1vZGUgPT0gUGhhc2VNb2RlOjpHbG9iYWwpCisgICAgICAgICAg
ICBtX3N0YXRlLT5yZXNldCgpOworCisgICAgICAgIGlmIChyZWFsbHlJbnNlcnRCYXJyaWVycygp
KQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnNpZGVyQmFy
cmllcihFZGdlIGJhc2UsIEVkZ2UgY2hpbGQpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQ29uc2lkZXJpbmcgYWRkaW5nIGJhcnJpZXIg
IiwgYmFzZSwgIiA9PiAiLCBjaGlsZCwgIlxuIik7CisgICAgICAgIAorICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIGEgc3RvcmUgYmFycmllciBpZiB0aGUgY2hpbGQgaXMgZ3VhcmFudGVlZCB0byBu
b3QgYmUgYSBjZWxsLgorICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBQaGFz
ZU1vZGU6OkZhc3Q6IHsKKyAgICAgICAgICAgIC8vIERvbid0IHRyeSB0b28gaGFyZCBiZWNhdXNl
IGl0J3MgdG9vIGV4cGVuc2l2ZSB0byBydW4gQUkuCisgICAgICAgICAgICBpZiAoY2hpbGQtPmhh
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLT5hc0pTVmFsdWUoKS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIFJlamVjdGluZyBiZWNhdXNlIG9mIGNv
bnN0YW50IHR5cGUuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChj
aGlsZC0+cmVzdWx0KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHROdW1iZXI6
CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0RG91YmxlOgorICAgICAgICAgICAgICAg
IGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdElu
dDUyOgorICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICAgICAgUmVqZWN0aW5nIGJlY2F1c2Ugb2YgcmVzdWx0IHR5cGUuXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQ
aGFzZU1vZGU6Okdsb2JhbDogeworICAgICAgICAgICAgLy8gR28gaW50byByYWdlIG1vZGUgdG8g
ZWxpbWluYXRlIGFueSBjaGFuY2Ugb2YgYSBiYXJyaWVyIHdpdGggYSBub24tY2VsbCBjaGlsZC4g
V2UKKyAgICAgICAgICAgIC8vIGNhbiBhZmZvcmQgdG8ga2VlcCBhcm91bmQgQUkgaW4gR2xvYmFs
IG1vZGUuCisgICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXItPm5lZWRzVHlwZUNoZWNrKGNo
aWxkLCB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIFJlamVjdGluZyBiZWNhdXNlIG9mIEFJ
IHR5cGUuXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfSB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBkb24n
dCBuZWVkIGEgc3RvcmUgYmFycmllciBpZiB0aGUgYmFzZSBpcyBhdCBsZWFzdCBhcyBuZXcgYXMg
dGhlIGNoaWxkLiBGb3IKKyAgICAgICAgLy8gZXhhbXBsZSB0aGlzIHdvbid0IG5lZWQgYSBiYXJy
aWVyOgorICAgICAgICAvLworICAgICAgICAvLyB2YXIgbyA9IHt9CisgICAgICAgIC8vIHZhciBw
ID0ge30KKyAgICAgICAgLy8gcC5mID0gbworICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGlz
IHN0cm9uZ2VyIHRoYW4gdGhlIGN1cnJlbnRFcG9jaCBydWxlIGluIGNvbnNpZGVyQmFycmllcihF
ZGdlKSwgYmVjYXVzZSBpdCB3aWxsCisgICAgICAgIC8vIGFsc28gZWxpbWluYXRlIGJhcnJpZXJz
IGluIGNhc2VzIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gdmFyIG8gPSB7fSAv
LyBvLmVwb2NoID0gMSwgY3VycmVudEVwb2NoID0gMQorICAgICAgICAvLyB2YXIgcCA9IHt9IC8v
IG8uZXBvY2ggPSAxLCBwLmVwb2NoID0gMiwgY3VycmVudEVwb2NoID0gMgorICAgICAgICAvLyB2
YXIgcSA9IHt9IC8vIG8uZXBvY2ggPSAxLCBwLmVwb2NoID0gMiwgcS5lcG9jaCA9IDMsIGN1cnJl
bnRFcG9jaCA9IDMKKyAgICAgICAgLy8gcC5mID0gbyAvLyBwLmVwb2NoID49IG8uZXBvY2gKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyByZWxhdGlvbnNoaXAgd29ya3MgYmVjYXVzZSBpZiBp
dCBob2xkcyB0aGVuIHdlIGFyZSBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAvLyBz
Y2VuYXJpb3MuIE5vdGUgdGhhdCB3ZSBkb24ndCBrbm93ICp3aGljaCogb2YgdGhlc2Ugc2NlbmFy
aW9zIHdlIGFyZSBpbiwgYnV0IGl0J3MKKyAgICAgICAgLy8gb25lIG9mIHRoZW0gKHRob3VnaCB3
aXRob3V0IGxvc3Mgb2YgZ2VuZXJhbGl0eSwgeW91IGNhbiByZXBsYWNlICJhIEdDIGhhcHBlbmVk
IiB3aXRoCisgICAgICAgIC8vICJtYW55IEdDcyBoYXBwZW5lZCIpLgorICAgICAgICAvLworICAg
ICAgICAvLyAxKSBUaGVyZSBpcyBubyBHQyBiZXR3ZWVuIHRoZSBhbGxvY2F0aW9uL2xhc3QtYmFy
cmllciBvZiBiYXNlLCBjaGlsZCBhbmQgbm93LiBUaGVuCisgICAgICAgIC8vICAgIHdlIGRlZmlu
aXRlbHkgZG9uJ3QgbmVlZCBhIGJhcnJpZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIDIpIFRo
ZXJlIHdhcyBhIEdDIGFmdGVyIGNoaWxkIHdhcyBhbGxvY2F0ZWQgYnV0IGJlZm9yZSBiYXNlIHdh
cyBhbGxvY2F0ZWQuIFRoZW4gd2UKKyAgICAgICAgLy8gICAgZG9uJ3QgbmVlZCBhIGJhcnJpZXIs
IGJlY2F1c2UgYmFzZSBpcyBzdGlsbCBhIG5ldyBvYmplY3QuCisgICAgICAgIC8vCisgICAgICAg
IC8vIDMpIFRoZXJlIHdhcyBhIEdDIGFmdGVyIGJvdGggY2hpbGQgYW5kIGJhc2Ugd2VyZSBhbGxv
Y2F0ZWQuIFRoZW4gdGhleSBhcmUgYm90aCBvbGQuCisgICAgICAgIC8vICAgIFdlIGRvbid0IG5l
ZWQgYmFycmllcnMgb24gc3RvcmVzIG9mIG9sZCBpbnRvIG9sZC4gTm90ZSB0aGF0IGluIHRoaXMg
Y2FzZSBpdAorICAgICAgICAvLyAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGVyZSB3YXMgYWxzbyBh
IEdDIGJldHdlZW4gdGhlIGFsbG9jYXRpb24gb2YgY2hpbGQgYW5kIGJhc2UuCisgICAgICAgIC8v
CisgICAgICAgIC8vIE5vdGUgdGhhdCBiYXJyaWVycyB3aWxsIGxpZnQgYW4gb2JqZWN0IGludG8g
dGhlIGN1cnJlbnQgZXBvY2guIFRoaXMgaXMgc29ydCBvZiB3ZWlyZC4KKyAgICAgICAgLy8gSXQg
bWVhbnMgdGhhdCBsYXRlciBpZiB5b3Ugc3RvcmUgdGhhdCBvYmplY3QgaW50byBzb21lIG90aGVy
IG9iamVjdCwgYW5kIHRoYXQgb3RoZXIKKyAgICAgICAgLy8gb2JqZWN0IHdhcyBwcmV2aW91c2x5
IG5ld2VyIG9iamVjdCwgeW91J2xsIHRoaW5rIHRoYXQgeW91IG5lZWQgYSBiYXJyaWVyLiBXZSBj
b3VsZAorICAgICAgICAvLyBhdm9pZCB0aGlzIGJ5IHRyYWNraW5nIGFsbG9jYXRpb24gZXBvY2gg
YW5kIGJhcnJpZXIgZXBvY2ggc2VwYXJhdGVseS4gRm9yIG5vdyBJIHRoaW5rCisgICAgICAgIC8v
IHRoYXQgdGhpcyB3b3VsZCBiZSBvdmVya2lsbC4gQnV0IHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhl
cmUgYXJlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgLy8gcG9zc2liaWxpdGllcyB3aGVuIHRoaXMg
cmVsYXRpb25zaGlwIGhvbGRzOgorICAgICAgICAvLworICAgICAgICAvLyA0KSBCYXNlIGlzIGFs
bG9jYXRlZCBmaXJzdC4gQSBHQyBoYXBwZW5zIGFuZCBiYXNlIGJlY29tZXMgb2xkLiBUaGVuIHdl
IGFsbG9jYXRlCisgICAgICAgIC8vICAgIGNoaWxkLiAoTm90ZSB0aGF0IGFsdGVybmF0aXZlbHkg
dGhlIEdDIGNvdWxkIGhhcHBlbiBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YKKyAgICAgICAgLy8g
ICAgY2hpbGQuKSBUaGVuIHdlIHJ1biBhIGJhcnJpZXIgb24gYmFzZS4gQmFzZSB3aWxsIGFwcGVh
ciB0byBiZSBhcyBuZXcgYXMgY2hpbGQKKyAgICAgICAgLy8gICAgKHNhbWUgZXBvY2gpLiBBdCB0
aGlzIHBvaW50LCB3ZSBkb24ndCBuZWVkIGFub3RoZXIgYmFycmllciBvbiBiYXNlLgorICAgICAg
ICAvLworICAgICAgICAvLyA1KSBCYXNlIGlzIGFsbG9jYXRlZCBmaXJzdC4gVGhlbiB3ZSBhbGxv
Y2F0ZSBjaGlsZC4gVGhlbiB3ZSBydW4gYSBHQy4gVGhlbiB3ZSBydW4gYQorICAgICAgICAvLyAg
ICBiYXJyaWVyIG9uIGJhc2UuIEJhc2Ugd2lsbCBhcHBlYXIgbmV3ZXIgdGhhbiBjaGlsZC4gV2Ug
ZG9uJ3QgbmVlZCBhIGJhcnJpZXIKKyAgICAgICAgLy8gICAgYmVjYXVzZSBib3RoIG9iamVjdHMg
YXJlIG9sZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU29tZXRoaW5nIHdlIHdhdGNoIG91dCBm
b3IgaGVyZSBpcyB0aGF0IHRoZSBudWxsIGVwb2NoIGlzIGEgY2F0Y2gtYWxsIGZvciBvYmplY3Rz
CisgICAgICAgIC8vIGFsbG9jYXRlZCBiZWZvcmUgd2UgZGlkIGFueSBlcG9jaCB0cmFja2luZy4g
VHdvIG9iamVjdHMgYmVpbmcgaW4gdGhlIG51bGwgZXBvY2gKKyAgICAgICAgLy8gbWVhbnMgdGhh
dCB3ZSBkb24ndCBrbm93IHRoZWlyIGVwb2NoIHJlbGF0aW9uc2hpcC4KKyAgICAgICAgaWYgKCEh
YmFzZS0+ZXBvY2goKSAmJiBiYXNlLT5lcG9jaCgpID49IGNoaWxkLT5lcG9jaCgpKSB7CisgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAg
ICBSZWplY3RpbmcgYmVjYXVzZSBvZiBlcG9jaCBvcmRlcmluZy5cbiIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zaWRlckJhcnJpZXIoYmFz
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29uc2lkZXJCYXJyaWVyKEVkZ2UgYmFzZSkKKyAg
ICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBD
b25zaWRlcmluZyBhZGRpbmcgYmFycmllciBvbiAiLCBiYXNlLCAiXG4iKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBzdG9yZSBiYXJyaWVyIGlmIHRoZSBlcG9jaCBvZiB0
aGUgYmFzZSBpcyBpZGVudGljYWwgdG8gdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gZXBvY2guIFRo
YXQgbWVhbnMgdGhhdCB3ZSBlaXRoZXIganVzdCBhbGxvY2F0ZWQgdGhlIG9iamVjdCBhbmQgc28g
aXQncyBndWFyYW50ZWVkIHRvCisgICAgICAgIC8vIGJlIGluIG5ld2dlbiwgb3Igd2UganVzdCBy
YW4gYSBiYXJyaWVyIG9uIGl0IHNvIGl0J3MgZ3VhcmFudGVlZCB0byBiZSByZW1lbWJlcmVkCisg
ICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIGlmIChiYXNlLT5lcG9jaCgpID09IG1fY3VycmVu
dEVwb2NoKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgICAgICAgICBSZWplY3RpbmcgYmVjYXVzZSBpdCdzIGluIHRoZSBjdXJyZW50IGVw
b2NoLlxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgSW5zZXJ0
aW5nIGJhcnJpZXIuXG4iKTsKKyAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCwgYmFz
ZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydEJhcnJpZXIodW5zaWduZWQg
bm9kZUluZGV4LCBOb2RlKiBiYXNlKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW4gZ2xv
YmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0aGUgYmFycmllcnMgb25jZSB3ZSBoYXZl
IGNvbnZlcmdlZC4KKyAgICAgICAgaWYgKCFyZWFsbHlJbnNlcnRCYXJyaWVycygpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1cHBv
cnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNvb2wu
CisgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KKyAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4sIEVkZ2UoYmFzZSwgQ2VsbFVzZSkpOworCisg
ICAgICAgIGJhc2UtPnNldEVwb2NoKG1fY3VycmVudEVwb2NoKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCisgICAgeworICAgICAgICByZXR1cm4gbW9kZSA9
PSBQaGFzZU1vZGU6OkZhc3QgfHwgbV9pc0NvbnZlcmdlZDsKKyAgICB9CisgICAgCisgICAgSW5z
ZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEVwb2NoIG1fY3VycmVudEVwb2NoOworICAg
IHVuc2lnbmVkIG1fbm9kZUluZGV4OworICAgIE5vZGUqIG1fbm9kZTsKKyAgICAKKyAgICAvLyBU
aGluZ3Mgd2Ugb25seSB1c2UgaW4gR2xvYmFsIG1vZGUuCisgICAgc3RkOjp1bmlxdWVfcHRyPElu
UGxhY2VBYnN0cmFjdFN0YXRlPiBtX3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBYnN0cmFj
dEludGVycHJldGVyPEluUGxhY2VBYnN0cmFjdFN0YXRlPj4gbV9pbnRlcnByZXRlcjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+PiBtX3N0YXRlQXRIZWFkOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4+IG1fc3RhdGVBdFRh
aWw7CisgICAgYm9vbCBtX2lzQ29udmVyZ2VkOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK2Jvb2wgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmIGdyYXBo
KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgRmFzdCBTdG9yZSBC
YXJyaWVyIEluc2VydGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZTxQaGFzZU1vZGU6OkZhc3Q+PihncmFwaCk7Cit9CisKK2Jvb2wgcGVy
Zm9ybUdsb2JhbFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBHbG9iYWwgU3RvcmUgQmFycmllciBJbnNl
cnRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2U8UGhhc2VNb2RlOjpHbG9iYWw+PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlX2gKKyNk
ZWZpbmUgREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgaW4gYSBibG9jay1sb2NhbCBtYW5uZXIgd2l0aG91
dCBjb25zdWx0aW5nIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4KKy8vIFVzZXMgYSBzaW1wbGUg
ZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJyaWVy
cy4gVGhpcyBwaGFzZSByZXF1aXJlcworLy8gdGhhdCB3ZSBhcmUgbm90IGluIFNTQS4KK2Jvb2wg
cGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmKTsKKworLy8gSW5zZXJ0cyBz
dG9yZSBiYXJyaWVycyB1c2luZyBhIGdsb2JhbCBhbmFseXNpcyBhbmQgY29uc3VsdHMgdGhlIGFi
c3RyYWN0IGludGVycHJldGVyLiBVc2VzIGEKKy8vIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFseXNp
cyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLCBidXQgb25seSBwcm9wYWdh
dGVzICJzYW1lCisvLyBlcG9jaCBhcyBjdXJyZW50IiBwcm9wZXJ0eSBmcm9tIG9uZSBibG9jayB0
byB0aGUgbmV4dC4gVGhpcyBwaGFzZSByZXF1aXJlcyBTU0EuIFRoaXMgcGhhc2UKKy8vIGFsc28g
cmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJIGFuZCBsaXZlbmVzcy4KK2Jvb2wgcGVyZm9ybUdsb2Jh
bFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1N0b3JlQmFy
cmllckluc2VydGlvblBoYXNlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253214</attachid>
            <date>2015-05-15 12:24:10 -0700</date>
            <delta_ts>2015-05-15 13:57:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58508</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0NDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBA
CisyMDE1LTA1LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5zZXJ0IHN0b3JlIGJhcnJpZXJzIGxhdGUgc28gdGhhdCBJUiB0cmFuc2Zvcm1hdGlvbnMgZG9u
J3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUwMTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdlIGhhdmUgaGFkIHRocmVlIGtpbmRzIG9mIGJ1
Z3Mgd2l0aCBzdG9yZSBiYXJyaWVycy4gRm9yIHRoZSBzYWtlIG9mIGRpc2N1c3Npb24gd2Ugc2F5
CisgICAgICAgIHRoYXQgYSBzdG9yZSBiYXJyaWVyIGlzIG5lZWRlZCB3aGVuIHdlIGhhdmUgc29t
ZXRoaW5nIGxpa2U6CisgICAgICAgIAorICAgICAgICAgICAgYmFzZS5maWVsZCA9IHZhbHVlCisg
ICAgICAgIAorICAgICAgICAtIFdlIHNvbWV0aW1lcyBmYWlsIHRvIHJlYWxpemUgdGhhdCB3ZSBj
b3VsZCByZW1vdmUgYSBiYXJyaWVyIHdoZW4gdmFsdWUgaXMgYSBub24tY2VsbC4KKyAgICAgICAg
ICBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB3ZSBwcm92ZSB2YWx1ZSB0byBiZSBhIG5vbi1jZWxsIGV2
ZW4gdGhvdWdoIGluIHRoZSBGaXh1cFBoYXNlIGl0CisgICAgICAgICAgd2Fzbid0IHByZWRpY3Rl
ZCBub24tY2VsbC4KKyAgICAgICAgCisgICAgICAgIC0gV2Ugc29tZXRpbWVzIGhhdmUgYSBiYXJy
aWVyIGluIHRoZSB3cm9uZyBwbGFjZSBhZnRlciBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nLiBX
ZQorICAgICAgICAgIG1pZ2h0IHNpbmsgYW4gYWxsb2NhdGlvbiB0byBqdXN0IGFib3ZlIHRoZSBz
dG9yZSwgYnV0IHRoYXQgcHV0cyBpdCBqdXN0IGFmdGVyIHRoZQorICAgICAgICAgIFN0b3JlQmFy
cmllciB0aGF0IEZpeHVwUGhhc2UgaW5zZXJ0ZWQuCisgICAgICAgIAorICAgICAgICAtIFdlIGRv
bid0IHJlbW92ZSByZWR1bmRhbnQgYmFycmllcnMgYWNyb3NzIGJhc2ljIGJsb2Nrcy4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgY29tcHJlaGVuc2l2ZWx5IGZpeGVzIHRoZXNlIGlzc3VlcyBieSBk
b2luZyBzdG9yZSBiYXJyaWVyIGluc2VydGlvbiBsYXRlLCBhbmQKKyAgICAgICAgcmVtb3Zpbmcg
dGhlIHN0b3JlIGJhcnJpZXIgZWxpc2lvbiBwaGFzZS4gU3RvcmUgYmFycmllciBpbnNlcnRpb24g
dXNlcyBhbiBlcG9jaC1iYXNlZAorICAgICAgICBhbGdvcml0aG0gdG8gZGV0ZXJtaW5lIHdoZW4g
c3RvcmVzIG5lZWQgYmFycmllcnMuIEJyaWVmbHksIGEgYmFycmllciBpcyBub3QgbmVlZGVkIGlm
CisgICAgICAgIGJhc2UgaXMgaW4gdGhlIGN1cnJlbnQgR0MgZXBvY2ggKGkuZS4gd2FzIHRoZSBs
YXN0IG9iamVjdCB0aGF0IHdlIGFsbG9jYXRlZCBvciBoYWQgYQorICAgICAgICBiYXJyaWVyIHNp
bmNlIGxhc3QgR0MpIG9yIGlmIGJhc2UgaGFzIGEgbmV3ZXIgR0MgZXBvY2ggdGhhbiB2YWx1ZSAo
aS5lLiB2YWx1ZSB3b3VsZCBoYXZlCisgICAgICAgIGFsd2F5cyBiZWVuIGFsbG9jYXRlZCBiZWZv
cmUgYmFzZSkuIFdlIGRvIGNvbnNlcnZhdGl2ZSB0aGluZ3Mgd2hlbiBtZXJnaW5nIGVwb2NoIHN0
YXRlCisgICAgICAgIGJldHdlZW4gYmFzaWMgYmxvY2tzLCBhbmQgd2Ugb25seSBkbyBzdWNoIGlu
dGVyLWJsb2NrIHJlbW92YWwgaW4gdGhlIEZUTC4gRlRMIGFsc28KKyAgICAgICAgcXVlcmllcyBB
SSB0byBkZXRlcm1pbmUgd2hhdCB0eXBlIHdlJ3ZlIHByb3ZlZCBhYm91dCB2YWx1ZSwgYW5kIGF2
b2lkcyBiYXJyaWVycyB3aGVuCisgICAgICAgIHZhbHVlIGlzIG5vdCBhIGNlbGwuIEZpeHVwUGhh
c2Ugc3RpbGwgaW5zZXJ0cyB0eXBlIGNoZWNrcyBvbiBzb21lIHN0b3JlcywgdG8gbWF4aW1pemUK
KyAgICAgICAgdGhlIGxpa2VsaWhvb2QgdGhhdCB0aGlzIEFJLWJhc2VkIHJlbW92YWwgaXMgZWZm
ZWN0aXZlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Jsb2Nr
TWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tNYXA6OmF0KToKKyAgICAgICAgKiBkZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50
Rm9sZGluZ1BoYXNlOjplbWl0UHV0QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdFcG9jaC5o
OgorICAgICAgICAoSlNDOjpERkc6OkVwb2NoOjpvcGVyYXRvcjwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkVwb2NoOjpvcGVyYXRvcj4pOgorICAgICAgICAoSlNDOjpERkc6OkVwb2NoOjpvcGVyYXRv
cjw9KToKKyAgICAgICAgKEpTQzo6REZHOjpFcG9jaDo6b3BlcmF0b3I+PSk6CisgICAgICAgICog
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZp
eHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6c3BlY3VsYXRlRm9yQmFy
cmllcik6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6aW5zZXJ0U3RvcmVCYXJyaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFy
cmllckVsaXNpb25QaGFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1N0b3JlQmFy
cmllckVsaXNpb25QaGFzZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1G
YXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtR2xv
YmFsU3RvcmVCYXJyaWVySW5zZXJ0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVy
SW5zZXJ0aW9uUGhhc2UuaDogQWRkZWQuCisKIDIwMTUtMDUtMTUgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZW1vdmUgYW4gdW51c2VkIGRl
Y2xhcmF0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNp
b24gMTg0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjcsNyArMjI3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKICAgICBkZmcvREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHAKICAgICBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
Y3BwCi0gICAgZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAKKyAgICBkZmcvREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCiAgICAg
ZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODQ0MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNyArNDY3LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3Bw
IiAvPgpAQCAtMTE3Myw3ICsxMTczLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdTU0FMb3dlcmluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHU3RhY2tMYXlvdXRQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE4NDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00
NjIsNiArNDYyLDggQEAKIAkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFw
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMz
OTkxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUQzNjk0MUFFOUNDMzMwMDBENERGQiAv
KiBERkdDbGVhblVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RDM2OTIxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5j
cHAgKi87IH07CiAJCTBGOUQzNjk1MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkz
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjlFMzI2MzFCMDVBQjA0MDA4MDFFRDUg
LyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEY5RTMyNjQxQjA1QUIw
NDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFF
RDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQjRGNDE3RkNCOTE3MDBDQjY3Rjgg
LyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHAgKi87IH07CiAJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFj
a0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZDOEMz
MTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEJGMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLzsgfTsKQEAgLTkyOCw4ICs5MzAs
NiBAQAogCQkyQUFEOTY0QTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlvblNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUFE
OTY0OTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlLmggKi87IH07
CiAJCTJBQzkyMkJCMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDOTIyQjkx
OEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5jcHAgKi87IH07CiAJCTJB
QzkyMkJDMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQzkyMkJBMThBMTYxODIw
MDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uaCAqLzsgfTsKLQkJMkFDQ0YzREUxODVG
RTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUNDRjNEQzE4NUZFMjZCMDA4
M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLzsgfTsKLQkJMkFDQ0Yz
REYxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDQ0YzREQxODVGRTI2
QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovOyB9OwogCQkyQUQy
RURGQjE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQyRURGQTE5Nzk5RTM4MDA0RDY0Nzgg
LyogRW51bWVyYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25T
Y29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFE
ODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovOyB9OwogCQky
QURGQTI2MzE4RUYzNTQwMDA0RjlGQ0MgLyogR0NMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBREZBMjYyMThFRjM1NDAwMDRGOUZDQyAv
KiBHQ0xvZ2dpbmcuY3BwICovOyB9OwpAQCAtMjIwMSw2ICsyMjAxLDggQEAKIAkJMEY5RDMzOTkx
ODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTdGFja01hcHMuaDsgcGF0aCA9IGZ0bC9GVExTdGFja01hcHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDM2OTIxQUU5Q0MzMzAwMEQ0REZCIC8qIERG
R0NsZWFuVXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdDbGVhblVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NsZWFuVXBQaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBERkdD
bGVhblVwUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xlYW5V
cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ2xlYW5VcFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOUUzMjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlF
MzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZH
U3RhY2tMYXlvdXRQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdTdGFja0xheW91dFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2
N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkM4QkYxNEUxQjVGQjAwRDUy
QUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yNjM3LDggKzI2MzksNiBAQAogCQkyQUFEOTY0OTE4NTY5NDE3MDAx
RjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQUM5MjJCOTE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xp
bmVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERXQVJG
RGVidWdMaW5lSW5mby5jcHA7IHBhdGggPSBmdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFDOTIyQkExOEExNjE4MjAwM0NFMEZCIC8q
IEZUTERXQVJGRGVidWdMaW5lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExEV0FSRkRlYnVnTGluZUluZm8uaDsgcGF0aCA9IGZ0bC9GVExEV0FSRkRlYnVnTGluZUlu
Zm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkFDQ0YzREMxODVGRTI2QjAwODNF
MkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVC
YXJyaWVyRWxpc2lvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBo
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBRDJFREZBMTk3OTlFMzgwMDRE
NjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRW51bWVyYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBRDg5
MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEl0ZXJhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJBREZBMjYyMThFRjM1NDAwMDRGOUZDQyAvKiBHQ0xvZ2dpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NMb2dnaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwODksOCArNTA4OSw4IEBACiAJCQkJMEY5RkI0
RjMxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLywKIAkJCQkwRjRG
MjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuY3BwICovLAogCQkJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovLAotCQkJCTJBQ0NGM0RDMTg1RkUyNkIw
MDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwICovLAotCQkJCTJBQ0NG
M0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLywK
KwkJCQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuY3BwICovLAorCQkJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oICovLAogCQkJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAv
KiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkMyMENCNDE4NTJFMkM2
MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oICovLAogCQkJCTBGODkzQkRB
MTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAg
LTU4OTQsOCArNTg5NCw4IEBACiAJCQkJQTdEODlEMDAxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NT
QUNvbnZlcnNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMjBDQkExODU1NkEzNTAw
QzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZC
NEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAv
KiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMkFDQ0YzREYxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMjBDQjYxODUyRTJDNjAwQzlFOTU0IC8qIERG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDc4MTVE
Q0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJGQ0NGRjE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5oIGluIEhl
YWRlcnMgKi8sCkBAIC03MTgxLDcgKzcxODEsNiBAQAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENC
NjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNEYy
OURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyog
REZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyQUNDRjNERTE4NUZFMjZCMDA4
M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdU
aHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0
MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MjAyLDYgKzcyMDEsNyBAQAog
CQkJCTBGMkJEQzUxMTUyMjhGRkQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkJEQzRBMTUyMjgwOUEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVGMTRFRjkwQkIwMEM3MjUz
MiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEY5RTMyNjMxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjQxMTgyMDIxMTkwMDJDOUIyNiAv
KiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
REIyQ0U3MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjlEMzM3MDE2NURCQjkwMDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAkocmV2
aXNpb24gMTg0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01OCw2ICs1OCwyNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X3ZlY3RvcltibG9ja0luZGV4XTsKICAgICB9CiAgICAgCisgICAgVCYgYXQoQmxvY2tJbmRleCBi
bG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOwor
ICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBhdChCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07CisgICAgfQorICAg
IAorICAgIFQmIGF0KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dmVjdG9yW2Jsb2NrLT5pbmRleF07CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIGF0KEJhc2lj
QmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2Nr
LT5pbmRleF07CisgICAgfQorCiAgICAgVCYgb3BlcmF0b3JbXShCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCiAgICAgewogICAgICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAkocmV2aXNpb24gMTg0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Nyw3ICs1OTcs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSogYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Ug
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAogICAgICAgICAgICAgICAgIG9y
aWdpbiwgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIs
IG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOwogICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwpAQCAtNjA5LDcgKzYwOCw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVk
Z2UsCiAgICAgICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9y
aWdpbiwgY2hpbGRFZGdlKSkpOwotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOwogICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gRWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKICAgICAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vwb2NoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFcG9jaC5oCShyZXZpc2lvbiAxODQ0MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vwb2NoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDYgKzg3LDI2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OwogICAgIH0KICAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBFcG9jaCYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lcG9jaCA8IG90aGVyLm1fZXBvY2g7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEVwb2NoJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBvdGhlciA8ICp0aGlzOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPD0oY29uc3QgRXBvY2gmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICEoKnRoaXMgPiBvdGhlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA8
IG90aGVyKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsNyArNzIyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAg
ICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAgICAgICAg
ICAgICAgZml4RWRnZTxJbnQzMlVzZT4oY2hpbGQyKTsKLSAgICAgICAgICAgICAgICBpbnNlcnRT
dG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIGNoaWxkMSwgY2hpbGQzKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKGNoaWxkMyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxs
VXNlPihjaGlsZDEpOwpAQCAtNzYwLDcgKzc2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgICAgIGluc2VydFN0b3Jl
QmFycmllcihtX2luZGV4SW5CbG9jaywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKG5vZGUtPmNoaWxkMigpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC05MjIsNyArOTIyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGluc2VydFN0b3JlQmFycmllcihtX2lu
ZGV4SW5CbG9jaywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtOTM1LDcgKzkzNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czogewogICAgICAg
ICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IGluc2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jaywgbm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUZvckJhcnJpZXIobm9kZS0+Y2hpbGQy
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTUw
LDcgKzk0OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogewogICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGlu
c2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jayArIDEsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTk4Niw3ICs5ODQsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0
OiB7CiAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGluc2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jaywgbm9kZS0+Y2hpbGQxKCks
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUZvckJhcnJpZXIobm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTAyOSwxMyAr
MTAyNywxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFz
U3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+
Y2hpbGQyKCkpOwotICAgICAgICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJsb2Nr
LCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgc3BlY3VsYXRl
Rm9yQmFycmllcihub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDogewogICAgICAg
ICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnNl
cnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKG5vZGUtPmNoaWxkMigpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTExMTUsMTYg
KzExMTMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgY2Fz
ZSBLaWxsU3RhY2s6CiAgICAgICAgIGNhc2UgR2V0U3RhY2s6CisgICAgICAgIGNhc2UgU3RvcmVC
YXJyaWVyOgogICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGp1c3Qgbm9kZXMgdGhhdCB3ZSBkb24n
dCBjdXJyZW50bHkgZXhwZWN0IHRvIHNlZSBkdXJpbmcgZml4dXAuCiAgICAgICAgICAgICAvLyBJ
ZiB3ZSBldmVyIHdhbnRlZCB0byBpbnNlcnQgdGhlbSBwcmlvciB0byBmaXh1cCwgdGhlbiB3ZSBq
dXN0IGhhdmUgdG8gY3JlYXRlCiAgICAgICAgICAgICAvLyBmaXh1cCBydWxlcyBmb3IgdGhlbS4K
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9kZSBkdXJpbmcgZml4dXAiKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6
IHsKICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKAotICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2Nr
LCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgc3BlY3VsYXRl
Rm9yQmFycmllcihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCkBAIC0xMjk4LDcgKzEyOTYsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFVucmVhY2hh
YmxlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgICAgICBjYXNlIExv
b3BIaW50OgotICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICAgICAgY2FzZSBNb3ZIaW50
OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6CkBA
IC0xNzYyLDM3ICsxNzU5LDM1IEBAIHByaXZhdGU6CiAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZCh1
c2VLaW5kKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBpbnNlcnRTdG9yZUJhcnJpZXIodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrLCBFZGdlIGJhc2UsIEVkZ2UgdmFsdWUgPSBFZGdlKCkpCisgICAgdm9p
ZCBzcGVjdWxhdGVGb3JCYXJyaWVyKEVkZ2UgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoISF2
YWx1ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpKSB7
Ci0gICAgICAgICAgICAgICAgaW5zZXJ0Q2hlY2s8SW50MzJVc2U+KGluZGV4SW5CbG9jaywgdmFs
dWUubm9kZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAg
ICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkpIHsK
KyAgICAgICAgICAgIGluc2VydENoZWNrPEludDMyVXNlPihtX2luZGV4SW5CbG9jaywgdmFsdWUu
bm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAodmFsdWUtPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgewotICAgICAg
ICAgICAgICAgIGluc2VydENoZWNrPEJvb2xlYW5Vc2U+KGluZGV4SW5CbG9jaywgdmFsdWUubm9k
ZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlm
ICh2YWx1ZS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7CisgICAgICAgICAgICBpbnNlcnRD
aGVjazxCb29sZWFuVXNlPihtX2luZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFs
dWUtPnNob3VsZFNwZWN1bGF0ZU90aGVyKCkpIHsKLSAgICAgICAgICAgICAgICBpbnNlcnRDaGVj
azxPdGhlclVzZT4oaW5kZXhJbkJsb2NrLCB2YWx1ZS5ub2RlKCkpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLT5zaG91bGRTcGVjdWxh
dGVPdGhlcigpKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVjazxPdGhlclVzZT4obV9pbmRleElu
QmxvY2ssIHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhbHVlLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIo
KSkgewotICAgICAgICAgICAgICAgIGluc2VydENoZWNrPE51bWJlclVzZT4oaW5kZXhJbkJsb2Nr
LCB2YWx1ZS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgaWYgKHZhbHVlLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAg
ICAgaW5zZXJ0Q2hlY2s8TnVtYmVyVXNlPihtX2luZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAodmFsdWUtPnNob3VsZFNwZWN1bGF0ZU5vdENlbGwoKSkgewotICAgICAgICAgICAgICAg
IGluc2VydENoZWNrPE5vdENlbGxVc2U+KGluZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZS0+
c2hvdWxkU3BlY3VsYXRlTm90Q2VsbCgpKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVjazxOb3RD
ZWxsVXNlPihtX2luZGV4SW5CbG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotCi0gICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fY3VycmVudE5v
ZGUtPm9yaWdpbiwgYmFzZSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPFVzZUtpbmQgdXNl
S2luZD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg0NDA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDExICs2MTMsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHRhcmdldCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnModGFyZ2V0
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldC0+aXNQaGFudG9tQWxs
b2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgpOwotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBub2RlLCAiVW5leHBlY3RlZCBzdG9yZSBiYXJyaWVyIGR1cmluZyBzaW5raW5nLiIpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIApAQCAtODU0LDcgKzg1MCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBNb3ZI
aW50OgogICAgICAgICBjYXNlIFB1dEhpbnQ6Ci0gICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE4NDQwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDcgKzYwLDcgQEAKICNpbmNsdWRlICJERkdTU0FMb3dlcmluZ1BoYXNlLmgiCiAjaW5jbHVkZSAi
REZHU3RhY2tMYXlvdXRQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmgiCi0jaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNl
LmgiCisjaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNl
LmgiCkBAIC0zMTUsNyArMzE1LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBp
bGVJblRocgogICAgIAogICAgICAgICBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oZGZnKTsK
IAotICAgICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihkZmcpOworICAgICAgICBwZXJm
b3JtRmFzdFN0b3JlQmFycmllckluc2VydGlvbihkZmcpOwogICAgICAgICBwZXJmb3JtQ2xlYW5V
cChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICAgICAgcGVy
Zm9ybURDRShkZmcpOwpAQCAtMzg3LDkgKzM4Nyw5IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQ
bGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgLy8gYWJvdXQgY29kZSBtb3Rpb24gYXNzdW1lcyB0
aGF0IGl0J3MgT0sgdG8gaW5zZXJ0IEdDIHBvaW50cyBpbiByYW5kb20gcGxhY2VzLgogICAgICAg
ICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CiAgICAgICAgIAotICAg
ICAgICBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihkZmcpOwogICAgICAgICBwZXJmb3JtTGl2
ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAgIHBl
cmZvcm1HbG9iYWxTdG9yZUJhcnJpZXJJbnNlcnRpb24oZGZnKTsKICAgICAgICAgaWYgKE9wdGlv
bnM6OmVuYWJsZU1vdkhpbnRSZW1vdmFsKCkpCiAgICAgICAgICAgICBwZXJmb3JtTW92SGludFJl
bW92YWwoZGZnKTsKICAgICAgICAgcGVyZm9ybUNsZWFuVXAoZGZnKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYyLDEwICs1NjIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0
ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgIGNhc2UgS2lsbFN0
YWNrOgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICAgICAgY2FzZSBHZXRTdGFjazog
ewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRo
aXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBi
eSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5v
ZGUsICJVbmV4cGVjdGVkIG5vZGUgZHVyaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24iKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjE3LDcgKzYxOCw2IEBA
IHByaXZhdGU6CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVk
IGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCi0gICAgICAgIGNhc2UgU3RvcmVC
YXJyaWVyOgogICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICBjYXNlIFB1dEJ5
VmFsOgogICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxODQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckVsaXNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHU3RvcmVCYXJy
aWVyRWxpc2lvblBoYXNlLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2suaCIKLSNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCi0jaW5jbHVkZSAiREZH
RG9lc0dDLmgiCi0jaW5jbHVkZSAiREZHR3JhcGguaCIKLSNpbmNsdWRlICJERkdQaGFzZS5oIgot
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNzIFN0b3JlQmFycmllckVsaXNpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7Ci1wdWJsaWM6Ci0gICAgU3RvcmVCYXJyaWVyRWxpc2lvblBo
YXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwgInN0b3JlIGJhcnJpZXIg
ZWxpc2lvbiIpCi0gICAgICAgICwgbV9jdXJyZW50QmxvY2soMCkKLSAgICAgICAgLCBtX2N1cnJl
bnRJbmRleCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIHJ1bigpCi0gICAgewotICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghbV9jdXJyZW50Qmxv
Y2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBoYW5kbGVCbG9jayht
X2N1cnJlbnRCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGJvb2wgYWxsb2NhdGVzRnJlc2hPYmplY3QoTm9kZSogbm9kZSkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIE5ld09iamVj
dDoKLSAgICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXpl
OgotICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgotICAgICAgICBjYXNlIE5ld1R5cGVkQXJy
YXk6Ci0gICAgICAgIGNhc2UgTmV3UmVnZXhwOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB2b2lkIG5vdGljZUZyZXNoT2JqZWN0KEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVl
ZEJhcnJpZXJzLCBOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGFsbG9jYXRlc0Zy
ZXNoT2JqZWN0KG5vZGUpKTsKLSAgICAgICAgZG9udE5lZWRCYXJyaWVycy5hZGQobm9kZSk7Ci0g
ICAgfQotCi0gICAgTm9kZSogZ2V0QmFzZU9mU3RvcmUoTm9kZSogYmFycmllck5vZGUpCi0gICAg
ewotICAgICAgICBBU1NFUlQoYmFycmllck5vZGUtPmlzU3RvcmVCYXJyaWVyKCkpOwotICAgICAg
ICByZXR1cm4gYmFycmllck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICB9Ci0KLSAgICBib29s
IHNob3VsZEJlRWxpZGVkKEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJpZXJzLCBOb2RlKiBu
b2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmlzU3RvcmVCYXJyaWVyKCkpOwotICAg
ICAgICByZXR1cm4gZG9udE5lZWRCYXJyaWVycy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOwotICAgIH0KLQotICAgIHZvaWQgZWxpZGVCYXJyaWVyKE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICBBU1NFUlQobm9kZS0+aXNTdG9yZUJhcnJpZXIoKSk7Ci0gICAgICAgIG5vZGUtPnJl
bW92ZSgpOwotICAgIH0KLQotICAgIHZvaWQgaGFuZGxlTm9kZShIYXNoU2V0PE5vZGUqPiYgZG9u
dE5lZWRCYXJyaWVycywgTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChkb2VzR0MobV9n
cmFwaCwgbm9kZSkpCi0gICAgICAgICAgICBkb250TmVlZEJhcnJpZXJzLmNsZWFyKCk7Ci0KLSAg
ICAgICAgaWYgKGFsbG9jYXRlc0ZyZXNoT2JqZWN0KG5vZGUpKQotICAgICAgICAgICAgbm90aWNl
RnJlc2hPYmplY3QoZG9udE5lZWRCYXJyaWVycywgbm9kZSk7Ci0KLSAgICAgICAgaWYgKCFub2Rl
LT5pc1N0b3JlQmFycmllcigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChz
aG91bGRCZUVsaWRlZChkb250TmVlZEJhcnJpZXJzLCBub2RlKSkgewotICAgICAgICAgICAgZWxp
ZGVCYXJyaWVyKG5vZGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgTm9kZSogYmFzZSA9IGdldEJhc2VPZlN0b3JlKG5vZGUpOwotICAgICAgICBpZiAoIWJhc2Up
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGRvbnROZWVkQmFycmllcnMuY29u
dGFpbnMoYmFzZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRvbnROZWVkQmFycmll
cnMuYWRkKGJhc2UpOwotICAgIH0KLQotICAgIGJvb2wgaGFuZGxlQmxvY2soQmFzaWNCbG9jayog
YmxvY2spCi0gICAgewotICAgICAgICBIYXNoU2V0PE5vZGUqPiBkb250TmVlZEJhcnJpZXJzOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJs
b2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRJbmRl
eCA9IGluZGV4SW5CbG9jazsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGhhbmRsZU5vZGUoZG9udE5lZWRCYXJyaWVycywgbm9k
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQmFzaWNC
bG9jayogbV9jdXJyZW50QmxvY2s7Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7Ci19Owot
ICAgIAotYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihHcmFwaCYgZ3JhcGgpCi17Ci0g
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBTdG9yZSBCYXJyaWVyIEVsaXNp
b24gUGhhc2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNl
PihncmFwaCk7Ci19Ci0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckVsaXNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgJKHJldmlzaW9uIDE4NDQwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlX2gKLSNkZWZpbmUgREZHU3RvcmVCYXJyaWVyRWxpc2lv
blBoYXNlX2gKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBHcmFw
aDsKLQotYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihHcmFwaCYpOwotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhh
c2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNl
cnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0RvZXNH
Qy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFz
ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworZW51bSBj
bGFzcyBQaGFzZU1vZGUgeworICAgIC8vIERvZXMgb25seSBhIGxvY2FsIGFuYWx5c2lzIGZvciBz
dG9yZSBiYXJyaWVyIGluc2VydGlvbiBhbmQgYXNzdW1lcyB0aGF0IHBvaW50ZXJzIGxpdmUKKyAg
ICAvLyBmcm9tIHByZWRlY2Vzc29yIGJsb2NrcyBtYXkgbmVlZCBiYXJyaWVycy4gQXNzdW1lcyBD
UFMgY29udmVudGlvbnMuIERvZXMgbm90IHVzZSBBSSBmb3IKKyAgICAvLyBlbGltaW5hdGluZyBz
dG9yZSBiYXJyaWVycywgYnV0IGRvZXMgYSBiZXN0IGVmZm9ydCB0byBlbGltaW5hdGUgYmFycmll
cnMgd2hlbiB5b3UncmUKKyAgICAvLyBzdG9yaW5nIGEgbm9uLWNlbGwgdmFsdWUgYnkgdXNpbmcg
Tm9kZTo6cmVzdWx0KCkgYW5kIGJ5IGxvb2tpbmcgYXQgY29uc3RhbnRzLiBUaGUgbG9jYWwKKyAg
ICAvLyBhbmFseXNpcyBpcyBiYXNlZCBvbiBHQyBlcG9jaHMsIHNvIGl0IHdpbGwgZWxpbWluYXRl
IGEgbG90IG9mIGxvY2FsbHkgcmVkdW5kYW50IGJhcnJpZXJzLgorICAgIEZhc3QsCisgICAgICAg
IAorICAgIC8vIERvZXMgYSBnbG9iYWwgYW5hbHlzaXMgZm9yIHN0b3JlIGJhcnJpZXIgaW5zZXJ0
aW9uLiBSZXVzZXMgdGhlIEdDLWVwb2NoLWJhc2VkIGFuYWx5c2lzCisgICAgLy8gdXNlZCBieSBG
YXN0LCBidXQgYWRkcyBhIGNvbnNlcnZhdGl2ZSBtZXJnZSBydWxlIGZvciBwcm9wYWdhdGluZyBp
bmZvcm1hdGlvbiBmcm9tIG9uZQorICAgIC8vIGJsb2NrIHRvIHRoZSBuZXh0LiBUaGlzIHdpbGwg
ZW5zdXJlIGZvciBleGFtcGxlIHRoYXQgaWYgYSB2YWx1ZSBWIGNvbWluZyBmcm9tIG11bHRpcGxl
CisgICAgLy8gcHJlZGVjZXNzb3JzIGluIEIgZGlkbid0IG5lZWQgYW55IG1vcmUgYmFycmllcnMg
YXQgdGhlIGVuZCBvZiBlYWNoIHByZWRlY2Vzc29yIChlaXRoZXIKKyAgICAvLyBiZWNhdXNlIGl0
IHdhcyB0aGUgbGFzdCBhbGxvY2F0ZWQgb2JqZWN0IGluIHRoYXQgcHJlZGVjZXNzb3Igb3IgYmVj
YXVzZSBpdCBqdXN0IGhhZCBhCisgICAgLy8gYmFycmllciBleGVjdXRlZCksIHRoZW4gdW50aWwg
d2UgaGl0IGFub3RoZXIgR0MgcG9pbnQgaW4gQiwgd2Ugd29uJ3QgbmVlZCBhbm90aGVyIGJhcnJp
ZXIKKyAgICAvLyBvbiBWLiBVc2VzIEFJIGZvciBlbGltaW5hdGluZyBiYXJyaWVycyB3aGVuIHdl
IGtub3cgdGhhdCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGlzIG5vdCBhCisgICAgLy8gY2VsbC4g
QXNzdW1lcyBTU0EgY29udmVudGlvbnMuCisgICAgR2xvYmFsCit9OworCit0ZW1wbGF0ZTxQaGFz
ZU1vZGUgbW9kZT4KK2NsYXNzIFN0b3JlQmFycmllckluc2VydGlvblBoYXNlIDogcHVibGljIFBo
YXNlIHsKK3B1YmxpYzoKKyAgICBTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZShHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsIG1vZGUgPT0gUGhhc2VNb2RlOjpGYXN0ID8gImZh
c3Qgc3RvcmUgYmFycmllciBpbnNlcnRpb24iIDogImdsb2JhbCBzdG9yZSBiYXJyaWVyIGluc2Vy
dGlvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgZGF0YUxvZygiU3RhcnRpbmcgc3RvcmUgYmFycmllciBpbnNlcnRpb246XG4iKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBz
d2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBQaGFzZU1vZGU6OkZhc3Q6IHsKKyAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5jbGVhckVwb2NocygpOworICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkKKyAgICAgICAgICAgICAgICBoYW5kbGVCbG9jayhibG9jayk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUGhhc2VN
b2RlOjpHbG9iYWw6IHsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwg
bV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKworICAgICAgICAgICAgbV9zdGF0ZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8SW5QbGFjZUFic3RyYWN0U3RhdGU+KG1fZ3JhcGgpOworICAgICAgICAgICAgbV9p
bnRlcnByZXRlciA9IHN0ZDo6bWFrZV91bmlxdWU8QWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNl
QWJzdHJhY3RTdGF0ZT4+KG1fZ3JhcGgsICptX3N0YXRlKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9pc0NvbnZlcmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBGaXJzdCBydW4gdGhlIGFuYWx5c2lzLiBJbnNpZGUgYmFzaWMgYmxvY2tzIHdlIHVzZSBhbiBl
cG9jaC1iYXNlZCBhbmFseXNpcyB0aGF0CisgICAgICAgICAgICAvLyBpcyB2ZXJ5IHByZWNpc2Uu
IEF0IGJsb2NrIGJvdW5kYXJpZXMsIHdlIGp1c3QgcHJvcGFnYXRlIHdoaWNoIG5vZGVzIG1heSBu
ZWVkIGEKKyAgICAgICAgICAgIC8vIGJhcnJpZXIuIFRoaXMgZ2l2ZXMgdXMgYSB2ZXJ5IG5pY2Ug
Ym90dG9tLT50b3AgZml4cG9pbnQ6IHdlIHN0YXJ0IG91dCBhc3N1bWluZworICAgICAgICAgICAg
Ly8gdGhhdCBubyBub2RlIG5lZWRzIGFueSBiYXJyaWVycyBhdCBibG9jayBib3VuZGFyaWVzLCBh
bmQgdGhlbiB3ZSBjb252ZXJnZQorICAgICAgICAgICAgLy8gdG93YXJkcyBiZWxpZXZpbmcgdGhh
dCBhbGwgbm9kZXMgbmVlZCBiYXJyaWVycy4gIk5lZWRpbmcgYSBiYXJyaWVyIiBpcyBsaWtlCisg
ICAgICAgICAgICAvLyBzYXlpbmcgdGhhdCB0aGUgbm9kZSBpcyBpbiBhIHBhc3QgZXBvY2guICJO
b3QgbmVlZGluZyBhIGJhcnJpZXIiIGlzIGxpa2Ugc2F5aW5nCisgICAgICAgICAgICAvLyB0aGF0
IHRoZSBub2RlIGlzIGluIHRoZSBjdXJyZW50IGVwb2NoLgorICAgICAgICAgICAgbV9zdGF0ZUF0
SGVhZCA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+PihtX2dyYXBo
KTsKKyAgICAgICAgICAgIG1fc3RhdGVBdFRhaWwgPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2NrTWFw
PEhhc2hTZXQ8Tm9kZSo+Pj4obV9ncmFwaCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJs
b2NrTGlzdCBwb3N0T3JkZXIgPSBtX2dyYXBoLmJsb2Nrc0luUG9zdE9yZGVyKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB3aGls
ZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBJbnRlbnRpb25hbCBiYWNrd2FyZHMgbG9vcCBi
ZWNhdXNlIHdlIGFyZSB1c2luZyBSUE8uCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBi
bG9ja0luZGV4ID0gcG9zdE9yZGVyLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHBvc3RPcmRlcltibG9ja0luZGV4XTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghaGFuZGxlQmxvY2so
YmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmxvY2sgZGlkbid0
IGZpbmlzaCwgdGhlbiBpdCBjYW5ub3QgYWZmZWN0IHRoZSBmaXhwb2ludC4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIHN0YXRlLWF0
LXRhaWwgYmFzZWQgb24gdGhlIGVwb2NocyBvZiBsaXZlIG5vZGVzIGFuZCB0aGUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gY3VycmVudCBlcG9jaC4gV2UgZ3JvdyBzdGF0ZS1hdC10YWlsIG1vbm90
b25pY2FsbHkgdG8gZW5zdXJlIGNvbnZlcmdlbmNlLgorICAgICAgICAgICAgICAgICAgICBib29s
IHRoaXNCbG9ja0NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmVwb2NoKCkgIT0gbV9jdXJyZW50RXBvY2gpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IGVw
b2NoLCB0aGVuIHdlIG1heSBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cnVuIGEgYmFycmllciBvbiBpdCBpbiB0aGUgZnV0dXJlLiBTbywgYWRkIGl0IHRvIHRoZSBzdGF0
ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzQmxvY2tDaGFuZ2VkIHw9IG1fc3Rh
dGVBdFRhaWwtPmF0KGJsb2NrKS5hZGQobm9kZSkuaXNOZXdFbnRyeTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzQmxvY2tDaGFuZ2VkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGl0ZXJhdGlvbiBkaWRuJ3QgbGVhcm4gYW55dGhpbmcgbmV3
IGFib3V0IHRoaXMgYmxvY2suCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgLy8gQ2hhbmdlZCB0aGluZ3MuIE1ha2Ugc3VyZSB0aGF0IHdlIGxvb3Agb25lIG1vcmUg
dGltZS4KKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6
IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6IG1fc3RhdGVBdFRhaWwtPmF0KGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlQXRIZWFkLT5hdChzdWNjZXNzb3IpLmFkZChub2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gVGVsbCBoYW5kbGVCbG9jaygpIHRoYXQgaXQncyB0aW1lIHRv
IGFjdHVhbGx5IGluc2VydCBiYXJyaWVycyBmb3IgcmVhbC4KKyAgICAgICAgICAgIG1faXNDb252
ZXJnZWQgPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQorICAgICAgICAgICAgICAg
IGhhbmRsZUJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0gfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBi
b29sIGhhbmRsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBibG9jayAiLCBwb2lu
dGVyRHVtcChibG9jayksICJcbiIpOworICAgICAgICAgICAgaWYgKHJlYWxseUluc2VydEJhcnJp
ZXJzKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlYWxseSBpbnNlcnRpbmcgYmFy
cmllcnMuXG4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50RXBvY2gg
PSBFcG9jaDo6Zmlyc3QoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtb2RlID09IFBoYXNlTW9k
ZTo6R2xvYmFsKSB7CisgICAgICAgICAgICBpZiAoIWJsb2NrLT5jZmFIYXNWaXNpdGVkKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fc3RhdGUtPmJlZ2luQmFz
aWNCbG9jayhibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0
ZUF0SGVhZC0+YXQoYmxvY2spLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIElmIHByZXZpb3VzIGJsb2NrcyB0ZWxsIHVzIHRoYXQgdGhpcyBub2RlIG1heSBuZWVkIGEg
YmFycmllciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZnV0dXJlLCB0aGVuIHB1dCBp
dCBpbiB0aGUgYW5jaWVudCBwcmltb3JkaWFsIGVwb2NoLiBUaGlzIGZvcmNlcyB1cyB0bworICAg
ICAgICAgICAgICAgICAgICAvLyBlbWl0IGEgYmFycmllciBvbiBhbnkgcG9zc2libHktY2VsbCBz
dG9yZSwgcmVnYXJkbGVzcyBvZiB0aGUgZXBvY2ggb2YgdGhlCisgICAgICAgICAgICAgICAgICAg
IC8vIHN0b3JlZCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2goRXBv
Y2goKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
SWYgcHJldmlvdXMgYmxvY2tzIGFyZW4ndCByZXF1aXJpbmcgdXMgdG8gcnVuIGEgYmFycmllciBv
biB0aGlzIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gcHV0IGl0IGluIHRoZSBj
dXJyZW50IGVwb2NoLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBza2lwIGJhcnJpZXJzCisgICAg
ICAgICAgICAgICAgICAgIC8vIG9uIHRoaXMgbm9kZSBzbyBsb25nIGFzIHdlIGRvbid0IGFsbG9j
YXRlLiBJdCBhbHNvIG1lYW5zIHRoYXQgd2Ugd29uJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8g
cnVuIGJhcnJpZXJzIG9uIHN0b3JlcyB0byBvbiBvbmUgc3VjaCBub2RlIGludG8gYW5vdGhlciBz
dWNoIG5vZGUuIFRoYXQncworICAgICAgICAgICAgICAgICAgICAvLyBmaW5lLCBiZWNhdXNlIG5v
ZGVzIHdvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHN0YXRlIHNldCBpZiBhdCB0aGUgdGFpbHMK
KyAgICAgICAgICAgICAgICAgICAgLy8gb2YgYWxsIHByZWRlY2Vzc29ycyB0aGV5IGFsd2F5cyBo
YWQgdGhlIGN1cnJlbnQgZXBvY2guCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEVwb2No
KG1fY3VycmVudEVwb2NoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHJlc3VsdCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBm
b3IgKG1fbm9kZUluZGV4ID0gMDsgbV9ub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21fbm9k
ZUluZGV4KSB7CisgICAgICAgICAgICBtX25vZGUgPSBibG9jay0+YXQobV9ub2RlSW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAg
IGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICIgICAgIiwgbV9jdXJyZW50RXBvY2gsICI6
IExvb2tpbmcgYXQgbm9kZSAiLCBtX25vZGUsICIgd2l0aCBjaGlsZHJlbjogIik7CisgICAgICAg
ICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9U
b0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICAgICAg
ICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNv
bW1hLCBlZGdlLCAiICgiLCBlZGdlLT5lcG9jaCgpLCAiKSIpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAobW9kZSA9PSBQaGFzZU1vZGU6Okdsb2JhbCkgewor
ICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgZWRnZXMgc2VwYXJhdGVseSBiZWNhdXNlIHdlIGRv
bid0IHdhbnQgdG8gaW5zZXJ0IGJhcnJpZXJzIGlmIHRoZQorICAgICAgICAgICAgICAgIC8vIG9w
ZXJhdGlvbiBkb2luZyB0aGUgc3RvcmUgZG9lcyBhIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IHRo
ZSBjaGlsZCBpcyBub3QKKyAgICAgICAgICAgICAgICAvLyBhIGNlbGwuCisgICAgICAgICAgICAg
ICAgbV9pbnRlcnByZXRlci0+c3RhcnRFeGVjdXRpbmcoKTsKKyAgICAgICAgICAgICAgICBtX2lu
dGVycHJldGVyLT5leGVjdXRlRWRnZXMobV9ub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX25vZGUt
PmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7
CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApOworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc2lkZXJCYXJyaWVy
KGNoaWxkMSwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgICAgICBjb25zaWRlckJhcnJp
ZXIobV9ub2RlLT5jaGlsZDEoKSwgbV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJl
OiB7CisgICAgICAgICAgICAgICAgY29uc2lkZXJCYXJyaWVyKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgICAgICAgICAgY2FzZSBQdXRUb0Fy
Z3VtZW50czoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgICAgIGNhc2UgUHV0
QnlJZEZsdXNoOgorICAgICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICAgICAg
Y2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7CisgICAgICAgICAgICAgICAgY29uc2lkZXJCYXJyaWVy
KG1fbm9kZS0+Y2hpbGQxKCksIG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDogeworICAgICAgICAgICAgICAgIGNvbnNpZGVyQmFycmllcihtX25vZGUtPmNo
aWxkMigpLCBtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFy
OiB7CisgICAgICAgICAgICAgICAgY29uc2lkZXJCYXJyaWVyKG1fbm9kZS0+Y2hpbGQxKCksIG1f
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGRvZXNH
QyhtX2dyYXBoLCBtX25vZGUpKQorICAgICAgICAgICAgICAgIG1fY3VycmVudEVwb2NoLmJ1bXAo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICAgICAgY2FzZSBOZXdBcnJheToKKyAg
ICAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICAgICAgICAgIGNhc2UgTmV3QXJy
YXlCdWZmZXI6CisgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICBj
YXNlIE5ld1JlZ2V4cDoKKyAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Cisg
ICAgICAgICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgICAg
IGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAgICAgICAgY2FzZSBNYWtlUm9wZToKKyAgICAg
ICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgQ3JlYXRlRGly
ZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgY2FzZSBDcmVhdGVTY29wZWRBcmd1bWVudHM6Cisg
ICAgICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNhc2Ug
TmV3RnVuY3Rpb246CisgICAgICAgICAgICAgICAgLy8gTm9kZXMgdGhhdCBhbGxvY2F0ZSBnZXQg
dG8gc2V0IHRoZWlyIGVwb2NoIGJlY2F1c2UgZm9yIHRob3NlIG5vZGVzIHdlIGtub3cKKyAgICAg
ICAgICAgICAgICAvLyB0aGF0IHRoZXkgd2lsbCBiZSB0aGUgbmV3ZXN0IG9iamVjdCBpbiB0aGUg
aGVhcC4KKyAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKG1fY3VycmVudEVwb2NoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgLy8gVGhlc2UgYWxsb2NhdGUgYnV0IHRo
ZW4gcnVuIHRoZWlyIG93biBiYXJyaWVyLgorICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXIo
bV9ub2RlSW5kZXggKyAxLCBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAg
ICAgbV9ub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgICAg
ICBtX25vZGUtPnBoaSgpLT5zZXRFcG9jaChtX25vZGUtPmVwb2NoKCkpOworICAgICAgICAgICAg
ICAgIG1fbm9kZS0+c2V0RXBvY2goRXBvY2goKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8v
IEZvciBub2RlcyB0aGF0IGFyZW4ndCBndWFyYW50ZWVkIHRvIGFsbG9jYXRlLCB3ZSBzYXkgdGhh
dCB0aGVpciByZXR1cm4gdmFsdWUKKyAgICAgICAgICAgICAgICAvLyAoaWYgdGhlcmUgaXMgb25l
KSBjb3VsZCBiZSBhcmJpdHJhcmlseSBvbGQuCisgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRF
cG9jaChFcG9jaCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAiICAgICIsIG1fY3VycmVudEVwb2NoLCAiOiBE
b25lIHdpdGggbm9kZSAiLCBtX25vZGUsICIgKCIsIG1fbm9kZS0+ZXBvY2goKSwKKyAgICAgICAg
ICAgICAgICAgICAgIikgd2l0aCBjaGlsZHJlbjogIik7CisgICAgICAgICAgICAgICAgQ29tbWFQ
cmludGVyIGNvbW1hOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAg
ICAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBl
ZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBlZGdlLCAiICgi
LCBlZGdlLT5lcG9jaCgpLCAiKSIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobW9kZSA9PSBQaGFzZU1vZGU6Okdsb2JhbCkgeworICAgICAgICAgICAgICAg
IGlmICghbV9pbnRlcnByZXRlci0+ZXhlY3V0ZUVmZmVjdHMobV9ub2RlSW5kZXgsIG1fbm9kZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKG1vZGUgPT0gUGhhc2VNb2RlOjpHbG9iYWwpCisgICAgICAg
ICAgICBtX3N0YXRlLT5yZXNldCgpOworCisgICAgICAgIGlmIChyZWFsbHlJbnNlcnRCYXJyaWVy
cygpKQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnNpZGVy
QmFycmllcihFZGdlIGJhc2UsIEVkZ2UgY2hpbGQpCisgICAgeworICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQ29uc2lkZXJpbmcgYWRkaW5nIGJhcnJp
ZXIgIiwgYmFzZSwgIiA9PiAiLCBjaGlsZCwgIlxuIik7CisgICAgICAgIAorICAgICAgICAvLyBX
ZSBkb24ndCBuZWVkIGEgc3RvcmUgYmFycmllciBpZiB0aGUgY2hpbGQgaXMgZ3VhcmFudGVlZCB0
byBub3QgYmUgYSBjZWxsLgorICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBQ
aGFzZU1vZGU6OkZhc3Q6IHsKKyAgICAgICAgICAgIC8vIERvbid0IHRyeSB0b28gaGFyZCBiZWNh
dXNlIGl0J3MgdG9vIGV4cGVuc2l2ZSB0byBydW4gQUkuCisgICAgICAgICAgICBpZiAoY2hpbGQt
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLT5hc0pTVmFsdWUo
KS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIFJlamVjdGluZyBiZWNhdXNlIG9m
IGNvbnN0YW50IHR5cGUuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChjaGlsZC0+cmVzdWx0KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHROdW1i
ZXI6CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0RG91YmxlOgorICAgICAgICAgICAg
ICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3Vs
dEludDUyOgorICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgICAgICAgUmVqZWN0aW5nIGJlY2F1c2Ugb2YgcmVzdWx0IHR5cGUuXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBQaGFzZU1vZGU6Okdsb2JhbDogeworICAgICAgICAgICAgLy8gR28gaW50byByYWdlIG1vZGUg
dG8gZWxpbWluYXRlIGFueSBjaGFuY2Ugb2YgYSBiYXJyaWVyIHdpdGggYSBub24tY2VsbCBjaGls
ZC4gV2UKKyAgICAgICAgICAgIC8vIGNhbiBhZmZvcmQgdG8ga2VlcCBhcm91bmQgQUkgaW4gR2xv
YmFsIG1vZGUuCisgICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXItPm5lZWRzVHlwZUNoZWNr
KGNoaWxkLCB+U3BlY0NlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIFJlamVjdGluZyBiZWNhdXNlIG9m
IEFJIHR5cGUuXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIGEgc3RvcmUgYmFycmllciBpZiB0aGUgYmFzZSBpcyBhdCBsZWFzdCBhcyBuZXcg
YXMgdGhlIGNoaWxkLiBGb3IKKyAgICAgICAgLy8gZXhhbXBsZSB0aGlzIHdvbid0IG5lZWQgYSBi
YXJyaWVyOgorICAgICAgICAvLworICAgICAgICAvLyB2YXIgbyA9IHt9CisgICAgICAgIC8vIHZh
ciBwID0ge30KKyAgICAgICAgLy8gcC5mID0gbworICAgICAgICAvLworICAgICAgICAvLyBUaGlz
IGlzIHN0cm9uZ2VyIHRoYW4gdGhlIGN1cnJlbnRFcG9jaCBydWxlIGluIGNvbnNpZGVyQmFycmll
cihFZGdlKSwgYmVjYXVzZSBpdCB3aWxsCisgICAgICAgIC8vIGFsc28gZWxpbWluYXRlIGJhcnJp
ZXJzIGluIGNhc2VzIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gdmFyIG8gPSB7
fSAvLyBvLmVwb2NoID0gMSwgY3VycmVudEVwb2NoID0gMQorICAgICAgICAvLyB2YXIgcCA9IHt9
IC8vIG8uZXBvY2ggPSAxLCBwLmVwb2NoID0gMiwgY3VycmVudEVwb2NoID0gMgorICAgICAgICAv
LyB2YXIgcSA9IHt9IC8vIG8uZXBvY2ggPSAxLCBwLmVwb2NoID0gMiwgcS5lcG9jaCA9IDMsIGN1
cnJlbnRFcG9jaCA9IDMKKyAgICAgICAgLy8gcC5mID0gbyAvLyBwLmVwb2NoID49IG8uZXBvY2gK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyByZWxhdGlvbnNoaXAgd29ya3MgYmVjYXVzZSBp
ZiBpdCBob2xkcyB0aGVuIHdlIGFyZSBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAv
LyBzY2VuYXJpb3MuIE5vdGUgdGhhdCB3ZSBkb24ndCBrbm93ICp3aGljaCogb2YgdGhlc2Ugc2Nl
bmFyaW9zIHdlIGFyZSBpbiwgYnV0IGl0J3MKKyAgICAgICAgLy8gb25lIG9mIHRoZW0gKHRob3Vn
aCB3aXRob3V0IGxvc3Mgb2YgZ2VuZXJhbGl0eSwgeW91IGNhbiByZXBsYWNlICJhIEdDIGhhcHBl
bmVkIiB3aXRoCisgICAgICAgIC8vICJtYW55IEdDcyBoYXBwZW5lZCIpLgorICAgICAgICAvLwor
ICAgICAgICAvLyAxKSBUaGVyZSBpcyBubyBHQyBiZXR3ZWVuIHRoZSBhbGxvY2F0aW9uL2xhc3Qt
YmFycmllciBvZiBiYXNlLCBjaGlsZCBhbmQgbm93LiBUaGVuCisgICAgICAgIC8vICAgIHdlIGRl
ZmluaXRlbHkgZG9uJ3QgbmVlZCBhIGJhcnJpZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIDIp
IFRoZXJlIHdhcyBhIEdDIGFmdGVyIGNoaWxkIHdhcyBhbGxvY2F0ZWQgYnV0IGJlZm9yZSBiYXNl
IHdhcyBhbGxvY2F0ZWQuIFRoZW4gd2UKKyAgICAgICAgLy8gICAgZG9uJ3QgbmVlZCBhIGJhcnJp
ZXIsIGJlY2F1c2UgYmFzZSBpcyBzdGlsbCBhIG5ldyBvYmplY3QuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIDMpIFRoZXJlIHdhcyBhIEdDIGFmdGVyIGJvdGggY2hpbGQgYW5kIGJhc2Ugd2VyZSBh
bGxvY2F0ZWQuIFRoZW4gdGhleSBhcmUgYm90aCBvbGQuCisgICAgICAgIC8vICAgIFdlIGRvbid0
IG5lZWQgYmFycmllcnMgb24gc3RvcmVzIG9mIG9sZCBpbnRvIG9sZC4gTm90ZSB0aGF0IGluIHRo
aXMgY2FzZSBpdAorICAgICAgICAvLyAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGVyZSB3YXMgYWxz
byBhIEdDIGJldHdlZW4gdGhlIGFsbG9jYXRpb24gb2YgY2hpbGQgYW5kIGJhc2UuCisgICAgICAg
IC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCBiYXJyaWVycyB3aWxsIGxpZnQgYW4gb2JqZWN0IGlu
dG8gdGhlIGN1cnJlbnQgZXBvY2guIFRoaXMgaXMgc29ydCBvZiB3ZWlyZC4KKyAgICAgICAgLy8g
SXQgbWVhbnMgdGhhdCBsYXRlciBpZiB5b3Ugc3RvcmUgdGhhdCBvYmplY3QgaW50byBzb21lIG90
aGVyIG9iamVjdCwgYW5kIHRoYXQgb3RoZXIKKyAgICAgICAgLy8gb2JqZWN0IHdhcyBwcmV2aW91
c2x5IG5ld2VyIG9iamVjdCwgeW91J2xsIHRoaW5rIHRoYXQgeW91IG5lZWQgYSBiYXJyaWVyLiBX
ZSBjb3VsZAorICAgICAgICAvLyBhdm9pZCB0aGlzIGJ5IHRyYWNraW5nIGFsbG9jYXRpb24gZXBv
Y2ggYW5kIGJhcnJpZXIgZXBvY2ggc2VwYXJhdGVseS4gRm9yIG5vdyBJIHRoaW5rCisgICAgICAg
IC8vIHRoYXQgdGhpcyB3b3VsZCBiZSBvdmVya2lsbC4gQnV0IHRoaXMgZG9lcyBtZWFuIHRoYXQg
dGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgLy8gcG9zc2liaWxpdGllcyB3aGVuIHRo
aXMgcmVsYXRpb25zaGlwIGhvbGRzOgorICAgICAgICAvLworICAgICAgICAvLyA0KSBCYXNlIGlz
IGFsbG9jYXRlZCBmaXJzdC4gQSBHQyBoYXBwZW5zIGFuZCBiYXNlIGJlY29tZXMgb2xkLiBUaGVu
IHdlIGFsbG9jYXRlCisgICAgICAgIC8vICAgIGNoaWxkLiAoTm90ZSB0aGF0IGFsdGVybmF0aXZl
bHkgdGhlIEdDIGNvdWxkIGhhcHBlbiBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YKKyAgICAgICAg
Ly8gICAgY2hpbGQuKSBUaGVuIHdlIHJ1biBhIGJhcnJpZXIgb24gYmFzZS4gQmFzZSB3aWxsIGFw
cGVhciB0byBiZSBhcyBuZXcgYXMgY2hpbGQKKyAgICAgICAgLy8gICAgKHNhbWUgZXBvY2gpLiBB
dCB0aGlzIHBvaW50LCB3ZSBkb24ndCBuZWVkIGFub3RoZXIgYmFycmllciBvbiBiYXNlLgorICAg
ICAgICAvLworICAgICAgICAvLyA1KSBCYXNlIGlzIGFsbG9jYXRlZCBmaXJzdC4gVGhlbiB3ZSBh
bGxvY2F0ZSBjaGlsZC4gVGhlbiB3ZSBydW4gYSBHQy4gVGhlbiB3ZSBydW4gYQorICAgICAgICAv
LyAgICBiYXJyaWVyIG9uIGJhc2UuIEJhc2Ugd2lsbCBhcHBlYXIgbmV3ZXIgdGhhbiBjaGlsZC4g
V2UgZG9uJ3QgbmVlZCBhIGJhcnJpZXIKKyAgICAgICAgLy8gICAgYmVjYXVzZSBib3RoIG9iamVj
dHMgYXJlIG9sZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU29tZXRoaW5nIHdlIHdhdGNoIG91
dCBmb3IgaGVyZSBpcyB0aGF0IHRoZSBudWxsIGVwb2NoIGlzIGEgY2F0Y2gtYWxsIGZvciBvYmpl
Y3RzCisgICAgICAgIC8vIGFsbG9jYXRlZCBiZWZvcmUgd2UgZGlkIGFueSBlcG9jaCB0cmFja2lu
Zy4gVHdvIG9iamVjdHMgYmVpbmcgaW4gdGhlIG51bGwgZXBvY2gKKyAgICAgICAgLy8gbWVhbnMg
dGhhdCB3ZSBkb24ndCBrbm93IHRoZWlyIGVwb2NoIHJlbGF0aW9uc2hpcC4KKyAgICAgICAgaWYg
KCEhYmFzZS0+ZXBvY2goKSAmJiBiYXNlLT5lcG9jaCgpID49IGNoaWxkLT5lcG9jaCgpKSB7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAg
ICAgICBSZWplY3RpbmcgYmVjYXVzZSBvZiBlcG9jaCBvcmRlcmluZy5cbiIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zaWRlckJhcnJpZXIo
YmFzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29uc2lkZXJCYXJyaWVyKEVkZ2UgYmFzZSkK
KyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAg
ICBDb25zaWRlcmluZyBhZGRpbmcgYmFycmllciBvbiAiLCBiYXNlLCAiXG4iKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBzdG9yZSBiYXJyaWVyIGlmIHRoZSBlcG9jaCBv
ZiB0aGUgYmFzZSBpcyBpZGVudGljYWwgdG8gdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gZXBvY2gu
IFRoYXQgbWVhbnMgdGhhdCB3ZSBlaXRoZXIganVzdCBhbGxvY2F0ZWQgdGhlIG9iamVjdCBhbmQg
c28gaXQncyBndWFyYW50ZWVkIHRvCisgICAgICAgIC8vIGJlIGluIG5ld2dlbiwgb3Igd2UganVz
dCByYW4gYSBiYXJyaWVyIG9uIGl0IHNvIGl0J3MgZ3VhcmFudGVlZCB0byBiZSByZW1lbWJlcmVk
CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIGlmIChiYXNlLT5lcG9jaCgpID09IG1fY3Vy
cmVudEVwb2NoKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICAgICAgICBSZWplY3RpbmcgYmVjYXVzZSBpdCdzIGluIHRoZSBjdXJyZW50
IGVwb2NoLlxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgSW5z
ZXJ0aW5nIGJhcnJpZXIuXG4iKTsKKyAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCwg
YmFzZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydEJhcnJpZXIodW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlKiBiYXNlKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW4g
Z2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0aGUgYmFycmllcnMgb25jZSB3ZSBo
YXZlIGNvbnZlcmdlZC4KKyAgICAgICAgaWYgKCFyZWFsbHlJbnNlcnRCYXJyaWVycygpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1
cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNv
b2wuCisgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KKyAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4sIEVkZ2UoYmFzZSwgQ2VsbFVzZSkpOwor
CisgICAgICAgIGJhc2UtPnNldEVwb2NoKG1fY3VycmVudEVwb2NoKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCByZWFsbHlJbnNlcnRCYXJyaWVycygpCisgICAgeworICAgICAgICByZXR1cm4gbW9k
ZSA9PSBQaGFzZU1vZGU6OkZhc3QgfHwgbV9pc0NvbnZlcmdlZDsKKyAgICB9CisgICAgCisgICAg
SW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEVwb2NoIG1fY3VycmVudEVwb2NoOwor
ICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4OworICAgIE5vZGUqIG1fbm9kZTsKKyAgICAKKyAgICAv
LyBUaGluZ3Mgd2Ugb25seSB1c2UgaW4gR2xvYmFsIG1vZGUuCisgICAgc3RkOjp1bmlxdWVfcHRy
PEluUGxhY2VBYnN0cmFjdFN0YXRlPiBtX3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBYnN0
cmFjdEludGVycHJldGVyPEluUGxhY2VBYnN0cmFjdFN0YXRlPj4gbV9pbnRlcnByZXRlcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+PiBtX3N0YXRlQXRIZWFk
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4+IG1fc3RhdGVB
dFRhaWw7CisgICAgYm9vbCBtX2lzQ29udmVyZ2VkOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK2Jvb2wgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmIGdy
YXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgRmFzdCBTdG9y
ZSBCYXJyaWVyIEluc2VydGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZTxQaGFzZU1vZGU6OkZhc3Q+PihncmFwaCk7Cit9CisKK2Jvb2wg
cGVyZm9ybUdsb2JhbFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBHbG9iYWwgU3RvcmUgQmFycmllciBJ
bnNlcnRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2U8UGhhc2VNb2RlOjpHbG9iYWw+PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRp
b25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlX2gK
KyNkZWZpbmUgREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2VfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7
CisKKy8vIEluc2VydHMgc3RvcmUgYmFycmllcnMgaW4gYSBibG9jay1sb2NhbCBtYW5uZXIgd2l0
aG91dCBjb25zdWx0aW5nIHRoZSBhYnN0cmFjdCBpbnRlcnByZXRlci4KKy8vIFVzZXMgYSBzaW1w
bGUgZXBvY2gtYmFzZWQgYW5hbHlzaXMgdG8gYXZvaWQgaW5zZXJ0aW5nIHJlZHVuZGFudCBiYXJy
aWVycy4gVGhpcyBwaGFzZSByZXF1aXJlcworLy8gdGhhdCB3ZSBhcmUgbm90IGluIFNTQS4KK2Jv
b2wgcGVyZm9ybUZhc3RTdG9yZUJhcnJpZXJJbnNlcnRpb24oR3JhcGgmKTsKKworLy8gSW5zZXJ0
cyBzdG9yZSBiYXJyaWVycyB1c2luZyBhIGdsb2JhbCBhbmFseXNpcyBhbmQgY29uc3VsdHMgdGhl
IGFic3RyYWN0IGludGVycHJldGVyLiBVc2VzIGEKKy8vIHNpbXBsZSBlcG9jaC1iYXNlZCBhbmFs
eXNpcyB0byBhdm9pZCBpbnNlcnRpbmcgcmVkdW5kYW50IGJhcnJpZXJzLCBidXQgb25seSBwcm9w
YWdhdGVzICJzYW1lCisvLyBlcG9jaCBhcyBjdXJyZW50IiBwcm9wZXJ0eSBmcm9tIG9uZSBibG9j
ayB0byB0aGUgbmV4dC4gVGhpcyBwaGFzZSByZXF1aXJlcyBTU0EuIFRoaXMgcGhhc2UKKy8vIGFs
c28gcmVxdWlyZXMgaGF2aW5nIHZhbGlkIEFJIGFuZCBsaXZlbmVzcy4KK2Jvb2wgcGVyZm9ybUds
b2JhbFN0b3JlQmFycmllckluc2VydGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlX2gKKwo=
</data>
<flag name="review"
          id="278088"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>